@remotion/cli 3.3.41 → 3.3.43

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 (67) hide show
  1. package/dist/config/audio-codec.d.ts +3 -0
  2. package/dist/config/audio-codec.js +20 -0
  3. package/dist/config/index.d.ts +1 -0
  4. package/dist/config/index.js +4 -0
  5. package/dist/editor/components/Modals.js +1 -1
  6. package/dist/editor/components/RenderButton.js +8 -29
  7. package/dist/editor/components/RenderModal/CrfSetting.d.ts +2 -2
  8. package/dist/editor/components/RenderModal/CrfSetting.js +24 -11
  9. package/dist/editor/components/RenderModal/RenderModal.d.ts +5 -19
  10. package/dist/editor/components/RenderModal/RenderModal.js +181 -225
  11. package/dist/editor/components/RenderModal/ScaleSetting.js +18 -2
  12. package/dist/editor/components/RenderModal/layout.d.ts +0 -1
  13. package/dist/editor/components/RenderModal/layout.js +2 -8
  14. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +1 -2
  15. package/dist/editor/components/RenderQueue/actions.d.ts +2 -15
  16. package/dist/editor/components/RenderQueue/actions.js +1 -14
  17. package/dist/editor/components/RenderToolbarIcon.js +8 -30
  18. package/dist/editor/components/SegmentedControl.js +1 -1
  19. package/dist/editor/components/SidebarContent.js +1 -2
  20. package/dist/get-audio-codec.d.ts +2 -0
  21. package/dist/get-audio-codec.js +10 -0
  22. package/dist/get-filename.d.ts +1 -3
  23. package/dist/get-filename.js +5 -23
  24. package/dist/get-final-output-codec.js +23 -31
  25. package/dist/get-render-media-options.js +3 -0
  26. package/dist/parse-command-line.d.ts +2 -1
  27. package/dist/preview-server/render-queue/get-default-video-contexts.d.ts +1 -1
  28. package/dist/preview-server/render-queue/job.d.ts +1 -27
  29. package/dist/preview-server/render-queue/make-retry-payload.js +10 -52
  30. package/dist/preview-server/render-queue/process-video.js +9 -16
  31. package/dist/preview-server/routes/add-render.js +0 -13
  32. package/dist/render-flows/render.d.ts +4 -14
  33. package/dist/render-flows/render.js +13 -40
  34. package/dist/render.js +3 -2
  35. package/package.json +7 -7
  36. package/dist/editor/components/RenderModal/EveryNthFrameSetting.d.ts +0 -5
  37. package/dist/editor/components/RenderModal/EveryNthFrameSetting.js +0 -9
  38. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.d.ts +0 -5
  39. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.js +0 -26
  40. package/dist/editor/components/RenderModal/NumberSetting.d.ts +0 -9
  41. package/dist/editor/components/RenderModal/NumberSetting.js +0 -26
  42. package/dist/editor/components/RenderModal/RenderModalAdvanced.d.ts +0 -11
  43. package/dist/editor/components/RenderModal/RenderModalAdvanced.js +0 -15
  44. package/dist/editor/components/RenderModal/RenderModalAudio.d.ts +0 -13
  45. package/dist/editor/components/RenderModal/RenderModalAudio.js +0 -22
  46. package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +0 -22
  47. package/dist/editor/components/RenderModal/RenderModalBasic.js +0 -70
  48. package/dist/editor/components/RenderModal/RenderModalGeneral.d.ts +0 -0
  49. package/dist/editor/components/RenderModal/RenderModalGeneral.js +0 -1
  50. package/dist/editor/components/RenderModal/RenderModalGif.d.ts +0 -9
  51. package/dist/editor/components/RenderModal/RenderModalGif.js +0 -16
  52. package/dist/editor/components/RenderModal/RenderModalHr.d.ts +0 -2
  53. package/dist/editor/components/RenderModal/RenderModalHr.js +0 -18
  54. package/dist/editor/components/RenderModal/RenderModalPicture.d.ts +0 -28
  55. package/dist/editor/components/RenderModal/RenderModalPicture.js +0 -51
  56. package/dist/editor/components/RenderModal/human-readable-codec.d.ts +0 -2
  57. package/dist/editor/components/RenderModal/human-readable-codec.js +0 -36
  58. package/dist/editor/icons/audio.d.ts +0 -2
  59. package/dist/editor/icons/audio.js +0 -6
  60. package/dist/editor/icons/file.d.ts +0 -2
  61. package/dist/editor/icons/file.js +0 -6
  62. package/dist/editor/icons/frame.d.ts +0 -2
  63. package/dist/editor/icons/frame.js +0 -6
  64. package/dist/editor/icons/gear.d.ts +0 -2
  65. package/dist/editor/icons/gear.js +0 -6
  66. package/dist/editor/icons/gif.d.ts +0 -2
  67. package/dist/editor/icons/gif.js +0 -6
@@ -0,0 +1,3 @@
1
+ import type { AudioCodec } from '@remotion/renderer';
2
+ export declare const setAudioCodec: (audioCodec: AudioCodec | null) => void;
3
+ export declare const getAudioCodec: () => "mp3" | "aac" | "pcm-16" | "opus" | null;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAudioCodec = exports.setAudioCodec = void 0;
4
+ const renderer_1 = require("@remotion/renderer");
5
+ let _audioCodec = null;
6
+ const setAudioCodec = (audioCodec) => {
7
+ if (audioCodec === null) {
8
+ _audioCodec = null;
9
+ return;
10
+ }
11
+ if (!renderer_1.RenderInternals.validAudioCodecs.includes(audioCodec)) {
12
+ throw new Error(`Audio codec must be one of the following: ${renderer_1.RenderInternals.validAudioCodecs.join(', ')}, but got ${audioCodec}`);
13
+ }
14
+ _audioCodec = audioCodec;
15
+ };
16
+ exports.setAudioCodec = setAudioCodec;
17
+ const getAudioCodec = () => {
18
+ return _audioCodec;
19
+ };
20
+ exports.getAudioCodec = getAudioCodec;
@@ -27,6 +27,7 @@ export declare const ConfigInternals: {
27
27
  getConcurrency: () => string | number | null;
28
28
  getCurrentPuppeteerTimeout: () => number;
29
29
  getQuality: () => number | undefined;
30
+ getAudioCodec: () => "mp3" | "aac" | "pcm-16" | "opus" | null;
30
31
  getStillFrame: () => number;
31
32
  getShouldOutputImageSequence: (frameRange: import("@remotion/renderer").FrameRange | null) => boolean;
32
33
  getDotEnvLocation: () => string | null;
@@ -49,6 +49,7 @@ const scale_1 = require("./scale");
49
49
  const still_frame_1 = require("./still-frame");
50
50
  const timeout_1 = require("./timeout");
51
51
  const webpack_caching_1 = require("./webpack-caching");
52
+ const audio_codec_1 = require("./audio-codec");
52
53
  const bitrate_1 = require("./bitrate");
53
54
  const browser_executable_2 = require("./browser-executable");
54
55
  const chromium_flags_2 = require("./chromium-flags");
@@ -155,6 +156,8 @@ exports.Config = {
155
156
  Puppeteer,
156
157
  Rendering,
157
158
  Output,
159
+ // Options added after migration
160
+ setAudioCodec: audio_codec_1.setAudioCodec,
158
161
  };
159
162
  exports.ConfigInternals = {
160
163
  getRange: frame_range_1.getRange,
@@ -176,6 +179,7 @@ exports.ConfigInternals = {
176
179
  getConcurrency: concurrency_1.getConcurrency,
177
180
  getCurrentPuppeteerTimeout: timeout_1.getCurrentPuppeteerTimeout,
178
181
  getQuality: quality_1.getQuality,
182
+ getAudioCodec: audio_codec_1.getAudioCodec,
179
183
  getStillFrame: still_frame_1.getStillFrame,
180
184
  getShouldOutputImageSequence: image_sequence_1.getShouldOutputImageSequence,
181
185
  getDotEnvLocation: env_file_1.getDotEnvLocation,
@@ -16,7 +16,7 @@ const UpdateModal_1 = require("./UpdateModal/UpdateModal");
16
16
  const Modals = () => {
17
17
  const { selectedModal: modalContextType } = (0, react_1.useContext)(modals_1.ModalsContext);
18
18
  const canRender = (0, react_1.useContext)(client_id_1.PreviewServerConnectionCtx).type === 'connected';
19
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'new-comp' && ((0, jsx_runtime_1.jsx)(NewComposition_1.default, { initialCompType: modalContextType.compType })), modalContextType && canRender && modalContextType.type === 'render' && ((0, jsx_runtime_1.jsx)(RenderModal_1.RenderModal, { initialFrame: modalContextType.initialFrame, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialQuality: modalContextType.initialQuality, initialOutName: modalContextType.initialOutName, initialScale: modalContextType.initialScale, initialVerbose: modalContextType.initialVerbose, initialRenderType: modalContextType.initialRenderType, initialAudioCodec: modalContextType.initialAudioCodec, initialVideoCodec: modalContextType.initialVideoCodec, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout })), modalContextType &&
19
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'new-comp' && ((0, jsx_runtime_1.jsx)(NewComposition_1.default, { initialCompType: modalContextType.compType })), modalContextType && canRender && modalContextType.type === 'render' && ((0, jsx_runtime_1.jsx)(RenderModal_1.RenderModal, { initialFrame: modalContextType.initialFrame, compositionId: modalContextType.compositionId, initialImageFormat: modalContextType.initialImageFormat, initialQuality: modalContextType.initialQuality, initialOutName: modalContextType.initialOutName, initialScale: modalContextType.initialScale, initialVerbose: modalContextType.initialVerbose, initialRenderType: modalContextType.initialRenderType, initialCodec: modalContextType.initialCodec })), modalContextType &&
20
20
  canRender &&
21
21
  modalContextType.type === 'render-error' && ((0, jsx_runtime_1.jsx)(RenderErrorModal_1.RenderErrorModal, { job: modalContextType.job })), modalContextType && modalContextType.type === 'update' && ((0, jsx_runtime_1.jsx)(UpdateModal_1.UpdateModal, { info: modalContextType.info })), modalContextType && modalContextType.type === 'quick-switcher' && ((0, jsx_runtime_1.jsx)(QuickSwitcher_1.default, { invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode }))] }));
22
22
  };
@@ -4,7 +4,6 @@ exports.RenderButton = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const get_default_out_name_1 = require("../../get-default-out-name");
7
- const get_default_video_contexts_1 = require("../../preview-server/render-queue/get-default-video-contexts");
8
7
  const render_1 = require("../icons/render");
9
8
  const modals_1 = require("../state/modals");
10
9
  const InlineAction_1 = require("./InlineAction");
@@ -19,44 +18,24 @@ const RenderButton = ({ composition, visible }) => {
19
18
  }, []);
20
19
  const isVideo = composition.durationInFrames > 1;
21
20
  const onClick = (0, react_1.useCallback)((e) => {
22
- const defaults = window.remotion_renderDefaults;
23
- if (!defaults) {
24
- throw new Error('expected defaults');
25
- }
21
+ var _a, _b, _c, _d, _e;
26
22
  e.stopPropagation();
27
- const { initialAudioCodec, initialRenderType, initialVideoCodec } = (0, get_default_video_contexts_1.getDefaultCodecs)({
28
- defaultCodec: defaults.codec,
29
- isStill: !isVideo,
30
- });
31
23
  setSelectedModal({
32
24
  type: 'render',
33
25
  compositionId: composition.id,
34
26
  initialFrame: 0,
35
- initialVideoImageFormat: defaults.videoImageFormat,
36
- initialStillImageFormat: defaults.stillImageFormat,
37
- initialQuality: defaults.quality,
38
- initialScale: defaults.scale,
39
- initialVerbose: defaults.logLevel === 'verbose',
27
+ initialImageFormat: isVideo ? 'jpeg' : 'png',
28
+ // TODO: Determine defaults from config file
29
+ initialQuality: (_b = (_a = window.remotion_renderDefaults) === null || _a === void 0 ? void 0 : _a.quality) !== null && _b !== void 0 ? _b : 80,
30
+ initialScale: (_d = (_c = window.remotion_renderDefaults) === null || _c === void 0 ? void 0 : _c.scale) !== null && _d !== void 0 ? _d : 1,
31
+ initialVerbose: ((_e = window.remotion_renderDefaults) === null || _e === void 0 ? void 0 : _e.logLevel) === 'verbose',
40
32
  initialOutName: (0, get_default_out_name_1.getDefaultOutLocation)({
41
33
  compositionName: composition.id,
42
34
  defaultExtension: isVideo ? 'mp4' : 'png',
43
35
  type: 'asset',
44
36
  }),
45
- initialAudioCodec,
46
- initialRenderType,
47
- initialVideoCodec,
48
- initialConcurrency: defaults.concurrency,
49
- maxConcurrency: defaults.maxConcurrency,
50
- minConcurrency: defaults.minConcurrency,
51
- initialMuted: defaults.muted,
52
- initialEnforceAudioTrack: defaults.enforceAudioTrack,
53
- initialProResProfile: defaults.proResProfile,
54
- initialPixelFormat: defaults.pixelFormat,
55
- initialAudioBitrate: defaults.audioBitrate,
56
- initialVideoBitrate: defaults.videoBitrate,
57
- initialEveryNthFrame: defaults.everyNthFrame,
58
- initialNumberOfGifLoops: defaults.numberOfGifLoops,
59
- initialDelayRenderTimeout: defaults.delayRenderTimeout,
37
+ initialRenderType: isVideo ? 'video' : 'still',
38
+ initialCodec: 'h264',
60
39
  });
61
40
  }, [composition.id, isVideo, setSelectedModal]);
62
41
  if (!visible) {
@@ -2,14 +2,14 @@
2
2
  import type { Codec } from '@remotion/renderer';
3
3
  export declare const useCrfState: (codec: Codec) => {
4
4
  crf: number;
5
- setCrf: import("react").Dispatch<import("react").SetStateAction<number>>;
5
+ setCrf: (updater: (prev: number) => number) => void;
6
6
  minCrf: number;
7
7
  maxCrf: number;
8
8
  shouldDisplayOption: boolean;
9
9
  };
10
10
  export declare const CrfSetting: React.FC<{
11
11
  crf: number;
12
- setCrf: React.Dispatch<React.SetStateAction<number>>;
12
+ setCrf: (value: (prevVal: number) => number) => void;
13
13
  min: number;
14
14
  max: number;
15
15
  }>;
@@ -4,7 +4,9 @@ exports.CrfSetting = exports.useCrfState = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const client_1 = require("@remotion/renderer/client");
6
6
  const react_1 = require("react");
7
- const NumberSetting_1 = require("./NumberSetting");
7
+ const InputDragger_1 = require("../NewComposition/InputDragger");
8
+ const RemInput_1 = require("../NewComposition/RemInput");
9
+ const layout_1 = require("./layout");
8
10
  const getDefaultCrfState = () => {
9
11
  return client_1.BrowserSafeApis.validCodecs
10
12
  .map((c) => {
@@ -20,17 +22,16 @@ const getDefaultCrfState = () => {
20
22
  const useCrfState = (codec) => {
21
23
  const [state, setState] = (0, react_1.useState)(() => getDefaultCrfState());
22
24
  const range = client_1.BrowserSafeApis.getValidCrfRanges(codec);
23
- const setCrf = (updater) => {
24
- setState((q) => {
25
- return {
26
- ...q,
27
- [codec]: typeof updater === 'number' ? updater : updater(q[codec]),
28
- };
29
- });
30
- };
31
25
  return {
32
26
  crf: state[codec],
33
- setCrf,
27
+ setCrf: (updater) => {
28
+ setState((q) => {
29
+ return {
30
+ ...q,
31
+ [codec]: updater(q[codec]),
32
+ };
33
+ });
34
+ },
34
35
  minCrf: range[0],
35
36
  maxCrf: range[1],
36
37
  shouldDisplayOption: range[0] !== range[1],
@@ -38,6 +39,18 @@ const useCrfState = (codec) => {
38
39
  };
39
40
  exports.useCrfState = useCrfState;
40
41
  const CrfSetting = ({ crf, setCrf, min, max }) => {
41
- return ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: min, max: max, name: "CRF", onValueChanged: setCrf, value: crf, step: 1 }));
42
+ const onCrfSetDirectly = (0, react_1.useCallback)((newCrf) => {
43
+ setCrf(() => newCrf);
44
+ }, [setCrf]);
45
+ const onCrfChanged = (0, react_1.useCallback)((e) => {
46
+ setCrf((q) => {
47
+ const newCrf = parseFloat(e);
48
+ if (Number.isNaN(newCrf)) {
49
+ return q;
50
+ }
51
+ return Math.min(max, Math.max(newCrf, min));
52
+ });
53
+ }, [max, min, setCrf]);
54
+ return ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "CRF" }), (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: crf, onTextChange: onCrfChanged, placeholder: `${min}-${max}`, onValueChange: onCrfSetDirectly, name: "crf", step: 1, min: min, max: max }) }) })] }));
42
55
  };
43
56
  exports.CrfSetting = CrfSetting;
@@ -1,28 +1,14 @@
1
- import type { Codec, PixelFormat, ProResProfile, StillImageFormat } from '@remotion/renderer';
1
+ import type { Codec, StillImageFormat } from '@remotion/renderer';
2
2
  import React from 'react';
3
- import type { RenderType } from './RenderModalAdvanced';
3
+ export declare type RenderType = 'still' | 'video';
4
4
  export declare const RenderModal: React.FC<{
5
5
  compositionId: string;
6
6
  initialFrame: number;
7
- initialVideoImageFormat: StillImageFormat;
8
- initialStillImageFormat: StillImageFormat;
9
- initialQuality: number;
7
+ initialImageFormat: StillImageFormat;
8
+ initialQuality: number | null;
10
9
  initialScale: number;
11
10
  initialVerbose: boolean;
12
11
  initialOutName: string;
13
12
  initialRenderType: RenderType;
14
- initialAudioCodec: Codec;
15
- initialVideoCodec: Codec;
16
- initialConcurrency: number;
17
- minConcurrency: number;
18
- maxConcurrency: number;
19
- initialMuted: boolean;
20
- initialEnforceAudioTrack: boolean;
21
- initialProResProfile: ProResProfile;
22
- initialPixelFormat: PixelFormat;
23
- initialVideoBitrate: string | null;
24
- initialAudioBitrate: string | null;
25
- initialEveryNthFrame: number;
26
- initialNumberOfGifLoops: number | null;
27
- initialDelayRenderTimeout: number;
13
+ initialCodec: Codec;
28
14
  }>;