@remotion/cli 3.3.37 → 3.3.38

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 (58) hide show
  1. package/dist/config/log.d.ts +1 -1
  2. package/dist/editor/components/Modals.js +1 -1
  3. package/dist/editor/components/RenderButton.js +8 -29
  4. package/dist/editor/components/RenderModal/CrfSetting.d.ts +2 -2
  5. package/dist/editor/components/RenderModal/CrfSetting.js +24 -11
  6. package/dist/editor/components/RenderModal/RenderModal.d.ts +5 -19
  7. package/dist/editor/components/RenderModal/RenderModal.js +181 -225
  8. package/dist/editor/components/RenderModal/ScaleSetting.js +18 -2
  9. package/dist/editor/components/RenderModal/layout.d.ts +0 -1
  10. package/dist/editor/components/RenderModal/layout.js +2 -8
  11. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +1 -2
  12. package/dist/editor/components/RenderQueue/actions.d.ts +2 -15
  13. package/dist/editor/components/RenderQueue/actions.js +1 -14
  14. package/dist/editor/components/RenderToolbarIcon.js +8 -30
  15. package/dist/editor/components/SegmentedControl.js +1 -1
  16. package/dist/editor/components/SidebarContent.js +1 -2
  17. package/dist/get-cli-options.d.ts +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/preview-server/render-queue/get-default-video-contexts.d.ts +1 -1
  20. package/dist/preview-server/render-queue/job.d.ts +1 -27
  21. package/dist/preview-server/render-queue/make-retry-payload.js +10 -52
  22. package/dist/preview-server/render-queue/process-video.js +9 -16
  23. package/dist/preview-server/routes/add-render.js +0 -13
  24. package/dist/render-flows/render.d.ts +4 -14
  25. package/dist/render-flows/render.js +13 -40
  26. package/package.json +7 -7
  27. package/dist/editor/components/RenderModal/EveryNthFrameSetting.d.ts +0 -5
  28. package/dist/editor/components/RenderModal/EveryNthFrameSetting.js +0 -9
  29. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.d.ts +0 -5
  30. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.js +0 -26
  31. package/dist/editor/components/RenderModal/NumberSetting.d.ts +0 -9
  32. package/dist/editor/components/RenderModal/NumberSetting.js +0 -26
  33. package/dist/editor/components/RenderModal/RenderModalAdvanced.d.ts +0 -11
  34. package/dist/editor/components/RenderModal/RenderModalAdvanced.js +0 -15
  35. package/dist/editor/components/RenderModal/RenderModalAudio.d.ts +0 -13
  36. package/dist/editor/components/RenderModal/RenderModalAudio.js +0 -22
  37. package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +0 -22
  38. package/dist/editor/components/RenderModal/RenderModalBasic.js +0 -70
  39. package/dist/editor/components/RenderModal/RenderModalGeneral.d.ts +0 -0
  40. package/dist/editor/components/RenderModal/RenderModalGeneral.js +0 -1
  41. package/dist/editor/components/RenderModal/RenderModalGif.d.ts +0 -9
  42. package/dist/editor/components/RenderModal/RenderModalGif.js +0 -16
  43. package/dist/editor/components/RenderModal/RenderModalHr.d.ts +0 -2
  44. package/dist/editor/components/RenderModal/RenderModalHr.js +0 -18
  45. package/dist/editor/components/RenderModal/RenderModalPicture.d.ts +0 -28
  46. package/dist/editor/components/RenderModal/RenderModalPicture.js +0 -51
  47. package/dist/editor/components/RenderModal/human-readable-codec.d.ts +0 -2
  48. package/dist/editor/components/RenderModal/human-readable-codec.js +0 -36
  49. package/dist/editor/icons/audio.d.ts +0 -2
  50. package/dist/editor/icons/audio.js +0 -6
  51. package/dist/editor/icons/file.d.ts +0 -2
  52. package/dist/editor/icons/file.js +0 -6
  53. package/dist/editor/icons/frame.d.ts +0 -2
  54. package/dist/editor/icons/frame.js +0 -6
  55. package/dist/editor/icons/gear.d.ts +0 -2
  56. package/dist/editor/icons/gear.js +0 -6
  57. package/dist/editor/icons/gif.d.ts +0 -2
  58. package/dist/editor/icons/gif.js +0 -6
@@ -1,4 +1,4 @@
1
- import type { Codec, PixelFormat, ProResProfile, StillImageFormat } from '@remotion/renderer';
1
+ import type { Codec, StillImageFormat } from '@remotion/renderer';
2
2
  import type { ApiRoutes } from '../../../preview-server/api-types';
3
3
  import type { RenderJob } from '../../../preview-server/render-queue/job';
4
4
  export declare const callApi: <Endpoint extends keyof ApiRoutes>(endpoint: Endpoint, body: ApiRoutes[Endpoint]["Request"]) => Promise<ApiRoutes[Endpoint]["Response"]>;
@@ -11,7 +11,7 @@ export declare const addStillRenderJob: ({ compositionId, outName, imageFormat,
11
11
  scale: number;
12
12
  verbose: boolean;
13
13
  }) => Promise<undefined>;
14
- export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat, quality, scale, verbose, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, }: {
14
+ export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat, quality, scale, verbose, codec, }: {
15
15
  compositionId: string;
16
16
  outName: string;
17
17
  imageFormat: StillImageFormat;
@@ -19,19 +19,6 @@ export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat,
19
19
  scale: number;
20
20
  verbose: boolean;
21
21
  codec: Codec;
22
- concurrency: number;
23
- crf: number | null;
24
- startFrame: number;
25
- endFrame: number;
26
- muted: boolean;
27
- enforceAudioTrack: boolean;
28
- proResProfile: ProResProfile | null;
29
- pixelFormat: PixelFormat;
30
- audioBitrate: string | null;
31
- videoBitrate: string | null;
32
- everyNthFrame: number;
33
- numberOfGifLoops: number | null;
34
- delayRenderTimeout: number;
35
22
  }) => Promise<undefined>;
36
23
  export declare const unsubscribeFromFileExistenceWatcher: ({ file, clientId, }: {
37
24
  file: string;
@@ -38,7 +38,7 @@ const addStillRenderJob = ({ compositionId, outName, imageFormat, quality, frame
38
38
  });
39
39
  };
40
40
  exports.addStillRenderJob = addStillRenderJob;
41
- const addVideoRenderJob = ({ compositionId, outName, imageFormat, quality, scale, verbose, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, }) => {
41
+ const addVideoRenderJob = ({ compositionId, outName, imageFormat, quality, scale, verbose, codec, }) => {
42
42
  return (0, exports.callApi)('/api/render', {
43
43
  compositionId,
44
44
  type: 'video',
@@ -48,19 +48,6 @@ const addVideoRenderJob = ({ compositionId, outName, imageFormat, quality, scale
48
48
  scale,
49
49
  verbose,
50
50
  codec,
51
- concurrency,
52
- crf,
53
- endFrame,
54
- startFrame,
55
- muted,
56
- enforceAudioTrack,
57
- proResProfile,
58
- pixelFormat,
59
- audioBitrate,
60
- videoBitrate,
61
- everyNthFrame,
62
- numberOfGifLoops,
63
- delayRenderTimeout,
64
51
  });
65
52
  };
66
53
  exports.addVideoRenderJob = addVideoRenderJob;
@@ -5,7 +5,6 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const remotion_1 = require("remotion");
7
7
  const get_default_out_name_1 = require("../../get-default-out-name");
8
- const get_default_video_contexts_1 = require("../../preview-server/render-queue/get-default-video-contexts");
9
8
  const client_id_1 = require("../helpers/client-id");
10
9
  const render_1 = require("../icons/render");
11
10
  const modals_1 = require("../state/modals");
@@ -26,48 +25,27 @@ const RenderStillButton = () => {
26
25
  const video = remotion_1.Internals.useVideo();
27
26
  const frame = (0, remotion_1.useCurrentFrame)();
28
27
  const onClick = (0, react_1.useCallback)(() => {
29
- var _a, _b;
28
+ var _a, _b, _c, _d, _e;
30
29
  if (!video) {
31
30
  return null;
32
31
  }
33
32
  const isVideo = video.durationInFrames > 1;
34
- const defaults = window.remotion_renderDefaults;
35
- if (!defaults) {
36
- throw new TypeError('Expected defaults');
37
- }
38
- const { initialAudioCodec, initialRenderType, initialVideoCodec } = (0, get_default_video_contexts_1.getDefaultCodecs)({
39
- defaultCodec: defaults.codec,
40
- isStill: !isVideo,
41
- });
42
33
  setSelectedModal({
43
34
  type: 'render',
44
35
  compositionId: video.id,
45
36
  initialFrame: frame,
46
- initialStillImageFormat: defaults.stillImageFormat,
47
- initialVideoImageFormat: defaults.videoImageFormat,
37
+ initialImageFormat: isVideo ? 'jpeg' : 'png',
48
38
  initialOutName: (0, get_default_out_name_1.getDefaultOutLocation)({
49
39
  compositionName: video.id,
50
40
  defaultExtension: isVideo ? 'mp4' : 'png',
51
41
  type: 'asset',
52
42
  }),
53
- initialQuality: defaults.quality,
54
- initialScale: (_b = (_a = window.remotion_renderDefaults) === null || _a === void 0 ? void 0 : _a.scale) !== null && _b !== void 0 ? _b : 1,
55
- initialVerbose: defaults.logLevel === 'verbose',
56
- initialAudioCodec,
57
- initialRenderType,
58
- initialVideoCodec,
59
- initialConcurrency: defaults.concurrency,
60
- maxConcurrency: defaults.maxConcurrency,
61
- minConcurrency: defaults.minConcurrency,
62
- initialMuted: defaults.muted,
63
- initialEnforceAudioTrack: defaults.enforceAudioTrack,
64
- initialProResProfile: defaults.proResProfile,
65
- initialPixelFormat: defaults.pixelFormat,
66
- initialAudioBitrate: defaults.audioBitrate,
67
- initialVideoBitrate: defaults.videoBitrate,
68
- initialEveryNthFrame: defaults.everyNthFrame,
69
- initialNumberOfGifLoops: defaults.numberOfGifLoops,
70
- initialDelayRenderTimeout: defaults.delayRenderTimeout,
43
+ // TODO: Determine defaults from config file
44
+ initialQuality: (_b = (_a = window.remotion_renderDefaults) === null || _a === void 0 ? void 0 : _a.quality) !== null && _b !== void 0 ? _b : 80,
45
+ initialScale: (_d = (_c = window.remotion_renderDefaults) === null || _c === void 0 ? void 0 : _c.scale) !== null && _d !== void 0 ? _d : 1,
46
+ initialVerbose: ((_e = window.remotion_renderDefaults) === null || _e === void 0 ? void 0 : _e.logLevel) === 'verbose',
47
+ initialRenderType: isVideo ? 'video' : 'still',
48
+ initialCodec: 'h264',
71
49
  });
72
50
  }, [video, frame, setSelectedModal]);
73
51
  if (!video) {
@@ -16,7 +16,7 @@ const container = {
16
16
  };
17
17
  const item = {
18
18
  display: 'flex',
19
- fontSize: 15,
19
+ fontSize: 13,
20
20
  padding: '4px 12px',
21
21
  cursor: 'pointer',
22
22
  appearance: 'none',
@@ -5,7 +5,6 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const colors_1 = require("../helpers/colors");
7
7
  const CompositionSelector_1 = require("./CompositionSelector");
8
- const CurrentCompositionSideEffects_1 = require("./CurrentCompositionSideEffects");
9
8
  const RenderQueue_1 = require("./RenderQueue");
10
9
  const context_1 = require("./RenderQueue/context");
11
10
  const RendersTab_1 = require("./RendersTab");
@@ -47,6 +46,6 @@ const SidebarContent = () => {
47
46
  },
48
47
  };
49
48
  }, []);
50
- return ((0, jsx_runtime_1.jsxs)("div", { style: container, children: [shouldRender ? ((0, jsx_runtime_1.jsx)("div", { style: tabsContainer, children: (0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { children: [(0, jsx_runtime_1.jsx)(Tabs_1.Tab, { selected: panel === 'compositions', onClick: onCompositionsSelected, children: "Compositions" }), (0, jsx_runtime_1.jsx)(RendersTab_1.RendersTab, { onClick: onRendersSelected, selected: panel === 'renders' })] }) })) : null, panel === 'renders' && shouldRender ? ((0, jsx_runtime_1.jsx)(RenderQueue_1.RenderQueue, {})) : ((0, jsx_runtime_1.jsx)(CompositionSelector_1.CompositionSelector, {})), (0, jsx_runtime_1.jsx)(CurrentCompositionSideEffects_1.CurrentCompositionKeybindings, {}), (0, jsx_runtime_1.jsx)(CurrentCompositionSideEffects_1.TitleUpdater, {})] }));
49
+ return ((0, jsx_runtime_1.jsxs)("div", { style: container, children: [shouldRender ? ((0, jsx_runtime_1.jsx)("div", { style: tabsContainer, children: (0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { children: [(0, jsx_runtime_1.jsx)(Tabs_1.Tab, { selected: panel === 'compositions', onClick: onCompositionsSelected, children: "Compositions" }), (0, jsx_runtime_1.jsx)(RendersTab_1.RendersTab, { onClick: onRendersSelected, selected: panel === 'renders' })] }) })) : null, panel === 'renders' && shouldRender ? ((0, jsx_runtime_1.jsx)(RenderQueue_1.RenderQueue, {})) : ((0, jsx_runtime_1.jsx)(CompositionSelector_1.CompositionSelector, {}))] }));
51
50
  };
52
51
  exports.SidebarContent = SidebarContent;
@@ -30,7 +30,7 @@ export declare const getCliOptions: (options: {
30
30
  browserExecutable: BrowserExecutable;
31
31
  ffmpegExecutable: import("@remotion/renderer").FfmpegExecutable;
32
32
  ffprobeExecutable: import("@remotion/renderer").FfmpegExecutable;
33
- logLevel: "verbose" | "error" | "info" | "warn";
33
+ logLevel: "error" | "verbose" | "info" | "warn";
34
34
  scale: number;
35
35
  chromiumOptions: ChromiumOptions;
36
36
  overwrite: boolean;
package/dist/index.d.ts CHANGED
@@ -88,7 +88,7 @@ export declare const CliInternals: {
88
88
  browserExecutable: import("@remotion/renderer").BrowserExecutable;
89
89
  ffmpegExecutable: import("@remotion/renderer").FfmpegExecutable;
90
90
  ffprobeExecutable: import("@remotion/renderer").FfmpegExecutable;
91
- logLevel: "verbose" | "error" | "info" | "warn";
91
+ logLevel: "error" | "verbose" | "info" | "warn";
92
92
  scale: number;
93
93
  chromiumOptions: import("@remotion/renderer").ChromiumOptions;
94
94
  overwrite: boolean;
@@ -1,5 +1,5 @@
1
1
  import type { Codec } from '@remotion/renderer';
2
- import type { RenderType } from '../../editor/components/RenderModal/RenderModalAdvanced';
2
+ import type { RenderType } from '../../editor/components/RenderModal/RenderModal';
3
3
  export declare const getDefaultCodecs: ({ defaultCodec, isStill, }: {
4
4
  defaultCodec: Codec;
5
5
  isStill: boolean;
@@ -1,4 +1,4 @@
1
- import type { Codec, makeCancelSignal, PixelFormat, ProResProfile, StillImageFormat } from '@remotion/renderer';
1
+ import type { Codec, makeCancelSignal, StillImageFormat } from '@remotion/renderer';
2
2
  declare type RenderJobDynamicStatus = {
3
3
  status: 'done';
4
4
  } | {
@@ -30,19 +30,6 @@ declare type RenderJobDynamicFields = {
30
30
  quality: number | null;
31
31
  scale: number;
32
32
  codec: Codec;
33
- concurrency: number;
34
- crf: number | null;
35
- startFrame: number;
36
- endFrame: number;
37
- muted: boolean;
38
- enforceAudioTrack: boolean;
39
- proResProfile: ProResProfile | null;
40
- pixelFormat: PixelFormat;
41
- audioBitrate: string | null;
42
- videoBitrate: string | null;
43
- everyNthFrame: number;
44
- numberOfGifLoops: number | null;
45
- delayRenderTimeout: number;
46
33
  };
47
34
  export declare type RenderJob = {
48
35
  startedAt: number;
@@ -70,19 +57,6 @@ declare type AddRenderRequestDynamicFields = {
70
57
  quality: number | null;
71
58
  scale: number;
72
59
  verbose: boolean;
73
- concurrency: number;
74
- crf: number | null;
75
- startFrame: number;
76
- endFrame: number;
77
- muted: boolean;
78
- enforceAudioTrack: boolean;
79
- proResProfile: ProResProfile | null;
80
- pixelFormat: PixelFormat;
81
- audioBitrate: string | null;
82
- videoBitrate: string | null;
83
- everyNthFrame: number;
84
- numberOfGifLoops: number | null;
85
- delayRenderTimeout: number;
86
60
  };
87
61
  export declare type CancelRenderRequest = {
88
62
  jobId: string;
@@ -1,77 +1,35 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeRetryPayload = void 0;
4
- const get_default_video_contexts_1 = require("./get-default-video-contexts");
5
4
  const makeRetryPayload = (job) => {
6
- var _a, _b, _c;
7
- const defaults = window.remotion_renderDefaults;
8
- if (!defaults) {
9
- throw new Error('defaults not set');
10
- }
11
5
  if (job.type === 'still') {
12
- const { initialAudioCodec, initialRenderType, initialVideoCodec } = (0, get_default_video_contexts_1.getDefaultCodecs)({
13
- defaultCodec: defaults.codec,
14
- isStill: true,
15
- });
16
6
  return {
17
7
  type: 'render',
18
8
  compositionId: job.compositionId,
19
9
  initialFrame: job.frame,
20
- initialStillImageFormat: job.imageFormat,
21
- // TODO: Take from config
22
- initialVideoImageFormat: 'jpeg',
23
- initialQuality: (_a = job.quality) !== null && _a !== void 0 ? _a : defaults.quality,
10
+ initialImageFormat: job.imageFormat,
11
+ initialQuality: job.quality,
24
12
  initialOutName: job.outName,
25
13
  initialScale: job.scale,
26
14
  initialVerbose: job.verbose,
27
- initialAudioCodec,
28
- initialRenderType,
29
- initialVideoCodec,
30
- initialConcurrency: defaults.concurrency,
31
- maxConcurrency: defaults.maxConcurrency,
32
- minConcurrency: defaults.minConcurrency,
33
- initialMuted: defaults.muted,
34
- initialEnforceAudioTrack: defaults.enforceAudioTrack,
35
- initialProResProfile: defaults.proResProfile,
36
- initialPixelFormat: defaults.pixelFormat,
37
- initialAudioBitrate: defaults.audioBitrate,
38
- initialVideoBitrate: defaults.videoBitrate,
39
- initialEveryNthFrame: defaults.everyNthFrame,
40
- initialNumberOfGifLoops: defaults.numberOfGifLoops,
41
- initialDelayRenderTimeout: defaults.delayRenderTimeout,
15
+ initialRenderType: 'still',
16
+ // TODO: take initial codec from config file
17
+ initialCodec: 'h264',
42
18
  };
43
19
  }
44
20
  if (job.type === 'video') {
45
- const { initialAudioCodec, initialRenderType, initialVideoCodec } = (0, get_default_video_contexts_1.getDefaultCodecs)({
46
- defaultCodec: defaults.codec,
47
- isStill: false,
48
- });
21
+ // TODO: Implement correct retry mechanism for video
49
22
  return {
50
23
  type: 'render',
51
24
  compositionId: job.compositionId,
52
- // TODO: Take from config
53
- initialStillImageFormat: 'png',
54
- initialVideoImageFormat: job.imageFormat,
55
- initialQuality: (_b = job.quality) !== null && _b !== void 0 ? _b : defaults.quality,
25
+ initialImageFormat: job.imageFormat,
26
+ initialQuality: job.quality,
56
27
  initialOutName: job.outName,
57
28
  initialScale: job.scale,
58
29
  initialVerbose: job.verbose,
59
30
  initialFrame: 0,
60
- initialConcurrency: job.concurrency,
61
- maxConcurrency: defaults.maxConcurrency,
62
- minConcurrency: defaults.minConcurrency,
63
- initialMuted: job.muted,
64
- initialAudioCodec,
65
- initialEnforceAudioTrack: job.enforceAudioTrack,
66
- initialRenderType,
67
- initialVideoCodec,
68
- initialProResProfile: (_c = job.proResProfile) !== null && _c !== void 0 ? _c : defaults.proResProfile,
69
- initialPixelFormat: job.pixelFormat,
70
- initialAudioBitrate: job.audioBitrate,
71
- initialVideoBitrate: job.videoBitrate,
72
- initialEveryNthFrame: job.everyNthFrame,
73
- initialNumberOfGifLoops: job.numberOfGifLoops,
74
- initialDelayRenderTimeout: job.delayRenderTimeout,
31
+ initialRenderType: 'video',
32
+ initialCodec: job.codec,
75
33
  };
76
34
  }
77
35
  throw new Error(`Job ${JSON.stringify(job)} Not implemented`);
@@ -5,12 +5,11 @@ const convert_entry_point_to_serve_url_1 = require("../../convert-entry-point-to
5
5
  const get_cli_options_1 = require("../../get-cli-options");
6
6
  const render_1 = require("../../render-flows/render");
7
7
  const processVideoJob = async ({ job, remotionRoot, entryPoint, onProgress, addCleanupCallback, }) => {
8
- var _a, _b;
8
+ var _a;
9
9
  if (job.type !== 'video') {
10
10
  throw new Error('Expected video job');
11
11
  }
12
- // TODO: Change until none can be derived from UI
13
- const { publicDir, browserExecutable, ffmpegExecutable, ffprobeExecutable, chromiumOptions, envVariables, inputProps, port, browser, ffmpegOverride, } = await (0, get_cli_options_1.getCliOptions)({
12
+ const { publicDir, browserExecutable, ffmpegExecutable, ffprobeExecutable, chromiumOptions, envVariables, inputProps, port, browser, puppeteerTimeout, } = await (0, get_cli_options_1.getCliOptions)({
14
13
  isLambda: false,
15
14
  type: 'still',
16
15
  remotionRoot,
@@ -31,7 +30,7 @@ const processVideoJob = async ({ job, remotionRoot, entryPoint, onProgress, addC
31
30
  overwrite: true,
32
31
  port,
33
32
  publicDir,
34
- puppeteerTimeout: job.delayRenderTimeout,
33
+ puppeteerTimeout,
35
34
  quality: (_a = job.quality) !== null && _a !== void 0 ? _a : undefined,
36
35
  remainingArgs: [],
37
36
  scale: job.scale,
@@ -41,9 +40,12 @@ const processVideoJob = async ({ job, remotionRoot, entryPoint, onProgress, addC
41
40
  logLevel: job.verbose ? 'verbose' : 'info',
42
41
  onProgress,
43
42
  indent: true,
44
- concurrency: job.concurrency,
45
- everyNthFrame: job.everyNthFrame,
46
- frameRange: [job.startFrame, job.endFrame],
43
+ // TODO: Make configurable
44
+ concurrency: null,
45
+ // TODO: Make configurable
46
+ everyNthFrame: 1,
47
+ // TODO: Make configurable
48
+ frameRange: null,
47
49
  quiet: false,
48
50
  shouldOutputImageSequence: false,
49
51
  addCleanupCallback,
@@ -51,15 +53,6 @@ const processVideoJob = async ({ job, remotionRoot, entryPoint, onProgress, addC
51
53
  uiCodec: job.codec,
52
54
  uiImageFormat: job.imageFormat,
53
55
  cancelSignal: job.cancelToken.cancelSignal,
54
- crf: job.crf,
55
- ffmpegOverride,
56
- audioBitrate: job.audioBitrate,
57
- muted: job.muted,
58
- enforceAudioTrack: job.enforceAudioTrack,
59
- proResProfile: (_b = job.proResProfile) !== null && _b !== void 0 ? _b : undefined,
60
- pixelFormat: job.pixelFormat,
61
- videoBitrate: job.videoBitrate,
62
- numberOfGifLoops: job.numberOfGifLoops,
63
56
  });
64
57
  // TODO: Accept CLI options
65
58
  };
@@ -24,19 +24,6 @@ const handleAddRender = ({ input, entryPoint, remotionRoot, }) => {
24
24
  startedAt: Date.now(),
25
25
  verbose: input.verbose,
26
26
  cancelToken: (0, renderer_1.makeCancelSignal)(),
27
- concurrency: input.concurrency,
28
- crf: input.crf,
29
- endFrame: input.endFrame,
30
- startFrame: input.startFrame,
31
- muted: input.muted,
32
- enforceAudioTrack: input.enforceAudioTrack,
33
- proResProfile: input.proResProfile,
34
- pixelFormat: input.pixelFormat,
35
- audioBitrate: input.audioBitrate,
36
- videoBitrate: input.videoBitrate,
37
- everyNthFrame: input.everyNthFrame,
38
- numberOfGifLoops: input.numberOfGifLoops,
39
- delayRenderTimeout: input.delayRenderTimeout,
40
27
  },
41
28
  });
42
29
  }
@@ -1,7 +1,6 @@
1
- import type { Browser, BrowserExecutable, CancelSignal, ChromiumOptions, Codec, Crf, FfmpegExecutable, FfmpegOverrideFn, FrameRange, ImageFormat, LogLevel, PixelFormat, ProResProfile } from '@remotion/renderer';
2
- import type { Loop } from '../config/number-of-gif-loops';
1
+ import type { Browser, BrowserExecutable, CancelSignal, ChromiumOptions, Codec, FfmpegExecutable, FrameRange, ImageFormat, LogLevel } from '@remotion/renderer';
3
2
  import type { JobProgressCallback } from '../preview-server/render-queue/job';
4
- export declare const renderCompFlow: ({ 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, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, }: {
3
+ export declare const renderCompFlow: ({ 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, cancelSignal, }: {
5
4
  remotionRoot: string;
6
5
  fullEntryPoint: string;
7
6
  entryPointReason: string;
@@ -33,16 +32,7 @@ export declare const renderCompFlow: ({ remotionRoot, fullEntryPoint, ffmpegExec
33
32
  quality: number | undefined;
34
33
  onProgress: JobProgressCallback;
35
34
  addCleanupCallback: (cb: () => Promise<void>) => void;
36
- crf: Crf | null;
37
- cancelSignal: CancelSignal | null;
38
35
  uiCodec: Codec | null;
39
- uiImageFormat: 'png' | 'jpeg' | 'none' | null;
40
- ffmpegOverride: FfmpegOverrideFn;
41
- audioBitrate: string | null;
42
- videoBitrate: string | null;
43
- muted: boolean;
44
- enforceAudioTrack: boolean;
45
- proResProfile: ProResProfile | undefined;
46
- pixelFormat: PixelFormat;
47
- numberOfGifLoops: Loop;
36
+ uiImageFormat: ImageFormat | null;
37
+ cancelSignal: CancelSignal | null;
48
38
  }) => Promise<void>;
@@ -14,6 +14,7 @@ const get_cli_options_1 = require("../get-cli-options");
14
14
  const get_composition_with_dimension_override_1 = require("../get-composition-with-dimension-override");
15
15
  const get_filename_1 = require("../get-filename");
16
16
  const get_final_output_codec_1 = require("../get-final-output-codec");
17
+ const get_render_media_options_1 = require("../get-render-media-options");
17
18
  const image_formats_1 = require("../image-formats");
18
19
  const log_1 = require("../log");
19
20
  const parse_command_line_1 = require("../parse-command-line");
@@ -21,7 +22,7 @@ const progress_bar_1 = require("../progress-bar");
21
22
  const setup_cache_1 = require("../setup-cache");
22
23
  const truthy_1 = require("../truthy");
23
24
  const user_passed_output_location_1 = require("../user-passed-output-location");
24
- 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, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, }) => {
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, cancelSignal, }) => {
25
26
  var _a;
26
27
  const downloads = [];
27
28
  const downloadMap = renderer_1.RenderInternals.makeDownloadMap();
@@ -100,7 +101,7 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
100
101
  outName: (0, user_passed_output_location_1.getUserPassedOutputLocation)(argsAfterComposition),
101
102
  uiCodec,
102
103
  });
103
- await (0, get_cli_options_1.validateFfmpegCanUseCodec)(codec, remotionRoot);
104
+ (0, get_cli_options_1.validateFfmpegCanUseCodec)(codec, remotionRoot);
104
105
  renderer_1.RenderInternals.validateEvenDimensionsWithCodec({
105
106
  width: config.width,
106
107
  height: config.height,
@@ -111,7 +112,7 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
111
112
  codec,
112
113
  imageSequence: shouldOutputImageSequence,
113
114
  compositionName: compositionId,
114
- defaultExtension: renderer_1.RenderInternals.getFileExtensionFromCodec(codec),
115
+ defaultExtension: renderer_1.RenderInternals.getFileExtensionFromCodec(codec, 'final'),
115
116
  args: argsAfterComposition,
116
117
  indent,
117
118
  fromUi: outputLocationFromUI,
@@ -134,7 +135,6 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
134
135
  let encodedDoneIn = null;
135
136
  let renderedDoneIn = null;
136
137
  let stitchStage = 'encoding';
137
- const actualConcurrency = renderer_1.RenderInternals.getActualConcurrency(concurrency);
138
138
  const updateRenderProgress = () => {
139
139
  if (totalFrames.length === 0) {
140
140
  throw new Error('totalFrames should not be 0');
@@ -143,7 +143,7 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
143
143
  rendering: {
144
144
  frames: renderedFrames,
145
145
  totalFrames: totalFrames.length,
146
- concurrency: actualConcurrency,
146
+ concurrency: renderer_1.RenderInternals.getActualConcurrency(concurrency),
147
147
  doneIn: renderedDoneIn,
148
148
  steps,
149
149
  },
@@ -202,7 +202,7 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
202
202
  everyNthFrame,
203
203
  envVariables,
204
204
  frameRange,
205
- concurrency: actualConcurrency,
205
+ concurrency,
206
206
  puppeteerInstance,
207
207
  quality,
208
208
  timeoutInMilliseconds: puppeteerTimeout,
@@ -215,43 +215,17 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
215
215
  downloadMap,
216
216
  });
217
217
  updateRenderProgress();
218
- process.stdout.write('\n');
219
218
  log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.cyan(`▶ ${absoluteOutputFile}`));
220
219
  }
221
- await (0, renderer_1.renderMedia)({
220
+ const options = await (0, get_render_media_options_1.getRenderMediaOptions)({
221
+ config,
222
222
  outputLocation: absoluteOutputFile,
223
- composition: {
224
- ...config,
225
- width: width !== null && width !== void 0 ? width : config.width,
226
- height: height !== null && height !== void 0 ? height : config.height,
227
- },
228
- crf,
229
- envVariables,
230
- ffmpegExecutable,
231
- ffprobeExecutable,
232
- frameRange,
233
- inputProps,
234
- overwrite,
235
- pixelFormat,
236
- proResProfile,
237
- quality,
238
- dumpBrowserLogs: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
239
- chromiumOptions,
240
- timeoutInMilliseconds: config_1.ConfigInternals.getCurrentPuppeteerTimeout(),
241
- scale,
242
- port,
243
- numberOfGifLoops,
244
- everyNthFrame,
245
- verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
246
- muted,
247
- enforceAudioTrack,
248
- browserExecutable,
249
- ffmpegOverride,
250
- concurrency,
251
223
  serveUrl: urlOrBundle,
252
224
  codec,
253
- audioBitrate,
254
- videoBitrate,
225
+ remotionRoot,
226
+ });
227
+ await (0, renderer_1.renderMedia)({
228
+ ...options,
255
229
  onProgress: (update) => {
256
230
  encodedDoneIn = update.encodedDoneIn;
257
231
  encodedFrames = update.encodedFrames;
@@ -273,8 +247,7 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, ffmpegExecutable,
273
247
  },
274
248
  printLog: (...str) => log_1.Log.verboseAdvanced({ indent, logLevel }, ...str),
275
249
  });
276
- updateRenderProgress();
277
- process.stdout.write('\n');
250
+ log_1.Log.infoAdvanced({ indent, logLevel });
278
251
  log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.cyan(`▶ ${absoluteOutputFile}`));
279
252
  for (const line of renderer_1.RenderInternals.perf.getPerf()) {
280
253
  log_1.Log.verboseAdvanced({ indent, logLevel }, line);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/cli",
3
- "version": "3.3.37",
3
+ "version": "3.3.38",
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.37",
26
- "@remotion/media-utils": "3.3.37",
27
- "@remotion/player": "3.3.37",
28
- "@remotion/renderer": "3.3.37",
25
+ "@remotion/bundler": "3.3.38",
26
+ "@remotion/media-utils": "3.3.38",
27
+ "@remotion/player": "3.3.38",
28
+ "@remotion/renderer": "3.3.38",
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.37",
34
+ "remotion": "3.3.38",
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": "ead6bdacc14a9953cae738159c49bf3daf09e9b0"
74
+ "gitHead": "ac58695e452e58deb5c010f09bcc94d036930e6c"
75
75
  }
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export declare const EveryNthFrameSetting: React.FC<{
3
- everyNthFrame: number;
4
- setEveryNthFrameSetting: React.Dispatch<React.SetStateAction<number>>;
5
- }>;
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EveryNthFrameSetting = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const NumberSetting_1 = require("./NumberSetting");
6
- const EveryNthFrameSetting = ({ everyNthFrame, setEveryNthFrameSetting }) => {
7
- return ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { name: "Every nth frame", min: 1, onValueChanged: setEveryNthFrameSetting, value: everyNthFrame }));
8
- };
9
- exports.EveryNthFrameSetting = EveryNthFrameSetting;
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export declare const NumberOfLoopsSetting: React.FC<{
3
- numberOfGifLoops: number;
4
- setNumberOfGifLoops: React.Dispatch<React.SetStateAction<number>>;
5
- }>;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NumberOfLoopsSetting = 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 = 0;
10
- const NumberOfLoopsSetting = ({ numberOfGifLoops, setNumberOfGifLoops }) => {
11
- const onNumberOfGifLoopsChangedDirectly = (0, react_1.useCallback)((newConcurrency) => {
12
- setNumberOfGifLoops(newConcurrency);
13
- }, [setNumberOfGifLoops]);
14
- const onNumberOfGifLoopsChanged = (0, react_1.useCallback)((e) => {
15
- setNumberOfGifLoops((q) => {
16
- const newConcurrency = parseInt(e, 10);
17
- if (Number.isNaN(newConcurrency)) {
18
- return q;
19
- }
20
- const newConcurrencyClamped = Math.max(newConcurrency, min);
21
- return newConcurrencyClamped;
22
- });
23
- }, [setNumberOfGifLoops]);
24
- return ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Number of loops" }), (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: numberOfGifLoops, onTextChange: onNumberOfGifLoopsChanged, placeholder: `${min}-`, onValueChange: onNumberOfGifLoopsChangedDirectly, name: "number-of-gif-loops", step: 1, min: min }) }) })] }));
25
- };
26
- exports.NumberOfLoopsSetting = NumberOfLoopsSetting;
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- export declare const NumberSetting: React.FC<{
3
- name: string;
4
- value: number;
5
- onValueChanged: React.Dispatch<React.SetStateAction<number>>;
6
- max?: number;
7
- min: number;
8
- step: number;
9
- }>;