@remotion/cli 3.3.27 → 3.3.28

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 (128) hide show
  1. package/dist/config/log.d.ts +1 -1
  2. package/dist/convert-entry-point-to-serve-url.d.ts +1 -0
  3. package/dist/convert-entry-point-to-serve-url.js +15 -0
  4. package/dist/editor/components/CollapsableOptions.d.ts +6 -0
  5. package/dist/editor/components/CollapsableOptions.js +35 -0
  6. package/dist/editor/components/InlineAction.d.ts +5 -0
  7. package/dist/editor/components/InlineAction.js +34 -0
  8. package/dist/editor/components/RenderButton.d.ts +6 -0
  9. package/dist/editor/components/RenderButton.js +43 -0
  10. package/dist/editor/components/RenderModal/RenderErrorModal.d.ts +5 -0
  11. package/dist/editor/components/RenderModal/RenderErrorModal.js +64 -0
  12. package/dist/editor/components/RenderModal/RenderModal.d.ts +11 -0
  13. package/dist/editor/components/RenderModal/RenderModal.js +330 -0
  14. package/dist/editor/components/RenderQueue/CircularProgress.d.ts +5 -0
  15. package/dist/editor/components/RenderQueue/CircularProgress.js +18 -0
  16. package/dist/editor/components/RenderQueue/RenderQueueError.d.ts +5 -0
  17. package/dist/editor/components/RenderQueue/RenderQueueError.js +26 -0
  18. package/dist/editor/components/RenderQueue/RenderQueueItem.d.ts +5 -0
  19. package/dist/editor/components/RenderQueue/RenderQueueItem.js +38 -0
  20. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.d.ts +5 -0
  21. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.js +27 -0
  22. package/dist/editor/components/RenderQueue/RenderQueueOutputName.d.ts +5 -0
  23. package/dist/editor/components/RenderQueue/RenderQueueOutputName.js +30 -0
  24. package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.d.ts +5 -0
  25. package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.js +27 -0
  26. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.d.ts +5 -0
  27. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +22 -0
  28. package/dist/editor/components/RenderQueue/RenderQueueRepeat.d.ts +5 -0
  29. package/dist/editor/components/RenderQueue/RenderQueueRepeat.js +22 -0
  30. package/dist/editor/components/RenderQueue/actions.d.ts +34 -0
  31. package/dist/editor/components/RenderQueue/actions.js +78 -0
  32. package/dist/editor/components/RenderQueue/context.d.ts +19 -0
  33. package/dist/editor/components/RenderQueue/context.js +54 -0
  34. package/dist/editor/components/RenderQueue/index.d.ts +2 -0
  35. package/dist/editor/components/RenderQueue/index.js +18 -0
  36. package/dist/editor/components/RenderQueue/item-style.d.ts +2 -0
  37. package/dist/editor/components/RenderQueue/item-style.js +21 -0
  38. package/dist/editor/components/RenderToolbarIcon.d.ts +2 -0
  39. package/dist/editor/components/RenderToolbarIcon.js +47 -0
  40. package/dist/editor/components/RendersTab.d.ts +6 -0
  41. package/dist/editor/components/RendersTab.js +44 -0
  42. package/dist/editor/components/SegmentedControl.d.ts +15 -0
  43. package/dist/editor/components/SegmentedControl.js +46 -0
  44. package/dist/editor/components/SidebarContent.d.ts +5 -0
  45. package/dist/editor/components/SidebarContent.js +51 -0
  46. package/dist/editor/components/Tabs/index.d.ts +11 -0
  47. package/dist/editor/components/Tabs/index.js +51 -0
  48. package/dist/editor/helpers/client-id.d.ts +17 -0
  49. package/dist/editor/helpers/client-id.js +46 -0
  50. package/dist/editor/helpers/colors.d.ts +1 -1
  51. package/dist/editor/helpers/use-file-existence.d.ts +1 -0
  52. package/dist/editor/helpers/use-file-existence.js +66 -0
  53. package/dist/editor/helpers/use-menu-structure.js +1 -1
  54. package/dist/editor/icons/RenderStillIcon.d.ts +3 -0
  55. package/dist/editor/icons/RenderStillIcon.js +8 -0
  56. package/dist/editor/icons/render.d.ts +5 -0
  57. package/dist/editor/icons/render.js +8 -0
  58. package/dist/editor/icons/video.d.ts +5 -0
  59. package/dist/editor/icons/video.js +8 -0
  60. package/dist/file-watcher.d.ts +9 -0
  61. package/dist/file-watcher.js +35 -0
  62. package/dist/find-closest-package-json.d.ts +2 -0
  63. package/dist/find-closest-package-json.js +35 -0
  64. package/dist/get-cli-options.d.ts +2 -2
  65. package/dist/get-cli-options.js +3 -3
  66. package/dist/get-default-out-name.d.ts +4 -0
  67. package/dist/get-default-out-name.js +8 -0
  68. package/dist/index.d.ts +1 -1
  69. package/dist/preview-server/actions.d.ts +0 -0
  70. package/dist/preview-server/actions.js +1 -0
  71. package/dist/preview-server/api-routes.d.ts +4 -0
  72. package/dist/preview-server/api-routes.js +15 -0
  73. package/dist/preview-server/api-types.d.ts +26 -0
  74. package/dist/preview-server/api-types.js +2 -0
  75. package/dist/preview-server/dev-middleware/range-parser.d.ts +1 -1
  76. package/dist/preview-server/env-supports-fs-recursive.d.ts +1 -0
  77. package/dist/preview-server/env-supports-fs-recursive.js +18 -0
  78. package/dist/preview-server/file-existence-watchers.d.ts +13 -0
  79. package/dist/preview-server/file-existence-watchers.js +62 -0
  80. package/dist/preview-server/get-file-existence.d.ts +2 -0
  81. package/dist/preview-server/get-file-existence.js +36 -0
  82. package/dist/preview-server/get-files-in-public-folder.d.ts +2 -0
  83. package/dist/preview-server/get-files-in-public-folder.js +7 -0
  84. package/dist/preview-server/handler.d.ts +9 -0
  85. package/dist/preview-server/handler.js +34 -0
  86. package/dist/preview-server/live-event-listener.d.ts +0 -0
  87. package/dist/preview-server/live-event-listener.js +1 -0
  88. package/dist/preview-server/parse-body.d.ts +2 -0
  89. package/dist/preview-server/parse-body.js +16 -0
  90. package/dist/preview-server/public-folder.js +2 -1
  91. package/dist/preview-server/render-queue/add-render.d.ts +3 -0
  92. package/dist/preview-server/render-queue/add-render.js +34 -0
  93. package/dist/preview-server/render-queue/index.d.ts +18 -0
  94. package/dist/preview-server/render-queue/index.js +146 -0
  95. package/dist/preview-server/render-queue/job.d.ts +81 -0
  96. package/dist/preview-server/render-queue/job.js +2 -0
  97. package/dist/preview-server/render-queue/make-retry-payload.d.ts +3 -0
  98. package/dist/preview-server/render-queue/make-retry-payload.js +32 -0
  99. package/dist/preview-server/render-queue/open-directory-in-finder.d.ts +1 -0
  100. package/dist/preview-server/render-queue/open-directory-in-finder.js +34 -0
  101. package/dist/preview-server/render-queue/open-in-file-explorer.d.ts +2 -0
  102. package/dist/preview-server/render-queue/open-in-file-explorer.js +31 -0
  103. package/dist/preview-server/render-queue/process-still.d.ts +8 -0
  104. package/dist/preview-server/render-queue/process-still.js +50 -0
  105. package/dist/preview-server/render-queue/process-video.d.ts +8 -0
  106. package/dist/preview-server/render-queue/process-video.js +59 -0
  107. package/dist/preview-server/render-queue/queue.d.ts +20 -0
  108. package/dist/preview-server/render-queue/queue.js +169 -0
  109. package/dist/preview-server/render-queue/remove-render.d.ts +2 -0
  110. package/dist/preview-server/render-queue/remove-render.js +29 -0
  111. package/dist/preview-server/routes/add-render.d.ts +3 -0
  112. package/dist/preview-server/routes/add-render.js +51 -0
  113. package/dist/preview-server/routes/open-in-file-explorer.d.ts +3 -0
  114. package/dist/preview-server/routes/open-in-file-explorer.js +14 -0
  115. package/dist/preview-server/routes/remove-render.d.ts +3 -0
  116. package/dist/preview-server/routes/remove-render.js +9 -0
  117. package/dist/preview-server/routes/subscribe-to-file-existence.d.ts +3 -0
  118. package/dist/preview-server/routes/subscribe-to-file-existence.js +13 -0
  119. package/dist/preview-server/routes/unsubscribe-from-file-existence.d.ts +3 -0
  120. package/dist/preview-server/routes/unsubscribe-from-file-existence.js +13 -0
  121. package/dist/preview-server/write-files-definition-file.d.ts +2 -0
  122. package/dist/preview-server/write-files-definition-file.js +37 -0
  123. package/dist/render-flows/render.d.ts +37 -0
  124. package/dist/render-flows/render.js +254 -0
  125. package/dist/render-flows/still.d.ts +31 -0
  126. package/dist/render-flows/still.js +168 -0
  127. package/dist/render.js +1 -1
  128. package/package.json +7 -7
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.renderCompFlow = void 0;
7
+ const renderer_1 = require("@remotion/renderer");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const chalk_1 = require("../chalk");
12
+ const config_1 = require("../config");
13
+ const get_cli_options_1 = require("../get-cli-options");
14
+ const get_composition_with_dimension_override_1 = require("../get-composition-with-dimension-override");
15
+ const get_filename_1 = require("../get-filename");
16
+ const get_final_output_codec_1 = require("../get-final-output-codec");
17
+ const get_render_media_options_1 = require("../get-render-media-options");
18
+ const image_formats_1 = require("../image-formats");
19
+ const log_1 = require("../log");
20
+ const parse_command_line_1 = require("../parse-command-line");
21
+ const progress_bar_1 = require("../progress-bar");
22
+ const setup_cache_1 = require("../setup-cache");
23
+ const truthy_1 = require("../truthy");
24
+ const user_passed_output_location_1 = require("../user-passed-output-location");
25
+ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable, ffprobeExecutable, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, inputProps, envVariables, puppeteerTimeout, port, height, width, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, configFileImageFormat, outputLocationFromUI, quality, onProgress, addCleanupCallback, uiCodec, uiImageFormat, }) => {
26
+ var _a;
27
+ const downloads = [];
28
+ const downloadMap = renderer_1.RenderInternals.makeDownloadMap();
29
+ addCleanupCallback(() => renderer_1.RenderInternals.cleanDownloadMap(downloadMap));
30
+ const ffmpegVersion = await renderer_1.RenderInternals.getFfmpegVersion({
31
+ ffmpegExecutable,
32
+ remotionRoot,
33
+ });
34
+ log_1.Log.verboseAdvanced({ indent, logLevel }, 'FFMPEG Version:', ffmpegVersion ? ffmpegVersion.join('.') : 'Built from source');
35
+ log_1.Log.verboseAdvanced({ indent, logLevel }, 'Browser executable: ', browserExecutable);
36
+ log_1.Log.verboseAdvanced({ indent, logLevel }, 'Asset dirs', downloadMap.assetDir);
37
+ const browserInstance = (0, renderer_1.openBrowser)(browser, {
38
+ browserExecutable,
39
+ shouldDumpIo: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
40
+ chromiumOptions,
41
+ forceDeviceScaleFactor: scale,
42
+ indentationString: indent ? log_1.INDENT_TOKEN + ' ' : '',
43
+ });
44
+ const steps = [
45
+ renderer_1.RenderInternals.isServeUrl(fullEntryPoint) ? null : 'bundling',
46
+ 'rendering',
47
+ shouldOutputImageSequence ? null : 'stitching',
48
+ ].filter(truthy_1.truthy);
49
+ const { urlOrBundle, cleanup: cleanupBundle } = await (0, setup_cache_1.bundleOnCliOrTakeServeUrl)({
50
+ fullPath: fullEntryPoint,
51
+ remotionRoot,
52
+ steps,
53
+ publicDir,
54
+ // TODO: Implement onProgress
55
+ onProgress: () => undefined,
56
+ indentOutput: indent,
57
+ logLevel,
58
+ });
59
+ addCleanupCallback(cleanupBundle);
60
+ const onDownload = (src) => {
61
+ const id = Math.random();
62
+ const download = {
63
+ id,
64
+ name: src,
65
+ progress: 0,
66
+ downloaded: 0,
67
+ totalBytes: null,
68
+ };
69
+ downloads.push(download);
70
+ updateRenderProgress();
71
+ return ({ percent, downloaded, totalSize }) => {
72
+ download.progress = percent;
73
+ download.totalBytes = totalSize;
74
+ download.downloaded = downloaded;
75
+ updateRenderProgress();
76
+ };
77
+ };
78
+ const puppeteerInstance = await browserInstance;
79
+ addCleanupCallback(() => puppeteerInstance.close(false));
80
+ const comps = await (0, renderer_1.getCompositions)(urlOrBundle, {
81
+ inputProps,
82
+ puppeteerInstance,
83
+ envVariables,
84
+ timeoutInMilliseconds: puppeteerTimeout,
85
+ chromiumOptions,
86
+ browserExecutable,
87
+ downloadMap,
88
+ port,
89
+ });
90
+ const { compositionId, config, reason, argsAfterComposition } = await (0, get_composition_with_dimension_override_1.getCompositionWithDimensionOverride)({
91
+ validCompositions: comps,
92
+ height,
93
+ width,
94
+ args: remainingArgs,
95
+ compositionIdFromUi,
96
+ });
97
+ const { codec, reason: codecReason } = (0, get_final_output_codec_1.getFinalOutputCodec)({
98
+ cliFlag: parse_command_line_1.parsedCli.codec,
99
+ configFile: (_a = config_1.ConfigInternals.getOutputCodecOrUndefined()) !== null && _a !== void 0 ? _a : null,
100
+ downloadName: null,
101
+ outName: (0, user_passed_output_location_1.getUserPassedOutputLocation)(argsAfterComposition),
102
+ uiCodec,
103
+ });
104
+ (0, get_cli_options_1.validateFfmepgCanUseCodec)(codec, remotionRoot);
105
+ renderer_1.RenderInternals.validateEvenDimensionsWithCodec({
106
+ width: config.width,
107
+ height: config.height,
108
+ codec,
109
+ scale,
110
+ });
111
+ const relativeOutputLocation = (0, get_filename_1.getOutputFilename)({
112
+ codec,
113
+ imageSequence: shouldOutputImageSequence,
114
+ compositionName: compositionId,
115
+ defaultExtension: renderer_1.RenderInternals.getFileExtensionFromCodec(codec, 'final'),
116
+ args: argsAfterComposition,
117
+ indent,
118
+ fromUi: outputLocationFromUI,
119
+ logLevel,
120
+ });
121
+ log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.gray(`Entry point = ${fullEntryPoint} (${entryPointReason}), Composition = ${compositionId} (${reason}), Codec = ${codec} (${codecReason}), Output = ${relativeOutputLocation}`));
122
+ const absoluteOutputFile = (0, get_cli_options_1.getAndValidateAbsoluteOutputFile)(relativeOutputLocation, overwrite);
123
+ const outputDir = shouldOutputImageSequence
124
+ ? absoluteOutputFile
125
+ : await fs_1.default.promises.mkdtemp(path_1.default.join(os_1.default.tmpdir(), 'react-motion-render'));
126
+ log_1.Log.verboseAdvanced({ indent, logLevel }, 'Output dir', outputDir);
127
+ const renderProgress = (0, progress_bar_1.createOverwriteableCliOutput)({
128
+ quiet,
129
+ });
130
+ const realFrameRange = renderer_1.RenderInternals.getRealFrameRange(config.durationInFrames, frameRange);
131
+ const totalFrames = renderer_1.RenderInternals.getFramesToRender(realFrameRange, everyNthFrame);
132
+ let encodedFrames = 0;
133
+ let renderedFrames = 0;
134
+ let encodedDoneIn = null;
135
+ let renderedDoneIn = null;
136
+ let stitchStage = 'encoding';
137
+ const updateRenderProgress = () => {
138
+ if (totalFrames.length === 0) {
139
+ throw new Error('totalFrames should not be 0');
140
+ }
141
+ const { output, message, progress } = (0, progress_bar_1.makeRenderingAndStitchingProgress)({
142
+ rendering: {
143
+ frames: renderedFrames,
144
+ totalFrames: totalFrames.length,
145
+ concurrency: renderer_1.RenderInternals.getActualConcurrency(concurrency),
146
+ doneIn: renderedDoneIn,
147
+ steps,
148
+ },
149
+ stitching: shouldOutputImageSequence
150
+ ? null
151
+ : {
152
+ doneIn: encodedDoneIn,
153
+ frames: encodedFrames,
154
+ stage: stitchStage,
155
+ steps,
156
+ totalFrames: totalFrames.length,
157
+ codec,
158
+ },
159
+ downloads,
160
+ bundling: {
161
+ message: 'Bundled',
162
+ progress: 1,
163
+ },
164
+ }, indent);
165
+ onProgress({ progress, message });
166
+ return renderProgress.update(output);
167
+ };
168
+ const imageFormat = (0, image_formats_1.getImageFormat)({
169
+ codec: shouldOutputImageSequence ? undefined : codec,
170
+ configFileImageFormat,
171
+ uiImageFormat,
172
+ });
173
+ if (shouldOutputImageSequence) {
174
+ fs_1.default.mkdirSync(absoluteOutputFile, {
175
+ recursive: true,
176
+ });
177
+ if (imageFormat === 'none') {
178
+ throw new Error(`Cannot render an image sequence with a codec that renders no images. codec = ${codec}, imageFormat = ${imageFormat}`);
179
+ }
180
+ await (0, renderer_1.renderFrames)({
181
+ config,
182
+ imageFormat,
183
+ inputProps,
184
+ onFrameUpdate: (rendered) => {
185
+ renderedFrames = rendered;
186
+ updateRenderProgress();
187
+ },
188
+ onStart: () => undefined,
189
+ onDownload: (src) => {
190
+ if (src.startsWith('data:')) {
191
+ log_1.Log.infoAdvanced({ indent, logLevel }, '\nWriting Data URL to file: ', src.substring(0, 30) + '...');
192
+ }
193
+ else {
194
+ log_1.Log.infoAdvanced({ indent, logLevel }, '\nDownloading asset... ', src);
195
+ }
196
+ },
197
+ outputDir,
198
+ serveUrl: urlOrBundle,
199
+ dumpBrowserLogs: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
200
+ everyNthFrame,
201
+ envVariables,
202
+ frameRange,
203
+ concurrency,
204
+ puppeteerInstance,
205
+ quality,
206
+ timeoutInMilliseconds: puppeteerTimeout,
207
+ chromiumOptions,
208
+ scale,
209
+ ffmpegExecutable,
210
+ ffprobeExecutable,
211
+ browserExecutable,
212
+ port,
213
+ downloadMap,
214
+ });
215
+ updateRenderProgress();
216
+ log_1.Log.infoAdvanced({ indent, logLevel });
217
+ log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.cyan(`▶ ${absoluteOutputFile}`));
218
+ }
219
+ const options = await (0, get_render_media_options_1.getRenderMediaOptions)({
220
+ config,
221
+ outputLocation: absoluteOutputFile,
222
+ serveUrl: urlOrBundle,
223
+ codec,
224
+ remotionRoot,
225
+ });
226
+ await (0, renderer_1.renderMedia)({
227
+ ...options,
228
+ onProgress: (update) => {
229
+ encodedDoneIn = update.encodedDoneIn;
230
+ encodedFrames = update.encodedFrames;
231
+ renderedDoneIn = update.renderedDoneIn;
232
+ stitchStage = update.stitchStage;
233
+ renderedFrames = update.renderedFrames;
234
+ updateRenderProgress();
235
+ },
236
+ puppeteerInstance,
237
+ onDownload,
238
+ downloadMap,
239
+ onSlowestFrames: (slowestFrames) => {
240
+ log_1.Log.verboseAdvanced({ indent, logLevel });
241
+ log_1.Log.verboseAdvanced({ indent, logLevel }, `Slowest frames:`);
242
+ slowestFrames.forEach(({ frame, time }) => {
243
+ log_1.Log.verboseAdvanced({ indent, logLevel }, `Frame ${frame} (${time.toFixed(3)}ms)`);
244
+ });
245
+ },
246
+ printLog: (...str) => log_1.Log.verboseAdvanced({ indent, logLevel }, ...str),
247
+ });
248
+ log_1.Log.infoAdvanced({ indent, logLevel });
249
+ log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.cyan(`▶ ${absoluteOutputFile}`));
250
+ for (const line of renderer_1.RenderInternals.perf.getPerf()) {
251
+ log_1.Log.verboseAdvanced({ indent, logLevel }, line);
252
+ }
253
+ };
254
+ exports.renderCompFlow = renderCompFlow;
@@ -0,0 +1,31 @@
1
+ import type { Browser, BrowserExecutable, ChromiumOptions, FfmpegExecutable, ImageFormat, LogLevel, StillImageFormat } from '@remotion/renderer';
2
+ import type { JobProgressCallback } from '../preview-server/render-queue/job';
3
+ export declare const renderStillFlow: ({ remotionRoot, fullEntryPoint, entryPointReason, remainingArgs, browser, browserExecutable, chromiumOptions, envVariables, ffmpegExecutable, ffprobeExecutable, height, inputProps, overwrite, port, publicDir, puppeteerTimeout, quality, scale, stillFrame, width, compositionIdFromUi, imageFormatFromUi, logLevel, configFileImageFormat, onProgress, indentOutput, addCleanupCallback, }: {
4
+ remotionRoot: string;
5
+ fullEntryPoint: string;
6
+ entryPointReason: string;
7
+ remainingArgs: string[];
8
+ inputProps: object;
9
+ envVariables: Record<string, string>;
10
+ quality: number | undefined;
11
+ browser: Browser;
12
+ stillFrame: number;
13
+ browserExecutable: BrowserExecutable;
14
+ chromiumOptions: ChromiumOptions;
15
+ scale: number;
16
+ ffmpegExecutable: FfmpegExecutable;
17
+ ffprobeExecutable: FfmpegExecutable;
18
+ overwrite: boolean;
19
+ puppeteerTimeout: number;
20
+ port: number | null;
21
+ publicDir: string | null;
22
+ height: number | null;
23
+ width: number | null;
24
+ compositionIdFromUi: string | null;
25
+ imageFormatFromUi: StillImageFormat | null;
26
+ logLevel: LogLevel;
27
+ configFileImageFormat: ImageFormat | undefined;
28
+ onProgress: JobProgressCallback;
29
+ indentOutput: boolean;
30
+ addCleanupCallback: (cb: () => Promise<void>) => void;
31
+ }) => Promise<void>;
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ // Prints to CLI and also reports back to browser
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.renderStillFlow = void 0;
8
+ const renderer_1 = require("@remotion/renderer");
9
+ const fs_1 = require("fs");
10
+ const path_1 = __importDefault(require("path"));
11
+ const chalk_1 = require("../chalk");
12
+ const determine_image_format_1 = require("../determine-image-format");
13
+ const get_cli_options_1 = require("../get-cli-options");
14
+ const get_composition_with_dimension_override_1 = require("../get-composition-with-dimension-override");
15
+ const log_1 = require("../log");
16
+ const parse_command_line_1 = require("../parse-command-line");
17
+ const progress_bar_1 = require("../progress-bar");
18
+ const setup_cache_1 = require("../setup-cache");
19
+ const truthy_1 = require("../truthy");
20
+ const user_passed_output_location_1 = require("../user-passed-output-location");
21
+ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason, remainingArgs, browser, browserExecutable, chromiumOptions, envVariables, ffmpegExecutable, ffprobeExecutable, height, inputProps, overwrite, port, publicDir, puppeteerTimeout, quality, scale, stillFrame, width, compositionIdFromUi, imageFormatFromUi, logLevel, configFileImageFormat, onProgress, indentOutput, addCleanupCallback, }) => {
22
+ var _a;
23
+ const downloads = [];
24
+ const aggregate = {
25
+ rendering: null,
26
+ downloads,
27
+ stitching: null,
28
+ bundling: {
29
+ message: null,
30
+ progress: 0,
31
+ },
32
+ };
33
+ let renderProgress = null;
34
+ const updateProgress = () => {
35
+ const { output, progress, message } = (0, progress_bar_1.makeRenderingAndStitchingProgress)(aggregate, indentOutput);
36
+ if (renderProgress) {
37
+ renderProgress.update(output);
38
+ }
39
+ onProgress({ progress, message });
40
+ };
41
+ log_1.Log.verboseAdvanced({ indent: indentOutput, logLevel }, 'Browser executable: ', browserExecutable);
42
+ const shouldDumpIo = renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose');
43
+ const browserInstance = (0, renderer_1.openBrowser)(browser, {
44
+ browserExecutable,
45
+ chromiumOptions,
46
+ shouldDumpIo,
47
+ forceDeviceScaleFactor: scale,
48
+ indentationString: indentOutput ? log_1.INDENT_TOKEN + ' ' : '',
49
+ });
50
+ const steps = [
51
+ renderer_1.RenderInternals.isServeUrl(fullEntryPoint) ? null : 'bundling',
52
+ 'rendering',
53
+ ].filter(truthy_1.truthy);
54
+ const { cleanup: cleanupBundle, urlOrBundle } = await (0, setup_cache_1.bundleOnCliOrTakeServeUrl)({
55
+ fullPath: fullEntryPoint,
56
+ remotionRoot,
57
+ steps,
58
+ publicDir,
59
+ onProgress: (progress) => {
60
+ aggregate.bundling = progress;
61
+ updateProgress();
62
+ },
63
+ indentOutput,
64
+ logLevel,
65
+ });
66
+ addCleanupCallback(cleanupBundle);
67
+ const puppeteerInstance = await browserInstance;
68
+ addCleanupCallback(() => puppeteerInstance.close(false));
69
+ const downloadMap = renderer_1.RenderInternals.makeDownloadMap();
70
+ addCleanupCallback(() => renderer_1.RenderInternals.cleanDownloadMap(downloadMap));
71
+ const comps = await (0, renderer_1.getCompositions)(urlOrBundle, {
72
+ inputProps,
73
+ puppeteerInstance,
74
+ envVariables,
75
+ timeoutInMilliseconds: puppeteerTimeout,
76
+ chromiumOptions,
77
+ port,
78
+ browserExecutable,
79
+ ffmpegExecutable,
80
+ ffprobeExecutable,
81
+ downloadMap,
82
+ });
83
+ const { compositionId, config, reason, argsAfterComposition } = await (0, get_composition_with_dimension_override_1.getCompositionWithDimensionOverride)({
84
+ validCompositions: comps,
85
+ height,
86
+ width,
87
+ args: remainingArgs,
88
+ compositionIdFromUi,
89
+ });
90
+ const { format: imageFormat, source } = (0, determine_image_format_1.determineFinalImageFormat)({
91
+ cliFlag: (_a = parse_command_line_1.parsedCli['image-format']) !== null && _a !== void 0 ? _a : null,
92
+ configImageFormat: configFileImageFormat !== null && configFileImageFormat !== void 0 ? configFileImageFormat : null,
93
+ downloadName: null,
94
+ outName: (0, user_passed_output_location_1.getUserPassedOutputLocation)(argsAfterComposition),
95
+ isLambda: false,
96
+ fromUi: imageFormatFromUi,
97
+ });
98
+ const relativeOutputLocation = (0, user_passed_output_location_1.getOutputLocation)({
99
+ compositionId,
100
+ defaultExtension: imageFormat,
101
+ args: argsAfterComposition,
102
+ });
103
+ const absoluteOutputLocation = (0, get_cli_options_1.getAndValidateAbsoluteOutputFile)(relativeOutputLocation, overwrite);
104
+ (0, fs_1.mkdirSync)(path_1.default.join(absoluteOutputLocation, '..'), {
105
+ recursive: true,
106
+ });
107
+ log_1.Log.infoAdvanced({ indent: indentOutput, logLevel }, chalk_1.chalk.gray(`Entry point = ${fullEntryPoint} (${entryPointReason}), Output = ${relativeOutputLocation}, Format = ${imageFormat} (${source}), Composition = ${compositionId} (${reason})`));
108
+ renderProgress = (0, progress_bar_1.createOverwriteableCliOutput)({
109
+ quiet: (0, parse_command_line_1.quietFlagProvided)(),
110
+ });
111
+ const renderStart = Date.now();
112
+ aggregate.rendering = {
113
+ frames: 0,
114
+ concurrency: 1,
115
+ doneIn: null,
116
+ steps,
117
+ totalFrames: 1,
118
+ };
119
+ updateProgress();
120
+ const onDownload = (src) => {
121
+ const id = Math.random();
122
+ const download = {
123
+ id,
124
+ name: src,
125
+ progress: 0,
126
+ downloaded: 0,
127
+ totalBytes: null,
128
+ };
129
+ downloads.push(download);
130
+ updateProgress();
131
+ return ({ percent }) => {
132
+ download.progress = percent;
133
+ updateProgress();
134
+ };
135
+ };
136
+ await (0, renderer_1.renderStill)({
137
+ composition: config,
138
+ frame: stillFrame,
139
+ output: absoluteOutputLocation,
140
+ serveUrl: urlOrBundle,
141
+ quality,
142
+ dumpBrowserLogs: shouldDumpIo,
143
+ envVariables,
144
+ imageFormat,
145
+ inputProps,
146
+ chromiumOptions,
147
+ timeoutInMilliseconds: puppeteerTimeout,
148
+ scale,
149
+ ffmpegExecutable,
150
+ browserExecutable,
151
+ overwrite,
152
+ onDownload,
153
+ port,
154
+ downloadMap,
155
+ puppeteerInstance,
156
+ });
157
+ aggregate.rendering = {
158
+ frames: 1,
159
+ concurrency: 1,
160
+ doneIn: Date.now() - renderStart,
161
+ steps,
162
+ totalFrames: 1,
163
+ };
164
+ updateProgress();
165
+ log_1.Log.infoAdvanced({ indent: indentOutput, logLevel });
166
+ log_1.Log.infoAdvanced({ indent: indentOutput, logLevel }, chalk_1.chalk.cyan(`▶️ ${absoluteOutputLocation}`));
167
+ };
168
+ exports.renderStillFlow = renderStillFlow;
package/dist/render.js CHANGED
@@ -108,7 +108,7 @@ const render = async (remotionRoot, args) => {
108
108
  downloadName: null,
109
109
  outName: (0, user_passed_output_location_1.getUserPassedOutputLocation)(argsAfterComposition),
110
110
  });
111
- (0, get_cli_options_1.validateFfmepgCanUseCodec)(codec, remotionRoot);
111
+ await (0, get_cli_options_1.validateFfmpegCanUseCodec)(codec, remotionRoot);
112
112
  renderer_1.RenderInternals.validateEvenDimensionsWithCodec({
113
113
  width: config.width,
114
114
  height: config.height,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/cli",
3
- "version": "3.3.27",
3
+ "version": "3.3.28",
4
4
  "description": "CLI for Remotion",
5
5
  "main": "dist/index.js",
6
6
  "sideEffects": false,
@@ -22,16 +22,16 @@
22
22
  "author": "Jonny Burger <jonny@remotion.dev>",
23
23
  "license": "SEE LICENSE IN LICENSE.md",
24
24
  "dependencies": {
25
- "@remotion/bundler": "3.3.27",
26
- "@remotion/media-utils": "3.3.27",
27
- "@remotion/player": "3.3.27",
28
- "@remotion/renderer": "3.3.27",
25
+ "@remotion/bundler": "3.3.28",
26
+ "@remotion/media-utils": "3.3.28",
27
+ "@remotion/player": "3.3.28",
28
+ "@remotion/renderer": "3.3.28",
29
29
  "better-opn": "2.1.1",
30
30
  "dotenv": "9.0.2",
31
31
  "memfs": "3.4.3",
32
32
  "minimist": "1.2.6",
33
33
  "prompts": "2.4.1",
34
- "remotion": "3.3.27",
34
+ "remotion": "3.3.28",
35
35
  "semver": "7.3.5",
36
36
  "source-map": "0.6.1"
37
37
  },
@@ -71,5 +71,5 @@
71
71
  "publishConfig": {
72
72
  "access": "public"
73
73
  },
74
- "gitHead": "5dfc0dfa0df9592a358127a9aea9219244e6807a"
74
+ "gitHead": "0caa0bec583b5e4c2b12b7375c365e02c2378eeb"
75
75
  }