@remotion/cli 4.1.0-alpha1 → 4.1.0-alpha11

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 (108) 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/Canvas.js +4 -4
  8. package/dist/editor/components/CanvasOrLoading.js +20 -1
  9. package/dist/editor/components/CopyButton.js +5 -2
  10. package/dist/editor/components/Editor.js +1 -3
  11. package/dist/editor/components/FramePersistor.d.ts +0 -2
  12. package/dist/editor/components/FramePersistor.js +4 -24
  13. package/dist/editor/components/FullscreenToggle.d.ts +2 -0
  14. package/dist/editor/components/FullscreenToggle.js +25 -0
  15. package/dist/editor/components/GlobalKeybindings.js +1 -1
  16. package/dist/editor/components/InitialCompositionLoader.js +1 -22
  17. package/dist/editor/components/KeyboardShortcutsExplainer.js +1 -1
  18. package/dist/editor/components/NewComposition/InputDragger.js +13 -1
  19. package/dist/editor/components/NewComposition/RemInput.d.ts +2 -2
  20. package/dist/editor/components/NewComposition/RemInputTypeColor.d.ts +1 -1
  21. package/dist/editor/components/NewComposition/RemTextarea.d.ts +1 -1
  22. package/dist/editor/components/OpenEditorButton.js +5 -2
  23. package/dist/editor/components/PlayPause.js +4 -4
  24. package/dist/editor/components/PlaybackRateSelector.js +1 -1
  25. package/dist/editor/components/PreviewToolbar.js +3 -1
  26. package/dist/editor/components/QuickSwitcher/QuickSwitcherResult.js +3 -3
  27. package/dist/editor/components/RenderModal/DataEditor.d.ts +2 -0
  28. package/dist/editor/components/RenderModal/DataEditor.js +13 -10
  29. package/dist/editor/components/RenderModal/FrameRangeSetting.js +9 -25
  30. package/dist/editor/components/RenderModal/MultiRangeSlider.d.ts +12 -0
  31. package/dist/editor/components/RenderModal/MultiRangeSlider.js +50 -0
  32. package/dist/editor/components/RenderModal/RenderModal.js +7 -3
  33. package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +2 -3
  34. package/dist/editor/components/RenderModal/RenderModalJSONPropsEditor.d.ts +1 -2
  35. package/dist/editor/components/RenderModal/RenderModalJSONPropsEditor.js +10 -11
  36. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.d.ts +2 -2
  37. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.js +26 -0
  38. package/dist/editor/components/RenderModal/SchemaEditor/SchemaErrorMessages.js +1 -3
  39. package/dist/editor/components/RenderModal/SchemaEditor/SchemaLabel.js +1 -2
  40. package/dist/editor/components/RenderModal/SchemaEditor/SchemaSaveButton.js +2 -1
  41. package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayEditor.js +7 -7
  42. package/dist/editor/components/RenderModal/SchemaEditor/ZodBooleanEditor.d.ts +1 -1
  43. package/dist/editor/components/RenderModal/SchemaEditor/ZodBooleanEditor.js +1 -1
  44. package/dist/editor/components/RenderModal/SchemaEditor/ZodColorEditor.js +1 -1
  45. package/dist/editor/components/RenderModal/SchemaEditor/ZodDateEditor.js +1 -1
  46. package/dist/editor/components/RenderModal/SchemaEditor/ZodEffectEditor.js +2 -2
  47. package/dist/editor/components/RenderModal/SchemaEditor/ZodEnumEditor.js +1 -1
  48. package/dist/editor/components/RenderModal/SchemaEditor/ZodFieldValidation.js +1 -1
  49. package/dist/editor/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +1 -1
  50. package/dist/editor/components/RenderModal/SchemaEditor/ZodNumberEditor.js +1 -1
  51. package/dist/editor/components/RenderModal/SchemaEditor/ZodObjectEditor.js +29 -10
  52. package/dist/editor/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +2 -2
  53. package/dist/editor/components/RenderModal/SchemaEditor/ZodStaticFileEditor.js +1 -1
  54. package/dist/editor/components/RenderModal/SchemaEditor/ZodStringEditor.js +1 -1
  55. package/dist/editor/components/RenderModal/SchemaEditor/ZodSwitch.js +0 -1
  56. package/dist/editor/components/RenderModal/SchemaEditor/local-state.js +9 -3
  57. package/dist/editor/components/RenderModal/human-readable-codec.d.ts +1 -1
  58. package/dist/editor/components/RenderQueue/actions.d.ts +1 -1
  59. package/dist/editor/components/RenderQueue/actions.js +12 -4
  60. package/dist/editor/components/RightPanel.js +45 -12
  61. package/dist/editor/components/SetTimelineInOutProvider.js +5 -4
  62. package/dist/editor/components/SidebarRenderButton.js +3 -1
  63. package/dist/editor/components/Timeline/TimelineDragHandler.js +45 -19
  64. package/dist/editor/components/TimelineInOutToggle.d.ts +2 -1
  65. package/dist/editor/components/TimelineInOutToggle.js +82 -67
  66. package/dist/editor/helpers/colors.d.ts +1 -1
  67. package/dist/editor/helpers/is-composition-still.d.ts +1 -1
  68. package/dist/editor/helpers/is-current-selected-still.js +5 -6
  69. package/dist/editor/helpers/use-menu-structure.js +25 -1
  70. package/dist/editor/icons/keys.js +1 -0
  71. package/dist/editor/state/canvas-ref.d.ts +2 -0
  72. package/dist/editor/state/canvas-ref.js +5 -0
  73. package/dist/editor/state/in-out.d.ts +3 -2
  74. package/dist/editor/state/in-out.js +22 -5
  75. package/dist/editor/state/marks.d.ts +3 -2
  76. package/dist/editor/state/marks.js +6 -6
  77. package/dist/get-composition-id.d.ts +6 -6
  78. package/dist/get-composition-id.js +13 -6
  79. package/dist/get-composition-with-dimension-override.d.ts +6 -6
  80. package/dist/get-composition-with-dimension-override.js +3 -3
  81. package/dist/handle-common-errors.js +8 -0
  82. package/dist/index.d.ts +13 -7
  83. package/dist/index.js +5 -2
  84. package/dist/log.d.ts +6 -1
  85. package/dist/parse-command-line.js +1 -1
  86. package/dist/preview-server/dev-middleware/range-parser.d.ts +1 -1
  87. package/dist/preview-server/dev-middleware/setup-hooks.js +1 -1
  88. package/dist/preview-server/render-queue/job.d.ts +2 -2
  89. package/dist/preview-server/render-queue/make-retry-payload.js +3 -2
  90. package/dist/preview-server/render-queue/open-directory-in-finder.js +11 -5
  91. package/dist/preview-server/render-queue/process-still.js +1 -1
  92. package/dist/preview-server/render-queue/process-video.js +1 -1
  93. package/dist/preview-server/routes/add-render.js +2 -2
  94. package/dist/preview-server/routes/update-default-props.js +1 -2
  95. package/dist/print-compositions.d.ts +2 -2
  96. package/dist/print-error.js +6 -3
  97. package/dist/progress-bar.js +2 -5
  98. package/dist/render-flows/render.d.ts +2 -2
  99. package/dist/render-flows/render.js +31 -22
  100. package/dist/render-flows/still.d.ts +2 -2
  101. package/dist/render-flows/still.js +20 -14
  102. package/dist/render.js +6 -1
  103. package/dist/setup-cache.js +1 -1
  104. package/dist/still.js +6 -1
  105. package/package.json +11 -11
  106. package/styles/styles.css +53 -0
  107. package/dist/editor/components/RenderModal/SchemaEditor/input-props-serialization.d.ts +0 -14
  108. package/dist/editor/components/RenderModal/SchemaEditor/input-props-serialization.js +0 -42
package/dist/index.d.ts CHANGED
@@ -9,7 +9,7 @@ export declare const CliInternals: {
9
9
  indent: boolean;
10
10
  }) => import("./progress-bar").OverwriteableCliOutput;
11
11
  chalk: {
12
- enabled: boolean;
12
+ enabled: () => boolean;
13
13
  visible: boolean;
14
14
  styles: Record<string, {
15
15
  codes: [number, number];
@@ -33,6 +33,7 @@ export declare const CliInternals: {
33
33
  yellow: (str: string) => string;
34
34
  blue: (str: string) => string;
35
35
  magenta: (str: string) => string;
36
+ cyan: (str: string) => string;
36
37
  white: (str: string) => string;
37
38
  gray: (str: string) => string;
38
39
  bgBlack: (str: string) => string;
@@ -65,7 +66,6 @@ export declare const CliInternals: {
65
66
  logLevel: "verbose" | "info" | "warn" | "error";
66
67
  } & {
67
68
  tag?: string | undefined;
68
- secondTag?: string | undefined;
69
69
  }, message?: any, ...optionalParams: any[]) => void;
70
70
  info: (message?: any, ...optionalParams: any[]) => void;
71
71
  infoAdvanced: (options: {
@@ -78,6 +78,12 @@ export declare const CliInternals: {
78
78
  logLevel: "verbose" | "info" | "warn" | "error";
79
79
  }, message?: any, ...optionalParams: any[]) => void;
80
80
  error: (message?: any, ...optionalParams: any[]) => void;
81
+ errorAdvanced: (options: {
82
+ indent: boolean;
83
+ logLevel: "verbose" | "info" | "warn" | "error";
84
+ } & {
85
+ tag?: string | undefined;
86
+ }, message?: any, ...optionalParams: any[]) => void;
81
87
  };
82
88
  getCliOptions: (options: {
83
89
  isLambda: boolean;
@@ -202,7 +208,7 @@ export declare const CliInternals: {
202
208
  codec: import("@remotion/renderer").CodecOrUndefined;
203
209
  uiImageFormat: "png" | "jpeg" | "none" | null;
204
210
  }) => "png" | "jpeg" | "none";
205
- printCompositions: (compositions: import("remotion").AnyCompMetadata[]) => void;
211
+ printCompositions: (compositions: import("remotion").VideoConfig[]) => void;
206
212
  getFinalOutputCodec: ({ cliFlag, configFile, downloadName, outName, uiCodec, }: {
207
213
  cliFlag: import("@remotion/renderer").CodecOrUndefined;
208
214
  outName: string | null;
@@ -217,7 +223,7 @@ export declare const CliInternals: {
217
223
  shouldUseNonOverlayingLogger: ({ logLevel, }: {
218
224
  logLevel: "verbose" | "info" | "warn" | "error";
219
225
  }) => boolean;
220
- getCompositionWithDimensionOverride: ({ height, width, args, compositionIdFromUi, chromiumOptions, envVariables, port, puppeteerInstance, timeoutInMilliseconds, browserExecutable, serveUrlOrWebpackUrl, indent, inputProps, verbose, server, }: {
226
+ getCompositionWithDimensionOverride: ({ height, width, args, compositionIdFromUi, chromiumOptions, envVariables, port, puppeteerInstance, timeoutInMilliseconds, browserExecutable, serveUrlOrWebpackUrl, indent, serializedInputPropsWithCustomSchema, logLevel, server, }: {
221
227
  height: number | null;
222
228
  width: number | null;
223
229
  args: string[];
@@ -230,13 +236,13 @@ export declare const CliInternals: {
230
236
  browserExecutable: import("@remotion/renderer").BrowserExecutable;
231
237
  serveUrlOrWebpackUrl: string;
232
238
  indent: boolean;
233
- verbose: boolean;
234
- inputProps: Record<string, unknown>;
239
+ logLevel: "verbose" | "info" | "warn" | "error";
240
+ serializedInputPropsWithCustomSchema: string;
235
241
  server: import("@remotion/renderer").RemotionServer;
236
242
  }) => Promise<{
237
243
  compositionId: string;
238
244
  reason: string;
239
- config: import("remotion").AnyCompMetadata;
245
+ config: import("remotion").VideoConfig;
240
246
  argsAfterComposition: string[];
241
247
  }>;
242
248
  };
package/dist/index.js CHANGED
@@ -62,14 +62,17 @@ const cli = async () => {
62
62
  if (command !== versions_1.VERSIONS_COMMAND) {
63
63
  await (0, versions_1.validateVersionsBeforeCommand)(remotionRoot);
64
64
  }
65
- const errorSymbolicationLock = renderer_1.RenderInternals.registerErrorSymbolicationLock();
65
+ const isStudio = command === 'studio' || command === 'preview';
66
+ const errorSymbolicationLock = isStudio
67
+ ? 0
68
+ : renderer_1.RenderInternals.registerErrorSymbolicationLock();
66
69
  (0, cleanup_before_quit_1.handleCtrlC)();
67
70
  await (0, initialize_cli_1.initializeCli)(remotionRoot);
68
71
  try {
69
72
  if (command === 'compositions') {
70
73
  await (0, compositions_1.listCompositionsCommand)(remotionRoot, args);
71
74
  }
72
- else if (command === 'preview' || command === 'studio') {
75
+ else if (isStudio) {
73
76
  await (0, studio_1.studioCommand)(remotionRoot, args);
74
77
  }
75
78
  else if (command === 'lambda') {
package/dist/log.d.ts CHANGED
@@ -5,7 +5,6 @@ export declare const Log: {
5
5
  logLevel: "verbose" | "info" | "warn" | "error";
6
6
  } & {
7
7
  tag?: string | undefined;
8
- secondTag?: string | undefined;
9
8
  }, message?: any, ...optionalParams: any[]) => void;
10
9
  info: (message?: any, ...optionalParams: any[]) => void;
11
10
  infoAdvanced: (options: {
@@ -18,4 +17,10 @@ export declare const Log: {
18
17
  logLevel: "verbose" | "info" | "warn" | "error";
19
18
  }, message?: any, ...optionalParams: any[]) => void;
20
19
  error: (message?: any, ...optionalParams: any[]) => void;
20
+ errorAdvanced: (options: {
21
+ indent: boolean;
22
+ logLevel: "verbose" | "info" | "warn" | "error";
23
+ } & {
24
+ tag?: string | undefined;
25
+ }, message?: any, ...optionalParams: any[]) => void;
21
26
  };
@@ -88,7 +88,7 @@ const parseCommandLine = () => {
88
88
  config_1.ConfigInternals.setStillFrame(Number(exports.parsedCli.frame));
89
89
  }
90
90
  if (exports.parsedCli.png) {
91
- throw new Error('The --png flag has been deprecrated. Use --sequence --image-format=png from now on.');
91
+ throw new Error('The --png flag has been removed. Use --sequence --image-format=png from now on.');
92
92
  }
93
93
  if (exports.parsedCli.sequence) {
94
94
  config_1.Config.setImageSequence(true);
@@ -11,5 +11,5 @@ type Range = {
11
11
  type Ranges = Range[] & {
12
12
  type?: string;
13
13
  };
14
- export declare function parseRange(size: number, str: string | string[]): -1 | Ranges | -2;
14
+ export declare function parseRange(size: number, str: string | string[]): -1 | -2 | Ranges;
15
15
  export {};
@@ -23,7 +23,7 @@ function setupHooks(context) {
23
23
  logger.log('Compilation finished');
24
24
  const statsOptions = {
25
25
  preset: 'errors-warnings',
26
- colors: renderer_1.RenderInternals.isColorSupported,
26
+ colors: renderer_1.RenderInternals.isColorSupported(),
27
27
  };
28
28
  const printedStats = stats.toString(statsOptions);
29
29
  const lines = printedStats
@@ -61,7 +61,7 @@ export type RenderJob = {
61
61
  cancelToken: ReturnType<typeof makeCancelSignal>;
62
62
  chromiumOptions: RequiredChromiumOptions;
63
63
  envVariables: Record<string, string>;
64
- inputProps: Record<string, unknown>;
64
+ serializedInputPropsWithCustomSchema: string;
65
65
  } & RenderJobDynamicFields;
66
66
  export type RenderJobWithCleanup = RenderJob & {
67
67
  cleanup: (() => void)[];
@@ -105,7 +105,7 @@ export type AddRenderRequest = {
105
105
  chromiumOptions: RequiredChromiumOptions;
106
106
  delayRenderTimeout: number;
107
107
  envVariables: Record<string, string>;
108
- inputProps: Record<string, unknown>;
108
+ serializedInputPropsWithCustomSchema: string;
109
109
  } & AddRenderRequestDynamicFields;
110
110
  export type RemoveRenderRequest = {
111
111
  jobId: string;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeRetryPayload = void 0;
4
+ const remotion_1 = require("remotion");
4
5
  const get_default_video_contexts_1 = require("./get-default-video-contexts");
5
6
  const makeRetryPayload = (job) => {
6
7
  var _a, _b, _c;
@@ -44,7 +45,7 @@ const makeRetryPayload = (job) => {
44
45
  initialOpenGlRenderer: job.chromiumOptions.gl,
45
46
  initialHeadless: job.chromiumOptions.headless,
46
47
  initialIgnoreCertificateErrors: job.chromiumOptions.ignoreCertificateErrors,
47
- defaultProps: job.inputProps,
48
+ defaultProps: remotion_1.Internals.deserializeJSONWithCustomFields(job.serializedInputPropsWithCustomSchema),
48
49
  inFrameMark: null,
49
50
  outFrameMark: null,
50
51
  };
@@ -85,7 +86,7 @@ const makeRetryPayload = (job) => {
85
86
  initialOpenGlRenderer: job.chromiumOptions.gl,
86
87
  initialHeadless: job.chromiumOptions.headless,
87
88
  initialIgnoreCertificateErrors: job.chromiumOptions.ignoreCertificateErrors,
88
- defaultProps: job.inputProps,
89
+ defaultProps: remotion_1.Internals.deserializeJSONWithCustomFields(job.serializedInputPropsWithCustomSchema),
89
90
  inFrameMark: job.startFrame,
90
91
  outFrameMark: job.endFrame,
91
92
  };
@@ -14,11 +14,17 @@ const openDirectoryInFinder = (dirToOpen, allowedDirectory) => {
14
14
  if (relativeToProcessCwd.startsWith('..')) {
15
15
  throw new Error(`Not allowed to open ${relativeToProcessCwd}`);
16
16
  }
17
- const command = (0, node_os_1.platform)() === 'darwin'
18
- ? 'open'
19
- : (0, node_os_1.platform)() === 'linux'
20
- ? 'xdg-open'
21
- : 'start';
17
+ if ((0, node_os_1.platform)() === 'win32') {
18
+ return new Promise((resolve, reject) => {
19
+ (0, node_child_process_1.exec)(`start ${dirToOpen}`, (error) => {
20
+ if (error) {
21
+ reject(error);
22
+ }
23
+ resolve();
24
+ });
25
+ });
26
+ }
27
+ const command = (0, node_os_1.platform)() === 'darwin' ? 'open' : 'xdg-open';
22
28
  const p = (0, node_child_process_1.spawn)(command, [(0, node_os_1.platform)() === 'darwin' ? '-R' : null, dirToOpen].filter(truthy_1.truthy));
23
29
  const stderrChunks = [];
24
30
  p.stderr.on('data', (d) => stderrChunks.push(d));
@@ -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,