@remotion/lambda 4.0.0-tts.12 → 4.0.0-umungobongo.4

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.
Files changed (151) hide show
  1. package/dist/admin/bundle-lambda.js +1 -0
  2. package/dist/admin/make-layer-public.js +2 -2
  3. package/dist/api/bucket-exists.d.ts +1 -1
  4. package/dist/api/clean-items.d.ts +1 -1
  5. package/dist/api/create-bucket.d.ts +1 -1
  6. package/dist/api/create-function.d.ts +2 -2
  7. package/dist/api/delete-function.d.ts +1 -1
  8. package/dist/api/delete-site.d.ts +1 -1
  9. package/dist/api/deploy-function.d.ts +2 -2
  10. package/dist/api/deploy-site.d.ts +3 -3
  11. package/dist/api/deploy-site.js +2 -3
  12. package/dist/api/download-media.d.ts +2 -2
  13. package/dist/api/enable-s3-website.d.ts +1 -1
  14. package/dist/api/estimate-price.d.ts +2 -2
  15. package/dist/api/get-aws-client.d.ts +2 -2
  16. package/dist/api/get-buckets.d.ts +1 -1
  17. package/dist/api/get-function-info.d.ts +2 -2
  18. package/dist/api/get-functions.d.ts +2 -2
  19. package/dist/api/get-or-create-bucket.d.ts +1 -1
  20. package/dist/api/get-regions.d.ts +1 -1
  21. package/dist/api/get-render-progress.d.ts +2 -2
  22. package/dist/api/get-sites.d.ts +2 -2
  23. package/dist/api/iam-validation/role-permissions.d.ts +2 -1
  24. package/dist/api/iam-validation/simulate-rule.d.ts +1 -1
  25. package/dist/api/iam-validation/simulate.d.ts +2 -2
  26. package/dist/api/mock-functions.d.ts +3 -3
  27. package/dist/api/presign-url.d.ts +3 -2
  28. package/dist/api/render-media-on-lambda.d.ts +13 -8
  29. package/dist/api/render-media-on-lambda.js +12 -5
  30. package/dist/api/render-still-on-lambda.d.ts +8 -7
  31. package/dist/api/render-still-on-lambda.js +4 -4
  32. package/dist/api/upload-dir.d.ts +2 -2
  33. package/dist/api/upload-dir.js +5 -1
  34. package/dist/cli/args.d.ts +4 -3
  35. package/dist/cli/commands/render/progress.d.ts +4 -4
  36. package/dist/cli/commands/render/progress.js +11 -3
  37. package/dist/cli/commands/render/render.js +13 -3
  38. package/dist/cli/commands/sites/create.js +2 -3
  39. package/dist/cli/commands/sites/ls.js +1 -2
  40. package/dist/cli/commands/sites/rm.js +2 -3
  41. package/dist/cli/commands/sites/rmall.js +2 -3
  42. package/dist/cli/commands/still.js +1 -2
  43. package/dist/cli/get-aws-region.d.ts +1 -1
  44. package/dist/cli/helpers/get-cloudwatch-stream-url.d.ts +2 -2
  45. package/dist/cli/helpers/progress-bar.js +1 -2
  46. package/dist/cli/index.js +1 -1
  47. package/dist/functions/chunk-optimization/can-use-optimization.d.ts +1 -1
  48. package/dist/functions/chunk-optimization/collect-data.d.ts +1 -1
  49. package/dist/functions/chunk-optimization/get-frame-ranges-from-profile.d.ts +1 -1
  50. package/dist/functions/chunk-optimization/get-profile-duration.d.ts +1 -1
  51. package/dist/functions/chunk-optimization/is-valid-profile.d.ts +1 -1
  52. package/dist/functions/chunk-optimization/is-valid-profile.js +2 -2
  53. package/dist/functions/chunk-optimization/optimize-invocation-order.d.ts +1 -1
  54. package/dist/functions/chunk-optimization/optimize-profile.d.ts +1 -1
  55. package/dist/functions/chunk-optimization/plan-frame-ranges.d.ts +3 -3
  56. package/dist/functions/chunk-optimization/plan-frame-ranges.js +7 -6
  57. package/dist/functions/chunk-optimization/s3-optimization-file.d.ts +2 -2
  58. package/dist/functions/chunk-optimization/s3-optimization-file.js +1 -0
  59. package/dist/functions/chunk-optimization/simulate-frame-ranges.d.ts +1 -1
  60. package/dist/functions/chunk-optimization/sort-by-duration.d.ts +1 -1
  61. package/dist/functions/chunk-optimization/types.d.ts +2 -1
  62. package/dist/functions/helpers/calculate-chunk-times.d.ts +1 -1
  63. package/dist/functions/helpers/calculate-price-from-bucket.d.ts +4 -4
  64. package/dist/functions/helpers/concat-videos.d.ts +5 -4
  65. package/dist/functions/helpers/concat-videos.js +2 -1
  66. package/dist/functions/helpers/create-post-render-data.d.ts +6 -6
  67. package/dist/functions/helpers/create-post-render-data.js +12 -7
  68. package/dist/functions/helpers/delete-chunks.d.ts +3 -3
  69. package/dist/functions/helpers/expected-out-name.d.ts +1 -1
  70. package/dist/functions/helpers/find-output-file-in-bucket.d.ts +2 -2
  71. package/dist/functions/helpers/find-output-file-in-bucket.js +5 -1
  72. package/dist/functions/helpers/format-costs-info.d.ts +1 -1
  73. package/dist/functions/helpers/get-browser-instance.d.ts +2 -1
  74. package/dist/functions/helpers/get-cleanup-progress.d.ts +2 -2
  75. package/dist/functions/helpers/get-current-architecture.d.ts +1 -1
  76. package/dist/functions/helpers/get-encoding-metadata.d.ts +2 -2
  77. package/dist/functions/helpers/get-final-encoding-status.d.ts +2 -2
  78. package/dist/functions/helpers/get-lambdas-invoked-stats.d.ts +8 -3
  79. package/dist/functions/helpers/get-lambdas-invoked-stats.js +7 -7
  80. package/dist/functions/helpers/get-output-url-from-metadata.d.ts +1 -1
  81. package/dist/functions/helpers/get-post-render-data.d.ts +2 -2
  82. package/dist/functions/helpers/get-progress.d.ts +2 -2
  83. package/dist/functions/helpers/get-progress.js +18 -10
  84. package/dist/functions/helpers/get-render-metadata.d.ts +2 -2
  85. package/dist/functions/helpers/get-retry-stats.d.ts +1 -1
  86. package/dist/functions/helpers/get-time-to-finish.d.ts +1 -1
  87. package/dist/functions/helpers/inspect-errors.d.ts +3 -3
  88. package/dist/functions/helpers/io.d.ts +8 -6
  89. package/dist/functions/helpers/io.js +8 -2
  90. package/dist/functions/helpers/min-max.d.ts +1 -1
  91. package/dist/functions/helpers/min-max.js +1 -1
  92. package/dist/functions/helpers/print-cloudwatch-helper.d.ts +2 -2
  93. package/dist/functions/helpers/read-with-progress.d.ts +3 -2
  94. package/dist/functions/helpers/read-with-progress.js +13 -1
  95. package/dist/functions/helpers/validate-composition.d.ts +5 -4
  96. package/dist/functions/helpers/validate-composition.js +2 -1
  97. package/dist/functions/helpers/write-lambda-error.d.ts +1 -1
  98. package/dist/functions/helpers/write-lambda-error.js +1 -0
  99. package/dist/functions/helpers/write-post-render-data.d.ts +2 -2
  100. package/dist/functions/helpers/write-post-render-data.js +1 -0
  101. package/dist/functions/index.d.ts +3 -2
  102. package/dist/functions/index.js +12 -5
  103. package/dist/functions/info.d.ts +1 -1
  104. package/dist/functions/launch.d.ts +1 -1
  105. package/dist/functions/launch.js +37 -19
  106. package/dist/functions/progress.d.ts +1 -1
  107. package/dist/functions/renderer.d.ts +1 -1
  108. package/dist/functions/renderer.js +18 -11
  109. package/dist/functions/start.d.ts +1 -1
  110. package/dist/functions/start.js +5 -2
  111. package/dist/functions/still.d.ts +1 -1
  112. package/dist/functions/still.js +12 -6
  113. package/dist/index.d.ts +33 -18
  114. package/dist/pricing/price-per-1-s.d.ts +1 -1
  115. package/dist/shared/aws-clients.d.ts +1 -1
  116. package/dist/shared/bundle-site.d.ts +1 -6
  117. package/dist/shared/call-lambda.d.ts +3 -3
  118. package/dist/shared/check-credentials.js +2 -2
  119. package/dist/shared/constants.d.ts +29 -13
  120. package/dist/shared/constants.js +2 -2
  121. package/dist/shared/content-disposition-header.d.ts +7 -0
  122. package/dist/shared/content-disposition-header.js +19 -0
  123. package/dist/shared/convert-to-serve-url.d.ts +1 -1
  124. package/dist/shared/get-account-id.d.ts +1 -1
  125. package/dist/shared/get-function-version.d.ts +2 -2
  126. package/dist/shared/get-most-expensive-chunks.d.ts +8 -0
  127. package/dist/shared/get-most-expensive-chunks.js +25 -0
  128. package/dist/shared/hosted-layers.d.ts +2 -2
  129. package/dist/shared/hosted-layers.js +60 -60
  130. package/dist/shared/make-s3-url.d.ts +1 -1
  131. package/dist/shared/return-values.d.ts +7 -7
  132. package/dist/shared/return-values.js +0 -1
  133. package/dist/shared/stream-to-string.d.ts +1 -1
  134. package/dist/shared/truthy.d.ts +3 -0
  135. package/dist/shared/truthy.js +7 -0
  136. package/dist/shared/validate-aws-region.d.ts +1 -1
  137. package/dist/shared/validate-download-behavior.d.ts +1 -0
  138. package/dist/shared/validate-download-behavior.js +21 -0
  139. package/dist/shared/validate-lambda-codec.d.ts +4 -0
  140. package/dist/shared/validate-lambda-codec.js +30 -0
  141. package/dist/shared/validate-outname.d.ts +1 -1
  142. package/dist/shared/validate-presign-expiration.d.ts +0 -2
  143. package/dist/shared/validate-presign-expiration.js +7 -7
  144. package/dist/shared/validate-privacy.d.ts +1 -1
  145. package/dist/shared/validate-privacy.js +2 -2
  146. package/package.json +8 -10
  147. package/remotionlambda.zip +0 -0
  148. package/dist/cli/helpers/format-bytes.d.ts +0 -6
  149. package/dist/cli/helpers/format-bytes.js +0 -103
  150. package/dist/shared/chunk.d.ts +0 -1
  151. package/dist/shared/chunk.js +0 -11
@@ -23,7 +23,7 @@ const get_time_to_finish_1 = require("./get-time-to-finish");
23
23
  const inspect_errors_1 = require("./inspect-errors");
24
24
  const io_1 = require("./io");
25
25
  const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region, memorySizeInMb, timeoutInMiliseconds, }) => {
26
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
26
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
27
27
  const postRenderData = await (0, get_post_render_data_1.getPostRenderData)({
28
28
  bucketName,
29
29
  region,
@@ -68,6 +68,7 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
68
68
  retriesInfo: postRenderData.retriesInfo,
69
69
  outKey: outData.key,
70
70
  outBucket: outData.renderBucketName,
71
+ mostExpensiveFrameRanges: (_a = postRenderData.mostExpensiveFrameRanges) !== null && _a !== void 0 ? _a : null,
71
72
  };
72
73
  }
73
74
  const contents = await (0, io_1.lambdaLs)({
@@ -114,27 +115,33 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
114
115
  memorySizeInMb,
115
116
  outputFileMetadata: outputFile,
116
117
  architecture: (0, get_current_architecture_1.getCurrentArchitecture)(),
117
- lambdasInvoked: (_a = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.estimatedRenderLambdaInvokations) !== null && _a !== void 0 ? _a : 0,
118
+ lambdasInvoked: (_b = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.estimatedRenderLambdaInvokations) !== null && _b !== void 0 ? _b : 0,
118
119
  // We cannot determine the ephemeral storage size, so we
119
120
  // overestimate the price, but will only have a miniscule effect (~0.2%)
120
121
  diskSizeInMb: constants_1.MAX_EPHEMERAL_STORAGE_IN_MB,
121
122
  }));
122
123
  const cleanup = (0, get_cleanup_progress_1.getCleanupProgress)({
123
- chunkCount: (_b = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.totalChunks) !== null && _b !== void 0 ? _b : 0,
124
+ chunkCount: (_c = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.totalChunks) !== null && _c !== void 0 ? _c : 0,
124
125
  contents,
125
- output: (_c = outputFile === null || outputFile === void 0 ? void 0 : outputFile.url) !== null && _c !== void 0 ? _c : null,
126
+ output: (_d = outputFile === null || outputFile === void 0 ? void 0 : outputFile.url) !== null && _d !== void 0 ? _d : null,
126
127
  renderId,
127
128
  });
128
129
  const timeToFinish = (0, get_time_to_finish_1.getTimeToFinish)({
129
- lastModified: (_d = outputFile === null || outputFile === void 0 ? void 0 : outputFile.lastModified) !== null && _d !== void 0 ? _d : null,
130
+ lastModified: (_e = outputFile === null || outputFile === void 0 ? void 0 : outputFile.lastModified) !== null && _e !== void 0 ? _e : null,
130
131
  renderMetadata,
131
132
  });
132
133
  const chunks = contents.filter((c) => { var _a; return (_a = c.Key) === null || _a === void 0 ? void 0 : _a.startsWith((0, constants_1.chunkKey)(renderId)); });
133
- const allChunks = chunks.length === ((_e = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.totalChunks) !== null && _e !== void 0 ? _e : Infinity);
134
+ const allChunks = chunks.length === ((_f = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.totalChunks) !== null && _f !== void 0 ? _f : Infinity);
134
135
  const renderSize = contents
135
136
  .map((c) => { var _a; return (_a = c.Size) !== null && _a !== void 0 ? _a : 0; })
136
137
  .reduce((a, b) => a + b, 0);
137
- const lambdasInvokedStats = (0, get_lambdas_invoked_stats_1.getLambdasInvokedStats)(contents, renderId, (_f = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.estimatedRenderLambdaInvokations) !== null && _f !== void 0 ? _f : null, (_g = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.startedDate) !== null && _g !== void 0 ? _g : null);
138
+ const lambdasInvokedStats = (0, get_lambdas_invoked_stats_1.getLambdasInvokedStats)({
139
+ contents,
140
+ renderId,
141
+ estimatedRenderLambdaInvokations: (_g = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.estimatedRenderLambdaInvokations) !== null && _g !== void 0 ? _g : null,
142
+ startDate: (_h = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.startedDate) !== null && _h !== void 0 ? _h : null,
143
+ checkIfAllLambdasWereInvoked: true,
144
+ });
138
145
  const retriesInfo = (0, get_retry_stats_1.getRetryStats)({
139
146
  contents,
140
147
  renderId,
@@ -146,7 +153,7 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
146
153
  lambdaInvokeStatus: lambdasInvokedStats,
147
154
  });
148
155
  const chunkCount = outputFile
149
- ? (_h = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.totalChunks) !== null && _h !== void 0 ? _h : 0
156
+ ? (_j = renderMetadata === null || renderMetadata === void 0 ? void 0 : renderMetadata.totalChunks) !== null && _j !== void 0 ? _j : 0
150
157
  : chunks.length;
151
158
  // We add a 20 second buffer for it, since AWS timeshifts can be quite a lot. Once it's 20sec over the limit, we consider it timed out
152
159
  const isBeyondTimeout = renderMetadata &&
@@ -177,7 +184,7 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
177
184
  renderId,
178
185
  renderMetadata,
179
186
  bucket: bucketName,
180
- outputFile: (_j = outputFile === null || outputFile === void 0 ? void 0 : outputFile.url) !== null && _j !== void 0 ? _j : null,
187
+ outputFile: (_k = outputFile === null || outputFile === void 0 ? void 0 : outputFile.url) !== null && _k !== void 0 ? _k : null,
181
188
  timeToFinish,
182
189
  errors: allErrors,
183
190
  fatalErrorEncountered: allErrors.some((f) => f.isFatal && !f.willRetry),
@@ -192,7 +199,7 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
192
199
  type: 'absolute-time',
193
200
  })
194
201
  : null,
195
- timeToInvokeLambdas: (_k = encodingStatus === null || encodingStatus === void 0 ? void 0 : encodingStatus.timeToInvoke) !== null && _k !== void 0 ? _k : lambdasInvokedStats.timeToInvokeLambdas,
202
+ timeToInvokeLambdas: (_l = encodingStatus === null || encodingStatus === void 0 ? void 0 : encodingStatus.timeToInvoke) !== null && _l !== void 0 ? _l : lambdasInvokedStats.timeToInvokeLambdas,
196
203
  overallProgress: (0, get_overall_progress_1.getOverallProgress)({
197
204
  cleanup: cleanup ? cleanup.filesDeleted / cleanup.minFilesToDelete : 0,
198
205
  encoding: finalEncodingStatus && renderMetadata
@@ -212,6 +219,7 @@ const getProgress = async ({ bucketName, renderId, expectedBucketOwner, region,
212
219
  outBucket: outputFile && renderMetadata
213
220
  ? (0, expected_out_name_1.getExpectedOutName)(renderMetadata, bucketName).renderBucketName
214
221
  : null,
222
+ mostExpensiveFrameRanges: null,
215
223
  };
216
224
  };
217
225
  exports.getProgress = getProgress;
@@ -1,5 +1,5 @@
1
- import { AwsRegion } from '../../pricing/aws-regions';
2
- import { RenderMetadata } from '../../shared/constants';
1
+ import type { AwsRegion } from '../../pricing/aws-regions';
2
+ import type { RenderMetadata } from '../../shared/constants';
3
3
  export declare const getRenderMetadata: ({ bucketName, renderId, region, expectedBucketOwner, }: {
4
4
  bucketName: string;
5
5
  renderId: string;
@@ -1,4 +1,4 @@
1
- import { _Object } from '@aws-sdk/client-s3';
1
+ import type { _Object } from '@aws-sdk/client-s3';
2
2
  export declare type ChunkRetry = {
3
3
  chunk: number;
4
4
  attempt: number;
@@ -1,4 +1,4 @@
1
- import { RenderMetadata } from '../../defaults';
1
+ import type { RenderMetadata } from '../../defaults';
2
2
  export declare const getTimeToFinish: ({ renderMetadata, lastModified, }: {
3
3
  renderMetadata: RenderMetadata | null;
4
4
  lastModified: number | null;
@@ -1,6 +1,6 @@
1
- import { _Object } from '@aws-sdk/client-s3';
2
- import { AwsRegion } from '../../pricing/aws-regions';
3
- import { EnhancedErrorInfo } from './write-lambda-error';
1
+ import type { _Object } from '@aws-sdk/client-s3';
2
+ import type { AwsRegion } from '../../pricing/aws-regions';
3
+ import type { EnhancedErrorInfo } from './write-lambda-error';
4
4
  export declare const inspectErrors: ({ contents, bucket, region, renderId, expectedBucketOwner, }: {
5
5
  contents: _Object[];
6
6
  bucket: string;
@@ -1,8 +1,9 @@
1
- import { _Object } from '@aws-sdk/client-s3';
2
- import { ReadStream } from 'fs';
3
- import { Readable } from 'stream';
4
- import { AwsRegion } from '../../pricing/aws-regions';
5
- import { Privacy } from '../../shared/constants';
1
+ import type { _Object } from '@aws-sdk/client-s3';
2
+ import type { ReadStream } from 'fs';
3
+ import type { Readable } from 'stream';
4
+ import type { AwsRegion } from '../../pricing/aws-regions';
5
+ import type { Privacy } from '../../shared/constants';
6
+ import type { DownloadBehavior } from '../../shared/content-disposition-header';
6
7
  export declare type LambdaLSInput = {
7
8
  bucketName: string;
8
9
  prefix: string;
@@ -12,13 +13,14 @@ export declare type LambdaLSInput = {
12
13
  };
13
14
  export declare type LambdaLsReturnType = Promise<_Object[]>;
14
15
  export declare const lambdaLs: ({ bucketName, prefix, region, expectedBucketOwner, continuationToken, }: LambdaLSInput) => LambdaLsReturnType;
15
- export declare const lambdaWriteFile: ({ bucketName, key, body, region, privacy, expectedBucketOwner, }: {
16
+ export declare const lambdaWriteFile: ({ bucketName, key, body, region, privacy, expectedBucketOwner, downloadBehavior, }: {
16
17
  bucketName: string;
17
18
  key: string;
18
19
  body: ReadStream | string;
19
20
  region: AwsRegion;
20
21
  privacy: Privacy;
21
22
  expectedBucketOwner: string | null;
23
+ downloadBehavior: DownloadBehavior | null;
22
24
  }) => Promise<void>;
23
25
  export declare const lambdaReadFile: ({ bucketName, key, region, expectedBucketOwner, }: {
24
26
  bucketName: string;
@@ -7,6 +7,7 @@ exports.lambdaReadFile = exports.lambdaWriteFile = exports.lambdaLs = void 0;
7
7
  const client_s3_1 = require("@aws-sdk/client-s3");
8
8
  const mime_types_1 = __importDefault(require("mime-types"));
9
9
  const aws_clients_1 = require("../../shared/aws-clients");
10
+ const content_disposition_header_1 = require("../../shared/content-disposition-header");
10
11
  const lambdaLs = async ({ bucketName, prefix, region, expectedBucketOwner, continuationToken, }) => {
11
12
  var _a, _b, _c;
12
13
  try {
@@ -46,14 +47,19 @@ const lambdaLs = async ({ bucketName, prefix, region, expectedBucketOwner, conti
46
47
  }
47
48
  };
48
49
  exports.lambdaLs = lambdaLs;
49
- const lambdaWriteFile = async ({ bucketName, key, body, region, privacy, expectedBucketOwner, }) => {
50
+ const lambdaWriteFile = async ({ bucketName, key, body, region, privacy, expectedBucketOwner, downloadBehavior, }) => {
50
51
  await (0, aws_clients_1.getS3Client)(region).send(new client_s3_1.PutObjectCommand({
51
52
  Bucket: bucketName,
52
53
  Key: key,
53
54
  Body: body,
54
- ACL: privacy === 'private' ? 'private' : 'public-read',
55
+ ACL: privacy === 'no-acl'
56
+ ? undefined
57
+ : privacy === 'private'
58
+ ? 'private'
59
+ : 'public-read',
55
60
  ExpectedBucketOwner: expectedBucketOwner !== null && expectedBucketOwner !== void 0 ? expectedBucketOwner : undefined,
56
61
  ContentType: mime_types_1.default.lookup(key) || 'application/octet-stream',
62
+ ContentDisposition: (0, content_disposition_header_1.getContentDispositionHeader)(downloadBehavior),
57
63
  }));
58
64
  };
59
65
  exports.lambdaWriteFile = lambdaWriteFile;
@@ -1,2 +1,2 @@
1
1
  export declare const min: (arr: number[]) => number;
2
- export declare const max: (arr: number[]) => number;
2
+ export declare const max: (arr: number[]) => number | null;
@@ -19,7 +19,7 @@ const min = (arr) => {
19
19
  exports.min = min;
20
20
  const max = (arr) => {
21
21
  if (arr.length === 0) {
22
- throw new Error('Array of 0 length');
22
+ return null;
23
23
  }
24
24
  let biggest = arr[0];
25
25
  for (let i = 0; i < arr.length; i++) {
@@ -1,2 +1,2 @@
1
- import { LambdaRoutines } from '../../defaults';
2
- export declare const printCloudwatchHelper: (type: LambdaRoutines, data: Record<string, string>) => void;
1
+ import type { LambdaRoutines } from '../../defaults';
2
+ export declare const printCloudwatchHelper: (type: LambdaRoutines, data: Record<string, string | boolean>) => void;
@@ -1,8 +1,8 @@
1
- import { AwsRegion } from '../../pricing/aws-regions';
1
+ import type { AwsRegion } from '../../pricing/aws-regions';
2
2
  export declare type LambdaReadFileProgress = (progress: {
3
3
  totalSize: number;
4
4
  downloaded: number;
5
- progress: number;
5
+ percent: number;
6
6
  }) => unknown;
7
7
  export declare const lambdaDownloadFileWithProgress: ({ bucketName, key, region, expectedBucketOwner, outputPath, onProgress, }: {
8
8
  bucketName: string;
@@ -13,4 +13,5 @@ export declare const lambdaDownloadFileWithProgress: ({ bucketName, key, region,
13
13
  onProgress: LambdaReadFileProgress;
14
14
  }) => Promise<{
15
15
  sizeInBytes: number;
16
+ to: string;
16
17
  }>;
@@ -13,6 +13,18 @@ const lambdaDownloadFileWithProgress = async ({ bucketName, key, region, expecte
13
13
  Key: key,
14
14
  });
15
15
  const presigned = await (0, s3_request_presigner_1.getSignedUrl)(client, command);
16
- return renderer_1.RenderInternals.downloadFile(presigned, outputPath, onProgress);
16
+ const { to, sizeInBytes } = await renderer_1.RenderInternals.downloadFile({
17
+ url: presigned,
18
+ onProgress: ({ downloaded, percent, totalSize }) => {
19
+ // On Lambda, it should always be a number
20
+ onProgress({
21
+ downloaded,
22
+ percent: percent,
23
+ totalSize: totalSize,
24
+ });
25
+ },
26
+ to: () => outputPath,
27
+ });
28
+ return { sizeInBytes, to };
17
29
  };
18
30
  exports.lambdaDownloadFileWithProgress = lambdaDownloadFileWithProgress;
@@ -1,6 +1,6 @@
1
- import { ChromiumOptions, openBrowser } from '@remotion/renderer';
2
- import { FfmpegExecutable, TCompMetadata } from 'remotion';
3
- import { Await } from '../../shared/await';
1
+ import type { ChromiumOptions, DownloadMap, FfmpegExecutable, openBrowser } from '@remotion/renderer';
2
+ import type { TCompMetadata } from 'remotion';
3
+ import type { Await } from '../../shared/await';
4
4
  declare type ValidateCompositionOptions = {
5
5
  serveUrl: string;
6
6
  composition: string;
@@ -12,6 +12,7 @@ declare type ValidateCompositionOptions = {
12
12
  timeoutInMilliseconds: number;
13
13
  chromiumOptions: ChromiumOptions;
14
14
  port: number | null;
15
+ downloadMap: DownloadMap;
15
16
  };
16
- export declare const validateComposition: ({ serveUrl, composition, browserInstance, inputProps, envVariables, timeoutInMilliseconds, ffmpegExecutable, ffprobeExecutable, chromiumOptions, port, }: ValidateCompositionOptions) => Promise<TCompMetadata>;
17
+ export declare const validateComposition: ({ serveUrl, composition, browserInstance, inputProps, envVariables, timeoutInMilliseconds, ffmpegExecutable, ffprobeExecutable, chromiumOptions, port, downloadMap, }: ValidateCompositionOptions) => Promise<TCompMetadata>;
17
18
  export {};
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateComposition = void 0;
4
4
  const renderer_1 = require("@remotion/renderer");
5
- const validateComposition = async ({ serveUrl, composition, browserInstance, inputProps, envVariables, timeoutInMilliseconds, ffmpegExecutable, ffprobeExecutable, chromiumOptions, port, }) => {
5
+ const validateComposition = async ({ serveUrl, composition, browserInstance, inputProps, envVariables, timeoutInMilliseconds, ffmpegExecutable, ffprobeExecutable, chromiumOptions, port, downloadMap, }) => {
6
6
  const compositions = await (0, renderer_1.getCompositions)(serveUrl, {
7
7
  puppeteerInstance: browserInstance,
8
8
  inputProps: inputProps,
@@ -12,6 +12,7 @@ const validateComposition = async ({ serveUrl, composition, browserInstance, inp
12
12
  timeoutInMilliseconds,
13
13
  chromiumOptions,
14
14
  port,
15
+ downloadMap,
15
16
  });
16
17
  const found = compositions.find((c) => c.id === composition);
17
18
  if (!found) {
@@ -1,4 +1,4 @@
1
- import { FileNameAndSize } from './get-files-in-folder';
1
+ import type { FileNameAndSize } from './get-files-in-folder';
2
2
  export declare type LambdaErrorInfo = {
3
3
  type: 'renderer' | 'browser' | 'stitcher';
4
4
  message: string;
@@ -33,6 +33,7 @@ const writeLambdaError = async ({ bucketName, renderId, errorInfo, expectedBucke
33
33
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
34
34
  privacy: 'private',
35
35
  expectedBucketOwner,
36
+ downloadBehavior: null,
36
37
  });
37
38
  };
38
39
  exports.writeLambdaError = writeLambdaError;
@@ -1,5 +1,5 @@
1
- import { AwsRegion } from '../../pricing/aws-regions';
2
- import { PostRenderData } from '../../shared/constants';
1
+ import type { AwsRegion } from '../../pricing/aws-regions';
2
+ import type { PostRenderData } from '../../shared/constants';
3
3
  export declare const writePostRenderData: ({ bucketName, renderId, postRenderData, expectedBucketOwner, region, }: {
4
4
  bucketName: string;
5
5
  renderId: string;
@@ -11,6 +11,7 @@ const writePostRenderData = async ({ bucketName, renderId, postRenderData, expec
11
11
  body: JSON.stringify(postRenderData),
12
12
  expectedBucketOwner,
13
13
  region,
14
+ downloadBehavior: null,
14
15
  });
15
16
  };
16
17
  exports.writePostRenderData = writePostRenderData;
@@ -1,5 +1,6 @@
1
- import { LambdaPayload, LambdaRoutines } from '../shared/constants';
2
- import { LambdaReturnValues } from '../shared/return-values';
1
+ import type { LambdaPayload } from '../shared/constants';
2
+ import { LambdaRoutines } from '../shared/constants';
3
+ import type { LambdaReturnValues } from '../shared/return-values';
3
4
  export declare const handler: <T extends LambdaRoutines>(params: LambdaPayload, context: {
4
5
  invokedFunctionArn: string;
5
6
  getRemainingTimeInMillis: () => number;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handler = void 0;
4
- const remotion_1 = require("remotion");
4
+ const renderer_1 = require("@remotion/renderer");
5
5
  const constants_1 = require("../shared/constants");
6
6
  const clean_tmpdir_1 = require("./helpers/clean-tmpdir");
7
7
  const is_warm_1 = require("./helpers/is-warm");
@@ -9,7 +9,7 @@ const print_cloudwatch_helper_1 = require("./helpers/print-cloudwatch-helper");
9
9
  const info_1 = require("./info");
10
10
  const launch_1 = require("./launch");
11
11
  const progress_1 = require("./progress");
12
- const renderer_1 = require("./renderer");
12
+ const renderer_2 = require("./renderer");
13
13
  const start_1 = require("./start");
14
14
  const still_1 = require("./still");
15
15
  const handler = async (params, context) => {
@@ -25,6 +25,7 @@ const handler = async (params, context) => {
25
25
  if (params.type === constants_1.LambdaRoutines.still) {
26
26
  (0, print_cloudwatch_helper_1.printCloudwatchHelper)(constants_1.LambdaRoutines.still, {
27
27
  inputProps: JSON.stringify(params.inputProps),
28
+ isWarm,
28
29
  });
29
30
  return (0, still_1.stillHandler)(params, {
30
31
  expectedBucketOwner: currentUserId,
@@ -33,6 +34,7 @@ const handler = async (params, context) => {
33
34
  if (params.type === constants_1.LambdaRoutines.start) {
34
35
  (0, print_cloudwatch_helper_1.printCloudwatchHelper)(constants_1.LambdaRoutines.start, {
35
36
  inputProps: JSON.stringify(params.inputProps),
37
+ isWarm,
36
38
  });
37
39
  return (0, start_1.startHandler)(params);
38
40
  }
@@ -40,12 +42,14 @@ const handler = async (params, context) => {
40
42
  (0, print_cloudwatch_helper_1.printCloudwatchHelper)(constants_1.LambdaRoutines.launch, {
41
43
  renderId: params.renderId,
42
44
  inputProps: JSON.stringify(params.inputProps),
45
+ isWarm,
43
46
  });
44
47
  return (0, launch_1.launchHandler)(params, { expectedBucketOwner: currentUserId });
45
48
  }
46
49
  if (params.type === constants_1.LambdaRoutines.status) {
47
50
  (0, print_cloudwatch_helper_1.printCloudwatchHelper)(constants_1.LambdaRoutines.status, {
48
51
  renderId: params.renderId,
52
+ isWarm,
49
53
  });
50
54
  return (0, progress_1.progressHandler)(params, {
51
55
  expectedBucketOwner: currentUserId,
@@ -56,16 +60,19 @@ const handler = async (params, context) => {
56
60
  (0, print_cloudwatch_helper_1.printCloudwatchHelper)(constants_1.LambdaRoutines.renderer, {
57
61
  renderId: params.renderId,
58
62
  chunk: String(params.chunk),
59
- dumpLogs: String(remotion_1.Internals.Logging.isEqualOrBelowLogLevel(params.logLevel, 'verbose')),
63
+ dumpLogs: String(renderer_1.RenderInternals.isEqualOrBelowLogLevel(params.logLevel, 'verbose')),
60
64
  inputProps: JSON.stringify(params.inputProps),
65
+ isWarm,
61
66
  });
62
- return (0, renderer_1.rendererHandler)(params, {
67
+ return (0, renderer_2.rendererHandler)(params, {
63
68
  expectedBucketOwner: currentUserId,
64
69
  isWarm,
65
70
  });
66
71
  }
67
72
  if (params.type === constants_1.LambdaRoutines.info) {
68
- (0, print_cloudwatch_helper_1.printCloudwatchHelper)(constants_1.LambdaRoutines.info, {});
73
+ (0, print_cloudwatch_helper_1.printCloudwatchHelper)(constants_1.LambdaRoutines.info, {
74
+ isWarm,
75
+ });
69
76
  return (0, info_1.infoHandler)(params);
70
77
  }
71
78
  throw new Error(constants_1.COMMAND_NOT_FOUND);
@@ -1,4 +1,4 @@
1
- import { LambdaPayload, LambdaVersions } from '../shared/constants';
1
+ import type { LambdaPayload, LambdaVersions } from '../shared/constants';
2
2
  export declare const infoHandler: (lambdaParams: LambdaPayload) => Promise<{
3
3
  version: LambdaVersions;
4
4
  }>;
@@ -1,4 +1,4 @@
1
- import { LambdaPayload } from '../shared/constants';
1
+ import type { LambdaPayload } from '../shared/constants';
2
2
  declare type Options = {
3
3
  expectedBucketOwner: string;
4
4
  };
@@ -46,7 +46,7 @@ const innerLaunchHandler = async (params, options) => {
46
46
  }
47
47
  const startedDate = Date.now();
48
48
  const [browserInstance, optimization] = await Promise.all([
49
- (0, get_browser_instance_1.getBrowserInstance)(remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose'), params.chromiumOptions),
49
+ (0, get_browser_instance_1.getBrowserInstance)(renderer_1.RenderInternals.isEqualOrBelowLogLevel(params.logLevel, 'verbose'), params.chromiumOptions),
50
50
  (0, s3_optimization_file_1.getOptimization)({
51
51
  bucketName: params.bucketName,
52
52
  siteId: (0, make_s3_url_1.getServeUrlHash)(params.serveUrl),
@@ -55,6 +55,7 @@ const innerLaunchHandler = async (params, options) => {
55
55
  expectedBucketOwner: options.expectedBucketOwner,
56
56
  }),
57
57
  ]);
58
+ const downloadMap = renderer_1.RenderInternals.makeDownloadMap();
58
59
  const comp = await (0, validate_composition_1.validateComposition)({
59
60
  serveUrl: params.serveUrl,
60
61
  composition: params.composition,
@@ -66,16 +67,18 @@ const innerLaunchHandler = async (params, options) => {
66
67
  timeoutInMilliseconds: params.timeoutInMilliseconds,
67
68
  chromiumOptions: params.chromiumOptions,
68
69
  port: null,
70
+ downloadMap,
69
71
  });
70
- remotion_1.Internals.validateDurationInFrames(comp.durationInFrames, 'passed to <Component />');
71
- remotion_1.Internals.validateFps(comp.fps, 'passed to <Component />');
72
- remotion_1.Internals.validateDimension(comp.height, 'height', 'passed to <Component />');
73
- remotion_1.Internals.validateDimension(comp.width, 'width', 'passed to <Component />');
72
+ remotion_1.Internals.validateDurationInFrames(comp.durationInFrames, 'passed to a Lambda render');
73
+ remotion_1.Internals.validateFps(comp.fps, 'passed to a Lambda render', false);
74
+ remotion_1.Internals.validateDimension(comp.height, 'height', 'passed to a Lambda render');
75
+ remotion_1.Internals.validateDimension(comp.width, 'width', 'passed to a Lambda render');
76
+ renderer_1.RenderInternals.validateConcurrency(params.concurrencyPerLambda, 'concurrencyPerLambda');
74
77
  const realFrameRange = renderer_1.RenderInternals.getRealFrameRange(comp.durationInFrames, params.frameRange);
75
- const frameCount = renderer_1.RenderInternals.getDurationFromFrameRange(realFrameRange, 0);
76
- const framesPerLambda = (_a = params.framesPerLambda) !== null && _a !== void 0 ? _a : (0, best_frames_per_lambda_param_1.bestFramesPerLambdaParam)(frameCount);
78
+ const frameCount = renderer_1.RenderInternals.getFramesToRender(realFrameRange, params.everyNthFrame);
79
+ const framesPerLambda = (_a = params.framesPerLambda) !== null && _a !== void 0 ? _a : (0, best_frames_per_lambda_param_1.bestFramesPerLambdaParam)(frameCount.length);
77
80
  (0, validate_frames_per_lambda_1.validateFramesPerLambda)(framesPerLambda);
78
- const chunkCount = Math.ceil(frameCount / framesPerLambda);
81
+ const chunkCount = Math.ceil(frameCount.length / framesPerLambda);
79
82
  if (chunkCount > constants_1.MAX_FUNCTIONS_PER_RENDER) {
80
83
  throw new Error(`Too many functions: This render would cause ${chunkCount} functions to spawn. We limit this amount to ${constants_1.MAX_FUNCTIONS_PER_RENDER} functions as more would result in diminishing returns. Values set: frameCount = ${frameCount}, framesPerLambda=${framesPerLambda}. See ${docs_url_1.DOCS_URL}/docs/lambda/concurrency for how this parameter is calculated.`);
81
84
  }
@@ -83,12 +86,12 @@ const innerLaunchHandler = async (params, options) => {
83
86
  (0, validate_privacy_1.validatePrivacy)(params.privacy);
84
87
  renderer_1.RenderInternals.validatePuppeteerTimeout(params.timeoutInMilliseconds);
85
88
  const { chunks, didUseOptimization } = (0, plan_frame_ranges_1.planFrameRanges)({
86
- chunkCount,
87
89
  framesPerLambda,
88
90
  optimization,
89
91
  // TODO: Re-enable chunk optimization later
90
92
  shouldUseOptimization: false,
91
93
  frameRange: realFrameRange,
94
+ everyNthFrame: params.everyNthFrame,
92
95
  });
93
96
  const sortedChunks = chunks.slice().sort((a, b) => a[0] - b[0]);
94
97
  const invokers = Math.round(Math.sqrt(chunks.length));
@@ -110,18 +113,20 @@ const innerLaunchHandler = async (params, options) => {
110
113
  inputProps: params.inputProps,
111
114
  renderId: params.renderId,
112
115
  imageFormat: params.imageFormat,
113
- codec: params.codec,
116
+ codec: params.codec === 'h264' ? 'h264-mkv' : params.codec,
114
117
  crf: params.crf,
115
118
  envVariables: params.envVariables,
116
119
  pixelFormat: params.pixelFormat,
117
120
  proResProfile: params.proResProfile,
118
121
  quality: params.quality,
119
122
  privacy: params.privacy,
120
- logLevel: (_a = params.logLevel) !== null && _a !== void 0 ? _a : remotion_1.Internals.Logging.DEFAULT_LOG_LEVEL,
123
+ logLevel: (_a = params.logLevel) !== null && _a !== void 0 ? _a : 'info',
121
124
  attempt: 1,
122
125
  timeoutInMilliseconds: params.timeoutInMilliseconds,
123
126
  chromiumOptions: params.chromiumOptions,
124
127
  scale: params.scale,
128
+ everyNthFrame: params.everyNthFrame,
129
+ concurrencyPerLambda: params.concurrencyPerLambda,
125
130
  };
126
131
  return payload;
127
132
  });
@@ -158,6 +163,7 @@ const innerLaunchHandler = async (params, options) => {
158
163
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
159
164
  privacy: 'private',
160
165
  expectedBucketOwner: options.expectedBucketOwner,
166
+ downloadBehavior: null,
161
167
  });
162
168
  await Promise.all(lambdaPayloads.map(async (payload, index) => {
163
169
  const callingLambdaTimer = (0, timer_1.timer)('Calling chunk ' + index);
@@ -173,7 +179,7 @@ const innerLaunchHandler = async (params, options) => {
173
179
  let lastProgressUploaded = 0;
174
180
  let encodingStop = null;
175
181
  const onProgress = (framesEncoded, start) => {
176
- const relativeProgress = framesEncoded / frameCount;
182
+ const relativeProgress = framesEncoded / frameCount.length;
177
183
  const deltaSinceLastProgressUploaded = relativeProgress - lastProgressUploaded;
178
184
  if (relativeProgress === 1) {
179
185
  encodingStop = Date.now();
@@ -184,7 +190,7 @@ const innerLaunchHandler = async (params, options) => {
184
190
  lastProgressUploaded = relativeProgress;
185
191
  const encodingProgress = {
186
192
  framesEncoded,
187
- totalFrames: frameCount,
193
+ totalFrames: frameCount.length,
188
194
  doneIn: encodingStop ? encodingStop - start : null,
189
195
  timeToInvoke: null,
190
196
  };
@@ -195,6 +201,7 @@ const innerLaunchHandler = async (params, options) => {
195
201
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
196
202
  privacy: 'private',
197
203
  expectedBucketOwner: options.expectedBucketOwner,
204
+ downloadBehavior: null,
198
205
  }).catch((err) => {
199
206
  (0, write_lambda_error_1.writeLambdaError)({
200
207
  bucketName: params.bucketName,
@@ -216,16 +223,18 @@ const innerLaunchHandler = async (params, options) => {
216
223
  });
217
224
  });
218
225
  };
226
+ const fps = comp.fps / params.everyNthFrame;
219
227
  const { outfile, cleanupChunksProm, encodingStart } = await (0, concat_videos_1.concatVideosS3)({
220
228
  bucket: params.bucketName,
221
229
  expectedFiles: chunkCount,
222
230
  onProgress,
223
- numberOfFrames: frameCount,
231
+ numberOfFrames: frameCount.length,
224
232
  renderId: params.renderId,
225
233
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
226
234
  codec: params.codec,
227
235
  expectedBucketOwner: options.expectedBucketOwner,
228
- fps: comp.fps,
236
+ fps,
237
+ numberOfGifLoops: params.numberOfGifLoops,
229
238
  });
230
239
  if (!encodingStop) {
231
240
  encodingStop = Date.now();
@@ -239,6 +248,7 @@ const innerLaunchHandler = async (params, options) => {
239
248
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
240
249
  privacy: params.privacy,
241
250
  expectedBucketOwner: options.expectedBucketOwner,
251
+ downloadBehavior: params.downloadBehavior,
242
252
  });
243
253
  let chunkProm = Promise.resolve();
244
254
  // TODO: Enable in a later release
@@ -263,6 +273,7 @@ const innerLaunchHandler = async (params, options) => {
263
273
  framesPerLambda,
264
274
  lambdaVersion: constants_1.CURRENT_VERSION,
265
275
  frameRange: realFrameRange,
276
+ everyNthFrame: params.everyNthFrame,
266
277
  },
267
278
  expectedBucketOwner: options.expectedBucketOwner,
268
279
  compositionId: params.composition,
@@ -281,10 +292,16 @@ const innerLaunchHandler = async (params, options) => {
281
292
  }),
282
293
  ]);
283
294
  const finalEncodingProgress = {
284
- framesEncoded: frameCount,
285
- totalFrames: frameCount,
295
+ framesEncoded: frameCount.length,
296
+ totalFrames: frameCount.length,
286
297
  doneIn: encodingStop ? encodingStop - encodingStart : null,
287
- timeToInvoke: (0, get_lambdas_invoked_stats_1.getLambdasInvokedStats)(contents, params.renderId, renderMetadata.estimatedRenderLambdaInvokations, renderMetadata.startedDate).timeToInvokeLambdas,
298
+ timeToInvoke: (0, get_lambdas_invoked_stats_1.getLambdasInvokedStats)({
299
+ contents,
300
+ renderId: params.renderId,
301
+ estimatedRenderLambdaInvokations: renderMetadata.estimatedRenderLambdaInvokations,
302
+ checkIfAllLambdasWereInvoked: false,
303
+ startDate: renderMetadata.startedDate,
304
+ }).timeToInvokeLambdas,
288
305
  };
289
306
  const finalEncodingProgressProm = (0, io_1.lambdaWriteFile)({
290
307
  bucketName: params.bucketName,
@@ -293,6 +310,7 @@ const innerLaunchHandler = async (params, options) => {
293
310
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
294
311
  privacy: 'private',
295
312
  expectedBucketOwner: options.expectedBucketOwner,
313
+ downloadBehavior: null,
296
314
  });
297
315
  const errorExplanationsProm = (0, inspect_errors_1.inspectErrors)({
298
316
  contents,
@@ -311,7 +329,7 @@ const innerLaunchHandler = async (params, options) => {
311
329
  contents,
312
330
  jobs,
313
331
  });
314
- const postRenderData = await (0, create_post_render_data_1.createPostRenderData)({
332
+ const postRenderData = (0, create_post_render_data_1.createPostRenderData)({
315
333
  expectedBucketOwner: options.expectedBucketOwner,
316
334
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
317
335
  renderId: params.renderId,
@@ -1,4 +1,4 @@
1
- import { LambdaPayload, RenderProgress } from '../shared/constants';
1
+ import type { LambdaPayload, RenderProgress } from '../shared/constants';
2
2
  declare type Options = {
3
3
  expectedBucketOwner: string;
4
4
  timeoutInMiliseconds: number;
@@ -1,4 +1,4 @@
1
- import { LambdaPayload } from '../shared/constants';
1
+ import type { LambdaPayload } from '../shared/constants';
2
2
  declare type Options = {
3
3
  expectedBucketOwner: string;
4
4
  isWarm: boolean;