@remotion/cli 3.3.76 → 3.3.77

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 (156) hide show
  1. package/dist/config/still-frame.js +5 -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/Checkbox.d.ts +5 -0
  5. package/dist/editor/components/Checkbox.js +38 -0
  6. package/dist/editor/components/CollapsableOptions.d.ts +6 -0
  7. package/dist/editor/components/CollapsableOptions.js +35 -0
  8. package/dist/editor/components/CurrentCompositionSideEffects.d.ts +3 -0
  9. package/dist/editor/components/CurrentCompositionSideEffects.js +43 -0
  10. package/dist/editor/components/InlineAction.d.ts +5 -0
  11. package/dist/editor/components/InlineAction.js +34 -0
  12. package/dist/editor/components/Modals.d.ts +2 -0
  13. package/dist/editor/components/Modals.js +23 -0
  14. package/dist/editor/components/RenderButton.d.ts +6 -0
  15. package/dist/editor/components/RenderButton.js +67 -0
  16. package/dist/editor/components/RenderModal/CrfSetting.d.ts +15 -0
  17. package/dist/editor/components/RenderModal/CrfSetting.js +43 -0
  18. package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.d.ts +5 -0
  19. package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.js +14 -0
  20. package/dist/editor/components/RenderModal/FrameRangeSetting.d.ts +8 -0
  21. package/dist/editor/components/RenderModal/FrameRangeSetting.js +42 -0
  22. package/dist/editor/components/RenderModal/MutedSetting.d.ts +5 -0
  23. package/dist/editor/components/RenderModal/MutedSetting.js +14 -0
  24. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.d.ts +5 -0
  25. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.js +26 -0
  26. package/dist/editor/components/RenderModal/NumberSetting.d.ts +9 -0
  27. package/dist/editor/components/RenderModal/NumberSetting.js +26 -0
  28. package/dist/editor/components/RenderModal/QualitySetting.d.ts +5 -0
  29. package/dist/editor/components/RenderModal/QualitySetting.js +27 -0
  30. package/dist/editor/components/RenderModal/RenderErrorModal.d.ts +5 -0
  31. package/dist/editor/components/RenderModal/RenderErrorModal.js +64 -0
  32. package/dist/editor/components/RenderModal/RenderModal.d.ts +28 -0
  33. package/dist/editor/components/RenderModal/RenderModal.js +484 -0
  34. package/dist/editor/components/RenderModal/RenderModalAdvanced.d.ts +11 -0
  35. package/dist/editor/components/RenderModal/RenderModalAdvanced.js +15 -0
  36. package/dist/editor/components/RenderModal/RenderModalAudio.d.ts +13 -0
  37. package/dist/editor/components/RenderModal/RenderModalAudio.js +22 -0
  38. package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +24 -0
  39. package/dist/editor/components/RenderModal/RenderModalBasic.js +87 -0
  40. package/dist/editor/components/RenderModal/RenderModalGif.d.ts +9 -0
  41. package/dist/editor/components/RenderModal/RenderModalGif.js +16 -0
  42. package/dist/editor/components/RenderModal/RenderModalHr.d.ts +2 -0
  43. package/dist/editor/components/RenderModal/RenderModalHr.js +18 -0
  44. package/dist/editor/components/RenderModal/RenderModalPicture.d.ts +28 -0
  45. package/dist/editor/components/RenderModal/RenderModalPicture.js +51 -0
  46. package/dist/editor/components/RenderModal/ScaleSetting.d.ts +5 -0
  47. package/dist/editor/components/RenderModal/ScaleSetting.js +11 -0
  48. package/dist/editor/components/RenderModal/human-readable-audio-codecs.d.ts +2 -0
  49. package/dist/editor/components/RenderModal/human-readable-audio-codecs.js +18 -0
  50. package/dist/editor/components/RenderModal/human-readable-codec.d.ts +2 -0
  51. package/dist/editor/components/RenderModal/human-readable-codec.js +36 -0
  52. package/dist/editor/components/RenderModal/layout.d.ts +5 -0
  53. package/dist/editor/components/RenderModal/layout.js +31 -0
  54. package/dist/editor/components/RenderQueue/CircularProgress.d.ts +5 -0
  55. package/dist/editor/components/RenderQueue/CircularProgress.js +18 -0
  56. package/dist/editor/components/RenderQueue/RenderQueueError.d.ts +5 -0
  57. package/dist/editor/components/RenderQueue/RenderQueueError.js +26 -0
  58. package/dist/editor/components/RenderQueue/RenderQueueItem.d.ts +5 -0
  59. package/dist/editor/components/RenderQueue/RenderQueueItem.js +39 -0
  60. package/dist/editor/components/RenderQueue/RenderQueueItemCancelButton.d.ts +5 -0
  61. package/dist/editor/components/RenderQueue/RenderQueueItemCancelButton.js +22 -0
  62. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.d.ts +5 -0
  63. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.js +27 -0
  64. package/dist/editor/components/RenderQueue/RenderQueueOutputName.d.ts +5 -0
  65. package/dist/editor/components/RenderQueue/RenderQueueOutputName.js +24 -0
  66. package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.d.ts +5 -0
  67. package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.js +27 -0
  68. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.d.ts +5 -0
  69. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +23 -0
  70. package/dist/editor/components/RenderQueue/RenderQueueRepeat.d.ts +5 -0
  71. package/dist/editor/components/RenderQueue/RenderQueueRepeat.js +22 -0
  72. package/dist/editor/components/RenderQueue/actions.d.ts +49 -0
  73. package/dist/editor/components/RenderQueue/actions.js +98 -0
  74. package/dist/editor/components/RenderQueue/context.d.ts +19 -0
  75. package/dist/editor/components/RenderQueue/context.js +56 -0
  76. package/dist/editor/components/RenderQueue/index.d.ts +2 -0
  77. package/dist/editor/components/RenderQueue/index.js +18 -0
  78. package/dist/editor/components/RenderQueue/item-style.d.ts +2 -0
  79. package/dist/editor/components/RenderQueue/item-style.js +21 -0
  80. package/dist/editor/components/RenderToolbarIcon.d.ts +2 -0
  81. package/dist/editor/components/RenderToolbarIcon.js +78 -0
  82. package/dist/editor/components/RendersTab.d.ts +6 -0
  83. package/dist/editor/components/RendersTab.js +43 -0
  84. package/dist/editor/components/SegmentedControl.d.ts +16 -0
  85. package/dist/editor/components/SegmentedControl.js +63 -0
  86. package/dist/editor/components/SidebarContent.d.ts +5 -0
  87. package/dist/editor/components/SidebarContent.js +52 -0
  88. package/dist/editor/components/Tabs/index.d.ts +11 -0
  89. package/dist/editor/components/Tabs/index.js +51 -0
  90. package/dist/editor/helpers/client-id.d.ts +17 -0
  91. package/dist/editor/helpers/client-id.js +46 -0
  92. package/dist/editor/helpers/use-file-existence.d.ts +1 -0
  93. package/dist/editor/helpers/use-file-existence.js +66 -0
  94. package/dist/editor/icons/RenderStillIcon.d.ts +3 -0
  95. package/dist/editor/icons/RenderStillIcon.js +8 -0
  96. package/dist/editor/icons/audio.d.ts +2 -0
  97. package/dist/editor/icons/audio.js +6 -0
  98. package/dist/editor/icons/file.d.ts +2 -0
  99. package/dist/editor/icons/file.js +6 -0
  100. package/dist/editor/icons/frame.d.ts +2 -0
  101. package/dist/editor/icons/frame.js +6 -0
  102. package/dist/editor/icons/gear.d.ts +2 -0
  103. package/dist/editor/icons/gear.js +6 -0
  104. package/dist/editor/icons/gif.d.ts +2 -0
  105. package/dist/editor/icons/gif.js +6 -0
  106. package/dist/editor/icons/render.d.ts +5 -0
  107. package/dist/editor/icons/render.js +8 -0
  108. package/dist/editor/icons/video.d.ts +5 -0
  109. package/dist/editor/icons/video.js +8 -0
  110. package/dist/file-watcher.d.ts +9 -0
  111. package/dist/file-watcher.js +35 -0
  112. package/dist/gcp-command.d.ts +1 -0
  113. package/dist/gcp-command.js +27 -0
  114. package/dist/get-default-out-name.d.ts +5 -0
  115. package/dist/get-default-out-name.js +10 -0
  116. package/dist/preview-server/api-routes.d.ts +4 -0
  117. package/dist/preview-server/api-routes.js +17 -0
  118. package/dist/preview-server/api-types.d.ts +27 -0
  119. package/dist/preview-server/api-types.js +2 -0
  120. package/dist/preview-server/file-existence-watchers.d.ts +13 -0
  121. package/dist/preview-server/file-existence-watchers.js +62 -0
  122. package/dist/preview-server/handler.d.ts +9 -0
  123. package/dist/preview-server/handler.js +34 -0
  124. package/dist/preview-server/parse-body.d.ts +2 -0
  125. package/dist/preview-server/parse-body.js +16 -0
  126. package/dist/preview-server/render-queue/get-default-video-contexts.d.ts +10 -0
  127. package/dist/preview-server/render-queue/get-default-video-contexts.js +13 -0
  128. package/dist/preview-server/render-queue/job.d.ts +114 -0
  129. package/dist/preview-server/render-queue/job.js +2 -0
  130. package/dist/preview-server/render-queue/make-retry-payload.d.ts +3 -0
  131. package/dist/preview-server/render-queue/make-retry-payload.js +79 -0
  132. package/dist/preview-server/render-queue/open-directory-in-finder.d.ts +1 -0
  133. package/dist/preview-server/render-queue/open-directory-in-finder.js +34 -0
  134. package/dist/preview-server/render-queue/process-still.d.ts +8 -0
  135. package/dist/preview-server/render-queue/process-still.js +47 -0
  136. package/dist/preview-server/render-queue/process-video.d.ts +8 -0
  137. package/dist/preview-server/render-queue/process-video.js +64 -0
  138. package/dist/preview-server/render-queue/queue.d.ts +21 -0
  139. package/dist/preview-server/render-queue/queue.js +185 -0
  140. package/dist/preview-server/routes/add-render.d.ts +3 -0
  141. package/dist/preview-server/routes/add-render.js +68 -0
  142. package/dist/preview-server/routes/cancel-render.d.ts +3 -0
  143. package/dist/preview-server/routes/cancel-render.js +9 -0
  144. package/dist/preview-server/routes/open-in-file-explorer.d.ts +3 -0
  145. package/dist/preview-server/routes/open-in-file-explorer.js +14 -0
  146. package/dist/preview-server/routes/remove-render.d.ts +3 -0
  147. package/dist/preview-server/routes/remove-render.js +9 -0
  148. package/dist/preview-server/routes/subscribe-to-file-existence.d.ts +3 -0
  149. package/dist/preview-server/routes/subscribe-to-file-existence.js +13 -0
  150. package/dist/preview-server/routes/unsubscribe-from-file-existence.d.ts +3 -0
  151. package/dist/preview-server/routes/unsubscribe-from-file-existence.js +13 -0
  152. package/dist/render-flows/render.d.ts +46 -0
  153. package/dist/render-flows/render.js +279 -0
  154. package/dist/render-flows/still.d.ts +29 -0
  155. package/dist/render-flows/still.js +171 -0
  156. package/package.json +6 -6
@@ -0,0 +1,14 @@
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.handleOpenInFileExplorer = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const open_directory_in_finder_1 = require("../render-queue/open-directory-in-finder");
9
+ 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);
13
+ };
14
+ exports.handleOpenInFileExplorer = handleOpenInFileExplorer;
@@ -0,0 +1,3 @@
1
+ import type { ApiHandler } from '../api-types';
2
+ import type { RemoveRenderRequest } from '../render-queue/job';
3
+ export declare const handleRemoveRender: ApiHandler<RemoveRenderRequest, undefined>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleRemoveRender = void 0;
4
+ const queue_1 = require("../render-queue/queue");
5
+ const handleRemoveRender = ({ input: { jobId }, }) => {
6
+ (0, queue_1.removeJob)(jobId);
7
+ return Promise.resolve(undefined);
8
+ };
9
+ exports.handleRemoveRender = handleRemoveRender;
@@ -0,0 +1,3 @@
1
+ import type { ApiHandler } from '../api-types';
2
+ import type { SubscribeToFileExistenceRequest, SubscribeToFileExistenceResponse } from '../render-queue/job';
3
+ export declare const subscribeToFileExistence: ApiHandler<SubscribeToFileExistenceRequest, SubscribeToFileExistenceResponse>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.subscribeToFileExistence = void 0;
4
+ const file_existence_watchers_1 = require("../file-existence-watchers");
5
+ const subscribeToFileExistence = ({ input: { file, clientId }, remotionRoot }) => {
6
+ const { exists } = (0, file_existence_watchers_1.subscribeToFileExistenceWatchers)({
7
+ file,
8
+ remotionRoot,
9
+ clientId,
10
+ });
11
+ return Promise.resolve({ exists });
12
+ };
13
+ exports.subscribeToFileExistence = subscribeToFileExistence;
@@ -0,0 +1,3 @@
1
+ import type { ApiHandler } from '../api-types';
2
+ import type { UnsubscribeFromFileExistenceRequest } from '../render-queue/job';
3
+ export declare const unsubscribeFromFileExistence: ApiHandler<UnsubscribeFromFileExistenceRequest, undefined>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unsubscribeFromFileExistence = void 0;
4
+ const file_existence_watchers_1 = require("../file-existence-watchers");
5
+ const unsubscribeFromFileExistence = ({ input, remotionRoot }) => {
6
+ (0, file_existence_watchers_1.unsubscribeFromFileExistenceWatchers)({
7
+ file: input.file,
8
+ clientId: input.clientId,
9
+ remotionRoot,
10
+ });
11
+ return Promise.resolve(undefined);
12
+ };
13
+ exports.unsubscribeFromFileExistence = unsubscribeFromFileExistence;
@@ -0,0 +1,46 @@
1
+ import type { AudioCodec, Browser, BrowserExecutable, CancelSignal, ChromiumOptions, Codec, Crf, FfmpegOverrideFn, FrameRange, LogLevel, PixelFormat, ProResProfile, VideoImageFormat } from '@remotion/renderer';
2
+ import type { Loop } from '../config/number-of-gif-loops';
3
+ import type { JobProgressCallback } from '../preview-server/render-queue/job';
4
+ export declare const renderCompFlow: ({ 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, quality, onProgress, addCleanupCallback, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, audioCodec, }: {
5
+ remotionRoot: string;
6
+ fullEntryPoint: string;
7
+ entryPointReason: string;
8
+ browserExecutable: BrowserExecutable;
9
+ chromiumOptions: ChromiumOptions;
10
+ logLevel: LogLevel;
11
+ browser: Browser;
12
+ scale: number;
13
+ indent: boolean;
14
+ shouldOutputImageSequence: boolean;
15
+ publicDir: string | null;
16
+ inputProps: object;
17
+ envVariables: Record<string, string>;
18
+ puppeteerTimeout: number;
19
+ port: number | null;
20
+ height: number | null;
21
+ width: number | null;
22
+ remainingArgs: string[];
23
+ compositionIdFromUi: string | null;
24
+ outputLocationFromUI: string | null;
25
+ overwrite: boolean;
26
+ quiet: boolean;
27
+ concurrency: number | string | null;
28
+ frameRange: FrameRange | null;
29
+ everyNthFrame: number;
30
+ quality: number | undefined;
31
+ onProgress: JobProgressCallback;
32
+ addCleanupCallback: (cb: () => void) => void;
33
+ crf: Crf | null;
34
+ cancelSignal: CancelSignal | null;
35
+ uiCodec: Codec | null;
36
+ uiImageFormat: VideoImageFormat;
37
+ ffmpegOverride: FfmpegOverrideFn;
38
+ audioBitrate: string | null;
39
+ videoBitrate: string | null;
40
+ muted: boolean;
41
+ enforceAudioTrack: boolean;
42
+ proResProfile: ProResProfile | undefined;
43
+ pixelFormat: PixelFormat;
44
+ numberOfGifLoops: Loop;
45
+ audioCodec: AudioCodec | null;
46
+ }) => Promise<void>;
@@ -0,0 +1,279 @@
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 cleanup_before_quit_1 = require("../cleanup-before-quit");
13
+ const config_1 = require("../config");
14
+ const get_cli_options_1 = require("../get-cli-options");
15
+ const get_composition_with_dimension_override_1 = require("../get-composition-with-dimension-override");
16
+ const get_filename_1 = require("../get-filename");
17
+ const get_final_output_codec_1 = require("../get-final-output-codec");
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
+ // TODO: rename to renderVideoFlow
26
+ const renderCompFlow = 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, quality, onProgress, addCleanupCallback, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, audioCodec, }) => {
27
+ var _a;
28
+ const downloads = [];
29
+ const downloadMap = renderer_1.RenderInternals.makeDownloadMap();
30
+ addCleanupCallback(() => renderer_1.RenderInternals.cleanDownloadMap(downloadMap));
31
+ (0, cleanup_before_quit_1.registerCleanupJob)(() => renderer_1.RenderInternals.cleanDownloadMap(downloadMap));
32
+ log_1.Log.verboseAdvanced({ indent, logLevel }, 'Browser executable: ', browserExecutable);
33
+ log_1.Log.verboseAdvanced({ indent, logLevel }, 'Asset dirs', downloadMap.assetDir);
34
+ const browserInstance = (0, renderer_1.openBrowser)(browser, {
35
+ browserExecutable,
36
+ shouldDumpIo: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
37
+ chromiumOptions,
38
+ forceDeviceScaleFactor: scale,
39
+ indentationString: indent ? log_1.INDENT_TOKEN + ' ' : '',
40
+ });
41
+ const steps = [
42
+ renderer_1.RenderInternals.isServeUrl(fullEntryPoint) ? null : 'bundling',
43
+ 'rendering',
44
+ shouldOutputImageSequence ? null : 'stitching',
45
+ ].filter(truthy_1.truthy);
46
+ const { urlOrBundle, cleanup: cleanupBundle } = await (0, setup_cache_1.bundleOnCliOrTakeServeUrl)({
47
+ fullPath: fullEntryPoint,
48
+ remotionRoot,
49
+ steps,
50
+ publicDir,
51
+ // TODO: Implement onProgress
52
+ onProgress: () => undefined,
53
+ indentOutput: indent,
54
+ logLevel,
55
+ });
56
+ (0, cleanup_before_quit_1.registerCleanupJob)(() => cleanupBundle());
57
+ addCleanupCallback(() => cleanupBundle());
58
+ const onDownload = (src) => {
59
+ const id = Math.random();
60
+ const download = {
61
+ id,
62
+ name: src,
63
+ progress: 0,
64
+ downloaded: 0,
65
+ totalBytes: null,
66
+ };
67
+ downloads.push(download);
68
+ updateRenderProgress();
69
+ return ({ percent, downloaded, totalSize }) => {
70
+ download.progress = percent;
71
+ download.totalBytes = totalSize;
72
+ download.downloaded = downloaded;
73
+ updateRenderProgress();
74
+ };
75
+ };
76
+ const puppeteerInstance = await browserInstance;
77
+ (0, cleanup_before_quit_1.registerCleanupJob)(() => puppeteerInstance.close(false));
78
+ addCleanupCallback(() => puppeteerInstance.close(false));
79
+ const comps = await (0, renderer_1.getCompositions)(urlOrBundle, {
80
+ inputProps,
81
+ puppeteerInstance,
82
+ envVariables,
83
+ timeoutInMilliseconds: puppeteerTimeout,
84
+ chromiumOptions,
85
+ browserExecutable,
86
+ downloadMap,
87
+ port,
88
+ });
89
+ const { compositionId, config, reason, argsAfterComposition } = await (0, get_composition_with_dimension_override_1.getCompositionWithDimensionOverride)({
90
+ validCompositions: comps,
91
+ height,
92
+ width,
93
+ args: remainingArgs,
94
+ compositionIdFromUi,
95
+ });
96
+ const { codec, reason: codecReason } = (0, get_final_output_codec_1.getFinalOutputCodec)({
97
+ cliFlag: parse_command_line_1.parsedCli.codec,
98
+ configFile: (_a = config_1.ConfigInternals.getOutputCodecOrUndefined()) !== null && _a !== void 0 ? _a : null,
99
+ downloadName: null,
100
+ outName: (0, user_passed_output_location_1.getUserPassedOutputLocation)(argsAfterComposition),
101
+ uiCodec,
102
+ });
103
+ renderer_1.RenderInternals.validateEvenDimensionsWithCodec({
104
+ width: config.width,
105
+ height: config.height,
106
+ codec,
107
+ scale,
108
+ });
109
+ const relativeOutputLocation = (0, get_filename_1.getOutputFilename)({
110
+ imageSequence: shouldOutputImageSequence,
111
+ compositionName: compositionId,
112
+ defaultExtension: renderer_1.RenderInternals.getFileExtensionFromCodec(codec, audioCodec),
113
+ args: argsAfterComposition,
114
+ indent,
115
+ fromUi: outputLocationFromUI,
116
+ logLevel,
117
+ });
118
+ log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.gray(`Entry point = ${fullEntryPoint} (${entryPointReason}), Composition = ${compositionId} (${reason}), Codec = ${codec} (${codecReason}), Output = ${relativeOutputLocation}`));
119
+ const absoluteOutputFile = (0, get_cli_options_1.getAndValidateAbsoluteOutputFile)(relativeOutputLocation, overwrite);
120
+ const outputDir = shouldOutputImageSequence
121
+ ? absoluteOutputFile
122
+ : await fs_1.default.promises.mkdtemp(path_1.default.join(os_1.default.tmpdir(), 'react-motion-render'));
123
+ log_1.Log.verboseAdvanced({ indent, logLevel }, 'Output dir', outputDir);
124
+ const renderProgress = (0, progress_bar_1.createOverwriteableCliOutput)({
125
+ quiet,
126
+ cancelSignal,
127
+ });
128
+ const realFrameRange = renderer_1.RenderInternals.getRealFrameRange(config.durationInFrames, frameRange);
129
+ const totalFrames = renderer_1.RenderInternals.getFramesToRender(realFrameRange, everyNthFrame);
130
+ let encodedFrames = 0;
131
+ let renderedFrames = 0;
132
+ let encodedDoneIn = null;
133
+ let renderedDoneIn = null;
134
+ let stitchStage = 'encoding';
135
+ const actualConcurrency = renderer_1.RenderInternals.getActualConcurrency(concurrency);
136
+ const updateRenderProgress = () => {
137
+ if (totalFrames.length === 0) {
138
+ throw new Error('totalFrames should not be 0');
139
+ }
140
+ const { output, message, progress } = (0, progress_bar_1.makeRenderingAndStitchingProgress)({
141
+ rendering: {
142
+ frames: renderedFrames,
143
+ totalFrames: totalFrames.length,
144
+ concurrency: actualConcurrency,
145
+ doneIn: renderedDoneIn,
146
+ steps,
147
+ },
148
+ stitching: shouldOutputImageSequence
149
+ ? null
150
+ : {
151
+ doneIn: encodedDoneIn,
152
+ frames: encodedFrames,
153
+ stage: stitchStage,
154
+ steps,
155
+ totalFrames: totalFrames.length,
156
+ codec,
157
+ },
158
+ downloads,
159
+ bundling: {
160
+ message: 'Bundled',
161
+ progress: 1,
162
+ },
163
+ }, indent);
164
+ onProgress({ progress, message });
165
+ return renderProgress.update(output);
166
+ };
167
+ const imageFormat = (0, image_formats_1.getVideoImageFormat)({
168
+ codec: shouldOutputImageSequence ? undefined : codec,
169
+ uiImageFormat,
170
+ });
171
+ if (shouldOutputImageSequence) {
172
+ fs_1.default.mkdirSync(absoluteOutputFile, {
173
+ recursive: true,
174
+ });
175
+ if (imageFormat === 'none') {
176
+ throw new Error(`Cannot render an image sequence with a codec that renders no images. codec = ${codec}, imageFormat = ${imageFormat}`);
177
+ }
178
+ await (0, renderer_1.renderFrames)({
179
+ imageFormat,
180
+ inputProps,
181
+ onFrameUpdate: (rendered) => {
182
+ renderedFrames = rendered;
183
+ updateRenderProgress();
184
+ },
185
+ onStart: () => undefined,
186
+ onDownload: (src) => {
187
+ if (src.startsWith('data:')) {
188
+ log_1.Log.infoAdvanced({ indent, logLevel }, '\nWriting Data URL to file: ', src.substring(0, 30) + '...');
189
+ }
190
+ else {
191
+ log_1.Log.infoAdvanced({ indent, logLevel }, '\nDownloading asset... ', src);
192
+ }
193
+ },
194
+ cancelSignal: cancelSignal !== null && cancelSignal !== void 0 ? cancelSignal : undefined,
195
+ outputDir,
196
+ serveUrl: urlOrBundle,
197
+ dumpBrowserLogs: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
198
+ everyNthFrame,
199
+ envVariables,
200
+ frameRange,
201
+ concurrency: actualConcurrency,
202
+ puppeteerInstance,
203
+ quality,
204
+ timeoutInMilliseconds: puppeteerTimeout,
205
+ chromiumOptions,
206
+ scale,
207
+ browserExecutable,
208
+ port,
209
+ downloadMap,
210
+ composition: config,
211
+ });
212
+ updateRenderProgress();
213
+ process.stdout.write('\n');
214
+ log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.cyan(`▶ ${absoluteOutputFile}`));
215
+ }
216
+ const { slowestFrames } = await (0, renderer_1.renderMedia)({
217
+ outputLocation: absoluteOutputFile,
218
+ composition: {
219
+ ...config,
220
+ width: width !== null && width !== void 0 ? width : config.width,
221
+ height: height !== null && height !== void 0 ? height : config.height,
222
+ },
223
+ crf,
224
+ envVariables,
225
+ frameRange,
226
+ inputProps,
227
+ overwrite,
228
+ pixelFormat,
229
+ proResProfile,
230
+ quality,
231
+ dumpBrowserLogs: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
232
+ chromiumOptions,
233
+ timeoutInMilliseconds: config_1.ConfigInternals.getCurrentPuppeteerTimeout(),
234
+ scale,
235
+ port,
236
+ numberOfGifLoops,
237
+ everyNthFrame,
238
+ verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
239
+ muted,
240
+ enforceAudioTrack,
241
+ browserExecutable,
242
+ ffmpegOverride,
243
+ concurrency,
244
+ serveUrl: urlOrBundle,
245
+ codec,
246
+ audioBitrate,
247
+ videoBitrate,
248
+ onProgress: (update) => {
249
+ encodedDoneIn = update.encodedDoneIn;
250
+ encodedFrames = update.encodedFrames;
251
+ renderedDoneIn = update.renderedDoneIn;
252
+ stitchStage = update.stitchStage;
253
+ renderedFrames = update.renderedFrames;
254
+ updateRenderProgress();
255
+ },
256
+ puppeteerInstance,
257
+ onDownload,
258
+ internal: {
259
+ onCtrlCExit: cleanup_before_quit_1.registerCleanupJob,
260
+ downloadMap,
261
+ },
262
+ cancelSignal: cancelSignal !== null && cancelSignal !== void 0 ? cancelSignal : undefined,
263
+ printLog: (...str) => log_1.Log.verboseAdvanced({ indent, logLevel }, ...str),
264
+ audioCodec,
265
+ // TODO: Add missing elements
266
+ });
267
+ log_1.Log.verboseAdvanced({ indent, logLevel });
268
+ log_1.Log.verboseAdvanced({ indent, logLevel }, `Slowest frames:`);
269
+ slowestFrames.forEach(({ frame, time }) => {
270
+ log_1.Log.verboseAdvanced({ indent, logLevel }, `Frame ${frame} (${time.toFixed(3)}ms)`);
271
+ });
272
+ updateRenderProgress();
273
+ process.stdout.write('\n');
274
+ log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.cyan(`▶ ${absoluteOutputFile}`));
275
+ for (const line of renderer_1.RenderInternals.perf.getPerf()) {
276
+ log_1.Log.verboseAdvanced({ indent, logLevel }, line);
277
+ }
278
+ };
279
+ exports.renderCompFlow = renderCompFlow;
@@ -0,0 +1,29 @@
1
+ import type { Browser, BrowserExecutable, CancelSignal, ChromiumOptions, 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, height, inputProps, overwrite, port, publicDir, puppeteerTimeout, quality, scale, stillFrame, width, compositionIdFromUi, imageFormatFromUi, logLevel, onProgress, indentOutput, addCleanupCallback, cancelSignal, }: {
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
+ overwrite: boolean;
17
+ puppeteerTimeout: number;
18
+ port: number | null;
19
+ publicDir: string | null;
20
+ height: number | null;
21
+ width: number | null;
22
+ compositionIdFromUi: string | null;
23
+ imageFormatFromUi: StillImageFormat | null;
24
+ logLevel: LogLevel;
25
+ onProgress: JobProgressCallback;
26
+ indentOutput: boolean;
27
+ addCleanupCallback: (cb: () => void) => void;
28
+ cancelSignal: CancelSignal | null;
29
+ }) => Promise<void>;
@@ -0,0 +1,171 @@
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 cleanup_before_quit_1 = require("../cleanup-before-quit");
13
+ const config_1 = require("../config");
14
+ const determine_image_format_1 = require("../determine-image-format");
15
+ const get_cli_options_1 = require("../get-cli-options");
16
+ const get_composition_with_dimension_override_1 = require("../get-composition-with-dimension-override");
17
+ const log_1 = require("../log");
18
+ const parse_command_line_1 = require("../parse-command-line");
19
+ const progress_bar_1 = require("../progress-bar");
20
+ const setup_cache_1 = require("../setup-cache");
21
+ const truthy_1 = require("../truthy");
22
+ const user_passed_output_location_1 = require("../user-passed-output-location");
23
+ 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
+ var _a, _b;
25
+ const downloads = [];
26
+ const aggregate = {
27
+ rendering: null,
28
+ downloads,
29
+ stitching: null,
30
+ bundling: {
31
+ message: null,
32
+ progress: 0,
33
+ },
34
+ };
35
+ let renderProgress = null;
36
+ const updateProgress = () => {
37
+ const { output, progress, message } = (0, progress_bar_1.makeRenderingAndStitchingProgress)(aggregate, indentOutput);
38
+ if (renderProgress) {
39
+ renderProgress.update(output);
40
+ }
41
+ onProgress({ progress, message });
42
+ };
43
+ log_1.Log.verboseAdvanced({ indent: indentOutput, logLevel }, 'Browser executable: ', browserExecutable);
44
+ const shouldDumpIo = renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose');
45
+ const browserInstance = (0, renderer_1.openBrowser)(browser, {
46
+ browserExecutable,
47
+ chromiumOptions,
48
+ shouldDumpIo,
49
+ forceDeviceScaleFactor: scale,
50
+ indentationString: indentOutput ? log_1.INDENT_TOKEN + ' ' : '',
51
+ });
52
+ const steps = [
53
+ renderer_1.RenderInternals.isServeUrl(fullEntryPoint) ? null : 'bundling',
54
+ 'rendering',
55
+ ].filter(truthy_1.truthy);
56
+ const { cleanup: cleanupBundle, urlOrBundle } = await (0, setup_cache_1.bundleOnCliOrTakeServeUrl)({
57
+ fullPath: fullEntryPoint,
58
+ remotionRoot,
59
+ steps,
60
+ publicDir,
61
+ onProgress: (progress) => {
62
+ aggregate.bundling = progress;
63
+ updateProgress();
64
+ },
65
+ indentOutput,
66
+ logLevel,
67
+ });
68
+ (0, cleanup_before_quit_1.registerCleanupJob)(() => cleanupBundle());
69
+ addCleanupCallback(() => cleanupBundle());
70
+ const puppeteerInstance = await browserInstance;
71
+ addCleanupCallback(() => puppeteerInstance.close(false));
72
+ const downloadMap = renderer_1.RenderInternals.makeDownloadMap();
73
+ (0, cleanup_before_quit_1.registerCleanupJob)(() => renderer_1.RenderInternals.cleanDownloadMap(downloadMap));
74
+ addCleanupCallback(() => renderer_1.RenderInternals.cleanDownloadMap(downloadMap));
75
+ const comps = await (0, renderer_1.getCompositions)(urlOrBundle, {
76
+ inputProps,
77
+ puppeteerInstance,
78
+ envVariables,
79
+ timeoutInMilliseconds: puppeteerTimeout,
80
+ chromiumOptions,
81
+ port,
82
+ browserExecutable,
83
+ downloadMap,
84
+ });
85
+ const { compositionId, config, reason, argsAfterComposition } = await (0, get_composition_with_dimension_override_1.getCompositionWithDimensionOverride)({
86
+ validCompositions: comps,
87
+ height,
88
+ width,
89
+ args: remainingArgs,
90
+ compositionIdFromUi,
91
+ });
92
+ const { format: imageFormat, source } = (0, determine_image_format_1.determineFinalStillImageFormat)({
93
+ cliFlag: (_a = parse_command_line_1.parsedCli['image-format']) !== null && _a !== void 0 ? _a : null,
94
+ configImageFormat: (_b = config_1.ConfigInternals.getUserPreferredStillImageFormat()) !== null && _b !== void 0 ? _b : null,
95
+ downloadName: null,
96
+ outName: (0, user_passed_output_location_1.getUserPassedOutputLocation)(argsAfterComposition),
97
+ isLambda: false,
98
+ fromUi: imageFormatFromUi,
99
+ });
100
+ const relativeOutputLocation = (0, user_passed_output_location_1.getOutputLocation)({
101
+ compositionId,
102
+ defaultExtension: imageFormat,
103
+ args: argsAfterComposition,
104
+ type: 'asset',
105
+ });
106
+ const absoluteOutputLocation = (0, get_cli_options_1.getAndValidateAbsoluteOutputFile)(relativeOutputLocation, overwrite);
107
+ (0, fs_1.mkdirSync)(path_1.default.join(absoluteOutputLocation, '..'), {
108
+ recursive: true,
109
+ });
110
+ log_1.Log.infoAdvanced({ indent: indentOutput, logLevel }, chalk_1.chalk.gray(`Entry point = ${fullEntryPoint} (${entryPointReason}), Output = ${relativeOutputLocation}, Format = ${imageFormat} (${source}), Composition = ${compositionId} (${reason})`));
111
+ renderProgress = (0, progress_bar_1.createOverwriteableCliOutput)({
112
+ quiet: (0, parse_command_line_1.quietFlagProvided)(),
113
+ cancelSignal,
114
+ });
115
+ const renderStart = Date.now();
116
+ aggregate.rendering = {
117
+ frames: 0,
118
+ concurrency: 1,
119
+ doneIn: null,
120
+ steps,
121
+ totalFrames: 1,
122
+ };
123
+ updateProgress();
124
+ const onDownload = (src) => {
125
+ const id = Math.random();
126
+ const download = {
127
+ id,
128
+ name: src,
129
+ progress: 0,
130
+ downloaded: 0,
131
+ totalBytes: null,
132
+ };
133
+ downloads.push(download);
134
+ updateProgress();
135
+ return ({ percent }) => {
136
+ download.progress = percent;
137
+ updateProgress();
138
+ };
139
+ };
140
+ await (0, renderer_1.renderStill)({
141
+ composition: config,
142
+ frame: stillFrame,
143
+ output: absoluteOutputLocation,
144
+ serveUrl: urlOrBundle,
145
+ quality,
146
+ dumpBrowserLogs: shouldDumpIo,
147
+ envVariables,
148
+ imageFormat,
149
+ inputProps,
150
+ chromiumOptions,
151
+ timeoutInMilliseconds: puppeteerTimeout,
152
+ scale,
153
+ browserExecutable,
154
+ overwrite,
155
+ onDownload,
156
+ port,
157
+ downloadMap,
158
+ puppeteerInstance,
159
+ });
160
+ aggregate.rendering = {
161
+ frames: 1,
162
+ concurrency: 1,
163
+ doneIn: Date.now() - renderStart,
164
+ steps,
165
+ totalFrames: 1,
166
+ };
167
+ updateProgress();
168
+ log_1.Log.infoAdvanced({ indent: indentOutput, logLevel });
169
+ log_1.Log.infoAdvanced({ indent: indentOutput, logLevel }, chalk_1.chalk.cyan(`▶️ ${absoluteOutputLocation}`));
170
+ };
171
+ exports.renderStillFlow = renderStillFlow;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/cli",
3
- "version": "3.3.76",
3
+ "version": "3.3.77",
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.76",
20
- "@remotion/media-utils": "3.3.76",
21
- "@remotion/player": "3.3.76",
22
- "@remotion/renderer": "3.3.76",
19
+ "@remotion/bundler": "3.3.77",
20
+ "@remotion/media-utils": "3.3.77",
21
+ "@remotion/player": "3.3.77",
22
+ "@remotion/renderer": "3.3.77",
23
23
  "better-opn": "2.1.1",
24
24
  "dotenv": "9.0.2",
25
25
  "memfs": "3.4.3",
26
26
  "minimist": "1.2.6",
27
27
  "prompts": "2.4.1",
28
- "remotion": "3.3.76",
28
+ "remotion": "3.3.77",
29
29
  "semver": "7.3.5",
30
30
  "source-map": "0.6.1"
31
31
  },