@remotion/serverless 4.0.244 → 4.0.246
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-make.log +1 -1
- package/LICENSE.md +1 -1
- package/dist/best-frames-per-function-param.d.ts +1 -0
- package/dist/best-frames-per-function-param.js +17 -0
- package/dist/calculate-chunk-times.d.ts +5 -0
- package/dist/calculate-chunk-times.js +29 -0
- package/dist/can-concat-seamlessly.d.ts +3 -0
- package/dist/can-concat-seamlessly.js +17 -0
- package/dist/cleanup-props.d.ts +9 -0
- package/dist/cleanup-props.js +23 -0
- package/dist/cleanup-serialized-input-props.d.ts +15 -0
- package/dist/cleanup-serialized-input-props.js +34 -0
- package/dist/client.d.ts +9 -0
- package/dist/client.js +30 -12
- package/dist/compress-props.d.ts +6 -2
- package/dist/compress-props.js +5 -3
- package/dist/concat-videos.d.ts +25 -0
- package/dist/concat-videos.js +53 -0
- package/dist/constants.d.ts +39 -3
- package/dist/constants.js +8 -1
- package/dist/create-post-render-data.d.ts +20 -0
- package/dist/create-post-render-data.js +68 -0
- package/dist/docs-url.d.ts +1 -0
- package/dist/docs-url.js +4 -0
- package/dist/estimate-price-from-bucket.d.ts +15 -0
- package/dist/estimate-price-from-bucket.js +31 -0
- package/dist/expected-out-name.d.ts +1 -1
- package/dist/find-output-file-in-bucket.d.ts +16 -0
- package/dist/find-output-file-in-bucket.js +41 -0
- package/dist/format-costs-info.d.ts +2 -0
- package/dist/format-costs-info.js +23 -0
- package/dist/get-browser-instance.d.ts +5 -12
- package/dist/get-browser-instance.js +8 -7
- package/dist/get-custom-out-name.d.ts +1 -1
- package/dist/get-or-create-bucket.d.ts +1 -1
- package/dist/get-overall-progress-from-storage.d.ts +11 -0
- package/dist/get-overall-progress-from-storage.js +25 -0
- package/dist/get-overall-progress.d.ts +9 -0
- package/dist/get-overall-progress.js +23 -0
- package/dist/handlers/check-version-mismatch.d.ts +8 -0
- package/dist/handlers/check-version-mismatch.js +23 -0
- package/dist/handlers/compositions.d.ts +16 -0
- package/dist/handlers/compositions.js +81 -0
- package/dist/handlers/launch.d.ts +18 -0
- package/dist/handlers/launch.js +600 -0
- package/dist/handlers/progress.d.ts +16 -0
- package/dist/handlers/progress.js +54 -0
- package/dist/handlers/renderer.d.ts +24 -0
- package/dist/handlers/renderer.js +344 -0
- package/dist/handlers/start.d.ts +19 -0
- package/dist/handlers/start.js +104 -0
- package/dist/handlers/still.d.ts +21 -0
- package/dist/handlers/still.js +335 -0
- package/dist/index.d.ts +21 -5
- package/dist/index.js +54 -7
- package/dist/info.d.ts +1 -1
- package/dist/inner-routine.d.ts +22 -0
- package/dist/inner-routine.js +267 -0
- package/dist/inspect-error.d.ts +4 -0
- package/dist/inspect-error.js +39 -0
- package/dist/invoke-webhook.d.ts +42 -0
- package/dist/invoke-webhook.js +116 -0
- package/dist/is-warm.d.ts +2 -0
- package/dist/is-warm.js +10 -0
- package/dist/leak-detection.d.ts +4 -0
- package/dist/leak-detection.js +40 -0
- package/dist/make-bucket-name.d.ts +1 -1
- package/dist/make-timeout-error.d.ts +13 -0
- package/dist/make-timeout-error.js +32 -0
- package/dist/make-timeout-message.d.ts +12 -0
- package/dist/make-timeout-message.js +76 -0
- package/dist/merge-chunks.d.ts +38 -0
- package/dist/merge-chunks.js +92 -0
- package/dist/min-max.d.ts +2 -0
- package/dist/min-max.js +33 -0
- package/dist/most-expensive-chunks.d.ts +13 -0
- package/dist/most-expensive-chunks.js +28 -0
- package/dist/on-downloads-helpers.d.ts +2 -0
- package/dist/on-downloads-helpers.js +29 -0
- package/dist/overall-render-progress.d.ts +59 -0
- package/dist/overall-render-progress.js +180 -0
- package/dist/plan-frame-ranges.d.ts +7 -0
- package/dist/plan-frame-ranges.js +17 -0
- package/dist/print-logging-grep-helper.d.ts +4 -0
- package/dist/print-logging-grep-helper.js +12 -0
- package/dist/progress.d.ts +16 -0
- package/dist/progress.js +254 -0
- package/dist/provider-implementation.d.ts +152 -3
- package/dist/render-has-audio-video.d.ts +6 -0
- package/dist/render-has-audio-video.js +21 -0
- package/dist/render-metadata.d.ts +1 -1
- package/dist/render-progress.d.ts +51 -0
- package/dist/return-values.d.ts +38 -0
- package/dist/return-values.js +2 -0
- package/dist/stackback.d.ts +6 -0
- package/dist/stackback.js +59 -0
- package/dist/stream-renderer.d.ts +17 -0
- package/dist/stream-renderer.js +148 -0
- package/dist/streaming/streaming.d.ts +6 -6
- package/dist/streaming/streaming.js +3 -3
- package/dist/types.d.ts +55 -0
- package/dist/types.js +2 -0
- package/dist/validate-composition.d.ts +1 -1
- package/dist/validate-composition.js +11 -1
- package/dist/validate-download-behavior.d.ts +1 -0
- package/dist/validate-download-behavior.js +21 -0
- package/dist/validate-frames-per-function.d.ts +4 -0
- package/dist/validate-frames-per-function.js +29 -0
- package/dist/validate-privacy.d.ts +2 -0
- package/dist/validate-privacy.js +14 -0
- package/dist/validate.d.ts +4 -0
- package/dist/validate.js +8 -0
- package/dist/why-is-node-running.d.ts +15 -0
- package/dist/why-is-node-running.js +89 -0
- package/dist/{write-lambda-error.d.ts → write-error-to-storage.d.ts} +4 -4
- package/package.json +6 -5
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/compositions.d.ts +0 -11
- package/dist/compositions.js +0 -82
- package/dist/still.d.ts +0 -28
- /package/dist/{still.js → render-progress.js} +0 -0
- /package/dist/{write-lambda-error.js → write-error-to-storage.js} +0 -0
package/.turbo/turbo-make.log
CHANGED
package/LICENSE.md
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const bestFramesPerFunctionParam: (frameCount: number) => number;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bestFramesPerFunctionParam = void 0;
|
|
4
|
+
const no_react_1 = require("remotion/no-react");
|
|
5
|
+
// Always update the code in docs/lambda/concurrency.md too
|
|
6
|
+
const bestFramesPerFunctionParam = (frameCount) => {
|
|
7
|
+
// Between 0 and 10 minutes (at 30fps), interpolate the concurrency from 75 to 150
|
|
8
|
+
const concurrency = (0, no_react_1.interpolate)(frameCount, [0, 18000], [75, 150], {
|
|
9
|
+
extrapolateRight: 'clamp',
|
|
10
|
+
});
|
|
11
|
+
// At least have 20 as a `framesPerFunction` value
|
|
12
|
+
const framesPerFunction = Math.max(frameCount / concurrency, 20);
|
|
13
|
+
// Evenly distribute: For 21 frames over 2 functions, distribute as 11 + 10 ==> framesPerLambda = 11
|
|
14
|
+
const functionsNeeded = Math.ceil(frameCount / framesPerFunction);
|
|
15
|
+
return Math.ceil(frameCount / functionsNeeded);
|
|
16
|
+
};
|
|
17
|
+
exports.bestFramesPerFunctionParam = bestFramesPerFunctionParam;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateChunkTimes = void 0;
|
|
4
|
+
const min_max_1 = require("./min-max");
|
|
5
|
+
const getAbsoluteTime = (parsedTimings) => {
|
|
6
|
+
if (parsedTimings.length === 0) {
|
|
7
|
+
return 0;
|
|
8
|
+
}
|
|
9
|
+
const allEnds = parsedTimings.map((p) => p.rendered);
|
|
10
|
+
const allStarts = parsedTimings.map((p) => p.start);
|
|
11
|
+
const biggestEnd = (0, min_max_1.max)(allEnds);
|
|
12
|
+
const smallestStart = (0, min_max_1.min)(allStarts);
|
|
13
|
+
return Math.max(0, biggestEnd - smallestStart);
|
|
14
|
+
};
|
|
15
|
+
const calculateChunkTimes = ({ type, timings, }) => {
|
|
16
|
+
const parsedTimings = timings;
|
|
17
|
+
const absoluteTime = getAbsoluteTime(parsedTimings);
|
|
18
|
+
if (type === 'combined-time-for-cost-calculation') {
|
|
19
|
+
const totalEncodingTimings = parsedTimings
|
|
20
|
+
.map((p) => Math.max(0, p.rendered - p.start))
|
|
21
|
+
.reduce((a, b) => a + b, 0);
|
|
22
|
+
return totalEncodingTimings + absoluteTime;
|
|
23
|
+
}
|
|
24
|
+
if (type === 'absolute-time') {
|
|
25
|
+
return absoluteTime;
|
|
26
|
+
}
|
|
27
|
+
throw new Error('invalid time for calculate chunk times');
|
|
28
|
+
};
|
|
29
|
+
exports.calculateChunkTimes = calculateChunkTimes;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canConcatVideoSeamlessly = exports.canConcatAudioSeamlessly = void 0;
|
|
4
|
+
// Cannot do WAV yet, because currently assumes AAC in+outpoint
|
|
5
|
+
const canConcatAudioSeamlessly = (audioCodec, chunkDurationInFrames) => {
|
|
6
|
+
// Rendering a chunk that is too small generates too much overhead
|
|
7
|
+
// and is currently buggy
|
|
8
|
+
if (chunkDurationInFrames <= 4) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
return audioCodec === 'aac';
|
|
12
|
+
};
|
|
13
|
+
exports.canConcatAudioSeamlessly = canConcatAudioSeamlessly;
|
|
14
|
+
const canConcatVideoSeamlessly = (codec) => {
|
|
15
|
+
return codec === 'h264';
|
|
16
|
+
};
|
|
17
|
+
exports.canConcatVideoSeamlessly = canConcatVideoSeamlessly;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SerializedInputProps } from './constants';
|
|
2
|
+
import type { ProviderSpecifics } from './provider-implementation';
|
|
3
|
+
import type { CloudProvider } from './types';
|
|
4
|
+
export declare const cleanupProps: <Provider extends CloudProvider>({ serializedResolvedProps, inputProps, providerSpecifics, forcePathStyle, }: {
|
|
5
|
+
serializedResolvedProps: SerializedInputProps;
|
|
6
|
+
inputProps: SerializedInputProps;
|
|
7
|
+
providerSpecifics: ProviderSpecifics<Provider>;
|
|
8
|
+
forcePathStyle: boolean;
|
|
9
|
+
}) => Promise<[number, number]>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cleanupProps = void 0;
|
|
4
|
+
const cleanup_serialized_input_props_1 = require("./cleanup-serialized-input-props");
|
|
5
|
+
const cleanupProps = ({ serializedResolvedProps, inputProps, providerSpecifics, forcePathStyle, }) => {
|
|
6
|
+
const cleanupSerializedInputPropsProm = (0, cleanup_serialized_input_props_1.cleanupSerializedInputProps)({
|
|
7
|
+
region: providerSpecifics.getCurrentRegionInFunction(),
|
|
8
|
+
serialized: inputProps,
|
|
9
|
+
providerSpecifics,
|
|
10
|
+
forcePathStyle,
|
|
11
|
+
});
|
|
12
|
+
const cleanupResolvedInputPropsProm = (0, cleanup_serialized_input_props_1.cleanupSerializedResolvedProps)({
|
|
13
|
+
region: providerSpecifics.getCurrentRegionInFunction(),
|
|
14
|
+
serialized: serializedResolvedProps,
|
|
15
|
+
providerSpecifics,
|
|
16
|
+
forcePathStyle,
|
|
17
|
+
});
|
|
18
|
+
return Promise.all([
|
|
19
|
+
cleanupSerializedInputPropsProm,
|
|
20
|
+
cleanupResolvedInputPropsProm,
|
|
21
|
+
]);
|
|
22
|
+
};
|
|
23
|
+
exports.cleanupProps = cleanupProps;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SerializedInputProps } from './constants';
|
|
2
|
+
import type { ProviderSpecifics } from './provider-implementation';
|
|
3
|
+
import type { CloudProvider } from './types';
|
|
4
|
+
export declare const cleanupSerializedInputProps: <Provider extends CloudProvider>({ serialized, region, providerSpecifics, forcePathStyle, }: {
|
|
5
|
+
serialized: SerializedInputProps;
|
|
6
|
+
region: Provider["region"];
|
|
7
|
+
providerSpecifics: ProviderSpecifics<Provider>;
|
|
8
|
+
forcePathStyle: boolean;
|
|
9
|
+
}) => Promise<number>;
|
|
10
|
+
export declare const cleanupSerializedResolvedProps: <Provider extends CloudProvider>({ serialized, region, providerSpecifics, forcePathStyle, }: {
|
|
11
|
+
serialized: SerializedInputProps;
|
|
12
|
+
region: Provider["region"];
|
|
13
|
+
providerSpecifics: ProviderSpecifics<Provider>;
|
|
14
|
+
forcePathStyle: boolean;
|
|
15
|
+
}) => Promise<number>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cleanupSerializedResolvedProps = exports.cleanupSerializedInputProps = void 0;
|
|
4
|
+
const input_props_keys_1 = require("./input-props-keys");
|
|
5
|
+
const cleanupSerializedInputProps = async ({ serialized, region, providerSpecifics, forcePathStyle, }) => {
|
|
6
|
+
if (serialized.type === 'payload') {
|
|
7
|
+
return 0;
|
|
8
|
+
}
|
|
9
|
+
const time = Date.now();
|
|
10
|
+
await providerSpecifics.deleteFile({
|
|
11
|
+
bucketName: serialized.bucketName,
|
|
12
|
+
key: (0, input_props_keys_1.inputPropsKey)(serialized.hash),
|
|
13
|
+
region,
|
|
14
|
+
customCredentials: null,
|
|
15
|
+
forcePathStyle,
|
|
16
|
+
});
|
|
17
|
+
return Date.now() - time;
|
|
18
|
+
};
|
|
19
|
+
exports.cleanupSerializedInputProps = cleanupSerializedInputProps;
|
|
20
|
+
const cleanupSerializedResolvedProps = async ({ serialized, region, providerSpecifics, forcePathStyle, }) => {
|
|
21
|
+
if (serialized.type === 'payload') {
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
const time = Date.now();
|
|
25
|
+
await providerSpecifics.deleteFile({
|
|
26
|
+
bucketName: serialized.bucketName,
|
|
27
|
+
key: (0, input_props_keys_1.resolvedPropsKey)(serialized.hash),
|
|
28
|
+
region,
|
|
29
|
+
customCredentials: null,
|
|
30
|
+
forcePathStyle,
|
|
31
|
+
});
|
|
32
|
+
return Date.now() - time;
|
|
33
|
+
};
|
|
34
|
+
exports.cleanupSerializedResolvedProps = cleanupSerializedResolvedProps;
|
package/dist/client.d.ts
CHANGED
|
@@ -1,15 +1,24 @@
|
|
|
1
|
+
export { COMMAND_NOT_FOUND } from './constants';
|
|
1
2
|
export { Await } from './await';
|
|
2
3
|
export { compressInputProps, decompressInputProps, getNeedsToUpload, serializeOrThrow, } from './compress-props';
|
|
3
4
|
export { REMOTION_BUCKET_PREFIX, ServerlessCodec, ServerlessPayload, ServerlessPayloads, ServerlessRoutines, ServerlessStartPayload, ServerlessStatusPayload, artifactName, customOutName, expiryDays, outName, outStillName, overallProgressKey, rendersPrefix, serverlessCodecs, type CustomCredentials, type CustomCredentialsWithoutSensitiveData, type DeleteAfter, type DownloadBehavior, type OutNameInput, type OutNameInputWithoutCredentials, type OutNameOutput, type Privacy, type SerializedInputProps, type WebhookOption, } from './constants';
|
|
4
5
|
export { GetOrCreateBucketInput, GetOrCreateBucketOutput, internalGetOrCreateBucket, } from './get-or-create-bucket';
|
|
6
|
+
export { validateDownloadBehavior } from './validate-download-behavior';
|
|
7
|
+
export { validateFramesPerFunction } from './validate-frames-per-function';
|
|
5
8
|
export { errorIsOutOfSpaceError, isBrowserCrashedError, isErrInsufficientResourcesErr, } from './error-category';
|
|
9
|
+
export { calculateChunkTimes } from './calculate-chunk-times';
|
|
10
|
+
export { MAX_FUNCTIONS_PER_RENDER } from './constants';
|
|
11
|
+
export { DOCS_URL } from './docs-url';
|
|
6
12
|
export { getExpectedOutName } from './expected-out-name';
|
|
7
13
|
export { FileNameAndSize, GetFolderFiles } from './get-files-in-folder';
|
|
14
|
+
export { getOverallProgressFromStorage } from './get-overall-progress-from-storage';
|
|
8
15
|
export { inputPropsKey, resolvedPropsKey } from './input-props-keys';
|
|
9
16
|
export { makeBucketName } from './make-bucket-name';
|
|
17
|
+
export { getProgress } from './progress';
|
|
10
18
|
export { RenderMetadata } from './render-metadata';
|
|
11
19
|
export { streamToString } from './stream-to-string';
|
|
12
20
|
export { MessageTypeId, formatMap, makeStreamPayload, messageTypeIdToMessageType, } from './streaming/streaming';
|
|
13
21
|
export { truthy } from './truthy';
|
|
14
22
|
export { validateBucketName } from './validate-bucket-name';
|
|
23
|
+
export { validatePrivacy } from './validate-privacy';
|
|
15
24
|
export { validateWebhook } from './validate-webhook';
|
package/dist/client.js
CHANGED
|
@@ -1,35 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateWebhook = exports.validateBucketName = exports.truthy = exports.messageTypeIdToMessageType = exports.makeStreamPayload = exports.formatMap = exports.streamToString = exports.makeBucketName = exports.resolvedPropsKey = exports.inputPropsKey = exports.getExpectedOutName = exports.isErrInsufficientResourcesErr = exports.isBrowserCrashedError = exports.errorIsOutOfSpaceError = exports.internalGetOrCreateBucket = exports.serverlessCodecs = exports.rendersPrefix = exports.overallProgressKey = exports.outStillName = exports.outName = exports.expiryDays = exports.customOutName = exports.artifactName = exports.ServerlessRoutines = exports.REMOTION_BUCKET_PREFIX = exports.serializeOrThrow = exports.getNeedsToUpload = exports.decompressInputProps = exports.compressInputProps = void 0;
|
|
3
|
+
exports.validateWebhook = exports.validatePrivacy = exports.validateBucketName = exports.truthy = exports.messageTypeIdToMessageType = exports.makeStreamPayload = exports.formatMap = exports.streamToString = exports.getProgress = exports.makeBucketName = exports.resolvedPropsKey = exports.inputPropsKey = exports.getOverallProgressFromStorage = exports.getExpectedOutName = exports.DOCS_URL = exports.MAX_FUNCTIONS_PER_RENDER = exports.calculateChunkTimes = exports.isErrInsufficientResourcesErr = exports.isBrowserCrashedError = exports.errorIsOutOfSpaceError = exports.validateFramesPerFunction = exports.validateDownloadBehavior = exports.internalGetOrCreateBucket = exports.serverlessCodecs = exports.rendersPrefix = exports.overallProgressKey = exports.outStillName = exports.outName = exports.expiryDays = exports.customOutName = exports.artifactName = exports.ServerlessRoutines = exports.REMOTION_BUCKET_PREFIX = exports.serializeOrThrow = exports.getNeedsToUpload = exports.decompressInputProps = exports.compressInputProps = exports.COMMAND_NOT_FOUND = void 0;
|
|
4
|
+
var constants_1 = require("./constants");
|
|
5
|
+
Object.defineProperty(exports, "COMMAND_NOT_FOUND", { enumerable: true, get: function () { return constants_1.COMMAND_NOT_FOUND; } });
|
|
4
6
|
var compress_props_1 = require("./compress-props");
|
|
5
7
|
Object.defineProperty(exports, "compressInputProps", { enumerable: true, get: function () { return compress_props_1.compressInputProps; } });
|
|
6
8
|
Object.defineProperty(exports, "decompressInputProps", { enumerable: true, get: function () { return compress_props_1.decompressInputProps; } });
|
|
7
9
|
Object.defineProperty(exports, "getNeedsToUpload", { enumerable: true, get: function () { return compress_props_1.getNeedsToUpload; } });
|
|
8
10
|
Object.defineProperty(exports, "serializeOrThrow", { enumerable: true, get: function () { return compress_props_1.serializeOrThrow; } });
|
|
9
|
-
var
|
|
10
|
-
Object.defineProperty(exports, "REMOTION_BUCKET_PREFIX", { enumerable: true, get: function () { return
|
|
11
|
-
Object.defineProperty(exports, "ServerlessRoutines", { enumerable: true, get: function () { return
|
|
12
|
-
Object.defineProperty(exports, "artifactName", { enumerable: true, get: function () { return
|
|
13
|
-
Object.defineProperty(exports, "customOutName", { enumerable: true, get: function () { return
|
|
14
|
-
Object.defineProperty(exports, "expiryDays", { enumerable: true, get: function () { return
|
|
15
|
-
Object.defineProperty(exports, "outName", { enumerable: true, get: function () { return
|
|
16
|
-
Object.defineProperty(exports, "outStillName", { enumerable: true, get: function () { return
|
|
17
|
-
Object.defineProperty(exports, "overallProgressKey", { enumerable: true, get: function () { return
|
|
18
|
-
Object.defineProperty(exports, "rendersPrefix", { enumerable: true, get: function () { return
|
|
19
|
-
Object.defineProperty(exports, "serverlessCodecs", { enumerable: true, get: function () { return
|
|
11
|
+
var constants_2 = require("./constants");
|
|
12
|
+
Object.defineProperty(exports, "REMOTION_BUCKET_PREFIX", { enumerable: true, get: function () { return constants_2.REMOTION_BUCKET_PREFIX; } });
|
|
13
|
+
Object.defineProperty(exports, "ServerlessRoutines", { enumerable: true, get: function () { return constants_2.ServerlessRoutines; } });
|
|
14
|
+
Object.defineProperty(exports, "artifactName", { enumerable: true, get: function () { return constants_2.artifactName; } });
|
|
15
|
+
Object.defineProperty(exports, "customOutName", { enumerable: true, get: function () { return constants_2.customOutName; } });
|
|
16
|
+
Object.defineProperty(exports, "expiryDays", { enumerable: true, get: function () { return constants_2.expiryDays; } });
|
|
17
|
+
Object.defineProperty(exports, "outName", { enumerable: true, get: function () { return constants_2.outName; } });
|
|
18
|
+
Object.defineProperty(exports, "outStillName", { enumerable: true, get: function () { return constants_2.outStillName; } });
|
|
19
|
+
Object.defineProperty(exports, "overallProgressKey", { enumerable: true, get: function () { return constants_2.overallProgressKey; } });
|
|
20
|
+
Object.defineProperty(exports, "rendersPrefix", { enumerable: true, get: function () { return constants_2.rendersPrefix; } });
|
|
21
|
+
Object.defineProperty(exports, "serverlessCodecs", { enumerable: true, get: function () { return constants_2.serverlessCodecs; } });
|
|
20
22
|
var get_or_create_bucket_1 = require("./get-or-create-bucket");
|
|
21
23
|
Object.defineProperty(exports, "internalGetOrCreateBucket", { enumerable: true, get: function () { return get_or_create_bucket_1.internalGetOrCreateBucket; } });
|
|
24
|
+
var validate_download_behavior_1 = require("./validate-download-behavior");
|
|
25
|
+
Object.defineProperty(exports, "validateDownloadBehavior", { enumerable: true, get: function () { return validate_download_behavior_1.validateDownloadBehavior; } });
|
|
26
|
+
var validate_frames_per_function_1 = require("./validate-frames-per-function");
|
|
27
|
+
Object.defineProperty(exports, "validateFramesPerFunction", { enumerable: true, get: function () { return validate_frames_per_function_1.validateFramesPerFunction; } });
|
|
22
28
|
var error_category_1 = require("./error-category");
|
|
23
29
|
Object.defineProperty(exports, "errorIsOutOfSpaceError", { enumerable: true, get: function () { return error_category_1.errorIsOutOfSpaceError; } });
|
|
24
30
|
Object.defineProperty(exports, "isBrowserCrashedError", { enumerable: true, get: function () { return error_category_1.isBrowserCrashedError; } });
|
|
25
31
|
Object.defineProperty(exports, "isErrInsufficientResourcesErr", { enumerable: true, get: function () { return error_category_1.isErrInsufficientResourcesErr; } });
|
|
32
|
+
var calculate_chunk_times_1 = require("./calculate-chunk-times");
|
|
33
|
+
Object.defineProperty(exports, "calculateChunkTimes", { enumerable: true, get: function () { return calculate_chunk_times_1.calculateChunkTimes; } });
|
|
34
|
+
var constants_3 = require("./constants");
|
|
35
|
+
Object.defineProperty(exports, "MAX_FUNCTIONS_PER_RENDER", { enumerable: true, get: function () { return constants_3.MAX_FUNCTIONS_PER_RENDER; } });
|
|
36
|
+
var docs_url_1 = require("./docs-url");
|
|
37
|
+
Object.defineProperty(exports, "DOCS_URL", { enumerable: true, get: function () { return docs_url_1.DOCS_URL; } });
|
|
26
38
|
var expected_out_name_1 = require("./expected-out-name");
|
|
27
39
|
Object.defineProperty(exports, "getExpectedOutName", { enumerable: true, get: function () { return expected_out_name_1.getExpectedOutName; } });
|
|
40
|
+
var get_overall_progress_from_storage_1 = require("./get-overall-progress-from-storage");
|
|
41
|
+
Object.defineProperty(exports, "getOverallProgressFromStorage", { enumerable: true, get: function () { return get_overall_progress_from_storage_1.getOverallProgressFromStorage; } });
|
|
28
42
|
var input_props_keys_1 = require("./input-props-keys");
|
|
29
43
|
Object.defineProperty(exports, "inputPropsKey", { enumerable: true, get: function () { return input_props_keys_1.inputPropsKey; } });
|
|
30
44
|
Object.defineProperty(exports, "resolvedPropsKey", { enumerable: true, get: function () { return input_props_keys_1.resolvedPropsKey; } });
|
|
31
45
|
var make_bucket_name_1 = require("./make-bucket-name");
|
|
32
46
|
Object.defineProperty(exports, "makeBucketName", { enumerable: true, get: function () { return make_bucket_name_1.makeBucketName; } });
|
|
47
|
+
var progress_1 = require("./progress");
|
|
48
|
+
Object.defineProperty(exports, "getProgress", { enumerable: true, get: function () { return progress_1.getProgress; } });
|
|
33
49
|
var stream_to_string_1 = require("./stream-to-string");
|
|
34
50
|
Object.defineProperty(exports, "streamToString", { enumerable: true, get: function () { return stream_to_string_1.streamToString; } });
|
|
35
51
|
var streaming_1 = require("./streaming/streaming");
|
|
@@ -40,5 +56,7 @@ var truthy_1 = require("./truthy");
|
|
|
40
56
|
Object.defineProperty(exports, "truthy", { enumerable: true, get: function () { return truthy_1.truthy; } });
|
|
41
57
|
var validate_bucket_name_1 = require("./validate-bucket-name");
|
|
42
58
|
Object.defineProperty(exports, "validateBucketName", { enumerable: true, get: function () { return validate_bucket_name_1.validateBucketName; } });
|
|
59
|
+
var validate_privacy_1 = require("./validate-privacy");
|
|
60
|
+
Object.defineProperty(exports, "validatePrivacy", { enumerable: true, get: function () { return validate_privacy_1.validatePrivacy; } });
|
|
43
61
|
var validate_webhook_1 = require("./validate-webhook");
|
|
44
62
|
Object.defineProperty(exports, "validateWebhook", { enumerable: true, get: function () { return validate_webhook_1.validateWebhook; } });
|
package/dist/compress-props.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import type { SerializedInputProps } from './constants';
|
|
2
2
|
import type { ProviderSpecifics } from './provider-implementation';
|
|
3
|
-
import type { CloudProvider } from './
|
|
3
|
+
import type { CloudProvider } from './types';
|
|
4
4
|
type PropsType = 'input-props' | 'resolved-props';
|
|
5
5
|
export declare const serializeOrThrow: (inputProps: Record<string, unknown>, propsType: PropsType) => string;
|
|
6
|
-
export declare const getNeedsToUpload:
|
|
6
|
+
export declare const getNeedsToUpload: <Provider extends CloudProvider>({ type, sizes, providerSpecifics, }: {
|
|
7
|
+
type: "still" | "video-or-audio";
|
|
8
|
+
sizes: number[];
|
|
9
|
+
providerSpecifics: ProviderSpecifics<Provider>;
|
|
10
|
+
}) => boolean;
|
|
7
11
|
export declare const compressInputProps: <Provider extends CloudProvider>({ stringifiedInputProps, region, userSpecifiedBucketName, propsType, needsToUpload, providerSpecifics, forcePathStyle, skipPutAcl, }: {
|
|
8
12
|
stringifiedInputProps: string;
|
|
9
13
|
region: Provider["region"];
|
package/dist/compress-props.js
CHANGED
|
@@ -26,13 +26,15 @@ const serializeOrThrow = (inputProps, propsType) => {
|
|
|
26
26
|
}
|
|
27
27
|
};
|
|
28
28
|
exports.serializeOrThrow = serializeOrThrow;
|
|
29
|
-
const getNeedsToUpload = (type, sizes) => {
|
|
29
|
+
const getNeedsToUpload = ({ type, sizes, providerSpecifics, }) => {
|
|
30
30
|
const MARGIN = 5000 + validate_webhook_1.MAX_WEBHOOK_CUSTOM_DATA_SIZE;
|
|
31
|
-
const MAX_INLINE_PAYLOAD_SIZE = (type === 'still'
|
|
31
|
+
const MAX_INLINE_PAYLOAD_SIZE = (type === 'still'
|
|
32
|
+
? providerSpecifics.getMaxStillInlinePayloadSize()
|
|
33
|
+
: providerSpecifics.getMaxNonInlinePayloadSizePerFunction()) - MARGIN;
|
|
32
34
|
const sizesAlreadyUsed = sizes.reduce((a, b) => a + b);
|
|
33
35
|
if (sizesAlreadyUsed > MAX_INLINE_PAYLOAD_SIZE) {
|
|
34
36
|
// eslint-disable-next-line no-console
|
|
35
|
-
console.warn(`Warning: The props are over ${Math.round(MAX_INLINE_PAYLOAD_SIZE / 1000)}KB (${Math.ceil(sizesAlreadyUsed / 1024)}KB) in size. Uploading them to
|
|
37
|
+
console.warn(`Warning: The props are over ${Math.round(MAX_INLINE_PAYLOAD_SIZE / 1000)}KB (${Math.ceil(sizesAlreadyUsed / 1024)}KB) in size. Uploading them to ${providerSpecifics.serverStorageProductName()} to circumvent AWS Lambda payload size, which may lead to slowdown.`);
|
|
36
38
|
return true;
|
|
37
39
|
}
|
|
38
40
|
return false;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AudioCodec, CancelSignal, LogLevel } from '@remotion/renderer';
|
|
2
|
+
import { type ServerlessCodec } from './constants';
|
|
3
|
+
import type { InsideFunctionSpecifics } from './provider-implementation';
|
|
4
|
+
export declare const concatVideos: ({ onProgress, numberOfFrames, codec, fps, numberOfGifLoops, files, outdir, audioCodec, audioBitrate, logLevel, framesPerLambda, binariesDirectory, cancelSignal, preferLossless, muted, metadata, insideFunctionSpecifics, }: {
|
|
5
|
+
onProgress: (frames: number) => void;
|
|
6
|
+
numberOfFrames: number;
|
|
7
|
+
codec: ServerlessCodec;
|
|
8
|
+
fps: number;
|
|
9
|
+
numberOfGifLoops: number | null;
|
|
10
|
+
files: string[];
|
|
11
|
+
outdir: string;
|
|
12
|
+
audioCodec: AudioCodec | null;
|
|
13
|
+
audioBitrate: string | null;
|
|
14
|
+
logLevel: LogLevel;
|
|
15
|
+
framesPerLambda: number;
|
|
16
|
+
binariesDirectory: string | null;
|
|
17
|
+
cancelSignal: CancelSignal | undefined;
|
|
18
|
+
preferLossless: boolean;
|
|
19
|
+
muted: boolean;
|
|
20
|
+
metadata: Record<string, string> | null;
|
|
21
|
+
insideFunctionSpecifics: InsideFunctionSpecifics;
|
|
22
|
+
}) => Promise<{
|
|
23
|
+
outfile: string;
|
|
24
|
+
cleanupChunksProm: Promise<void>;
|
|
25
|
+
}>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.concatVideos = void 0;
|
|
7
|
+
const renderer_1 = require("@remotion/renderer");
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
const can_concat_seamlessly_1 = require("./can-concat-seamlessly");
|
|
11
|
+
const constants_1 = require("./constants");
|
|
12
|
+
const concatVideos = async ({ onProgress, numberOfFrames, codec, fps, numberOfGifLoops, files, outdir, audioCodec, audioBitrate, logLevel, framesPerLambda, binariesDirectory, cancelSignal, preferLossless, muted, metadata, insideFunctionSpecifics, }) => {
|
|
13
|
+
const outfile = (0, node_path_1.join)(renderer_1.RenderInternals.tmpDir(constants_1.REMOTION_CONCATED_TOKEN), `concat.${renderer_1.RenderInternals.getFileExtensionFromCodec(codec, audioCodec)}`);
|
|
14
|
+
const combine = insideFunctionSpecifics.timer('Combine chunks', logLevel);
|
|
15
|
+
const filelistDir = renderer_1.RenderInternals.tmpDir(constants_1.REMOTION_FILELIST_TOKEN);
|
|
16
|
+
const chunkDurationInSeconds = framesPerLambda / fps;
|
|
17
|
+
const resolvedAudioCodec = renderer_1.RenderInternals.resolveAudioCodec({
|
|
18
|
+
setting: audioCodec,
|
|
19
|
+
codec,
|
|
20
|
+
preferLossless,
|
|
21
|
+
separateAudioTo: null,
|
|
22
|
+
});
|
|
23
|
+
const seamlessAudio = (0, can_concat_seamlessly_1.canConcatAudioSeamlessly)(resolvedAudioCodec, framesPerLambda);
|
|
24
|
+
const seamlessVideo = (0, can_concat_seamlessly_1.canConcatVideoSeamlessly)(codec);
|
|
25
|
+
await renderer_1.RenderInternals.combineChunks({
|
|
26
|
+
files,
|
|
27
|
+
filelistDir,
|
|
28
|
+
output: outfile,
|
|
29
|
+
onProgress,
|
|
30
|
+
numberOfFrames,
|
|
31
|
+
codec,
|
|
32
|
+
fps,
|
|
33
|
+
numberOfGifLoops,
|
|
34
|
+
resolvedAudioCodec,
|
|
35
|
+
audioBitrate,
|
|
36
|
+
indent: false,
|
|
37
|
+
logLevel,
|
|
38
|
+
chunkDurationInSeconds,
|
|
39
|
+
binariesDirectory,
|
|
40
|
+
cancelSignal,
|
|
41
|
+
seamlessAudio,
|
|
42
|
+
seamlessVideo,
|
|
43
|
+
muted,
|
|
44
|
+
metadata,
|
|
45
|
+
});
|
|
46
|
+
combine.end();
|
|
47
|
+
const cleanupChunksProm = node_fs_1.default.promises.rm(outdir, {
|
|
48
|
+
recursive: true,
|
|
49
|
+
force: true,
|
|
50
|
+
});
|
|
51
|
+
return { outfile, cleanupChunksProm };
|
|
52
|
+
};
|
|
53
|
+
exports.concatVideos = concatVideos;
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { AudioCodec, ChromiumOptions, ColorSpace, FrameRange, LogLevel, PixelFormat, ProResProfile, StillImageFormat, ToOptions, VideoImageFormat, X264Preset } from '@remotion/renderer';
|
|
2
2
|
import type { BrowserSafeApis } from '@remotion/renderer/client';
|
|
3
|
-
import type {
|
|
3
|
+
import type { ExpensiveChunk } from './most-expensive-chunks';
|
|
4
|
+
import type { ChunkRetry, CloudProvider, ReceivedArtifact } from './types';
|
|
5
|
+
import type { EnhancedErrorInfo } from './write-error-to-storage';
|
|
4
6
|
export declare const expiryDays: {
|
|
5
7
|
readonly '1-day': 1;
|
|
6
8
|
readonly '3-days': 3;
|
|
@@ -122,7 +124,7 @@ export type ServerlessPayloads<Provider extends CloudProvider> = {
|
|
|
122
124
|
type: ServerlessRoutines.launch;
|
|
123
125
|
serveUrl: string;
|
|
124
126
|
composition: string;
|
|
125
|
-
|
|
127
|
+
framesPerFunction: number | null;
|
|
126
128
|
bucketName: string;
|
|
127
129
|
inputProps: SerializedInputProps;
|
|
128
130
|
renderId: string;
|
|
@@ -145,7 +147,7 @@ export type ServerlessPayloads<Provider extends CloudProvider> = {
|
|
|
145
147
|
scale: number;
|
|
146
148
|
everyNthFrame: number;
|
|
147
149
|
numberOfGifLoops: number | null;
|
|
148
|
-
|
|
150
|
+
concurrencyPerFunction: number;
|
|
149
151
|
downloadBehavior: DownloadBehavior;
|
|
150
152
|
muted: boolean;
|
|
151
153
|
overwrite: boolean;
|
|
@@ -272,4 +274,38 @@ export declare const outName: (renderId: string, extension: string) => string;
|
|
|
272
274
|
export declare const customOutName: <Provider extends CloudProvider>(renderId: string, bucketName: string, name: OutNameInput<Provider>) => OutNameOutput<Provider>;
|
|
273
275
|
export declare const overallProgressKey: (renderId: string) => string;
|
|
274
276
|
export declare const artifactName: (renderId: string, name: string) => string;
|
|
277
|
+
export type PostRenderData<Provider extends CloudProvider> = {
|
|
278
|
+
cost: AfterRenderCost;
|
|
279
|
+
outputFile: string;
|
|
280
|
+
outputSize: number;
|
|
281
|
+
renderSize: number;
|
|
282
|
+
timeToFinish: number;
|
|
283
|
+
timeToRenderFrames: number;
|
|
284
|
+
errors: EnhancedErrorInfo[];
|
|
285
|
+
startTime: number;
|
|
286
|
+
endTime: number;
|
|
287
|
+
filesCleanedUp: number;
|
|
288
|
+
timeToEncode: number;
|
|
289
|
+
timeToCleanUp: number;
|
|
290
|
+
timeToRenderChunks: number;
|
|
291
|
+
retriesInfo: ChunkRetry[];
|
|
292
|
+
mostExpensiveFrameRanges: ExpensiveChunk[] | undefined;
|
|
293
|
+
estimatedBillingDurationInMilliseconds: number;
|
|
294
|
+
deleteAfter: DeleteAfter | null;
|
|
295
|
+
timeToCombine: number | null;
|
|
296
|
+
artifactProgress: ReceivedArtifact<Provider>[];
|
|
297
|
+
};
|
|
298
|
+
export type AfterRenderCost = {
|
|
299
|
+
estimatedCost: number;
|
|
300
|
+
estimatedDisplayCost: string;
|
|
301
|
+
currency: string;
|
|
302
|
+
disclaimer: string;
|
|
303
|
+
};
|
|
304
|
+
export declare const CONCAT_FOLDER_TOKEN = "remotion-concat";
|
|
305
|
+
export declare const MAX_FUNCTIONS_PER_RENDER = 200;
|
|
306
|
+
export declare const MINIMUM_FRAMES_PER_LAMBDA = 4;
|
|
307
|
+
export declare const REMOTION_CONCATED_TOKEN = "remotion-concated-token";
|
|
308
|
+
export declare const REMOTION_FILELIST_TOKEN = "remotion-filelist";
|
|
309
|
+
export declare const RENDERER_PATH_TOKEN = "remotion-bucket";
|
|
310
|
+
export declare const COMMAND_NOT_FOUND = "Command not found";
|
|
275
311
|
export {};
|
package/dist/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.artifactName = exports.overallProgressKey = exports.customOutName = exports.outName = exports.outStillName = exports.rendersPrefix = exports.REMOTION_BUCKET_PREFIX = exports.serverlessCodecs = exports.ServerlessRoutines = exports.expiryDays = void 0;
|
|
3
|
+
exports.COMMAND_NOT_FOUND = exports.RENDERER_PATH_TOKEN = exports.REMOTION_FILELIST_TOKEN = exports.REMOTION_CONCATED_TOKEN = exports.MINIMUM_FRAMES_PER_LAMBDA = exports.MAX_FUNCTIONS_PER_RENDER = exports.CONCAT_FOLDER_TOKEN = exports.artifactName = exports.overallProgressKey = exports.customOutName = exports.outName = exports.outStillName = exports.rendersPrefix = exports.REMOTION_BUCKET_PREFIX = exports.serverlessCodecs = exports.ServerlessRoutines = exports.expiryDays = void 0;
|
|
4
4
|
// Needs to be in sync with renderer/src/options/delete-after.ts#L7
|
|
5
5
|
exports.expiryDays = {
|
|
6
6
|
'1-day': 1,
|
|
@@ -56,3 +56,10 @@ const overallProgressKey = (renderId) => `${(0, exports.rendersPrefix)(renderId)
|
|
|
56
56
|
exports.overallProgressKey = overallProgressKey;
|
|
57
57
|
const artifactName = (renderId, name) => `${(0, exports.rendersPrefix)(renderId)}/artifacts/${name}`;
|
|
58
58
|
exports.artifactName = artifactName;
|
|
59
|
+
exports.CONCAT_FOLDER_TOKEN = 'remotion-concat';
|
|
60
|
+
exports.MAX_FUNCTIONS_PER_RENDER = 200;
|
|
61
|
+
exports.MINIMUM_FRAMES_PER_LAMBDA = 4;
|
|
62
|
+
exports.REMOTION_CONCATED_TOKEN = 'remotion-concated-token';
|
|
63
|
+
exports.REMOTION_FILELIST_TOKEN = 'remotion-filelist';
|
|
64
|
+
exports.RENDERER_PATH_TOKEN = 'remotion-bucket';
|
|
65
|
+
exports.COMMAND_NOT_FOUND = 'Command not found';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PostRenderData } from './constants';
|
|
2
|
+
import type { OutputFileMetadata } from './find-output-file-in-bucket';
|
|
3
|
+
import type { OverallRenderProgress } from './overall-render-progress';
|
|
4
|
+
import type { ProviderSpecifics } from './provider-implementation';
|
|
5
|
+
import type { RenderMetadata } from './render-metadata';
|
|
6
|
+
import type { CloudProvider } from './types';
|
|
7
|
+
import type { EnhancedErrorInfo } from './write-error-to-storage';
|
|
8
|
+
export declare const createPostRenderData: <Provider extends CloudProvider>({ region, memorySizeInMb, renderMetadata, errorExplanations, timeToDelete, outputFile, timeToCombine, overallProgress, timeToFinish, outputSize, providerSpecifics, }: {
|
|
9
|
+
region: Provider["region"];
|
|
10
|
+
memorySizeInMb: number;
|
|
11
|
+
renderMetadata: RenderMetadata<Provider>;
|
|
12
|
+
timeToDelete: number;
|
|
13
|
+
errorExplanations: EnhancedErrorInfo[];
|
|
14
|
+
outputFile: OutputFileMetadata;
|
|
15
|
+
timeToCombine: number | null;
|
|
16
|
+
overallProgress: OverallRenderProgress<Provider>;
|
|
17
|
+
timeToFinish: number;
|
|
18
|
+
outputSize: number;
|
|
19
|
+
providerSpecifics: ProviderSpecifics<Provider>;
|
|
20
|
+
}) => PostRenderData<Provider>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createPostRenderData = void 0;
|
|
4
|
+
const calculate_chunk_times_1 = require("./calculate-chunk-times");
|
|
5
|
+
const most_expensive_chunks_1 = require("./most-expensive-chunks");
|
|
6
|
+
const createPostRenderData = ({ region, memorySizeInMb, renderMetadata, errorExplanations, timeToDelete, outputFile, timeToCombine, overallProgress, timeToFinish, outputSize, providerSpecifics, }) => {
|
|
7
|
+
const parsedTimings = overallProgress.timings;
|
|
8
|
+
const estimatedBillingDurationInMilliseconds = parsedTimings
|
|
9
|
+
.map((p) => p.rendered - p.start + most_expensive_chunks_1.OVERHEAD_TIME_PER_LAMBDA)
|
|
10
|
+
.reduce((a, b) => a + b);
|
|
11
|
+
const cost = providerSpecifics.estimatePrice({
|
|
12
|
+
durationInMilliseconds: estimatedBillingDurationInMilliseconds,
|
|
13
|
+
memorySizeInMb,
|
|
14
|
+
region,
|
|
15
|
+
lambdasInvoked: renderMetadata.estimatedTotalLambdaInvokations,
|
|
16
|
+
diskSizeInMb: providerSpecifics.getEphemeralStorageForPriceCalculation(),
|
|
17
|
+
});
|
|
18
|
+
if (!outputFile) {
|
|
19
|
+
throw new Error('Cannot wrap up without an output file in the S3 bucket.');
|
|
20
|
+
}
|
|
21
|
+
const endTime = Date.now();
|
|
22
|
+
if (overallProgress.timeToEncode === null) {
|
|
23
|
+
throw new Error('Expected time to encode to be set');
|
|
24
|
+
}
|
|
25
|
+
if (overallProgress.timeToRenderFrames === null) {
|
|
26
|
+
throw new Error('Expected time to encode to be set');
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
cost: {
|
|
30
|
+
currency: 'USD',
|
|
31
|
+
disclaimer: 'Estimated cost for function invocations only. Does not include cost for storage and data transfer.',
|
|
32
|
+
estimatedCost: cost,
|
|
33
|
+
estimatedDisplayCost: `$${new Intl.NumberFormat('en-US', {
|
|
34
|
+
currency: 'USD',
|
|
35
|
+
currencyDisplay: 'narrowSymbol',
|
|
36
|
+
}).format(cost)}`,
|
|
37
|
+
},
|
|
38
|
+
outputFile: outputFile.url,
|
|
39
|
+
timeToFinish,
|
|
40
|
+
errors: errorExplanations,
|
|
41
|
+
startTime: renderMetadata.startedDate,
|
|
42
|
+
endTime,
|
|
43
|
+
outputSize,
|
|
44
|
+
renderSize: outputSize,
|
|
45
|
+
filesCleanedUp: 0,
|
|
46
|
+
timeToEncode: overallProgress.timeToEncode,
|
|
47
|
+
timeToCleanUp: timeToDelete,
|
|
48
|
+
timeToRenderChunks: (0, calculate_chunk_times_1.calculateChunkTimes)({
|
|
49
|
+
type: 'absolute-time',
|
|
50
|
+
timings: overallProgress.timings,
|
|
51
|
+
}),
|
|
52
|
+
timeToRenderFrames: overallProgress.timeToRenderFrames,
|
|
53
|
+
retriesInfo: overallProgress.retries,
|
|
54
|
+
mostExpensiveFrameRanges: renderMetadata.type === 'still'
|
|
55
|
+
? []
|
|
56
|
+
: (0, most_expensive_chunks_1.getMostExpensiveChunks)({
|
|
57
|
+
parsedTimings,
|
|
58
|
+
framesPerFunction: renderMetadata.framesPerLambda,
|
|
59
|
+
firstFrame: renderMetadata.frameRange[0],
|
|
60
|
+
lastFrame: renderMetadata.frameRange[1],
|
|
61
|
+
}),
|
|
62
|
+
deleteAfter: renderMetadata.deleteAfter,
|
|
63
|
+
estimatedBillingDurationInMilliseconds,
|
|
64
|
+
timeToCombine: timeToCombine !== null && timeToCombine !== void 0 ? timeToCombine : null,
|
|
65
|
+
artifactProgress: overallProgress.receivedArtifact,
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
exports.createPostRenderData = createPostRenderData;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const DOCS_URL = "https://remotion.dev";
|
package/dist/docs-url.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ProviderSpecifics } from './provider-implementation';
|
|
2
|
+
import type { RenderMetadata } from './render-metadata';
|
|
3
|
+
import type { CloudProvider, ParsedTiming } from './types';
|
|
4
|
+
export declare const estimatePriceFromMetadata: <Provider extends CloudProvider>({ renderMetadata, memorySizeInMb, diskSizeInMb, functionsInvoked, timings, region, providerSpecifics, }: {
|
|
5
|
+
renderMetadata: RenderMetadata<Provider> | null;
|
|
6
|
+
memorySizeInMb: number;
|
|
7
|
+
diskSizeInMb: number;
|
|
8
|
+
functionsInvoked: number;
|
|
9
|
+
timings: ParsedTiming[];
|
|
10
|
+
region: Provider["region"];
|
|
11
|
+
providerSpecifics: ProviderSpecifics<Provider>;
|
|
12
|
+
}) => {
|
|
13
|
+
accruedSoFar: number;
|
|
14
|
+
estimatedBillingDurationInMilliseconds: number;
|
|
15
|
+
} | null;
|