@remotion/cli 3.3.78 → 3.3.80

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 (148) hide show
  1. package/dist/better-opn/index.d.ts +6 -0
  2. package/dist/better-opn/index.js +202 -0
  3. package/dist/codemods/update-default-props.d.ts +5 -0
  4. package/dist/codemods/update-default-props.js +98 -0
  5. package/dist/editor/components/Checkbox.js +1 -0
  6. package/dist/editor/components/CollapsedSidebarExpander.d.ts +5 -0
  7. package/dist/editor/components/CollapsedSidebarExpander.js +40 -0
  8. package/dist/editor/components/CurrentCompositionSideEffects.js +11 -2
  9. package/dist/editor/components/InlineAction.js +1 -1
  10. package/dist/editor/components/Modals.js +3 -3
  11. package/dist/editor/components/NewComposition/RemTextarea.d.ts +7 -0
  12. package/dist/editor/components/NewComposition/RemTextarea.js +90 -0
  13. package/dist/editor/components/RenderButton.d.ts +2 -2
  14. package/dist/editor/components/RenderButton.js +5 -0
  15. package/dist/editor/components/RenderModal/CliCopyButton.d.ts +4 -0
  16. package/dist/editor/components/RenderModal/CliCopyButton.js +22 -0
  17. package/dist/editor/components/RenderModal/CrfSetting.d.ts +2 -1
  18. package/dist/editor/components/RenderModal/CrfSetting.js +2 -2
  19. package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.d.ts +2 -0
  20. package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.js +4 -2
  21. package/dist/editor/components/RenderModal/EnvInput.d.ts +10 -0
  22. package/dist/editor/components/RenderModal/EnvInput.js +54 -0
  23. package/dist/editor/components/RenderModal/FrameRangeSetting.js +1 -1
  24. package/dist/editor/components/RenderModal/{RenderErrorModal.d.ts → GuiRenderStatus.d.ts} +1 -1
  25. package/dist/editor/components/RenderModal/GuiRenderStatus.js +78 -0
  26. package/dist/editor/components/RenderModal/InfoBubble.js +16 -12
  27. package/dist/editor/components/RenderModal/InfoTooltip.d.ts +1 -0
  28. package/dist/editor/components/RenderModal/InfoTooltip.js +25 -16
  29. package/dist/editor/components/RenderModal/InlineEyeIcon.d.ts +5 -0
  30. package/dist/editor/components/RenderModal/InlineEyeIcon.js +38 -0
  31. package/dist/editor/components/RenderModal/InlineRemoveButton.d.ts +4 -0
  32. package/dist/editor/components/RenderModal/InlineRemoveButton.js +14 -0
  33. package/dist/editor/components/RenderModal/JpegQualitySetting.d.ts +5 -0
  34. package/dist/editor/components/RenderModal/JpegQualitySetting.js +12 -0
  35. package/dist/editor/components/RenderModal/MutedSetting.d.ts +2 -0
  36. package/dist/editor/components/RenderModal/MutedSetting.js +4 -2
  37. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.js +1 -1
  38. package/dist/editor/components/RenderModal/NumberSetting.js +1 -1
  39. package/dist/editor/components/RenderModal/OptionExplainer.d.ts +1 -1
  40. package/dist/editor/components/RenderModal/OptionExplainer.js +26 -2
  41. package/dist/editor/components/RenderModal/RenderModal.d.ts +6 -1
  42. package/dist/editor/components/RenderModal/RenderModal.js +52 -9
  43. package/dist/editor/components/RenderModal/RenderModalAdvanced.d.ts +11 -0
  44. package/dist/editor/components/RenderModal/RenderModalAdvanced.js +34 -2
  45. package/dist/editor/components/RenderModal/RenderModalAudio.js +3 -1
  46. package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +3 -2
  47. package/dist/editor/components/RenderModal/RenderModalBasic.js +5 -7
  48. package/dist/editor/components/RenderModal/RenderModalData.d.ts +10 -0
  49. package/dist/editor/components/RenderModal/RenderModalData.js +55 -0
  50. package/dist/editor/components/RenderModal/RenderModalEnvironmentVariables.d.ts +5 -0
  51. package/dist/editor/components/RenderModal/RenderModalEnvironmentVariables.js +52 -0
  52. package/dist/editor/components/RenderModal/RenderModalInput.d.ts +10 -0
  53. package/dist/editor/components/RenderModal/RenderModalInput.js +13 -0
  54. package/dist/editor/components/RenderModal/RenderModalJSONInputPropsEditor.d.ts +8 -0
  55. package/dist/editor/components/RenderModal/RenderModalJSONInputPropsEditor.js +87 -0
  56. package/dist/editor/components/RenderModal/RenderModalPicture.js +6 -4
  57. package/dist/editor/components/RenderModal/RenderStatusModal.d.ts +4 -0
  58. package/dist/editor/components/RenderModal/{RenderErrorModal.js → RenderStatusModal.js} +21 -14
  59. package/dist/editor/components/RenderModal/ScaleSetting.js +6 -3
  60. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.d.ts +12 -0
  61. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.js +36 -0
  62. package/dist/editor/components/RenderModal/SchemaEditor/SchemaLabel.d.ts +15 -0
  63. package/dist/editor/components/RenderModal/SchemaEditor/SchemaLabel.js +43 -0
  64. package/dist/editor/components/RenderModal/SchemaEditor/SchemaResetButton.d.ts +4 -0
  65. package/dist/editor/components/RenderModal/SchemaEditor/SchemaResetButton.js +12 -0
  66. package/dist/editor/components/RenderModal/SchemaEditor/SchemaSaveButton.d.ts +4 -0
  67. package/dist/editor/components/RenderModal/SchemaEditor/SchemaSaveButton.js +12 -0
  68. package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayEditor.d.ts +14 -0
  69. package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayEditor.js +70 -0
  70. package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayItemEditor.d.ts +13 -0
  71. package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayItemEditor.js +28 -0
  72. package/dist/editor/components/RenderModal/SchemaEditor/ZodBooleanEditor.d.ts +12 -0
  73. package/dist/editor/components/RenderModal/SchemaEditor/ZodBooleanEditor.js +27 -0
  74. package/dist/editor/components/RenderModal/SchemaEditor/ZodDateEditor.d.ts +14 -0
  75. package/dist/editor/components/RenderModal/SchemaEditor/ZodDateEditor.js +75 -0
  76. package/dist/editor/components/RenderModal/SchemaEditor/ZodEffectEditor.d.ts +14 -0
  77. package/dist/editor/components/RenderModal/SchemaEditor/ZodEffectEditor.js +51 -0
  78. package/dist/editor/components/RenderModal/SchemaEditor/ZodErrorMessages.d.ts +5 -0
  79. package/dist/editor/components/RenderModal/SchemaEditor/ZodErrorMessages.js +23 -0
  80. package/dist/editor/components/RenderModal/SchemaEditor/ZodNonEditableValue.d.ts +8 -0
  81. package/dist/editor/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +23 -0
  82. package/dist/editor/components/RenderModal/SchemaEditor/ZodNumberEditor.d.ts +14 -0
  83. package/dist/editor/components/RenderModal/SchemaEditor/ZodNumberEditor.js +89 -0
  84. package/dist/editor/components/RenderModal/SchemaEditor/ZodObjectEditor.d.ts +14 -0
  85. package/dist/editor/components/RenderModal/SchemaEditor/ZodObjectEditor.js +57 -0
  86. package/dist/editor/components/RenderModal/SchemaEditor/ZodStringEditor.d.ts +14 -0
  87. package/dist/editor/components/RenderModal/SchemaEditor/ZodStringEditor.js +43 -0
  88. package/dist/editor/components/RenderModal/SchemaEditor/ZodSwitch.d.ts +14 -0
  89. package/dist/editor/components/RenderModal/SchemaEditor/ZodSwitch.js +56 -0
  90. package/dist/editor/components/RenderModal/SchemaEditor/date-serialization.d.ts +2 -0
  91. package/dist/editor/components/RenderModal/SchemaEditor/date-serialization.js +21 -0
  92. package/dist/editor/components/RenderModal/SchemaEditor/get-schema-label.d.ts +2 -0
  93. package/dist/editor/components/RenderModal/SchemaEditor/get-schema-label.js +15 -0
  94. package/dist/editor/components/RenderModal/SchemaEditor/zod-types.d.ts +1 -0
  95. package/dist/editor/components/RenderModal/SchemaEditor/zod-types.js +2 -0
  96. package/dist/editor/components/RenderModal/layout.d.ts +3 -1
  97. package/dist/editor/components/RenderModal/layout.js +19 -3
  98. package/dist/editor/components/RenderModal/out-name-checker.d.ts +15 -0
  99. package/dist/editor/components/RenderModal/out-name-checker.js +79 -0
  100. package/dist/editor/components/RenderQueue/RenderQueueError.js +3 -3
  101. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.js +18 -2
  102. package/dist/editor/components/RenderQueue/RenderQueueOutputName.js +4 -2
  103. package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.js +3 -4
  104. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +11 -1
  105. package/dist/editor/components/RenderQueue/SuccessIcon.d.ts +2 -0
  106. package/dist/editor/components/RenderQueue/SuccessIcon.js +14 -0
  107. package/dist/editor/components/RenderQueue/actions.d.ts +11 -2
  108. package/dist/editor/components/RenderQueue/actions.js +18 -3
  109. package/dist/editor/components/RenderToolbarIcon.js +5 -0
  110. package/dist/editor/components/RightPanel.d.ts +2 -0
  111. package/dist/editor/components/RightPanel.js +43 -0
  112. package/dist/editor/components/SidebarContent.js +1 -0
  113. package/dist/editor/helpers/convert-env-variables.d.ts +2 -0
  114. package/dist/editor/helpers/convert-env-variables.js +20 -0
  115. package/dist/editor/helpers/get-timeline-sequence-layout.js +1 -1
  116. package/dist/editor/helpers/render-modal-sections.d.ts +1 -1
  117. package/dist/editor/helpers/render-modal-sections.js +4 -4
  118. package/dist/editor/icons/data.d.ts +2 -0
  119. package/dist/editor/icons/data.js +8 -0
  120. package/dist/editor/icons/save.d.ts +2 -0
  121. package/dist/editor/icons/save.js +8 -0
  122. package/dist/handle-common-errors.js +16 -0
  123. package/dist/parse-command-line.d.ts +2 -0
  124. package/dist/preview-server/api-routes.js +2 -0
  125. package/dist/preview-server/api-types.d.ts +2 -1
  126. package/dist/preview-server/render-queue/job.d.ts +25 -12
  127. package/dist/preview-server/render-queue/make-retry-payload.js +11 -1
  128. package/dist/preview-server/render-queue/open-directory-in-finder.d.ts +1 -1
  129. package/dist/preview-server/render-queue/open-directory-in-finder.js +10 -1
  130. package/dist/preview-server/render-queue/process-still.js +4 -10
  131. package/dist/preview-server/render-queue/process-video.js +4 -10
  132. package/dist/preview-server/render-queue/queue.js +38 -16
  133. package/dist/preview-server/routes/add-render.js +7 -0
  134. package/dist/preview-server/routes/open-in-file-explorer.js +1 -7
  135. package/dist/preview-server/routes/update-default-props.d.ts +3 -0
  136. package/dist/preview-server/routes/update-default-props.js +22 -0
  137. package/dist/preview.js +8 -3
  138. package/dist/progress-types.d.ts +32 -0
  139. package/dist/progress-types.js +17 -0
  140. package/dist/render-flows/render.js +66 -52
  141. package/dist/render-flows/still.js +18 -18
  142. package/dist/required-chromium-options.d.ts +3 -0
  143. package/dist/required-chromium-options.js +2 -0
  144. package/package.json +7 -7
  145. package/dist/editor/components/RenderModal/QualitySetting.d.ts +0 -5
  146. package/dist/editor/components/RenderModal/QualitySetting.js +0 -27
  147. package/dist/gcp-command.d.ts +0 -1
  148. package/dist/gcp-command.js +0 -27
@@ -7,7 +7,9 @@ exports.processJobIfPossible = exports.cancelJob = exports.removeJob = exports.a
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const chalk_1 = require("../../chalk");
9
9
  const file_watcher_1 = require("../../file-watcher");
10
+ const handle_common_errors_1 = require("../../handle-common-errors");
10
11
  const log_1 = require("../../log");
12
+ const progress_types_1 = require("../../progress-types");
11
13
  const live_events_1 = require("../live-events");
12
14
  const process_still_1 = require("./process-still");
13
15
  const process_video_1 = require("./process-video");
@@ -105,28 +107,42 @@ const processJobIfPossible = async ({ remotionRoot, entryPoint, }) => {
105
107
  return {
106
108
  ...job,
107
109
  status: 'running',
108
- progress: 0,
109
- message: 'Starting job...',
110
+ progress: {
111
+ value: 0,
112
+ message: 'Starting job...',
113
+ ...(0, progress_types_1.initialAggregateRenderProgress)(),
114
+ },
110
115
  };
111
116
  });
112
117
  const startTime = Date.now();
113
118
  log_1.Log.info(chalk_1.chalk.gray('╭─ Starting render '));
119
+ let lastProgress = null;
114
120
  await (0, exports.processJob)({
115
121
  job: nextJob,
116
122
  entryPoint,
117
123
  remotionRoot,
118
- onProgress: ({ message, progress }) => {
124
+ onProgress: (progress) => {
119
125
  updateJob(nextJob.id, (job) => {
126
+ lastProgress = progress;
120
127
  // Ignore late callbacks of progress updates after cancelling
121
128
  if (job.status === 'failed' || job.status === 'done') {
122
129
  return job;
123
130
  }
124
- return {
125
- ...job,
126
- status: 'running',
127
- progress,
128
- message,
129
- };
131
+ if (job.type === 'still') {
132
+ return {
133
+ ...job,
134
+ status: 'running',
135
+ progress,
136
+ };
137
+ }
138
+ if (job.type === 'video') {
139
+ return {
140
+ ...job,
141
+ status: 'running',
142
+ progress,
143
+ };
144
+ }
145
+ throw new Error('Unknown job type');
130
146
  });
131
147
  },
132
148
  addCleanupCallback: (cleanup) => {
@@ -151,15 +167,20 @@ const processJobIfPossible = async ({ remotionRoot, entryPoint, }) => {
151
167
  }
152
168
  },
153
169
  });
154
- updateJob(nextJob.id, (job) => ({
155
- ...job,
156
- status: 'done',
157
- cleanup: [...job.cleanup, unwatch],
158
- }));
170
+ updateJob(nextJob.id, (job) => {
171
+ if (!lastProgress) {
172
+ throw new Error('expected progress');
173
+ }
174
+ return {
175
+ ...job,
176
+ status: 'done',
177
+ cleanup: [...job.cleanup, unwatch],
178
+ progress: { message: 'Done', value: 1, ...lastProgress },
179
+ };
180
+ });
159
181
  }
160
182
  catch (err) {
161
- // TODO: Tell to look in preview to find the error
162
- log_1.Log.error(chalk_1.chalk.gray('╰─ Render failed:'), err);
183
+ log_1.Log.error(chalk_1.chalk.gray('╰─ '), chalk_1.chalk.red('Failed to render'));
163
184
  updateJob(nextJob.id, (job) => {
164
185
  return {
165
186
  ...job,
@@ -170,6 +191,7 @@ const processJobIfPossible = async ({ remotionRoot, entryPoint, }) => {
170
191
  },
171
192
  };
172
193
  });
194
+ await (0, handle_common_errors_1.handleCommonError)(err);
173
195
  (0, live_events_1.waitForLiveEventsListener)().then((listener) => {
174
196
  listener.sendEventToClient({
175
197
  type: 'render-job-failed',
@@ -39,6 +39,9 @@ const handleAddRender = ({ input, entryPoint, remotionRoot, }) => {
39
39
  numberOfGifLoops: input.numberOfGifLoops,
40
40
  delayRenderTimeout: input.delayRenderTimeout,
41
41
  disallowParallelEncoding: input.disallowParallelEncoding,
42
+ chromiumOptions: input.chromiumOptions,
43
+ envVariables: input.envVariables,
44
+ inputProps: input.inputProps,
42
45
  },
43
46
  });
44
47
  }
@@ -59,6 +62,10 @@ const handleAddRender = ({ input, entryPoint, remotionRoot, }) => {
59
62
  deletedOutputLocation: false,
60
63
  verbose: input.verbose,
61
64
  cancelToken: (0, renderer_1.makeCancelSignal)(),
65
+ chromiumOptions: input.chromiumOptions,
66
+ delayRenderTimeout: input.delayRenderTimeout,
67
+ envVariables: input.envVariables,
68
+ inputProps: input.inputProps,
62
69
  },
63
70
  entryPoint,
64
71
  remotionRoot,
@@ -1,14 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.handleOpenInFileExplorer = void 0;
7
- const path_1 = __importDefault(require("path"));
8
4
  const open_directory_in_finder_1 = require("../render-queue/open-directory-in-finder");
9
5
  const handleOpenInFileExplorer = ({ input: { directory }, remotionRoot }) => {
10
- const actualDirectory = path_1.default.resolve(remotionRoot, directory);
11
- // TODO: Disallow opening file that is not in Remotion CWD
12
- return (0, open_directory_in_finder_1.openDirectoryInFinder)(actualDirectory);
6
+ return (0, open_directory_in_finder_1.openDirectoryInFinder)(directory, remotionRoot);
13
7
  };
14
8
  exports.handleOpenInFileExplorer = handleOpenInFileExplorer;
@@ -0,0 +1,3 @@
1
+ import type { ApiHandler } from '../api-types';
2
+ import type { UpdateDefaultPropsRequest } from '../render-queue/job';
3
+ export declare const updateDefaultPropsHandler: ApiHandler<UpdateDefaultPropsRequest, void>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateDefaultPropsHandler = void 0;
4
+ const fs_1 = require("fs");
5
+ const update_default_props_1 = require("../../codemods/update-default-props");
6
+ const date_serialization_1 = require("../../editor/components/RenderModal/SchemaEditor/date-serialization");
7
+ const project_info_1 = require("../project-info");
8
+ const updateDefaultPropsHandler = async ({ input: { compositionId, defaultProps }, remotionRoot }) => {
9
+ const projectInfo = await (0, project_info_1.getProjectInfo)(remotionRoot);
10
+ // TODO: What happens if this error is thrown? Handle in frontend
11
+ if (!projectInfo.videoFile) {
12
+ throw new Error('Cannot find Roo.tsx file in project');
13
+ }
14
+ // TODO: Pass error to frontend
15
+ const updated = await (0, update_default_props_1.updateDefaultProps)({
16
+ compositionId,
17
+ input: (0, fs_1.readFileSync)(projectInfo.videoFile, 'utf-8'),
18
+ newDefaultProps: (0, date_serialization_1.deserializeJSONWithDate)(defaultProps),
19
+ });
20
+ (0, fs_1.writeFileSync)(projectInfo.videoFile, updated);
21
+ };
22
+ exports.updateDefaultPropsHandler = updateDefaultPropsHandler;
package/dist/preview.js CHANGED
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.previewCommand = void 0;
7
- const better_opn_1 = __importDefault(require("better-opn"));
8
7
  const crypto_1 = __importDefault(require("crypto"));
9
8
  const path_1 = __importDefault(require("path"));
9
+ const better_opn_1 = require("./better-opn");
10
10
  const chalk_1 = require("./chalk");
11
11
  const config_1 = require("./config");
12
12
  const entry_point_1 = require("./entry-point");
@@ -36,13 +36,14 @@ const waitForLiveEventsListener = () => {
36
36
  });
37
37
  };
38
38
  const getShouldOpenBrowser = () => {
39
+ var _a;
39
40
  if (parse_command_line_1.parsedCli['no-open']) {
40
41
  return {
41
42
  shouldOpenBrowser: false,
42
43
  reasonForBrowserDecision: '--no-open specified',
43
44
  };
44
45
  }
45
- if (process.env.BROWSER === 'none') {
46
+ if (((_a = process.env.BROWSER) !== null && _a !== void 0 ? _a : '').toLowerCase() === 'none') {
46
47
  return {
47
48
  shouldOpenBrowser: false,
48
49
  reasonForBrowserDecision: 'env BROWSER=none was set',
@@ -136,7 +137,11 @@ const previewCommand = async (remotionRoot, args) => {
136
137
  }
137
138
  const { reasonForBrowserDecision, shouldOpenBrowser } = getShouldOpenBrowser();
138
139
  if (shouldOpenBrowser) {
139
- (0, better_opn_1.default)(`http://localhost:${port}`);
140
+ await (0, better_opn_1.openBrowser)({
141
+ url: `http://localhost:${port}`,
142
+ browserArgs: parse_command_line_1.parsedCli['browser-args'],
143
+ browserFlag: parse_command_line_1.parsedCli.browser,
144
+ });
140
145
  }
141
146
  else {
142
147
  log_1.Log.verbose(`Not opening browser, reason: ${reasonForBrowserDecision}`);
@@ -0,0 +1,32 @@
1
+ import type { Codec, StitchingState } from '@remotion/renderer';
2
+ import type { BundlingState, CopyingState } from './progress-bar';
3
+ import type { RenderStep } from './step';
4
+ export declare type DownloadProgress = {
5
+ name: string;
6
+ id: number;
7
+ progress: number | null;
8
+ totalBytes: number | null;
9
+ downloaded: number;
10
+ };
11
+ export declare type RenderingProgressInput = {
12
+ frames: number;
13
+ totalFrames: number;
14
+ steps: RenderStep[];
15
+ concurrency: number;
16
+ doneIn: number | null;
17
+ };
18
+ export declare type StitchingProgressInput = {
19
+ frames: number;
20
+ totalFrames: number;
21
+ doneIn: number | null;
22
+ stage: StitchingState;
23
+ codec: Codec;
24
+ };
25
+ export declare type AggregateRenderProgress = {
26
+ rendering: RenderingProgressInput | null;
27
+ stitching: StitchingProgressInput | null;
28
+ downloads: DownloadProgress[];
29
+ bundling: BundlingState;
30
+ copyingState: CopyingState;
31
+ };
32
+ export declare const initialAggregateRenderProgress: () => AggregateRenderProgress;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initialAggregateRenderProgress = void 0;
4
+ const initialAggregateRenderProgress = () => ({
5
+ rendering: null,
6
+ downloads: [],
7
+ stitching: null,
8
+ bundling: {
9
+ progress: 0,
10
+ doneIn: null,
11
+ },
12
+ copyingState: {
13
+ bytes: 0,
14
+ doneIn: null,
15
+ },
16
+ });
17
+ exports.initialAggregateRenderProgress = initialAggregateRenderProgress;
@@ -37,20 +37,55 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
37
37
  forceDeviceScaleFactor: scale,
38
38
  indentationString: indent ? log_1.INDENT_TOKEN + ' ' : '',
39
39
  });
40
+ const renderProgress = (0, progress_bar_1.createOverwriteableCliOutput)({
41
+ quiet,
42
+ cancelSignal,
43
+ });
40
44
  const steps = [
41
45
  renderer_1.RenderInternals.isServeUrl(fullEntryPoint) ? null : 'bundling',
42
46
  'rendering',
43
47
  shouldOutputImageSequence ? null : 'stitching',
44
48
  ].filter(truthy_1.truthy);
49
+ let bundlingProgress = {
50
+ doneIn: null,
51
+ progress: 0,
52
+ };
53
+ let renderingProgress = null;
54
+ let stitchingProgress = null;
55
+ let copyingState = {
56
+ bytes: 0,
57
+ doneIn: null,
58
+ };
59
+ const updateRenderProgress = () => {
60
+ const aggregateRenderProgress = {
61
+ rendering: renderingProgress,
62
+ stitching: shouldOutputImageSequence ? null : stitchingProgress,
63
+ downloads,
64
+ bundling: bundlingProgress,
65
+ copyingState,
66
+ };
67
+ const { output, message, progress } = (0, progress_bar_1.makeRenderingAndStitchingProgress)({
68
+ prog: aggregateRenderProgress,
69
+ indent,
70
+ steps: steps.length,
71
+ stitchingStep: steps.indexOf('bundling'),
72
+ });
73
+ onProgress({ message, value: progress, ...aggregateRenderProgress });
74
+ return renderProgress.update(output);
75
+ };
45
76
  const { urlOrBundle, cleanup: cleanupBundle } = await (0, setup_cache_1.bundleOnCliOrTakeServeUrl)({
46
77
  fullPath: fullEntryPoint,
47
78
  remotionRoot,
48
- steps,
49
79
  publicDir,
50
- // TODO: Implement onProgress
51
- onProgress: () => undefined,
80
+ onProgress: ({ bundling, copying }) => {
81
+ bundlingProgress = bundling;
82
+ copyingState = copying;
83
+ updateRenderProgress();
84
+ },
52
85
  indentOutput: indent,
53
86
  logLevel,
87
+ bundlingStep: steps.indexOf('bundling'),
88
+ steps: steps.length,
54
89
  });
55
90
  (0, cleanup_before_quit_1.registerCleanupJob)(() => cleanupBundle());
56
91
  addCleanupCallback(() => cleanupBundle());
@@ -116,52 +151,15 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
116
151
  });
117
152
  log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.gray(`Entry point = ${fullEntryPoint} (${entryPointReason}), Composition = ${compositionId} (${reason}), Codec = ${codec} (${codecReason}), Output = ${relativeOutputLocation}`));
118
153
  const absoluteOutputFile = (0, get_cli_options_1.getAndValidateAbsoluteOutputFile)(relativeOutputLocation, overwrite);
119
- const outputDir = shouldOutputImageSequence
120
- ? absoluteOutputFile
121
- : await fs_1.default.promises.mkdtemp(path_1.default.join(os_1.default.tmpdir(), 'react-motion-render'));
122
- log_1.Log.verboseAdvanced({ indent, logLevel }, 'Output dir', outputDir);
123
- const renderProgress = (0, progress_bar_1.createOverwriteableCliOutput)({
124
- quiet,
125
- cancelSignal,
126
- });
127
154
  const realFrameRange = renderer_1.RenderInternals.getRealFrameRange(config.durationInFrames, frameRange);
128
155
  const totalFrames = renderer_1.RenderInternals.getFramesToRender(realFrameRange, everyNthFrame);
129
- let encodedFrames = 0;
130
- let renderedFrames = 0;
131
- let encodedDoneIn = null;
132
- let renderedDoneIn = null;
133
- let stitchStage = 'encoding';
134
156
  const actualConcurrency = renderer_1.RenderInternals.getActualConcurrency(concurrency);
135
- const updateRenderProgress = () => {
136
- if (totalFrames.length === 0) {
137
- throw new Error('totalFrames should not be 0');
138
- }
139
- const { output, message, progress } = (0, progress_bar_1.makeRenderingAndStitchingProgress)({
140
- rendering: {
141
- frames: renderedFrames,
142
- totalFrames: totalFrames.length,
143
- concurrency: actualConcurrency,
144
- doneIn: renderedDoneIn,
145
- steps,
146
- },
147
- stitching: shouldOutputImageSequence
148
- ? null
149
- : {
150
- doneIn: encodedDoneIn,
151
- frames: encodedFrames,
152
- stage: stitchStage,
153
- steps,
154
- totalFrames: totalFrames.length,
155
- codec,
156
- },
157
- downloads,
158
- bundling: {
159
- message: 'Bundled',
160
- progress: 1,
161
- },
162
- }, indent);
163
- onProgress({ progress, message });
164
- return renderProgress.update(output);
157
+ renderingProgress = {
158
+ frames: 0,
159
+ totalFrames: totalFrames.length,
160
+ concurrency: actualConcurrency,
161
+ doneIn: null,
162
+ steps,
165
163
  };
166
164
  const imageFormat = (0, image_formats_1.getVideoImageFormat)({
167
165
  codec: shouldOutputImageSequence ? undefined : codec,
@@ -174,11 +172,15 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
174
172
  if (imageFormat === 'none') {
175
173
  throw new Error(`Cannot render an image sequence with a codec that renders no images. codec = ${codec}, imageFormat = ${imageFormat}`);
176
174
  }
175
+ const outputDir = shouldOutputImageSequence
176
+ ? absoluteOutputFile
177
+ : await fs_1.default.promises.mkdtemp(path_1.default.join(os_1.default.tmpdir(), 'react-motion-render'));
178
+ log_1.Log.verboseAdvanced({ indent, logLevel }, 'Output dir', outputDir);
177
179
  await (0, renderer_1.renderFrames)({
178
180
  imageFormat,
179
181
  inputProps,
180
182
  onFrameUpdate: (rendered) => {
181
- renderedFrames = rendered;
183
+ renderingProgress.frames = rendered;
182
184
  updateRenderProgress();
183
185
  },
184
186
  onStart: () => undefined,
@@ -211,7 +213,15 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
211
213
  updateRenderProgress();
212
214
  process.stdout.write('\n');
213
215
  log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.cyan(`▶ ${absoluteOutputFile}`));
216
+ return;
214
217
  }
218
+ stitchingProgress = {
219
+ doneIn: null,
220
+ frames: 0,
221
+ stage: 'encoding',
222
+ totalFrames: totalFrames.length,
223
+ codec,
224
+ };
215
225
  const { slowestFrames } = await (0, renderer_1.renderMedia)({
216
226
  outputLocation: absoluteOutputFile,
217
227
  composition: {
@@ -245,11 +255,15 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
245
255
  audioBitrate,
246
256
  videoBitrate,
247
257
  onProgress: (update) => {
248
- encodedDoneIn = update.encodedDoneIn;
249
- encodedFrames = update.encodedFrames;
250
- renderedDoneIn = update.renderedDoneIn;
251
- stitchStage = update.stitchStage;
252
- renderedFrames = update.renderedFrames;
258
+ stitchingProgress.doneIn =
259
+ update.encodedDoneIn;
260
+ stitchingProgress.frames =
261
+ update.encodedFrames;
262
+ stitchingProgress.stage = update.stitchStage;
263
+ renderingProgress.doneIn =
264
+ update.renderedDoneIn;
265
+ renderingProgress.frames =
266
+ update.renderedFrames;
253
267
  updateRenderProgress();
254
268
  },
255
269
  puppeteerInstance,
@@ -17,28 +17,30 @@ const get_composition_with_dimension_override_1 = require("../get-composition-wi
17
17
  const log_1 = require("../log");
18
18
  const parse_command_line_1 = require("../parse-command-line");
19
19
  const progress_bar_1 = require("../progress-bar");
20
+ const progress_types_1 = require("../progress-types");
20
21
  const setup_cache_1 = require("../setup-cache");
21
22
  const truthy_1 = require("../truthy");
22
23
  const user_passed_output_location_1 = require("../user-passed-output-location");
23
24
  const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason, remainingArgs, browser, browserExecutable, chromiumOptions, envVariables, height, inputProps, overwrite, port, publicDir, puppeteerTimeout, quality, scale, stillFrame, width, compositionIdFromUi, imageFormatFromUi, logLevel, onProgress, indentOutput, addCleanupCallback, cancelSignal, }) => {
24
25
  var _a, _b;
25
26
  const downloads = [];
26
- const aggregate = {
27
- rendering: null,
28
- downloads,
29
- stitching: null,
30
- bundling: {
31
- message: null,
32
- progress: 0,
33
- },
34
- };
27
+ const aggregate = (0, progress_types_1.initialAggregateRenderProgress)();
35
28
  let renderProgress = null;
29
+ const steps = [
30
+ renderer_1.RenderInternals.isServeUrl(fullEntryPoint) ? null : 'bundling',
31
+ 'rendering',
32
+ ].filter(truthy_1.truthy);
36
33
  const updateProgress = () => {
37
- const { output, progress, message } = (0, progress_bar_1.makeRenderingAndStitchingProgress)(aggregate, indentOutput);
34
+ const { output, progress, message } = (0, progress_bar_1.makeRenderingAndStitchingProgress)({
35
+ prog: aggregate,
36
+ indent: indentOutput,
37
+ steps: steps.length,
38
+ stitchingStep: steps.indexOf('stitching'),
39
+ });
38
40
  if (renderProgress) {
39
41
  renderProgress.update(output);
40
42
  }
41
- onProgress({ progress, message });
43
+ onProgress({ message, value: progress, ...aggregate });
42
44
  };
43
45
  log_1.Log.verboseAdvanced({ indent: indentOutput, logLevel }, 'Browser executable: ', browserExecutable);
44
46
  const shouldDumpIo = renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose');
@@ -49,21 +51,19 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
49
51
  forceDeviceScaleFactor: scale,
50
52
  indentationString: indentOutput ? log_1.INDENT_TOKEN + ' ' : '',
51
53
  });
52
- const steps = [
53
- renderer_1.RenderInternals.isServeUrl(fullEntryPoint) ? null : 'bundling',
54
- 'rendering',
55
- ].filter(truthy_1.truthy);
56
54
  const { cleanup: cleanupBundle, urlOrBundle } = await (0, setup_cache_1.bundleOnCliOrTakeServeUrl)({
57
55
  fullPath: fullEntryPoint,
58
56
  remotionRoot,
59
- steps,
57
+ steps: steps.length,
60
58
  publicDir,
61
- onProgress: (progress) => {
62
- aggregate.bundling = progress;
59
+ onProgress: ({ copying, bundling }) => {
60
+ aggregate.bundling = bundling;
61
+ aggregate.copyingState = copying;
63
62
  updateProgress();
64
63
  },
65
64
  indentOutput,
66
65
  logLevel,
66
+ bundlingStep: steps.indexOf('bundling'),
67
67
  });
68
68
  (0, cleanup_before_quit_1.registerCleanupJob)(() => cleanupBundle());
69
69
  addCleanupCallback(() => cleanupBundle());
@@ -0,0 +1,3 @@
1
+ import type { ChromiumOptions, OpenGlRenderer } from '@remotion/renderer';
2
+ export declare type RequiredChromiumOptions = Required<ChromiumOptions>;
3
+ export declare type UiOpenGlOptions = OpenGlRenderer | 'default';
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/cli",
3
- "version": "3.3.78",
3
+ "version": "3.3.80",
4
4
  "description": "CLI for Remotion",
5
5
  "main": "dist/index.js",
6
6
  "sideEffects": false,
@@ -16,16 +16,16 @@
16
16
  "author": "Jonny Burger <jonny@remotion.dev>",
17
17
  "license": "SEE LICENSE IN LICENSE.md",
18
18
  "dependencies": {
19
- "@remotion/bundler": "3.3.78",
20
- "@remotion/media-utils": "3.3.78",
21
- "@remotion/player": "3.3.78",
22
- "@remotion/renderer": "3.3.78",
23
- "better-opn": "2.1.1",
19
+ "@remotion/bundler": "3.3.80",
20
+ "@remotion/media-utils": "3.3.80",
21
+ "@remotion/player": "3.3.80",
22
+ "@remotion/renderer": "3.3.80",
24
23
  "dotenv": "9.0.2",
25
24
  "memfs": "3.4.3",
26
25
  "minimist": "1.2.6",
26
+ "open": "^8.4.2",
27
27
  "prompts": "2.4.1",
28
- "remotion": "3.3.78",
28
+ "remotion": "3.3.80",
29
29
  "semver": "7.3.5",
30
30
  "source-map": "0.6.1"
31
31
  },
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export declare const QualitySetting: React.FC<{
3
- quality: number;
4
- setQuality: React.Dispatch<React.SetStateAction<number>>;
5
- }>;
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QualitySetting = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const InputDragger_1 = require("../NewComposition/InputDragger");
7
- const RemInput_1 = require("../NewComposition/RemInput");
8
- const layout_1 = require("./layout");
9
- const MIN_QUALITY = 1;
10
- const MAX_QUALITY = 100;
11
- const QualitySetting = ({ quality, setQuality }) => {
12
- const onQualityChangedDirectly = (0, react_1.useCallback)((newQuality) => {
13
- setQuality(newQuality);
14
- }, [setQuality]);
15
- const onQualityChanged = (0, react_1.useCallback)((e) => {
16
- setQuality((q) => {
17
- const newQuality = parseInt(e, 10);
18
- if (Number.isNaN(newQuality)) {
19
- return q;
20
- }
21
- const newQualityClamped = Math.min(MAX_QUALITY, Math.max(newQuality, MIN_QUALITY));
22
- return newQualityClamped;
23
- });
24
- }, [setQuality]);
25
- return ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "JPEG Quality" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(RemInput_1.RightAlignInput, { children: (0, jsx_runtime_1.jsx)(InputDragger_1.InputDragger, { value: quality, onTextChange: onQualityChanged, placeholder: `${MIN_QUALITY}-${MAX_QUALITY}`, onValueChange: onQualityChangedDirectly, name: "quality", step: 1, min: MIN_QUALITY, max: MAX_QUALITY }) }) })] }));
26
- };
27
- exports.QualitySetting = QualitySetting;
@@ -1 +0,0 @@
1
- export declare const gcpCommand: (remotionRoot: string, args: string[]) => Promise<never>;
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.gcpCommand = void 0;
4
- const log_1 = require("./log");
5
- const get_package_manager_1 = require("./preview-server/get-package-manager");
6
- const update_available_1 = require("./preview-server/update-available");
7
- const gcpCommand = async (remotionRoot, args) => {
8
- try {
9
- const path = require.resolve('@remotion/gcp', {
10
- paths: [remotionRoot],
11
- });
12
- const { GCPInternals } = require(path);
13
- await GCPInternals.executeCommand(args, remotionRoot);
14
- process.exit(0);
15
- }
16
- catch (err) {
17
- const manager = (0, get_package_manager_1.getPackageManager)(remotionRoot, undefined);
18
- const installCommand = manager === 'unknown' ? 'npm i' : manager.installCommand;
19
- log_1.Log.error(err);
20
- log_1.Log.error('Remotion GCP is not installed.');
21
- log_1.Log.info('');
22
- log_1.Log.info('You can install it using:');
23
- log_1.Log.info(`${installCommand} @remotion/gcp@${(0, update_available_1.getRemotionVersion)()}`);
24
- process.exit(1);
25
- }
26
- };
27
- exports.gcpCommand = gcpCommand;