@remotion/lambda 4.0.0-preload.17 → 4.0.0-reorg.10

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 (158) hide show
  1. package/dist/admin/bundle-lambda.js +1 -0
  2. package/dist/admin/make-layer-public.js +3 -3
  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 +4 -3
  7. package/dist/api/create-function.js +3 -2
  8. package/dist/api/delete-function.d.ts +1 -1
  9. package/dist/api/delete-site.d.ts +1 -1
  10. package/dist/api/deploy-function.d.ts +3 -2
  11. package/dist/api/deploy-function.js +3 -0
  12. package/dist/api/deploy-site.d.ts +3 -3
  13. package/dist/api/deploy-site.js +2 -3
  14. package/dist/api/download-media.d.ts +2 -2
  15. package/dist/api/enable-s3-website.d.ts +1 -1
  16. package/dist/api/estimate-price.d.ts +2 -2
  17. package/dist/api/get-aws-client.d.ts +2 -2
  18. package/dist/api/get-aws-client.js +5 -1
  19. package/dist/api/get-buckets.d.ts +1 -1
  20. package/dist/api/get-function-info.d.ts +2 -2
  21. package/dist/api/get-functions.d.ts +2 -2
  22. package/dist/api/get-or-create-bucket.d.ts +1 -1
  23. package/dist/api/get-regions.d.ts +1 -1
  24. package/dist/api/get-render-progress.d.ts +2 -2
  25. package/dist/api/get-sites.d.ts +2 -2
  26. package/dist/api/iam-validation/role-permissions.d.ts +2 -1
  27. package/dist/api/iam-validation/simulate-rule.d.ts +1 -1
  28. package/dist/api/iam-validation/simulate.d.ts +2 -2
  29. package/dist/api/mock-functions.d.ts +3 -3
  30. package/dist/api/presign-url.d.ts +3 -2
  31. package/dist/api/render-media-on-lambda.d.ts +13 -8
  32. package/dist/api/render-media-on-lambda.js +12 -5
  33. package/dist/api/render-still-on-lambda.d.ts +7 -6
  34. package/dist/api/render-still-on-lambda.js +4 -4
  35. package/dist/api/upload-dir.d.ts +2 -2
  36. package/dist/api/upload-dir.js +2 -1
  37. package/dist/cli/args.d.ts +5 -3
  38. package/dist/cli/commands/functions/deploy.js +6 -2
  39. package/dist/cli/commands/render/progress.d.ts +4 -4
  40. package/dist/cli/commands/render/progress.js +11 -3
  41. package/dist/cli/commands/render/render.js +13 -3
  42. package/dist/cli/commands/sites/create.js +2 -3
  43. package/dist/cli/commands/sites/ls.js +1 -2
  44. package/dist/cli/commands/sites/rm.js +2 -3
  45. package/dist/cli/commands/sites/rmall.js +2 -3
  46. package/dist/cli/commands/still.js +1 -2
  47. package/dist/cli/get-aws-region.d.ts +1 -1
  48. package/dist/cli/helpers/get-cloudwatch-stream-url.d.ts +2 -2
  49. package/dist/cli/helpers/progress-bar.js +1 -2
  50. package/dist/cli/index.js +11 -1
  51. package/dist/defaults.js +5 -1
  52. package/dist/functions/chunk-optimization/can-use-optimization.d.ts +1 -1
  53. package/dist/functions/chunk-optimization/collect-data.d.ts +1 -1
  54. package/dist/functions/chunk-optimization/get-frame-ranges-from-profile.d.ts +1 -1
  55. package/dist/functions/chunk-optimization/get-profile-duration.d.ts +1 -1
  56. package/dist/functions/chunk-optimization/is-valid-profile.d.ts +1 -1
  57. package/dist/functions/chunk-optimization/is-valid-profile.js +2 -2
  58. package/dist/functions/chunk-optimization/optimize-invocation-order.d.ts +1 -1
  59. package/dist/functions/chunk-optimization/optimize-profile.d.ts +1 -1
  60. package/dist/functions/chunk-optimization/plan-frame-ranges.d.ts +7 -4
  61. package/dist/functions/chunk-optimization/plan-frame-ranges.js +7 -6
  62. package/dist/functions/chunk-optimization/s3-optimization-file.d.ts +2 -2
  63. package/dist/functions/chunk-optimization/s3-optimization-file.js +1 -0
  64. package/dist/functions/chunk-optimization/simulate-frame-ranges.d.ts +1 -1
  65. package/dist/functions/chunk-optimization/sort-by-duration.d.ts +1 -1
  66. package/dist/functions/chunk-optimization/types.d.ts +2 -1
  67. package/dist/functions/helpers/calculate-chunk-times.d.ts +1 -1
  68. package/dist/functions/helpers/calculate-price-from-bucket.d.ts +4 -4
  69. package/dist/functions/helpers/concat-videos.d.ts +6 -4
  70. package/dist/functions/helpers/concat-videos.js +8 -2
  71. package/dist/functions/helpers/create-post-render-data.d.ts +6 -6
  72. package/dist/functions/helpers/create-post-render-data.js +5 -5
  73. package/dist/functions/helpers/delete-chunks.d.ts +3 -3
  74. package/dist/functions/helpers/expected-out-name.d.ts +1 -1
  75. package/dist/functions/helpers/find-output-file-in-bucket.d.ts +2 -2
  76. package/dist/functions/helpers/format-costs-info.d.ts +1 -1
  77. package/dist/functions/helpers/get-browser-instance.d.ts +2 -1
  78. package/dist/functions/helpers/get-cleanup-progress.d.ts +2 -2
  79. package/dist/functions/helpers/get-current-architecture.d.ts +1 -1
  80. package/dist/functions/helpers/get-encoding-metadata.d.ts +2 -2
  81. package/dist/functions/helpers/get-files-to-delete.js +2 -2
  82. package/dist/functions/helpers/get-final-encoding-status.d.ts +2 -2
  83. package/dist/functions/helpers/get-lambdas-invoked-stats.d.ts +1 -1
  84. package/dist/functions/helpers/get-output-url-from-metadata.d.ts +1 -1
  85. package/dist/functions/helpers/get-post-render-data.d.ts +2 -2
  86. package/dist/functions/helpers/get-progress.d.ts +2 -2
  87. package/dist/functions/helpers/get-progress.js +12 -10
  88. package/dist/functions/helpers/get-render-metadata.d.ts +2 -2
  89. package/dist/functions/helpers/get-retry-stats.d.ts +1 -1
  90. package/dist/functions/helpers/get-time-to-finish.d.ts +1 -1
  91. package/dist/functions/helpers/inspect-errors.d.ts +3 -3
  92. package/dist/functions/helpers/io.d.ts +8 -6
  93. package/dist/functions/helpers/io.js +3 -1
  94. package/dist/functions/helpers/print-cloudwatch-helper.d.ts +1 -1
  95. package/dist/functions/helpers/read-with-progress.d.ts +3 -2
  96. package/dist/functions/helpers/read-with-progress.js +13 -1
  97. package/dist/functions/helpers/validate-composition.d.ts +5 -4
  98. package/dist/functions/helpers/validate-composition.js +2 -1
  99. package/dist/functions/helpers/write-lambda-error.d.ts +1 -1
  100. package/dist/functions/helpers/write-lambda-error.js +1 -0
  101. package/dist/functions/helpers/write-post-render-data.d.ts +2 -2
  102. package/dist/functions/helpers/write-post-render-data.js +1 -0
  103. package/dist/functions/index.d.ts +3 -2
  104. package/dist/functions/index.js +4 -4
  105. package/dist/functions/info.d.ts +1 -1
  106. package/dist/functions/launch.d.ts +1 -1
  107. package/dist/functions/launch.js +28 -16
  108. package/dist/functions/progress.d.ts +1 -1
  109. package/dist/functions/renderer.d.ts +1 -1
  110. package/dist/functions/renderer.js +16 -11
  111. package/dist/functions/start.d.ts +1 -1
  112. package/dist/functions/start.js +5 -2
  113. package/dist/functions/still.d.ts +1 -1
  114. package/dist/functions/still.js +10 -6
  115. package/dist/index.d.ts +33 -18
  116. package/dist/pricing/price-per-1-s.d.ts +1 -1
  117. package/dist/shared/aws-clients.d.ts +1 -1
  118. package/dist/shared/bundle-site.d.ts +1 -6
  119. package/dist/shared/call-lambda.d.ts +3 -3
  120. package/dist/shared/check-credentials.js +2 -2
  121. package/dist/shared/constants.d.ts +27 -11
  122. package/dist/shared/constants.js +1 -1
  123. package/dist/shared/content-disposition-header.d.ts +7 -0
  124. package/dist/shared/content-disposition-header.js +19 -0
  125. package/dist/shared/convert-to-serve-url.d.ts +1 -1
  126. package/dist/shared/get-account-id.d.ts +1 -1
  127. package/dist/shared/get-function-version.d.ts +2 -2
  128. package/dist/shared/get-most-expensive-chunks.d.ts +8 -0
  129. package/dist/shared/get-most-expensive-chunks.js +25 -0
  130. package/dist/shared/hosted-layers.d.ts +2 -2
  131. package/dist/shared/hosted-layers.js +80 -80
  132. package/dist/shared/make-s3-key.d.ts +1 -0
  133. package/dist/shared/make-s3-key.js +11 -0
  134. package/dist/shared/make-s3-url.d.ts +1 -1
  135. package/dist/shared/random-hash.d.ts +2 -2
  136. package/dist/shared/random-hash.js +1 -1
  137. package/dist/shared/return-values.d.ts +7 -7
  138. package/dist/shared/return-values.js +0 -1
  139. package/dist/shared/stream-to-string.d.ts +2 -1
  140. package/dist/shared/truthy.d.ts +3 -0
  141. package/dist/shared/truthy.js +7 -0
  142. package/dist/shared/validate-aws-region.d.ts +1 -1
  143. package/dist/shared/validate-custom-role-arn.d.ts +1 -0
  144. package/dist/shared/validate-custom-role-arn.js +11 -0
  145. package/dist/shared/validate-download-behavior.d.ts +1 -0
  146. package/dist/shared/validate-download-behavior.js +21 -0
  147. package/dist/shared/validate-lambda-codec.d.ts +4 -0
  148. package/dist/shared/validate-lambda-codec.js +29 -0
  149. package/dist/shared/validate-outname.d.ts +1 -1
  150. package/dist/shared/validate-presign-expiration.d.ts +0 -2
  151. package/dist/shared/validate-presign-expiration.js +7 -7
  152. package/dist/shared/validate-privacy.d.ts +1 -1
  153. package/package.json +10 -12
  154. package/remotionlambda.zip +0 -0
  155. package/dist/cli/helpers/format-bytes.d.ts +0 -6
  156. package/dist/cli/helpers/format-bytes.js +0 -103
  157. package/dist/shared/chunk.d.ts +0 -1
  158. package/dist/shared/chunk.js +0 -11
@@ -1,5 +1,5 @@
1
- import { CleanupInfo, EncodingProgress, RenderProgress } from '../../../defaults';
2
- import { ChunkRetry } from '../../../functions/helpers/get-retry-stats';
1
+ import type { CleanupInfo, EncodingProgress, RenderProgress } from '../../../defaults';
2
+ import type { ChunkRetry } from '../../../functions/helpers/get-retry-stats';
3
3
  declare type LambdaInvokeProgress = {
4
4
  totalLambdas: number | null;
5
5
  lambdasInvoked: number;
@@ -10,7 +10,7 @@ declare type ChunkProgress = {
10
10
  chunksInvoked: number;
11
11
  doneIn: number | null;
12
12
  };
13
- export declare type MultiRenderProgress = {
13
+ declare type MultiRenderProgress = {
14
14
  lambdaInvokeProgress: LambdaInvokeProgress;
15
15
  chunkProgress: ChunkProgress;
16
16
  encodingProgress: EncodingProgress;
@@ -18,7 +18,7 @@ export declare type MultiRenderProgress = {
18
18
  };
19
19
  export declare const makeMultiProgressFromStatus: (status: RenderProgress) => MultiRenderProgress;
20
20
  declare type DownloadedInfo = {
21
- totalSize: number;
21
+ totalSize: number | null;
22
22
  downloaded: number;
23
23
  doneIn: number | null;
24
24
  };
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeProgressString = exports.makeMultiProgressFromStatus = void 0;
4
4
  const cli_1 = require("@remotion/cli");
5
5
  const remotion_1 = require("remotion");
6
- const format_bytes_1 = require("../../helpers/format-bytes");
7
6
  const makeInvokeProgress = (invokeProgress, totalSteps, retriesInfo) => {
8
7
  const { lambdasInvoked, totalLambdas, doneIn } = invokeProgress;
9
8
  const progress = doneIn
@@ -78,10 +77,19 @@ const makeDownloadProgress = (downloadInfo, totalSteps) => {
78
77
  return [
79
78
  '💾',
80
79
  `(5/${totalSteps})`,
81
- cli_1.CliInternals.makeProgressBar(downloadInfo.downloaded / downloadInfo.totalSize),
80
+ downloadInfo.totalSize === null
81
+ ? cli_1.CliInternals.getFileSizeDownloadBar(downloadInfo.downloaded)
82
+ : cli_1.CliInternals.makeProgressBar(downloadInfo.downloaded / downloadInfo.totalSize),
82
83
  `${downloadInfo.doneIn === null ? 'Downloading' : 'Downloaded'} video`,
83
84
  downloadInfo.doneIn === null
84
- ? `${(0, format_bytes_1.formatBytes)(downloadInfo.downloaded)}/${(0, format_bytes_1.formatBytes)(downloadInfo.totalSize)}`
85
+ ? [
86
+ `${cli_1.CliInternals.formatBytes(downloadInfo.downloaded)}`,
87
+ downloadInfo.totalSize === null
88
+ ? null
89
+ : `${cli_1.CliInternals.formatBytes(downloadInfo.totalSize)}`,
90
+ ]
91
+ .filter(remotion_1.Internals.truthy)
92
+ .join('/')
85
93
  : cli_1.CliInternals.chalk.gray(`${downloadInfo.doneIn}ms`),
86
94
  ].join(' ');
87
95
  };
@@ -14,7 +14,6 @@ const validate_retries_1 = require("../../../shared/validate-retries");
14
14
  const args_1 = require("../../args");
15
15
  const get_aws_region_1 = require("../../get-aws-region");
16
16
  const find_function_name_1 = require("../../helpers/find-function-name");
17
- const format_bytes_1 = require("../../helpers/format-bytes");
18
17
  const get_cloudwatch_stream_url_1 = require("../../helpers/get-cloudwatch-stream-url");
19
18
  const quit_1 = require("../../helpers/quit");
20
19
  const log_1 = require("../../log");
@@ -39,7 +38,7 @@ const renderCommand = async (args) => {
39
38
  (0, quit_1.quit)(1);
40
39
  }
41
40
  const outName = (_a = args[2]) !== null && _a !== void 0 ? _a : null;
42
- const { chromiumOptions, codec, crf, envVariables, frameRange, imageFormat, inputProps, logLevel, pixelFormat, proResProfile, puppeteerTimeout, quality, scale, } = await cli_1.CliInternals.getCliOptions({
41
+ const { chromiumOptions, codec, crf, envVariables, frameRange, imageFormat, inputProps, logLevel, pixelFormat, proResProfile, puppeteerTimeout, quality, scale, everyNthFrame, numberOfGifLoops, } = await cli_1.CliInternals.getCliOptions({
43
42
  type: 'series',
44
43
  isLambda: true,
45
44
  });
@@ -73,6 +72,9 @@ const renderCommand = async (args) => {
73
72
  timeoutInMilliseconds: puppeteerTimeout,
74
73
  chromiumOptions,
75
74
  scale,
75
+ numberOfGifLoops,
76
+ everyNthFrame,
77
+ concurrencyPerLambda: args_1.parsedLambdaCli['concurrency-per-lambda'],
76
78
  });
77
79
  const totalSteps = outName ? 5 : 4;
78
80
  const progressBar = cli_1.CliInternals.createOverwriteableCliOutput(cli_1.CliInternals.quietFlagProvided());
@@ -151,7 +153,7 @@ const renderCommand = async (args) => {
151
153
  }));
152
154
  log_1.Log.info();
153
155
  log_1.Log.info();
154
- log_1.Log.info('Done!', outputPath, (0, format_bytes_1.formatBytes)(sizeInBytes));
156
+ log_1.Log.info('Done!', outputPath, cli_1.CliInternals.formatBytes(sizeInBytes));
155
157
  }
156
158
  else {
157
159
  log_1.Log.info();
@@ -169,6 +171,14 @@ const renderCommand = async (args) => {
169
171
  ]
170
172
  .filter(Boolean)
171
173
  .join(', '));
174
+ if (newStatus.mostExpensiveFrameRanges) {
175
+ log_1.Log.verbose('Most expensive frame ranges:');
176
+ log_1.Log.verbose(newStatus.mostExpensiveFrameRanges
177
+ .map((f) => {
178
+ return `${f.frameRange[0]}-${f.frameRange[1]} (${f.timeInMilliseconds}ms)`;
179
+ })
180
+ .join(', '));
181
+ }
172
182
  (0, quit_1.quit)(0);
173
183
  }
174
184
  if (newStatus.fatalErrorEncountered) {
@@ -7,7 +7,6 @@ exports.sitesCreateSubcommand = exports.SITES_CREATE_SUBCOMMAND = void 0;
7
7
  const cli_1 = require("@remotion/cli");
8
8
  const fs_1 = require("fs");
9
9
  const path_1 = __importDefault(require("path"));
10
- const remotion_1 = require("remotion");
11
10
  const deploy_site_1 = require("../../../api/deploy-site");
12
11
  const get_or_create_bucket_1 = require("../../../api/get-or-create-bucket");
13
12
  const constants_1 = require("../../../shared/constants");
@@ -97,8 +96,8 @@ const sitesCreateSubcommand = async (args) => {
97
96
  };
98
97
  updateProgress();
99
98
  },
100
- enableCaching: remotion_1.Internals.getWebpackCaching(),
101
- webpackOverride: (_b = remotion_1.Internals.getWebpackOverrideFn()) !== null && _b !== void 0 ? _b : remotion_1.Internals.defaultOverrideFunction,
99
+ enableCaching: cli_1.ConfigInternals.getWebpackCaching(),
100
+ webpackOverride: (_b = cli_1.ConfigInternals.getWebpackOverrideFn()) !== null && _b !== void 0 ? _b : ((f) => f),
102
101
  },
103
102
  region: (0, get_aws_region_1.getAwsRegion)(),
104
103
  });
@@ -6,7 +6,6 @@ const log_1 = require("@remotion/cli/dist/log");
6
6
  const get_sites_1 = require("../../../api/get-sites");
7
7
  const get_aws_region_1 = require("../../get-aws-region");
8
8
  const date_string_1 = require("../../helpers/date-string");
9
- const format_bytes_1 = require("../../helpers/format-bytes");
10
9
  exports.SITES_LS_SUBCOMMAND = 'ls';
11
10
  const COLS = [20, 30, 10, 15];
12
11
  const logRow = (data) => {
@@ -40,7 +39,7 @@ const sitesLsSubcommand = async () => {
40
39
  log_1.Log.info(logRow([
41
40
  site.id,
42
41
  site.bucketName,
43
- (0, format_bytes_1.formatBytes)(site.sizeInBytes),
42
+ cli_1.CliInternals.formatBytes(site.sizeInBytes),
44
43
  site.lastModified ? (0, date_string_1.dateString)(new Date(site.lastModified)) : 'n/a',
45
44
  ]));
46
45
  log_1.Log.info(site.serveUrl);
@@ -7,7 +7,6 @@ const get_buckets_1 = require("../../../api/get-buckets");
7
7
  const get_sites_1 = require("../../../api/get-sites");
8
8
  const get_aws_region_1 = require("../../get-aws-region");
9
9
  const confirm_1 = require("../../helpers/confirm");
10
- const format_bytes_1 = require("../../helpers/format-bytes");
11
10
  const quit_1 = require("../../helpers/quit");
12
11
  const log_1 = require("../../log");
13
12
  exports.SITES_RM_COMMAND = 'rm';
@@ -44,7 +43,7 @@ const sitesRmSubcommand = async (args) => {
44
43
  return (0, quit_1.quit)(1);
45
44
  }
46
45
  await (0, confirm_1.confirmCli)({
47
- delMessage: `Site ${site.id} in bucket ${site.bucketName} (${(0, format_bytes_1.formatBytes)(site.sizeInBytes)}): Delete? (Y/n)`,
46
+ delMessage: `Site ${site.id} in bucket ${site.bucketName} (${cli_1.CliInternals.formatBytes(site.sizeInBytes)}): Delete? (Y/n)`,
48
47
  allowForceFlag: true,
49
48
  });
50
49
  const { totalSizeInBytes: totalSize } = await (0, delete_site_1.deleteSite)({
@@ -55,7 +54,7 @@ const sitesRmSubcommand = async (args) => {
55
54
  log_1.Log.info(cli_1.CliInternals.chalk.gray(`Deleted ${itemName}`));
56
55
  },
57
56
  });
58
- log_1.Log.info(`Deleted site ${siteName} and freed up ${(0, format_bytes_1.formatBytes)(totalSize)}.`);
57
+ log_1.Log.info(`Deleted site ${siteName} and freed up ${cli_1.CliInternals.formatBytes(totalSize)}.`);
59
58
  }
60
59
  };
61
60
  exports.sitesRmSubcommand = sitesRmSubcommand;
@@ -7,7 +7,6 @@ const get_buckets_1 = require("../../../api/get-buckets");
7
7
  const get_sites_1 = require("../../../api/get-sites");
8
8
  const get_aws_region_1 = require("../../get-aws-region");
9
9
  const confirm_1 = require("../../helpers/confirm");
10
- const format_bytes_1 = require("../../helpers/format-bytes");
11
10
  const quit_1 = require("../../helpers/quit");
12
11
  const log_1 = require("../../log");
13
12
  exports.SITES_RMALL_COMMAND = 'rmall';
@@ -31,7 +30,7 @@ const sitesRmallSubcommand = async () => {
31
30
  }
32
31
  for (const site of deployedSites.sites) {
33
32
  await (0, confirm_1.confirmCli)({
34
- delMessage: `Site ${site.id} in bucket ${site.bucketName} (${(0, format_bytes_1.formatBytes)(site.sizeInBytes)}): Delete? (Y/n)`,
33
+ delMessage: `Site ${site.id} in bucket ${site.bucketName} (${cli_1.CliInternals.formatBytes(site.sizeInBytes)}): Delete? (Y/n)`,
35
34
  allowForceFlag: true,
36
35
  });
37
36
  const { totalSizeInBytes: totalSize } = await (0, delete_site_1.deleteSite)({
@@ -42,7 +41,7 @@ const sitesRmallSubcommand = async () => {
42
41
  log_1.Log.info(cli_1.CliInternals.chalk.gray(`Deleted ${itemName}`));
43
42
  },
44
43
  });
45
- log_1.Log.info(`Deleted site ${site.id} and freed up ${(0, format_bytes_1.formatBytes)(totalSize)}.`);
44
+ log_1.Log.info(`Deleted site ${site.id} and freed up ${cli_1.CliInternals.formatBytes(totalSize)}.`);
46
45
  }
47
46
  };
48
47
  exports.sitesRmallSubcommand = sitesRmallSubcommand;
@@ -11,7 +11,6 @@ const validate_retries_1 = require("../../shared/validate-retries");
11
11
  const args_1 = require("../args");
12
12
  const get_aws_region_1 = require("../get-aws-region");
13
13
  const find_function_name_1 = require("../helpers/find-function-name");
14
- const format_bytes_1 = require("../helpers/format-bytes");
15
14
  const get_cloudwatch_stream_url_1 = require("../helpers/get-cloudwatch-stream-url");
16
15
  const quit_1 = require("../helpers/quit");
17
16
  const log_1 = require("../log");
@@ -78,7 +77,7 @@ const stillCommand = async (args) => {
78
77
  region: (0, get_aws_region_1.getAwsRegion)(),
79
78
  renderId: res.renderId,
80
79
  });
81
- log_1.Log.info('Done!', outputPath, (0, format_bytes_1.formatBytes)(sizeInBytes));
80
+ log_1.Log.info('Done!', outputPath, cli_1.CliInternals.formatBytes(sizeInBytes));
82
81
  }
83
82
  else {
84
83
  log_1.Log.info(`Finished still!`);
@@ -1,2 +1,2 @@
1
- import { AwsRegion } from '../pricing/aws-regions';
1
+ import type { AwsRegion } from '../pricing/aws-regions';
2
2
  export declare const getAwsRegion: () => AwsRegion;
@@ -1,5 +1,5 @@
1
- import { AwsRegion } from '../../client';
2
- import { LambdaRoutines } from '../../shared/constants';
1
+ import type { AwsRegion } from '../../client';
2
+ import type { LambdaRoutines } from '../../shared/constants';
3
3
  export declare const getCloudwatchStreamUrl: ({ region, functionName, method, renderId, }: {
4
4
  region: AwsRegion;
5
5
  functionName: string;
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeDeployProgressBar = exports.makeBucketProgress = exports.makeBundleProgress = void 0;
4
4
  const cli_1 = require("@remotion/cli");
5
5
  const remotion_1 = require("remotion");
6
- const format_bytes_1 = require("./format-bytes");
7
6
  const makeBundleProgress = ({ progress, doneIn }) => {
8
7
  return [
9
8
  '📦',
@@ -40,7 +39,7 @@ const makeDeployProgressBar = ({ sizeUploaded, totalSize, doneIn, }) => {
40
39
  `${doneIn === null ? 'Uploading' : 'Uploaded'} to S3`,
41
40
  doneIn === null
42
41
  ? typeof totalSize === 'number'
43
- ? `${(0, format_bytes_1.formatBytes)(sizeUploaded)}/${(0, format_bytes_1.formatBytes)(totalSize)}`
42
+ ? `${cli_1.CliInternals.formatBytes(sizeUploaded)}/${cli_1.CliInternals.formatBytes(totalSize)}`
44
43
  : ''
45
44
  : cli_1.CliInternals.chalk.gray(`${doneIn}ms`),
46
45
  ]
package/dist/cli/index.js CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.cli = exports.executeCommand = void 0;
4
4
  const cli_1 = require("@remotion/cli");
5
5
  const suggested_policy_1 = require("../api/iam-validation/suggested-policy");
6
+ const defaults_1 = require("../defaults");
6
7
  const check_credentials_1 = require("../shared/check-credentials");
7
8
  const docs_url_1 = require("../shared/docs-url");
8
9
  const args_1 = require("./args");
@@ -99,6 +100,15 @@ const executeCommand = async (args) => {
99
100
  catch (err) {
100
101
  const error = err;
101
102
  if (error.message.includes('The role defined for the function cannot be assumed by Lambda')) {
103
+ if (args_1.parsedLambdaCli['custom-role-arn']) {
104
+ log_1.Log.error(`
105
+ The role "${args_1.parsedLambdaCli['custom-role-arn']}" does not exist or has the wrong policy assigned to it. Do either:
106
+ - Remove the "--custom-role-arn" parameter and set up Remotion Lambda according to the setup guide
107
+ - Make sure the role has the same policy assigned as the one returned by "npx ${defaults_1.BINARY_NAME} ${policies_1.POLICIES_COMMAND} ${role_1.ROLE_SUBCOMMAND}"
108
+
109
+ Revisit ${docs_url_1.DOCS_URL}/docs/lambda/setup and make sure you set up the role and role policy correctly. Also see the troubleshooting page: ${docs_url_1.DOCS_URL}/docs/lambda/troubleshooting/permissions. The original error message is:
110
+ `.trim());
111
+ }
102
112
  log_1.Log.error(`
103
113
  The role "${suggested_policy_1.ROLE_NAME}" does not exist in your AWS account or has the wrong policy assigned to it. Common reasons:
104
114
  - The name of the role is not "${suggested_policy_1.ROLE_NAME}"
@@ -123,7 +133,7 @@ AWS returned an "TooManyRequestsException" error message which could mean you re
123
133
  };
124
134
  exports.executeCommand = executeCommand;
125
135
  const cli = async () => {
126
- await cli_1.CliInternals.initializeRenderCli('lambda');
136
+ await cli_1.CliInternals.initializeRenderCli(cli_1.CliInternals.findRemotionRoot(), 'lambda');
127
137
  await (0, exports.executeCommand)(args_1.parsedLambdaCli._);
128
138
  };
129
139
  exports.cli = cli;
package/dist/defaults.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1,4 +1,4 @@
1
- import { OptimizationProfile } from './types';
1
+ import type { OptimizationProfile } from './types';
2
2
  export declare const canUseOptimization: ({ optimization, framesPerLambda, frameRange, }: {
3
3
  optimization: OptimizationProfile | null;
4
4
  framesPerLambda: number;
@@ -1,4 +1,4 @@
1
- import { AwsRegion } from '../../pricing/aws-regions';
1
+ import type { AwsRegion } from '../../pricing/aws-regions';
2
2
  export declare const collectChunkInformation: ({ bucketName, renderId, region, expectedBucketOwner, }: {
3
3
  bucketName: string;
4
4
  renderId: string;
@@ -1,3 +1,3 @@
1
- import { TimingProfile } from './types';
1
+ import type { TimingProfile } from './types';
2
2
  export declare const getFrameRangesFromProfile: (profile: TimingProfile) => [number, number][];
3
3
  export declare const sortProfileByFrameRanges: (profile: TimingProfile) => import("./types").ChunkTimingData[];
@@ -1,3 +1,3 @@
1
- import { ChunkTimingData, TimingProfile } from './types';
1
+ import type { ChunkTimingData, TimingProfile } from './types';
2
2
  export declare const getTimingEndTimestamps: (chunk: ChunkTimingData) => number[];
3
3
  export declare const getProfileDuration: (chunks: TimingProfile) => number;
@@ -1,2 +1,2 @@
1
- import { TimingProfile } from './types';
1
+ import type { TimingProfile } from './types';
2
2
  export declare const isValidOptimizationProfile: (profile: TimingProfile) => boolean;
@@ -4,9 +4,9 @@ exports.isValidOptimizationProfile = void 0;
4
4
  const renderer_1 = require("@remotion/renderer");
5
5
  const isValidOptimizationProfile = (profile) => {
6
6
  return profile.every((timing) => {
7
- const frames = renderer_1.RenderInternals.getDurationFromFrameRange(timing.frameRange, 0);
7
+ const frames = renderer_1.RenderInternals.getFramesToRender(timing.frameRange, 1);
8
8
  const values = Object.values(timing.timings);
9
- return frames === values.length && values.every((v) => v > 0);
9
+ return frames.length === values.length && values.every((v) => v > 0);
10
10
  });
11
11
  };
12
12
  exports.isValidOptimizationProfile = isValidOptimizationProfile;
@@ -1,2 +1,2 @@
1
- import { TimingProfile } from './types';
1
+ import type { TimingProfile } from './types';
2
2
  export declare const optimizeInvocationOrder: (profile: TimingProfile) => TimingProfile;
@@ -1,4 +1,4 @@
1
- import { TimingProfile } from './types';
1
+ import type { TimingProfile } from './types';
2
2
  export declare const assignFrameToOther: ({ frameRanges, fromChunk, toChunk, framesToShift, }: {
3
3
  frameRanges: [number, number][];
4
4
  fromChunk: number;
@@ -1,11 +1,14 @@
1
- import { OptimizationProfile } from './types';
2
- export declare const planFrameRanges: ({ chunkCount, framesPerLambda, optimization, shouldUseOptimization, frameRange, }: {
3
- chunkCount: number;
1
+ import type { OptimizationProfile } from './types';
2
+ export declare const planFrameRanges: ({ framesPerLambda, optimization, shouldUseOptimization, frameRange, everyNthFrame, }: {
4
3
  framesPerLambda: number;
5
4
  optimization: OptimizationProfile | null;
6
5
  shouldUseOptimization: boolean;
7
6
  frameRange: [number, number];
7
+ everyNthFrame: number;
8
8
  }) => {
9
- chunks: [number, number][];
9
+ chunks: [
10
+ number,
11
+ number
12
+ ][];
10
13
  didUseOptimization: boolean;
11
14
  };
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.planFrameRanges = void 0;
4
4
  const renderer_1 = require("@remotion/renderer");
5
5
  const can_use_optimization_1 = require("./can-use-optimization");
6
- const planFrameRanges = ({ chunkCount, framesPerLambda, optimization, shouldUseOptimization, frameRange, }) => {
6
+ const planFrameRanges = ({ framesPerLambda, optimization, shouldUseOptimization, frameRange, everyNthFrame, }) => {
7
+ const framesToRender = renderer_1.RenderInternals.getFramesToRender(frameRange, everyNthFrame);
8
+ const chunkCount = Math.ceil(framesToRender.length / framesPerLambda);
7
9
  if ((0, can_use_optimization_1.canUseOptimization)({
8
10
  optimization,
9
11
  framesPerLambda,
@@ -15,13 +17,12 @@ const planFrameRanges = ({ chunkCount, framesPerLambda, optimization, shouldUseO
15
17
  didUseOptimization: true,
16
18
  };
17
19
  }
18
- const frameCount = renderer_1.RenderInternals.getDurationFromFrameRange(frameRange, 0);
20
+ const firstFrame = frameRange[0];
19
21
  return {
20
22
  chunks: new Array(chunkCount).fill(1).map((_, i) => {
21
- return [
22
- i * framesPerLambda + frameRange[0],
23
- Math.min(frameCount, (i + 1) * framesPerLambda) - 1 + frameRange[0],
24
- ];
23
+ const start = i * framesPerLambda * everyNthFrame + firstFrame;
24
+ const end = Math.min(framesToRender[framesToRender.length - 1], (i + 1) * framesPerLambda * everyNthFrame - 1) + firstFrame;
25
+ return [start, end];
25
26
  }),
26
27
  didUseOptimization: false,
27
28
  };
@@ -1,5 +1,5 @@
1
- import { AwsRegion } from '../../pricing/aws-regions';
2
- import { OptimizationProfile } from './types';
1
+ import type { AwsRegion } from '../../pricing/aws-regions';
2
+ import type { OptimizationProfile } from './types';
3
3
  export declare const writeOptimization: ({ bucketName, optimization, compositionId, siteId, region, expectedBucketOwner, }: {
4
4
  bucketName: string;
5
5
  optimization: OptimizationProfile;
@@ -12,6 +12,7 @@ const writeOptimization = async ({ bucketName, optimization, compositionId, site
12
12
  region,
13
13
  privacy: 'private',
14
14
  expectedBucketOwner,
15
+ downloadBehavior: null,
15
16
  });
16
17
  };
17
18
  exports.writeOptimization = writeOptimization;
@@ -1,4 +1,4 @@
1
- import { ChunkTimingData, TimingProfile } from './types';
1
+ import type { ChunkTimingData, TimingProfile } from './types';
2
2
  export declare const getTimingForFrame: (profile: TimingProfile, frame: number) => number;
3
3
  export declare const getSimulatedTimingForFrameRange: (profile: TimingProfile, frameRange: [number, number]) => ChunkTimingData['timings'];
4
4
  export declare const simulateFrameRanges: ({ profile, newFrameRanges, }: {
@@ -1,2 +1,2 @@
1
- import { ChunkTimingData, TimingProfile } from './types';
1
+ import type { ChunkTimingData, TimingProfile } from './types';
2
2
  export declare const sortProfileByDuration: (profile: TimingProfile) => ChunkTimingData[];
@@ -1,4 +1,4 @@
1
- import { LambdaVersions } from '../../shared/constants';
1
+ import type { LambdaVersions } from '../../shared/constants';
2
2
  export declare type ObjectChunkTimingData = {
3
3
  chunk: number;
4
4
  frameRange: [number, number];
@@ -19,4 +19,5 @@ export declare type OptimizationProfile = {
19
19
  createdFromRenderId: string;
20
20
  framesPerLambda: number;
21
21
  lambdaVersion: LambdaVersions;
22
+ everyNthFrame: number;
22
23
  };
@@ -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 const calculateChunkTimes: ({ contents, renderId, type, }: {
3
3
  contents: _Object[];
4
4
  renderId: string;
@@ -1,7 +1,7 @@
1
- import { _Object } from '@aws-sdk/client-s3';
2
- import { RenderMetadata } from '../../shared/constants';
3
- import { LambdaArchitecture } from '../../shared/validate-architecture';
4
- import { OutputFileMetadata } from './find-output-file-in-bucket';
1
+ import type { _Object } from '@aws-sdk/client-s3';
2
+ import type { RenderMetadata } from '../../shared/constants';
3
+ import type { LambdaArchitecture } from '../../shared/validate-architecture';
4
+ import type { OutputFileMetadata } from './find-output-file-in-bucket';
5
5
  export declare const estimatePriceFromBucket: ({ contents, renderMetadata, memorySizeInMb, outputFileMetadata, architecture, diskSizeInMb, lambdasInvoked, }: {
6
6
  contents: _Object[];
7
7
  renderMetadata: RenderMetadata | null;
@@ -1,14 +1,16 @@
1
- import { Codec } from 'remotion';
2
- import { AwsRegion } from '../../pricing/aws-regions';
3
- export declare const concatVideosS3: ({ bucket, expectedFiles, onProgress, numberOfFrames, renderId, region, codec, expectedBucketOwner, }: {
1
+ import type { AwsRegion } from '../../pricing/aws-regions';
2
+ import type { LambdaCodec } from '../../shared/validate-lambda-codec';
3
+ export declare const concatVideosS3: ({ bucket, expectedFiles, onProgress, numberOfFrames, renderId, region, codec, expectedBucketOwner, fps, numberOfGifLoops, }: {
4
4
  bucket: string;
5
5
  expectedFiles: number;
6
6
  onProgress: (frames: number, encodingStart: number) => void;
7
7
  numberOfFrames: number;
8
8
  renderId: string;
9
9
  region: AwsRegion;
10
- codec: Codec;
10
+ codec: LambdaCodec;
11
11
  expectedBucketOwner: string;
12
+ fps: number;
13
+ numberOfGifLoops: number | null;
12
14
  }) => Promise<{
13
15
  outfile: string;
14
16
  cleanupChunksProm: Promise<void>;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -108,7 +112,7 @@ const getAllFilesS3 = ({ bucket, expectedFiles, outdir, renderId, region, expect
108
112
  loop();
109
113
  });
110
114
  };
111
- const concatVideosS3 = async ({ bucket, expectedFiles, onProgress, numberOfFrames, renderId, region, codec, expectedBucketOwner, }) => {
115
+ const concatVideosS3 = async ({ bucket, expectedFiles, onProgress, numberOfFrames, renderId, region, codec, expectedBucketOwner, fps, numberOfGifLoops, }) => {
112
116
  var _a;
113
117
  const outdir = (0, path_1.join)(renderer_1.RenderInternals.tmpDir(constants_1.CONCAT_FOLDER_TOKEN), 'bucket');
114
118
  if ((0, fs_1.existsSync)(outdir)) {
@@ -137,6 +141,8 @@ const concatVideosS3 = async ({ bucket, expectedFiles, onProgress, numberOfFrame
137
141
  onProgress: (p) => onProgress(p, encodingStart),
138
142
  numberOfFrames,
139
143
  codec: codecForCombining,
144
+ fps,
145
+ numberOfGifLoops,
140
146
  });
141
147
  combine.end();
142
148
  const cleanupChunksProm = ((_a = fs_1.default.promises.rm) !== null && _a !== void 0 ? _a : fs_1.default.promises.rmdir)(outdir, {
@@ -1,8 +1,8 @@
1
- import { _Object } from '@aws-sdk/client-s3';
2
- import { AwsRegion } from '../../pricing/aws-regions';
3
- import { PostRenderData, RenderMetadata } from '../../shared/constants';
4
- import { OutputFileMetadata } from './find-output-file-in-bucket';
5
- 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 { PostRenderData, RenderMetadata } from '../../shared/constants';
4
+ import type { OutputFileMetadata } from './find-output-file-in-bucket';
5
+ import type { EnhancedErrorInfo } from './write-lambda-error';
6
6
  export declare const createPostRenderData: ({ renderId, region, memorySizeInMb, renderMetadata, contents, timeToEncode, errorExplanations, timeToDelete, outputFile, }: {
7
7
  renderId: string;
8
8
  expectedBucketOwner: string;
@@ -14,4 +14,4 @@ export declare const createPostRenderData: ({ renderId, region, memorySizeInMb,
14
14
  timeToDelete: number;
15
15
  errorExplanations: EnhancedErrorInfo[];
16
16
  outputFile: OutputFileMetadata;
17
- }) => Promise<PostRenderData>;
17
+ }) => PostRenderData;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createPostRenderData = void 0;
4
4
  const estimate_price_1 = require("../../api/estimate-price");
5
5
  const constants_1 = require("../../shared/constants");
6
+ const get_most_expensive_chunks_1 = require("../../shared/get-most-expensive-chunks");
6
7
  const parse_lambda_timings_key_1 = require("../../shared/parse-lambda-timings-key");
7
8
  const calculate_chunk_times_1 = require("./calculate-chunk-times");
8
9
  const get_current_architecture_1 = require("./get-current-architecture");
@@ -10,13 +11,12 @@ const get_files_to_delete_1 = require("./get-files-to-delete");
10
11
  const get_lambdas_invoked_stats_1 = require("./get-lambdas-invoked-stats");
11
12
  const get_retry_stats_1 = require("./get-retry-stats");
12
13
  const get_time_to_finish_1 = require("./get-time-to-finish");
13
- const OVERHEAD_TIME_PER_LAMBDA = 100;
14
- const createPostRenderData = async ({ renderId, region, memorySizeInMb, renderMetadata, contents, timeToEncode, errorExplanations, timeToDelete, outputFile, }) => {
14
+ const createPostRenderData = ({ renderId, region, memorySizeInMb, renderMetadata, contents, timeToEncode, errorExplanations, timeToDelete, outputFile, }) => {
15
15
  var _a;
16
16
  const initializedKeys = contents.filter((c) => { var _a; return (_a = c.Key) === null || _a === void 0 ? void 0 : _a.startsWith((0, constants_1.lambdaTimingsPrefix)(renderId)); });
17
17
  const parsedTimings = initializedKeys.map(({ Key }) => (0, parse_lambda_timings_key_1.parseLambdaTimingsKey)(Key));
18
18
  const times = parsedTimings
19
- .map((p) => p.rendered - p.start + OVERHEAD_TIME_PER_LAMBDA)
19
+ .map((p) => p.rendered - p.start + get_most_expensive_chunks_1.OVERHEAD_TIME_PER_LAMBDA)
20
20
  .reduce((a, b) => a + b);
21
21
  const cost = (0, estimate_price_1.estimatePrice)({
22
22
  durationInMiliseconds: times,
@@ -47,7 +47,7 @@ const createPostRenderData = async ({ renderId, region, memorySizeInMb, renderMe
47
47
  if (timeToInvokeLambdas === null) {
48
48
  throw new Error('should have timing for all lambdas');
49
49
  }
50
- const data = {
50
+ return {
51
51
  cost: {
52
52
  currency: 'USD',
53
53
  disclaimer: 'Estimated cost for lambda invocations only. Does not include cost for S3 storage and data transfer.',
@@ -78,7 +78,7 @@ const createPostRenderData = async ({ renderId, region, memorySizeInMb, renderMe
78
78
  }),
79
79
  timeToInvokeLambdas,
80
80
  retriesInfo,
81
+ mostExpensiveFrameRanges: (0, get_most_expensive_chunks_1.getMostExpensiveChunks)(parsedTimings, renderMetadata.framesPerLambda),
81
82
  };
82
- return data;
83
83
  };
84
84
  exports.createPostRenderData = createPostRenderData;
@@ -1,6 +1,6 @@
1
- import { _Object } from '@aws-sdk/client-s3';
2
- import { AwsRegion } from '../../pricing/aws-regions';
3
- import { CleanupJob } from './get-files-to-delete';
1
+ import type { _Object } from '@aws-sdk/client-s3';
2
+ import type { AwsRegion } from '../../pricing/aws-regions';
3
+ import type { CleanupJob } from './get-files-to-delete';
4
4
  export declare const cleanupFiles: ({ bucket, region, contents, jobs, }: {
5
5
  bucket: string;
6
6
  region: AwsRegion;
@@ -1,2 +1,2 @@
1
- import { OutNameOutput, RenderMetadata } from '../../defaults';
1
+ import type { OutNameOutput, RenderMetadata } from '../../defaults';
2
2
  export declare const getExpectedOutName: (renderMetadata: RenderMetadata, bucketName: string) => OutNameOutput;
@@ -1,5 +1,5 @@
1
- import { AwsRegion } from '../..';
2
- import { RenderMetadata } from '../../shared/constants';
1
+ import type { AwsRegion } from '../..';
2
+ import type { RenderMetadata } from '../../shared/constants';
3
3
  export declare type OutputFileMetadata = {
4
4
  url: string;
5
5
  size: number;
@@ -1,2 +1,2 @@
1
- import { CostsInfo } from '../../shared/constants';
1
+ import type { CostsInfo } from '../../shared/constants';
2
2
  export declare const formatCostsInfo: (accrued: number) => CostsInfo;
@@ -1,2 +1,3 @@
1
- import { ChromiumOptions, openBrowser } from '@remotion/renderer';
1
+ import type { ChromiumOptions } from '@remotion/renderer';
2
+ import { openBrowser } from '@remotion/renderer';
2
3
  export declare const getBrowserInstance: (shouldDumpIo: boolean, chromiumOptions: ChromiumOptions) => ReturnType<typeof openBrowser>;