@remotion/cli 4.1.0-alpha1 → 4.1.0-alpha10

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 (125) hide show
  1. package/dist/benchmark.js +16 -7
  2. package/dist/chalk/index.d.ts +2 -1
  3. package/dist/codemods/stringify-with-path.js +24 -19
  4. package/dist/compositions.js +9 -4
  5. package/dist/config/index.d.ts +24 -0
  6. package/dist/config/index.js +19 -1
  7. package/dist/editor/components/AssetSelector.d.ts +2 -0
  8. package/dist/editor/components/AssetSelector.js +30 -0
  9. package/dist/editor/components/AssetSelectorItem.d.ts +6 -0
  10. package/dist/editor/components/AssetSelectorItem.js +109 -0
  11. package/dist/editor/components/Canvas.js +4 -4
  12. package/dist/editor/components/CanvasOrLoading.js +20 -1
  13. package/dist/editor/components/CopyButton.js +5 -2
  14. package/dist/editor/components/Editor.js +1 -3
  15. package/dist/editor/components/ExplorerPanel.d.ts +8 -0
  16. package/dist/editor/components/ExplorerPanel.js +67 -0
  17. package/dist/editor/components/FramePersistor.d.ts +0 -2
  18. package/dist/editor/components/FramePersistor.js +4 -24
  19. package/dist/editor/components/FullscreenToggle.d.ts +2 -0
  20. package/dist/editor/components/FullscreenToggle.js +25 -0
  21. package/dist/editor/components/GlobalKeybindings.js +1 -1
  22. package/dist/editor/components/InitialCompositionLoader.js +1 -22
  23. package/dist/editor/components/KeyboardShortcutsExplainer.js +1 -1
  24. package/dist/editor/components/NewComposition/InputDragger.js +13 -1
  25. package/dist/editor/components/NewComposition/RemInput.d.ts +1 -1
  26. package/dist/editor/components/NewComposition/RemInputTypeColor.d.ts +1 -1
  27. package/dist/editor/components/NewComposition/RemTextarea.d.ts +1 -1
  28. package/dist/editor/components/OpenEditorButton.js +5 -2
  29. package/dist/editor/components/OptionsPanel.d.ts +8 -0
  30. package/dist/editor/components/OptionsPanel.js +79 -0
  31. package/dist/editor/components/PlayPause.js +4 -4
  32. package/dist/editor/components/PlaybackRateSelector.js +1 -1
  33. package/dist/editor/components/PreviewToolbar.js +3 -1
  34. package/dist/editor/components/QuickSwitcher/QuickSwitcherResult.js +3 -3
  35. package/dist/editor/components/RenderModal/DataEditor.d.ts +2 -0
  36. package/dist/editor/components/RenderModal/DataEditor.js +13 -10
  37. package/dist/editor/components/RenderModal/FrameRangeSetting.js +9 -25
  38. package/dist/editor/components/RenderModal/MultiRangeSlider.d.ts +12 -0
  39. package/dist/editor/components/RenderModal/MultiRangeSlider.js +50 -0
  40. package/dist/editor/components/RenderModal/RenderModal.js +7 -3
  41. package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +2 -3
  42. package/dist/editor/components/RenderModal/RenderModalJSONPropsEditor.d.ts +1 -2
  43. package/dist/editor/components/RenderModal/RenderModalJSONPropsEditor.js +10 -11
  44. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.d.ts +2 -2
  45. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.js +26 -0
  46. package/dist/editor/components/RenderModal/SchemaEditor/SchemaErrorMessages.js +1 -3
  47. package/dist/editor/components/RenderModal/SchemaEditor/SchemaLabel.js +1 -2
  48. package/dist/editor/components/RenderModal/SchemaEditor/SchemaSaveButton.js +2 -1
  49. package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayEditor.js +7 -7
  50. package/dist/editor/components/RenderModal/SchemaEditor/ZodBooleanEditor.d.ts +1 -1
  51. package/dist/editor/components/RenderModal/SchemaEditor/ZodBooleanEditor.js +1 -1
  52. package/dist/editor/components/RenderModal/SchemaEditor/ZodColorEditor.js +1 -1
  53. package/dist/editor/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
  54. package/dist/editor/components/RenderModal/SchemaEditor/ZodEffectEditor.js +2 -2
  55. package/dist/editor/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
  56. package/dist/editor/components/RenderModal/SchemaEditor/ZodFieldValidation.js +1 -1
  57. package/dist/editor/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +1 -1
  58. package/dist/editor/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -1
  59. package/dist/editor/components/RenderModal/SchemaEditor/ZodObjectEditor.js +29 -10
  60. package/dist/editor/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +2 -2
  61. package/dist/editor/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
  62. package/dist/editor/components/RenderModal/SchemaEditor/ZodStringEditor.js +1 -1
  63. package/dist/editor/components/RenderModal/SchemaEditor/ZodSwitch.js +0 -1
  64. package/dist/editor/components/RenderModal/SchemaEditor/local-state.js +9 -3
  65. package/dist/editor/components/RenderModal/human-readable-codec.d.ts +1 -1
  66. package/dist/editor/components/RenderQueue/actions.d.ts +1 -1
  67. package/dist/editor/components/RenderQueue/actions.js +12 -4
  68. package/dist/editor/components/RightPanel.js +45 -12
  69. package/dist/editor/components/SetTimelineInOutProvider.js +5 -4
  70. package/dist/editor/components/SidebarRenderButton.js +3 -1
  71. package/dist/editor/components/Timeline/TimelineDragHandler.js +45 -19
  72. package/dist/editor/components/TimelineInOutToggle.d.ts +2 -1
  73. package/dist/editor/components/TimelineInOutToggle.js +82 -67
  74. package/dist/editor/helpers/is-composition-still.d.ts +1 -1
  75. package/dist/editor/helpers/is-current-selected-still.js +5 -6
  76. package/dist/editor/helpers/use-menu-structure.js +25 -1
  77. package/dist/editor/icons/keys.js +1 -0
  78. package/dist/editor/state/canvas-ref.d.ts +2 -0
  79. package/dist/editor/state/canvas-ref.js +5 -0
  80. package/dist/editor/state/in-out.d.ts +3 -2
  81. package/dist/editor/state/in-out.js +22 -5
  82. package/dist/editor/state/marks.d.ts +3 -2
  83. package/dist/editor/state/marks.js +6 -6
  84. package/dist/error-with-stack-frame.d.ts +19 -0
  85. package/dist/error-with-stack-frame.js +81 -0
  86. package/dist/get-composition-id.d.ts +6 -6
  87. package/dist/get-composition-id.js +13 -6
  88. package/dist/get-composition-with-dimension-override.d.ts +6 -6
  89. package/dist/get-composition-with-dimension-override.js +3 -3
  90. package/dist/handle-common-errors.js +8 -0
  91. package/dist/handle-javascript-error.d.ts +20 -0
  92. package/dist/handle-javascript-error.js +81 -0
  93. package/dist/index.d.ts +13 -7
  94. package/dist/index.js +5 -2
  95. package/dist/log.d.ts +6 -1
  96. package/dist/parse-command-line.js +1 -1
  97. package/dist/preview-server/dev-middleware/range-parser.d.ts +1 -1
  98. package/dist/preview-server/dev-middleware/setup-hooks.js +1 -1
  99. package/dist/preview-server/render-queue/job.d.ts +2 -2
  100. package/dist/preview-server/render-queue/make-retry-payload.js +3 -2
  101. package/dist/preview-server/render-queue/open-directory-in-finder.js +11 -5
  102. package/dist/preview-server/render-queue/process-still.js +1 -1
  103. package/dist/preview-server/render-queue/process-video.js +1 -1
  104. package/dist/preview-server/routes/add-render.js +2 -2
  105. package/dist/preview-server/routes/update-default-props.js +1 -2
  106. package/dist/print-compositions.d.ts +2 -2
  107. package/dist/print-error.js +6 -3
  108. package/dist/progress-bar.js +2 -5
  109. package/dist/render-flows/render.d.ts +2 -2
  110. package/dist/render-flows/render.js +31 -22
  111. package/dist/render-flows/still.d.ts +2 -2
  112. package/dist/render-flows/still.js +20 -14
  113. package/dist/render.js +6 -1
  114. package/dist/setup-cache.js +1 -1
  115. package/dist/still.js +6 -1
  116. package/dist/symbolicate-error.d.ts +3 -0
  117. package/dist/symbolicate-error.js +24 -0
  118. package/dist/symbolicate-errors.d.ts +7 -0
  119. package/dist/symbolicate-errors.js +90 -0
  120. package/dist/symbolicate-stacktrace.d.ts +28 -0
  121. package/dist/symbolicate-stacktrace.js +135 -0
  122. package/dist/symbolicateable-error.d.ts +16 -0
  123. package/dist/symbolicateable-error.js +18 -0
  124. package/package.json +11 -11
  125. package/styles/styles.css +53 -0
@@ -23,7 +23,7 @@ const processStill = async ({ job, remotionRoot, entryPoint, onProgress, addClea
23
23
  envVariables: job.envVariables,
24
24
  height: null,
25
25
  fullEntryPoint,
26
- inputProps: job.inputProps,
26
+ serializedInputPropsWithCustomSchema: job.serializedInputPropsWithCustomSchema,
27
27
  overwrite: true,
28
28
  port,
29
29
  publicDir,
@@ -24,7 +24,7 @@ const processVideoJob = async ({ job, remotionRoot, entryPoint, onProgress, addC
24
24
  envVariables: job.envVariables,
25
25
  height: null,
26
26
  fullEntryPoint,
27
- inputProps: job.inputProps,
27
+ serializedInputPropsWithCustomSchema: job.serializedInputPropsWithCustomSchema,
28
28
  overwrite: true,
29
29
  port,
30
30
  publicDir,
@@ -41,7 +41,7 @@ const handleAddRender = ({ input, entryPoint, remotionRoot, }) => {
41
41
  disallowParallelEncoding: input.disallowParallelEncoding,
42
42
  chromiumOptions: input.chromiumOptions,
43
43
  envVariables: input.envVariables,
44
- inputProps: input.inputProps,
44
+ serializedInputPropsWithCustomSchema: input.serializedInputPropsWithCustomSchema,
45
45
  },
46
46
  });
47
47
  }
@@ -65,7 +65,7 @@ const handleAddRender = ({ input, entryPoint, remotionRoot, }) => {
65
65
  chromiumOptions: input.chromiumOptions,
66
66
  delayRenderTimeout: input.delayRenderTimeout,
67
67
  envVariables: input.envVariables,
68
- inputProps: input.inputProps,
68
+ serializedInputPropsWithCustomSchema: input.serializedInputPropsWithCustomSchema,
69
69
  },
70
70
  entryPoint,
71
71
  remotionRoot,
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.updateDefaultPropsHandler = void 0;
4
4
  const node_fs_1 = require("node:fs");
5
5
  const update_default_props_1 = require("../../codemods/update-default-props");
6
- const input_props_serialization_1 = require("../../editor/components/RenderModal/SchemaEditor/input-props-serialization");
7
6
  const project_info_1 = require("../project-info");
8
7
  const can_update_default_props_1 = require("./can-update-default-props");
9
8
  const updateDefaultPropsHandler = async ({ input: { compositionId, defaultProps, enumPaths }, remotionRoot }) => {
@@ -16,7 +15,7 @@ const updateDefaultPropsHandler = async ({ input: { compositionId, defaultProps,
16
15
  const updated = await (0, update_default_props_1.updateDefaultProps)({
17
16
  compositionId,
18
17
  input: (0, node_fs_1.readFileSync)(projectInfo.videoFile, 'utf-8'),
19
- newDefaultProps: (0, input_props_serialization_1.deserializeJSONWithCustomFields)(defaultProps),
18
+ newDefaultProps: JSON.parse(defaultProps),
20
19
  enumPaths,
21
20
  });
22
21
  (0, node_fs_1.writeFileSync)(projectInfo.videoFile, updated);
@@ -1,2 +1,2 @@
1
- import type { AnyCompMetadata } from 'remotion';
2
- export declare const printCompositions: (compositions: AnyCompMetadata[]) => void;
1
+ import type { VideoConfig } from 'remotion';
2
+ export declare const printCompositions: (compositions: VideoConfig[]) => void;
@@ -9,13 +9,16 @@ const progress_bar_1 = require("./progress-bar");
9
9
  const should_use_non_overlaying_logger_1 = require("./should-use-non-overlaying-logger");
10
10
  const printError = async (err, logLevel) => {
11
11
  if (err instanceof renderer_1.RenderInternals.SymbolicateableError) {
12
+ const updatesDoOverwrite = !(0, should_use_non_overlaying_logger_1.shouldUseNonOverlayingLogger)({ logLevel });
12
13
  const output = (0, progress_bar_1.createOverwriteableCliOutput)({
13
14
  quiet: false,
14
15
  cancelSignal: null,
15
- updatesDontOverwrite: (0, should_use_non_overlaying_logger_1.shouldUseNonOverlayingLogger)({ logLevel }),
16
+ updatesDontOverwrite: !updatesDoOverwrite,
16
17
  indent: false,
17
18
  });
18
- output.update(chalk_1.chalk.red('Symbolicating minified error message...\n' + err.message), false);
19
+ if (updatesDoOverwrite) {
20
+ output.update(chalk_1.chalk.red('Symbolicating minified error message...\n' + err.message), false);
21
+ }
19
22
  try {
20
23
  const symbolicated = await renderer_1.RenderInternals.symbolicateError(err);
21
24
  if (symbolicated.frame === null) {
@@ -27,7 +30,7 @@ const printError = async (err, logLevel) => {
27
30
  (0, code_frame_1.printCodeFrameAndStack)(symbolicated);
28
31
  }
29
32
  catch (e) {
30
- output.update(chalk_1.chalk.red('(Error occurred symbolicating stack trace - printing minified stack trace)'), true);
33
+ output.update(chalk_1.chalk.red(''), true);
31
34
  log_1.Log.error();
32
35
  log_1.Log.error(err.stack || err);
33
36
  }
@@ -24,7 +24,7 @@ const createOverwriteableCliOutput = (options) => {
24
24
  .map((l) => {
25
25
  return `${renderer_1.RenderInternals.INDENT_TOKEN} ${l}`;
26
26
  })
27
- .join('\n'));
27
+ .join('\n') + '\n');
28
28
  }
29
29
  else {
30
30
  process.stdout.write(up + '\n');
@@ -171,16 +171,13 @@ const getGuiProgressSubtitle = (progress) => {
171
171
  return `Bundling ${Math.round(progress.bundling.progress * 100)}%`;
172
172
  }
173
173
  if (progress.copyingState.doneIn === null) {
174
- if (progress.copyingState.bytes < 100000000) {
175
- return 'Bundling 100%';
176
- }
177
174
  const bytes = new Intl.NumberFormat('en', {
178
175
  notation: 'compact',
179
176
  style: 'unit',
180
177
  unit: 'byte',
181
178
  unitDisplay: 'narrow',
182
179
  });
183
- return `Copying ${bytes.format(progress.copyingState.bytes)}`;
180
+ return `Copying public dir ${bytes.format(progress.copyingState.bytes)}`;
184
181
  }
185
182
  if (!progress.rendering) {
186
183
  return `Getting compositions`;
@@ -1,7 +1,7 @@
1
1
  import type { AudioCodec, Browser, BrowserExecutable, CancelSignal, ChromiumOptions, Codec, Crf, FfmpegOverrideFn, FrameRange, LogLevel, PixelFormat, ProResProfile, VideoImageFormat } from '@remotion/renderer';
2
2
  import type { Loop } from '../config/number-of-gif-loops';
3
3
  import type { JobProgressCallback } from '../preview-server/render-queue/job';
4
- export declare const renderVideoFlow: ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, inputProps, envVariables, puppeteerTimeout, port, height, width, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, outputLocationFromUI, jpegQuality, onProgress, addCleanupCallback, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, audioCodec, disallowParallelEncoding, }: {
4
+ export declare const renderVideoFlow: ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, envVariables, puppeteerTimeout, port, height, width, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, outputLocationFromUI, jpegQuality, onProgress, addCleanupCallback, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, audioCodec, serializedInputPropsWithCustomSchema, disallowParallelEncoding, }: {
5
5
  remotionRoot: string;
6
6
  fullEntryPoint: string;
7
7
  entryPointReason: string;
@@ -13,7 +13,7 @@ export declare const renderVideoFlow: ({ remotionRoot, fullEntryPoint, indent, l
13
13
  indent: boolean;
14
14
  shouldOutputImageSequence: boolean;
15
15
  publicDir: string | null;
16
- inputProps: Record<string, unknown>;
16
+ serializedInputPropsWithCustomSchema: string;
17
17
  envVariables: Record<string, string>;
18
18
  puppeteerTimeout: number;
19
19
  port: number | null;
@@ -31,6 +31,7 @@ const renderer_1 = require("@remotion/renderer");
31
31
  const node_fs_1 = __importStar(require("node:fs"));
32
32
  const node_os_1 = __importDefault(require("node:os"));
33
33
  const node_path_1 = __importDefault(require("node:path"));
34
+ const remotion_1 = require("remotion");
34
35
  const chalk_1 = require("../chalk");
35
36
  const config_1 = require("../config");
36
37
  const get_cli_options_1 = require("../get-cli-options");
@@ -45,18 +46,20 @@ const setup_cache_1 = require("../setup-cache");
45
46
  const should_use_non_overlaying_logger_1 = require("../should-use-non-overlaying-logger");
46
47
  const truthy_1 = require("../truthy");
47
48
  const user_passed_output_location_1 = require("../user-passed-output-location");
48
- const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, inputProps, envVariables, puppeteerTimeout, port, height, width, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, outputLocationFromUI, jpegQuality, onProgress, addCleanupCallback, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, audioCodec, disallowParallelEncoding, }) => {
49
+ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, envVariables, puppeteerTimeout, port, height, width, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, outputLocationFromUI, jpegQuality, onProgress, addCleanupCallback, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, audioCodec, serializedInputPropsWithCustomSchema, disallowParallelEncoding, }) => {
49
50
  var _a;
50
51
  const downloads = [];
51
- log_1.Log.verboseAdvanced({ indent, logLevel }, 'Browser executable: ', browserExecutable);
52
+ if (browserExecutable) {
53
+ log_1.Log.verboseAdvanced({ indent, logLevel }, 'Browser executable: ', browserExecutable);
54
+ }
52
55
  const browserInstance = renderer_1.RenderInternals.internalOpenBrowser({
53
56
  browser,
54
57
  browserExecutable,
55
- shouldDumpIo: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
56
58
  chromiumOptions,
57
59
  forceDeviceScaleFactor: scale,
58
60
  indent,
59
61
  viewport: null,
62
+ logLevel,
60
63
  });
61
64
  const updatesDontOverwrite = (0, should_use_non_overlaying_logger_1.shouldUseNonOverlayingLogger)({ logLevel });
62
65
  const renderProgress = (0, progress_bar_1.createOverwriteableCliOutput)({
@@ -134,17 +137,17 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
134
137
  };
135
138
  };
136
139
  const puppeteerInstance = await browserInstance;
137
- addCleanupCallback(() => puppeteerInstance.close(false));
140
+ addCleanupCallback(() => puppeteerInstance.close(false, logLevel, indent));
138
141
  const actualConcurrency = renderer_1.RenderInternals.getActualConcurrency(concurrency);
139
- const server = renderer_1.RenderInternals.prepareServer({
142
+ const server = await renderer_1.RenderInternals.prepareServer({
140
143
  concurrency: actualConcurrency,
141
144
  indent,
142
145
  port,
143
146
  remotionRoot,
144
- verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
147
+ logLevel,
145
148
  webpackConfigOrServeUrl: urlOrBundle,
146
149
  });
147
- addCleanupCallback(() => server.then((s) => s.closeServer(false)));
150
+ addCleanupCallback(() => server.closeServer(false));
148
151
  const { compositionId, config, reason, argsAfterComposition } = await (0, get_composition_with_dimension_override_1.getCompositionWithDimensionOverride)({
149
152
  height,
150
153
  width,
@@ -154,13 +157,13 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
154
157
  chromiumOptions,
155
158
  envVariables,
156
159
  indent,
157
- inputProps,
160
+ serializedInputPropsWithCustomSchema,
158
161
  port,
159
162
  puppeteerInstance,
160
163
  serveUrlOrWebpackUrl: urlOrBundle,
161
164
  timeoutInMilliseconds: puppeteerTimeout,
162
- verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
163
- server: await server,
165
+ logLevel,
166
+ server,
164
167
  });
165
168
  const { codec, reason: codecReason } = (0, get_final_output_codec_1.getFinalOutputCodec)({
166
169
  cliFlag: parse_command_line_1.parsedCli.codec,
@@ -212,10 +215,9 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
212
215
  ? absoluteOutputFile
213
216
  : await node_fs_1.default.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'react-motion-render'));
214
217
  log_1.Log.verboseAdvanced({ indent, logLevel }, 'Output dir', outputDir);
215
- const verbose = renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose');
216
218
  await renderer_1.RenderInternals.internalRenderFrames({
217
219
  imageFormat,
218
- inputProps,
220
+ serializedInputPropsWithCustomSchema,
219
221
  onFrameUpdate: (rendered) => {
220
222
  renderingProgress.frames = rendered;
221
223
  updateRenderProgress(false);
@@ -225,7 +227,6 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
225
227
  cancelSignal: cancelSignal !== null && cancelSignal !== void 0 ? cancelSignal : undefined,
226
228
  outputDir,
227
229
  webpackBundleOrServeUrl: urlOrBundle,
228
- dumpBrowserLogs: verbose,
229
230
  everyNthFrame,
230
231
  envVariables,
231
232
  frameRange,
@@ -243,7 +244,12 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
243
244
  muted,
244
245
  onBrowserLog: null,
245
246
  onFrameBuffer: null,
246
- verbose,
247
+ logLevel,
248
+ serializedResolvedPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
249
+ indent: undefined,
250
+ staticBase: null,
251
+ data: config.props,
252
+ }).serializedString,
247
253
  });
248
254
  updateRenderProgress(true);
249
255
  log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.blue(`▶ ${absoluteOutputFile}`));
@@ -266,19 +272,18 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
266
272
  crf: crf !== null && crf !== void 0 ? crf : null,
267
273
  envVariables,
268
274
  frameRange,
269
- inputProps,
275
+ serializedInputPropsWithCustomSchema,
270
276
  overwrite,
271
277
  pixelFormat,
272
278
  proResProfile,
273
279
  jpegQuality: jpegQuality !== null && jpegQuality !== void 0 ? jpegQuality : renderer_1.RenderInternals.DEFAULT_JPEG_QUALITY,
274
- dumpBrowserLogs: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
275
280
  chromiumOptions,
276
- timeoutInMilliseconds: config_1.ConfigInternals.getCurrentPuppeteerTimeout(),
281
+ timeoutInMilliseconds: puppeteerTimeout,
277
282
  scale,
278
283
  port,
279
284
  numberOfGifLoops,
280
285
  everyNthFrame,
281
- verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
286
+ logLevel,
282
287
  muted,
283
288
  enforceAudioTrack,
284
289
  browserExecutable,
@@ -312,14 +317,18 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
312
317
  disallowParallelEncoding,
313
318
  onBrowserLog: null,
314
319
  onStart: () => undefined,
320
+ serializedResolvedPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
321
+ data: config.props,
322
+ indent: undefined,
323
+ staticBase: null,
324
+ }).serializedString,
315
325
  });
316
- log_1.Log.verboseAdvanced({ indent, logLevel });
326
+ updateRenderProgress(true);
327
+ log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.blue(`${exists ? '○' : '+'} ${absoluteOutputFile}`));
317
328
  log_1.Log.verboseAdvanced({ indent, logLevel }, `Slowest frames:`);
318
329
  slowestFrames.forEach(({ frame, time }) => {
319
- log_1.Log.verboseAdvanced({ indent, logLevel }, `Frame ${frame} (${time.toFixed(3)}ms)`);
330
+ log_1.Log.verboseAdvanced({ indent, logLevel }, ` Frame ${frame} (${time.toFixed(3)}ms)`);
320
331
  });
321
- updateRenderProgress(true);
322
- log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.blue(`${exists ? '○' : '+'} ${absoluteOutputFile}`));
323
332
  for (const line of renderer_1.RenderInternals.perf.getPerf()) {
324
333
  log_1.Log.verboseAdvanced({ indent, logLevel }, line);
325
334
  }
@@ -1,11 +1,11 @@
1
1
  import type { Browser, BrowserExecutable, CancelSignal, ChromiumOptions, LogLevel, StillImageFormat } from '@remotion/renderer';
2
2
  import type { JobProgressCallback } from '../preview-server/render-queue/job';
3
- export declare const renderStillFlow: ({ remotionRoot, fullEntryPoint, entryPointReason, remainingArgs, browser, browserExecutable, chromiumOptions, envVariables, height, inputProps, overwrite, port, publicDir, puppeteerTimeout, jpegQuality, scale, stillFrame, width, compositionIdFromUi, imageFormatFromUi, logLevel, onProgress, indentOutput, addCleanupCallback, cancelSignal, outputLocationFromUi, }: {
3
+ export declare const renderStillFlow: ({ remotionRoot, fullEntryPoint, entryPointReason, remainingArgs, browser, browserExecutable, chromiumOptions, envVariables, height, serializedInputPropsWithCustomSchema, overwrite, port, publicDir, puppeteerTimeout, jpegQuality, scale, stillFrame, width, compositionIdFromUi, imageFormatFromUi, logLevel, onProgress, indentOutput, addCleanupCallback, cancelSignal, outputLocationFromUi, }: {
4
4
  remotionRoot: string;
5
5
  fullEntryPoint: string;
6
6
  entryPointReason: string;
7
7
  remainingArgs: string[];
8
- inputProps: Record<string, unknown>;
8
+ serializedInputPropsWithCustomSchema: string;
9
9
  envVariables: Record<string, string>;
10
10
  jpegQuality: number;
11
11
  browser: Browser;
@@ -8,6 +8,7 @@ exports.renderStillFlow = void 0;
8
8
  const renderer_1 = require("@remotion/renderer");
9
9
  const node_fs_1 = require("node:fs");
10
10
  const node_path_1 = __importDefault(require("node:path"));
11
+ const remotion_1 = require("remotion");
11
12
  const chalk_1 = require("../chalk");
12
13
  const cleanup_before_quit_1 = require("../cleanup-before-quit");
13
14
  const config_1 = require("../config");
@@ -22,7 +23,7 @@ const setup_cache_1 = require("../setup-cache");
22
23
  const should_use_non_overlaying_logger_1 = require("../should-use-non-overlaying-logger");
23
24
  const truthy_1 = require("../truthy");
24
25
  const user_passed_output_location_1 = require("../user-passed-output-location");
25
- const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason, remainingArgs, browser, browserExecutable, chromiumOptions, envVariables, height, inputProps, overwrite, port, publicDir, puppeteerTimeout, jpegQuality, scale, stillFrame, width, compositionIdFromUi, imageFormatFromUi, logLevel, onProgress, indentOutput, addCleanupCallback, cancelSignal, outputLocationFromUi, }) => {
26
+ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason, remainingArgs, browser, browserExecutable, chromiumOptions, envVariables, height, serializedInputPropsWithCustomSchema, overwrite, port, publicDir, puppeteerTimeout, jpegQuality, scale, stillFrame, width, compositionIdFromUi, imageFormatFromUi, logLevel, onProgress, indentOutput, addCleanupCallback, cancelSignal, outputLocationFromUi, }) => {
26
27
  var _a, _b;
27
28
  const downloads = [];
28
29
  const aggregate = (0, progress_types_1.initialAggregateRenderProgress)();
@@ -43,16 +44,17 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
43
44
  }
44
45
  onProgress({ message, value: progress, ...aggregate });
45
46
  };
46
- log_1.Log.verboseAdvanced({ indent: indentOutput, logLevel }, 'Browser executable: ', browserExecutable);
47
- const verbose = renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose');
47
+ if (browserExecutable) {
48
+ log_1.Log.verboseAdvanced({ indent: indentOutput, logLevel }, 'Browser executable: ', browserExecutable);
49
+ }
48
50
  const browserInstance = renderer_1.RenderInternals.internalOpenBrowser({
49
51
  browser,
50
52
  browserExecutable,
51
53
  chromiumOptions,
52
- shouldDumpIo: verbose,
53
54
  forceDeviceScaleFactor: scale,
54
55
  indent: indentOutput,
55
56
  viewport: null,
57
+ logLevel,
56
58
  });
57
59
  const { cleanup: cleanupBundle, urlOrBundle } = await (0, setup_cache_1.bundleOnCliOrTakeServeUrl)({
58
60
  fullPath: fullEntryPoint,
@@ -74,18 +76,18 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
74
76
  },
75
77
  quietProgress: updatesDontOverwrite,
76
78
  });
77
- const server = renderer_1.RenderInternals.prepareServer({
79
+ const server = await renderer_1.RenderInternals.prepareServer({
78
80
  concurrency: 1,
79
81
  indent: indentOutput,
80
82
  port,
81
83
  remotionRoot,
82
- verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
84
+ logLevel,
83
85
  webpackConfigOrServeUrl: urlOrBundle,
84
86
  });
85
- addCleanupCallback(() => server.then((s) => s.closeServer(false)));
87
+ addCleanupCallback(() => server.closeServer(false));
86
88
  addCleanupCallback(() => cleanupBundle());
87
89
  const puppeteerInstance = await browserInstance;
88
- addCleanupCallback(() => puppeteerInstance.close(false));
90
+ addCleanupCallback(() => puppeteerInstance.close(false, logLevel, indentOutput));
89
91
  const { compositionId, config, reason, argsAfterComposition } = await (0, get_composition_with_dimension_override_1.getCompositionWithDimensionOverride)({
90
92
  height,
91
93
  width,
@@ -95,13 +97,13 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
95
97
  chromiumOptions,
96
98
  envVariables,
97
99
  indent: indentOutput,
98
- inputProps,
100
+ serializedInputPropsWithCustomSchema,
99
101
  port,
100
102
  puppeteerInstance,
101
103
  serveUrlOrWebpackUrl: urlOrBundle,
102
104
  timeoutInMilliseconds: puppeteerTimeout,
103
- verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
104
- server: await server,
105
+ logLevel,
106
+ server,
105
107
  });
106
108
  const { format: imageFormat, source } = (0, determine_image_format_1.determineFinalStillImageFormat)({
107
109
  cliFlag: (_a = parse_command_line_1.parsedCli['image-format']) !== null && _a !== void 0 ? _a : null,
@@ -162,10 +164,9 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
162
164
  output: absoluteOutputLocation,
163
165
  serveUrl: urlOrBundle,
164
166
  jpegQuality,
165
- dumpBrowserLogs: verbose,
166
167
  envVariables,
167
168
  imageFormat,
168
- inputProps,
169
+ serializedInputPropsWithCustomSchema,
169
170
  chromiumOptions,
170
171
  timeoutInMilliseconds: puppeteerTimeout,
171
172
  scale,
@@ -178,7 +179,12 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
178
179
  cancelSignal,
179
180
  indent: indentOutput,
180
181
  onBrowserLog: null,
181
- verbose,
182
+ logLevel,
183
+ serializedResolvedPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
184
+ indent: undefined,
185
+ staticBase: null,
186
+ data: config.props,
187
+ }).serializedString,
182
188
  });
183
189
  aggregate.rendering = {
184
190
  frames: 1,
package/dist/render.js CHANGED
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.render = void 0;
4
4
  // eslint-disable-next-line no-restricted-imports
5
+ const remotion_1 = require("remotion");
5
6
  const cleanup_before_quit_1 = require("./cleanup-before-quit");
6
7
  const config_1 = require("./config");
7
8
  const convert_entry_point_to_serve_url_1 = require("./convert-entry-point-to-serve-url");
@@ -42,7 +43,11 @@ const render = async (remotionRoot, args) => {
42
43
  shouldOutputImageSequence,
43
44
  publicDir,
44
45
  envVariables,
45
- inputProps,
46
+ serializedInputPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
47
+ indent: undefined,
48
+ staticBase: null,
49
+ data: inputProps,
50
+ }).serializedString,
46
51
  puppeteerTimeout,
47
52
  port,
48
53
  height,
@@ -139,7 +139,7 @@ const bundleOnCli = async ({ fullPath, remotionRoot, publicDir, onProgressCallba
139
139
  };
140
140
  copyingState = {
141
141
  ...copyingState,
142
- doneIn: copyStart ? Date.now() - copyStart : null,
142
+ doneIn: copyStart ? Date.now() - copyStart : 0,
143
143
  };
144
144
  updateProgress(true);
145
145
  log_1.Log.verboseAdvanced({ indent, logLevel }, 'Bundled under', bundled);
package/dist/still.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.still = void 0;
4
+ const remotion_1 = require("remotion");
4
5
  const cleanup_before_quit_1 = require("./cleanup-before-quit");
5
6
  const convert_entry_point_to_serve_url_1 = require("./convert-entry-point-to-serve-url");
6
7
  const entry_point_1 = require("./entry-point");
@@ -36,7 +37,11 @@ const still = async (remotionRoot, args) => {
36
37
  chromiumOptions,
37
38
  envVariables,
38
39
  height,
39
- inputProps,
40
+ serializedInputPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
41
+ data: inputProps,
42
+ indent: undefined,
43
+ staticBase: null,
44
+ }).serializedString,
40
45
  overwrite,
41
46
  port,
42
47
  publicDir,
@@ -0,0 +1,3 @@
1
+ import { ErrorWithStackFrame } from './handle-javascript-exception';
2
+ import type { SymbolicateableError } from './symbolicateable-error';
3
+ export declare const symbolicateError: (symbolicateableError: SymbolicateableError) => Promise<ErrorWithStackFrame>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.symbolicateError = void 0;
4
+ const symbolicate_stacktrace_1 = require("../symbolicate-stacktrace");
5
+ const handle_javascript_exception_1 = require("./handle-javascript-exception");
6
+ const truthy_1 = require("./truthy");
7
+ const symbolicateError = async (symbolicateableError) => {
8
+ const { delayRenderCall, stackFrame } = symbolicateableError;
9
+ const [mainErrorFrames, delayRenderFrames] = await Promise.all([
10
+ stackFrame ? (0, symbolicate_stacktrace_1.symbolicateStackTraceFromRemoteFrames)(stackFrame) : null,
11
+ delayRenderCall
12
+ ? (0, symbolicate_stacktrace_1.symbolicateStackTraceFromRemoteFrames)(delayRenderCall)
13
+ : null,
14
+ ].filter(truthy_1.truthy));
15
+ const symbolicatedErr = new handle_javascript_exception_1.ErrorWithStackFrame({
16
+ message: symbolicateableError.message,
17
+ symbolicatedStackFrames: mainErrorFrames,
18
+ frame: symbolicateableError.frame,
19
+ name: symbolicateableError.name,
20
+ delayRenderCall: delayRenderFrames,
21
+ });
22
+ return symbolicatedErr;
23
+ };
24
+ exports.symbolicateError = symbolicateError;
@@ -0,0 +1,7 @@
1
+ import type { SymbolicatedStackFrame, UnsymbolicatedStackFrame } from '@remotion/renderer';
2
+ import type { SourceMapConsumer } from 'source-map';
3
+ import { ErrorWithStackFrame } from './error-with-stack-frame';
4
+ export declare const symbolicateError: (symbolicateableError: SymbolicateableError) => Promise<ErrorWithStackFrame>;
5
+ export declare const symbolicateStackTraceFromRemoteFrames: (frames: UnsymbolicatedStackFrame[]) => Promise<SymbolicatedStackFrame[]>;
6
+ export declare const getSourceMapFromRemoteFile: (fileName: string) => Promise<any>;
7
+ export declare const symbolicateFromSources: (frames: UnsymbolicatedStackFrame[], mapValues: Record<string, SourceMapConsumer | null>) => SymbolicatedStackFrame[];
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.symbolicateFromSources = exports.getSourceMapFromRemoteFile = exports.symbolicateStackTraceFromRemoteFrames = exports.symbolicateError = void 0;
4
+ const renderer_1 = require("@remotion/renderer");
5
+ const truthy_1 = require("./truthy");
6
+ const error_with_stack_frame_1 = require("./error-with-stack-frame");
7
+ const symbolicateError = async (symbolicateableError) => {
8
+ const { delayRenderCall, stackFrame } = symbolicateableError;
9
+ const [mainErrorFrames, delayRenderFrames] = await Promise.all([
10
+ stackFrame ? (0, exports.symbolicateStackTraceFromRemoteFrames)(stackFrame) : null,
11
+ delayRenderCall
12
+ ? (0, exports.symbolicateStackTraceFromRemoteFrames)(delayRenderCall)
13
+ : null,
14
+ ].filter(truthy_1.truthy));
15
+ const symbolicatedErr = new error_with_stack_frame_1.ErrorWithStackFrame({
16
+ message: symbolicateableError.message,
17
+ symbolicatedStackFrames: mainErrorFrames,
18
+ frame: symbolicateableError.frame,
19
+ name: symbolicateableError.name,
20
+ delayRenderCall: delayRenderFrames,
21
+ });
22
+ return symbolicatedErr;
23
+ };
24
+ exports.symbolicateError = symbolicateError;
25
+ const symbolicateStackTraceFromRemoteFrames = async (frames) => {
26
+ const uniqueFileNames = [
27
+ ...new Set(frames
28
+ .map((f) => f.fileName)
29
+ .filter((f) => f.startsWith('http://') || f.startsWith('https://'))
30
+ .filter(truthy_1.truthy)),
31
+ ];
32
+ const maps = await Promise.all(uniqueFileNames.map((fileName) => {
33
+ return (0, exports.getSourceMapFromRemoteFile)(fileName);
34
+ }));
35
+ const mapValues = {};
36
+ for (let i = 0; i < uniqueFileNames.length; i++) {
37
+ mapValues[uniqueFileNames[i]] = maps[i];
38
+ }
39
+ return (0, exports.symbolicateFromSources)(frames, mapValues);
40
+ };
41
+ exports.symbolicateStackTraceFromRemoteFrames = symbolicateStackTraceFromRemoteFrames;
42
+ const getSourceMapFromRemoteFile = async (fileName) => {
43
+ const fileContents = await renderer_1.RenderInternals.fetchUrl(fileName);
44
+ return renderer_1.RenderInternals.getSourceMap(fileName, fileContents, 'remote');
45
+ };
46
+ exports.getSourceMapFromRemoteFile = getSourceMapFromRemoteFile;
47
+ const symbolicateFromSources = (frames, mapValues) => {
48
+ return frames
49
+ .map((frame) => {
50
+ const map = mapValues[frame.fileName];
51
+ if (!map) {
52
+ return null;
53
+ }
54
+ return symbolicateStackFrame(frame, map);
55
+ })
56
+ .filter(truthy_1.truthy);
57
+ };
58
+ exports.symbolicateFromSources = symbolicateFromSources;
59
+ const symbolicateStackFrame = (frame, map) => {
60
+ const pos = getOriginalPosition(map, frame.lineNumber, frame.columnNumber);
61
+ const hasSource = pos.source ? map.sourceContentFor(pos.source, false) : null;
62
+ const scriptCode = hasSource && pos.line
63
+ ? getLinesAround(pos.line, 3, hasSource.split('\n'))
64
+ : null;
65
+ return {
66
+ originalColumnNumber: pos.column,
67
+ originalFileName: pos.source,
68
+ originalFunctionName: frame.functionName,
69
+ originalLineNumber: pos.line,
70
+ originalScriptCode: scriptCode,
71
+ };
72
+ };
73
+ const getOriginalPosition = (source_map, line, column) => {
74
+ const result = source_map.originalPositionFor({
75
+ line,
76
+ column,
77
+ });
78
+ return { line: result.line, column: result.column, source: result.source };
79
+ };
80
+ function getLinesAround(line, count, lines) {
81
+ const result = [];
82
+ for (let index = Math.max(0, line - 1 - count) + 1; index <= Math.min(lines.length - 1, line - 1 + count); ++index) {
83
+ result.push({
84
+ lineNumber: index + 1,
85
+ content: lines[index],
86
+ highlight: index + 1 === line,
87
+ });
88
+ }
89
+ return result;
90
+ }
@@ -0,0 +1,28 @@
1
+ import type { BasicSourceMapConsumer, IndexedSourceMapConsumer } from 'source-map';
2
+ import { SourceMapConsumer } from 'source-map';
3
+ import type { UnsymbolicatedStackFrame } from './parse-browser-error-stack';
4
+ type ScriptLine = {
5
+ lineNumber: number;
6
+ content: string;
7
+ highlight: boolean;
8
+ };
9
+ export type SymbolicatedStackFrame = {
10
+ originalFunctionName: string | null;
11
+ originalFileName: string | null;
12
+ originalLineNumber: number | null;
13
+ originalColumnNumber: number | null;
14
+ originalScriptCode: ScriptLine[] | null;
15
+ };
16
+ export declare const symbolicateStackTraceFromRemoteFrames: (frames: UnsymbolicatedStackFrame[]) => Promise<SymbolicatedStackFrame[]>;
17
+ export declare const symbolicateFromSources: (frames: UnsymbolicatedStackFrame[], mapValues: Record<string, SourceMapConsumer | null>) => SymbolicatedStackFrame[];
18
+ export declare const symbolicateStackFrame: (frame: UnsymbolicatedStackFrame, map: SourceMapConsumer) => {
19
+ originalColumnNumber: number | null;
20
+ originalFileName: string | null;
21
+ originalFunctionName: any;
22
+ originalLineNumber: number | null;
23
+ originalScriptCode: ScriptLine[] | null;
24
+ };
25
+ export declare const getSourceMapFromRemoteFile: (fileName: string) => Promise<SourceMapConsumer | null>;
26
+ export declare const getSourceMapFromLocalFile: (fileName: string) => Promise<SourceMapConsumer | null>;
27
+ export type AnySourceMapConsumer = BasicSourceMapConsumer | IndexedSourceMapConsumer;
28
+ export {};