@remotion/cli 3.3.77 → 3.3.78

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 (46) hide show
  1. package/dist/editor/components/Checkbox.d.ts +1 -0
  2. package/dist/editor/components/Checkbox.js +16 -13
  3. package/dist/editor/components/Modals.js +1 -1
  4. package/dist/editor/components/RenderButton.js +3 -2
  5. package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.d.ts +1 -0
  6. package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.js +2 -2
  7. package/dist/editor/components/RenderModal/InfoBubble.d.ts +5 -0
  8. package/dist/editor/components/RenderModal/InfoBubble.js +111 -0
  9. package/dist/editor/components/RenderModal/InfoTooltip.d.ts +4 -0
  10. package/dist/editor/components/RenderModal/InfoTooltip.js +30 -0
  11. package/dist/editor/components/RenderModal/MutedSetting.d.ts +1 -0
  12. package/dist/editor/components/RenderModal/MutedSetting.js +2 -2
  13. package/dist/editor/components/RenderModal/NumberSetting.d.ts +3 -0
  14. package/dist/editor/components/RenderModal/NumberSetting.js +7 -4
  15. package/dist/editor/components/RenderModal/OptionExplainer.d.ts +5 -0
  16. package/dist/editor/components/RenderModal/OptionExplainer.js +21 -0
  17. package/dist/editor/components/RenderModal/RenderModal.d.ts +4 -3
  18. package/dist/editor/components/RenderModal/RenderModal.js +39 -35
  19. package/dist/editor/components/RenderModal/RenderModalAdvanced.d.ts +4 -0
  20. package/dist/editor/components/RenderModal/RenderModalAdvanced.js +9 -2
  21. package/dist/editor/components/RenderModal/RenderModalAudio.d.ts +5 -1
  22. package/dist/editor/components/RenderModal/RenderModalAudio.js +22 -3
  23. package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +2 -4
  24. package/dist/editor/components/RenderModal/RenderModalBasic.js +11 -20
  25. package/dist/editor/components/RenderModal/RenderModalPicture.js +2 -2
  26. package/dist/editor/components/RenderModal/ScaleSetting.js +4 -1
  27. package/dist/editor/components/RenderModal/human-readable-codec.d.ts +1 -1
  28. package/dist/editor/components/RenderModal/human-readable-codec.js +1 -1
  29. package/dist/editor/components/RenderQueue/RenderQueueItem.js +2 -1
  30. package/dist/editor/components/RenderQueue/RenderQueueOpenInFolder.d.ts +5 -0
  31. package/dist/editor/components/RenderQueue/RenderQueueOpenInFolder.js +22 -0
  32. package/dist/editor/components/RenderQueue/actions.d.ts +2 -1
  33. package/dist/editor/components/RenderQueue/actions.js +2 -1
  34. package/dist/editor/components/RenderToolbarIcon.js +3 -2
  35. package/dist/editor/helpers/prores-labels.d.ts +2 -0
  36. package/dist/editor/helpers/prores-labels.js +25 -0
  37. package/dist/editor/helpers/render-modal-sections.d.ts +10 -0
  38. package/dist/editor/helpers/render-modal-sections.js +32 -0
  39. package/dist/preview-server/render-queue/job.d.ts +2 -0
  40. package/dist/preview-server/render-queue/make-retry-payload.js +8 -8
  41. package/dist/preview-server/render-queue/process-still.js +7 -2
  42. package/dist/preview-server/render-queue/process-video.js +9 -4
  43. package/dist/preview-server/routes/add-render.js +1 -0
  44. package/dist/render-flows/render.d.ts +3 -2
  45. package/dist/render-flows/render.js +6 -5
  46. package/package.json +6 -6
@@ -1,4 +1,5 @@
1
- /// <reference types="react" />
1
+ import type { AudioCodec, Codec } from '@remotion/renderer';
2
+ import React from 'react';
2
3
  import type { RenderType } from './RenderModalAdvanced';
3
4
  export declare const RenderModalAudio: React.FC<{
4
5
  muted: boolean;
@@ -10,4 +11,7 @@ export declare const RenderModalAudio: React.FC<{
10
11
  setShouldHaveCustomTargetAudioBitrate: React.Dispatch<React.SetStateAction<boolean>>;
11
12
  setCustomTargetAudioBitrateValue: React.Dispatch<React.SetStateAction<string>>;
12
13
  customTargetAudioBitrate: string;
14
+ audioCodec: AudioCodec;
15
+ setAudioCodec: (newAudioCodec: AudioCodec) => void;
16
+ codec: Codec;
13
17
  }>;
@@ -2,21 +2,40 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RenderModalAudio = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const client_1 = require("@remotion/renderer/client");
5
6
  const react_1 = require("react");
7
+ const Checkmark_1 = require("../../icons/Checkmark");
6
8
  const Checkbox_1 = require("../Checkbox");
9
+ const ComboBox_1 = require("../NewComposition/ComboBox");
7
10
  const RemInput_1 = require("../NewComposition/RemInput");
8
11
  const EnforceAudioTrackSetting_1 = require("./EnforceAudioTrackSetting");
12
+ const human_readable_audio_codecs_1 = require("./human-readable-audio-codecs");
9
13
  const layout_1 = require("./layout");
10
14
  const MutedSetting_1 = require("./MutedSetting");
11
15
  const RenderModalHr_1 = require("./RenderModalHr");
12
- const RenderModalAudio = ({ muted, setMuted, renderMode, enforceAudioTrack, setEnforceAudioTrackState, setShouldHaveCustomTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate, setCustomTargetAudioBitrateValue, customTargetAudioBitrate, }) => {
16
+ const RenderModalAudio = ({ muted, setMuted, renderMode, enforceAudioTrack, setEnforceAudioTrackState, setShouldHaveCustomTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate, setCustomTargetAudioBitrateValue, customTargetAudioBitrate, audioCodec, codec, setAudioCodec, }) => {
13
17
  const onShouldHaveTargetAudioBitrateChanged = (0, react_1.useCallback)((e) => {
14
18
  setShouldHaveCustomTargetAudioBitrate(e.target.checked);
15
19
  }, [setShouldHaveCustomTargetAudioBitrate]);
16
- // TODO: When rendering, mp3 does not support the "crf" option. Ignoring.
17
20
  const onTargetAudioBitrateChanged = (0, react_1.useCallback)((e) => {
18
21
  setCustomTargetAudioBitrateValue(e.target.value);
19
22
  }, [setCustomTargetAudioBitrateValue]);
20
- return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'video' && ((0, jsx_runtime_1.jsx)(MutedSetting_1.MutedSetting, { muted: muted, setMuted: setMuted })), renderMode === 'video' && ((0, jsx_runtime_1.jsx)(EnforceAudioTrackSetting_1.EnforceAudioTrackSetting, { enforceAudioTrack: enforceAudioTrack, setEnforceAudioTrack: setEnforceAudioTrackState })), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), renderMode === 'still' ? null : ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Custom audio bitrate" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: shouldHaveCustomTargetAudioBitrate, onChange: onShouldHaveTargetAudioBitrateChanged }) })] })), shouldHaveCustomTargetAudioBitrate && renderMode !== 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Target audio bitrate" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { style: layout_1.input, value: customTargetAudioBitrate, onChange: onTargetAudioBitrateChanged }) }) })] })) : null] }));
23
+ const audioCodecOptions = (0, react_1.useCallback)((currentCodec) => {
24
+ return client_1.BrowserSafeApis.supportedAudioCodecs[currentCodec].map((audioCodecOption) => {
25
+ return {
26
+ label: (0, human_readable_audio_codecs_1.humanReadableAudioCodec)(audioCodecOption),
27
+ onClick: () => setAudioCodec(audioCodecOption),
28
+ key: audioCodecOption,
29
+ leftItem: codec === audioCodecOption ? (0, jsx_runtime_1.jsx)(Checkmark_1.Checkmark, {}) : null,
30
+ id: audioCodecOption,
31
+ keyHint: null,
32
+ quickSwitcherLabel: null,
33
+ subMenu: null,
34
+ type: 'item',
35
+ value: audioCodecOption,
36
+ };
37
+ });
38
+ }, [codec, setAudioCodec]);
39
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'video' && audioCodecOptions(codec).length >= 2 ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Audio Codec" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: audioCodecOptions(codec), selectedId: audioCodec, title: "AudioCodec" }) })] })) : null, renderMode === 'video' && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(MutedSetting_1.MutedSetting, { enforceAudioTrack: enforceAudioTrack, muted: muted, setMuted: setMuted }), (0, jsx_runtime_1.jsx)(EnforceAudioTrackSetting_1.EnforceAudioTrackSetting, { muted: muted, enforceAudioTrack: enforceAudioTrack, setEnforceAudioTrack: setEnforceAudioTrackState }), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {})] })), renderMode === 'still' ? null : ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Custom audio bitrate" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: shouldHaveCustomTargetAudioBitrate, onChange: onShouldHaveTargetAudioBitrateChanged }) })] })), shouldHaveCustomTargetAudioBitrate && renderMode !== 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Target audio bitrate" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { style: layout_1.input, value: customTargetAudioBitrate, onChange: onTargetAudioBitrateChanged }) }) })] })) : null] }));
21
40
  };
22
41
  exports.RenderModalAudio = RenderModalAudio;
@@ -1,4 +1,4 @@
1
- import type { AudioCodec, Codec, ProResProfile } from '@remotion/renderer';
1
+ import type { Codec, ProResProfile } from '@remotion/renderer';
2
2
  import React from 'react';
3
3
  import type { TComposition } from 'remotion';
4
4
  import type { SegmentedControlItem } from '../SegmentedControl';
@@ -7,9 +7,7 @@ export declare const RenderModalBasic: React.FC<{
7
7
  renderMode: RenderType;
8
8
  imageFormatOptions: SegmentedControlItem[];
9
9
  codec: Codec;
10
- customAudioCodec: AudioCodec;
11
- setCodec: (newCodec: Codec) => void;
12
- setAudioCodec: (newAudioCodec: AudioCodec) => void;
10
+ setVideoCodec: (newCodec: Codec) => void;
13
11
  outName: string;
14
12
  proResProfile: ProResProfile | null;
15
13
  setProResProfile: React.Dispatch<React.SetStateAction<ProResProfile>>;
@@ -4,6 +4,7 @@ exports.RenderModalBasic = 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 prores_labels_1 = require("../../helpers/prores-labels");
7
8
  const use_file_existence_1 = require("../../helpers/use-file-existence");
8
9
  const Checkmark_1 = require("../../icons/Checkmark");
9
10
  const ComboBox_1 = require("../NewComposition/ComboBox");
@@ -12,10 +13,9 @@ const RemInput_1 = require("../NewComposition/RemInput");
12
13
  const ValidationMessage_1 = require("../NewComposition/ValidationMessage");
13
14
  const SegmentedControl_1 = require("../SegmentedControl");
14
15
  const FrameRangeSetting_1 = require("./FrameRangeSetting");
15
- const human_readable_audio_codecs_1 = require("./human-readable-audio-codecs");
16
16
  const human_readable_codec_1 = require("./human-readable-codec");
17
17
  const layout_1 = require("./layout");
18
- const RenderModalBasic = ({ renderMode, imageFormatOptions, outName, codec, customAudioCodec, setCodec, setAudioCodec, proResProfile, setProResProfile, frame, setFrame, currentComposition, setOutName, setEndFrame, endFrame, setStartFrame, startFrame, }) => {
18
+ const RenderModalBasic = ({ renderMode, imageFormatOptions, outName, codec, setVideoCodec: setCodec, proResProfile, setProResProfile, frame, setFrame, currentComposition, setOutName, setEndFrame, endFrame, setStartFrame, startFrame, }) => {
19
19
  const existence = (0, use_file_existence_1.useFileExistence)(outName);
20
20
  const videoCodecOptions = (0, react_1.useMemo)(() => {
21
21
  return client_1.BrowserSafeApis.validCodecs
@@ -37,29 +37,20 @@ const RenderModalBasic = ({ renderMode, imageFormatOptions, outName, codec, cust
37
37
  };
38
38
  });
39
39
  }, [renderMode, setCodec, codec]);
40
- const audioCodecOptions = (0, react_1.useCallback)((currentCodec) => {
41
- return client_1.BrowserSafeApis.supportedAudioCodecs[currentCodec].map((audioCodecOption) => {
42
- return {
43
- label: (0, human_readable_audio_codecs_1.humanReadableAudioCodec)(audioCodecOption),
44
- onClick: () => setAudioCodec(audioCodecOption),
45
- key: audioCodecOption,
46
- leftItem: codec === audioCodecOption ? (0, jsx_runtime_1.jsx)(Checkmark_1.Checkmark, {}) : null,
47
- id: audioCodecOption,
48
- keyHint: null,
49
- quickSwitcherLabel: null,
50
- subMenu: null,
51
- type: 'item',
52
- value: audioCodecOption,
53
- };
54
- });
55
- }, [codec, setAudioCodec]);
56
40
  const proResProfileOptions = (0, react_1.useMemo)(() => {
57
41
  return client_1.BrowserSafeApis.proResProfileOptions.map((option) => {
58
42
  return {
59
- label: option,
43
+ label: (0, prores_labels_1.labelProResProfile)(option),
60
44
  onClick: () => setProResProfile(option),
61
45
  key: option,
62
46
  selected: proResProfile === option,
47
+ type: 'item',
48
+ id: option,
49
+ keyHint: null,
50
+ leftItem: null,
51
+ quickSwitcherLabel: null,
52
+ subMenu: null,
53
+ value: option,
63
54
  };
64
55
  });
65
56
  }, [proResProfile, setProResProfile]);
@@ -78,7 +69,7 @@ const RenderModalBasic = ({ renderMode, imageFormatOptions, outName, codec, cust
78
69
  const onValueChange = (0, react_1.useCallback)((e) => {
79
70
  setOutName(e.target.value);
80
71
  }, [setOutName]);
81
- return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: imageFormatOptions, needsWrapping: true }) })] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Codec" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: videoCodecOptions, selectedId: codec, title: "Codec" }) })] }), audioCodecOptions(codec).length >= 2 ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Audio Codec" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: audioCodecOptions(codec), selectedId: customAudioCodec, title: "AudioCodec" }) })] })) : null] })), renderMode === 'still' && currentComposition.durationInFrames > 1 ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Frame" }), (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: frame, onTextChange: onFrameChanged, placeholder: `0-${currentComposition.durationInFrames - 1}`, onValueChange: onFrameSetDirectly, name: "frame", step: 1, min: 0, max: currentComposition.durationInFrames - 1 }) }) })] })) : null, renderMode === 'video' && codec === 'prores' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "ProRes profile" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: proResProfileOptions, needsWrapping: true }) })] })) : null, renderMode === 'still' ? null : ((0, jsx_runtime_1.jsx)(FrameRangeSetting_1.FrameRangeSetting, { durationInFrames: currentComposition.durationInFrames, endFrame: endFrame, setEndFrame: setEndFrame, setStartFrame: setStartFrame, startFrame: startFrame })), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Output name" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput
72
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: imageFormatOptions, needsWrapping: true }) })] })) : ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Codec" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: videoCodecOptions, selectedId: codec, title: "Codec" }) })] })), renderMode === 'still' && currentComposition.durationInFrames > 1 ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Frame" }), (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: frame, onTextChange: onFrameChanged, placeholder: `0-${currentComposition.durationInFrames - 1}`, onValueChange: onFrameSetDirectly, name: "frame", step: 1, min: 0, max: currentComposition.durationInFrames - 1 }) }) })] })) : null, renderMode === 'video' && codec === 'prores' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "ProRes profile" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { title: proResProfile, selectedId: proResProfile, values: proResProfileOptions }) })] })) : null, renderMode === 'still' ? null : ((0, jsx_runtime_1.jsx)(FrameRangeSetting_1.FrameRangeSetting, { durationInFrames: currentComposition.durationInFrames, endFrame: endFrame, setEndFrame: setEndFrame, setStartFrame: setStartFrame, startFrame: startFrame })), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Output name" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput
82
73
  // TODO: Validate and reject folders or weird file names
83
74
  , {
84
75
  // TODO: Validate and reject folders or weird file names
@@ -44,8 +44,8 @@ const RenderModalPicture = ({ renderMode, scale, setScale, pixelFormat, setPixel
44
44
  const onTargetVideoBitrateChanged = (0, react_1.useCallback)((e) => {
45
45
  setCustomTargetVideoBitrateValue(e.target.value);
46
46
  }, [setCustomTargetVideoBitrateValue]);
47
- return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'video' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Image Format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: imageFormatOptions, needsWrapping: false }) })] })) : null, renderMode === 'video' && videoImageFormat === 'jpeg' && ((0, jsx_runtime_1.jsx)(QualitySetting_1.QualitySetting, { setQuality: setQuality, quality: quality })), renderMode === 'still' && stillImageFormat === 'jpeg' && ((0, jsx_runtime_1.jsx)(QualitySetting_1.QualitySetting, { setQuality: setQuality, quality: quality })), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), renderMode === 'video' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Quality control" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: qualityControlOptions, needsWrapping: true }) })] })) : null, shouldDisplayCrfOption &&
47
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'video' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Image Format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: imageFormatOptions, needsWrapping: false }) })] })) : null, renderMode === 'video' && videoImageFormat === 'jpeg' && ((0, jsx_runtime_1.jsx)(QualitySetting_1.QualitySetting, { setQuality: setQuality, quality: quality })), renderMode === 'still' && stillImageFormat === 'jpeg' && ((0, jsx_runtime_1.jsx)(QualitySetting_1.QualitySetting, { setQuality: setQuality, quality: quality })), renderMode === 'video' ? (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}) : null, renderMode === 'video' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Quality control" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: qualityControlOptions, needsWrapping: true }) })] })) : null, shouldDisplayCrfOption &&
48
48
  qualityControlType === 'crf' &&
49
- renderMode !== 'still' ? ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: minCrf, max: maxCrf, name: "CRF", onValueChanged: setCrf, value: crf, step: 1 })) : null, qualityControlType === 'bitrate' && renderMode !== 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Target video bitrate" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { style: layout_1.input, value: customTargetVideoBitrate, onChange: onTargetVideoBitrateChanged }) }) })] })) : null, (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), renderMode === 'video' ? ((0, jsx_runtime_1.jsx)(ScaleSetting_1.ScaleSetting, { scale: scale, setScale: setScale })) : null, (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), renderMode === 'video' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Pixel format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: pixelFormatOptions, selectedId: pixelFormat, title: "Pixel Format" }) })] })) : null] }));
49
+ renderMode !== 'still' ? ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: minCrf, max: maxCrf, name: "CRF", onValueChanged: setCrf, value: crf, step: 1 })) : null, qualityControlType === 'bitrate' && renderMode !== 'still' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Target video bitrate" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { style: layout_1.input, value: customTargetVideoBitrate, onChange: onTargetVideoBitrateChanged }) }) })] })) : null, renderMode === 'video' ? (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}) : null, (0, jsx_runtime_1.jsx)(ScaleSetting_1.ScaleSetting, { scale: scale, setScale: setScale }), renderMode === 'video' ? (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}) : null, renderMode === 'video' ? ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Pixel format" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: pixelFormatOptions, selectedId: pixelFormat, title: "Pixel Format" }) })] })) : null] }));
50
50
  };
51
51
  exports.RenderModalPicture = RenderModalPicture;
@@ -2,10 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ScaleSetting = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const client_1 = require("@remotion/renderer/client");
5
6
  const NumberSetting_1 = require("./NumberSetting");
6
7
  const MIN_SCALE = 0.1;
7
8
  const MAX_SCALE = 10;
8
9
  const ScaleSetting = ({ scale, setScale }) => {
9
- return ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: MIN_SCALE, max: MAX_SCALE, step: 0.1, name: "Scale", onValueChanged: setScale, value: scale }));
10
+ return (
11
+ // TODO: Always show 1 decimal
12
+ (0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: MIN_SCALE, max: MAX_SCALE, step: 0.1, name: "Scale", formatter: (w) => `${w}x`, onValueChanged: setScale, value: scale, hint: client_1.BrowserSafeApis.options.scaleOption }));
10
13
  };
11
14
  exports.ScaleSetting = ScaleSetting;
@@ -1,2 +1,2 @@
1
1
  import type { Codec } from '@remotion/renderer';
2
- export declare const humanReadableCodec: (codec: Codec) => "GIF" | "AAC" | "MP3" | "H.264" | "H.264 MKV" | "H.265" | "ProRes" | "WebM VP8" | "WebM VP9" | "Waveform" | undefined;
2
+ export declare const humanReadableCodec: (codec: Codec) => "GIF" | "AAC" | "MP3" | "H.264" | "H.264 Matroska" | "H.265" | "ProRes" | "WebM VP8" | "WebM VP9" | "Waveform" | undefined;
@@ -15,7 +15,7 @@ const humanReadableCodec = (codec) => {
15
15
  return 'H.264';
16
16
  }
17
17
  if (codec === 'h264-mkv') {
18
- return 'H.264 MKV';
18
+ return 'H.264 Matroska';
19
19
  }
20
20
  if (codec === 'h265') {
21
21
  return 'H.265';
@@ -6,6 +6,7 @@ const layout_1 = require("../layout");
6
6
  const RenderQueueError_1 = require("./RenderQueueError");
7
7
  const RenderQueueItemCancelButton_1 = require("./RenderQueueItemCancelButton");
8
8
  const RenderQueueItemStatus_1 = require("./RenderQueueItemStatus");
9
+ const RenderQueueOpenInFolder_1 = require("./RenderQueueOpenInFolder");
9
10
  const RenderQueueOutputName_1 = require("./RenderQueueOutputName");
10
11
  const RenderQueueProgressMessage_1 = require("./RenderQueueProgressMessage");
11
12
  const RenderQueueRemoveItem_1 = require("./RenderQueueRemoveItem");
@@ -34,6 +35,6 @@ const subtitle = {
34
35
  overflow: 'hidden',
35
36
  };
36
37
  const RenderQueueItem = ({ job }) => {
37
- return ((0, jsx_runtime_1.jsxs)(layout_1.Row, { style: container, align: "center", children: [(0, jsx_runtime_1.jsx)(RenderQueueItemStatus_1.RenderQueueItemStatus, { job: job }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsxs)("div", { style: right, children: [(0, jsx_runtime_1.jsx)("div", { style: title, children: job.compositionId }), (0, jsx_runtime_1.jsx)("div", { style: subtitle, children: job.status === 'done' ? ((0, jsx_runtime_1.jsx)(RenderQueueOutputName_1.RenderQueueOutputName, { job: job })) : job.status === 'failed' ? ((0, jsx_runtime_1.jsx)(RenderQueueError_1.RenderQueueError, { job: job })) : job.status === 'running' ? ((0, jsx_runtime_1.jsx)(RenderQueueProgressMessage_1.RenderQueueProgressMessage, { job: job })) : null })] }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), job.status === 'done' || job.status === 'failed' ? ((0, jsx_runtime_1.jsx)(RenderQueueRepeat_1.RenderQueueRepeatItem, { job: job })) : null, job.status === 'running' ? ((0, jsx_runtime_1.jsx)(RenderQueueItemCancelButton_1.RenderQueueCancelButton, { job: job })) : ((0, jsx_runtime_1.jsx)(RenderQueueRemoveItem_1.RenderQueueRemoveItem, { job: job }))] }));
38
+ return ((0, jsx_runtime_1.jsxs)(layout_1.Row, { style: container, align: "center", children: [(0, jsx_runtime_1.jsx)(RenderQueueItemStatus_1.RenderQueueItemStatus, { job: job }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsxs)("div", { style: right, children: [(0, jsx_runtime_1.jsx)("div", { style: title, children: job.compositionId }), (0, jsx_runtime_1.jsx)("div", { style: subtitle, children: job.status === 'done' ? ((0, jsx_runtime_1.jsx)(RenderQueueOutputName_1.RenderQueueOutputName, { job: job })) : job.status === 'failed' ? ((0, jsx_runtime_1.jsx)(RenderQueueError_1.RenderQueueError, { job: job })) : job.status === 'running' ? ((0, jsx_runtime_1.jsx)(RenderQueueProgressMessage_1.RenderQueueProgressMessage, { job: job })) : null })] }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), job.status === 'done' || job.status === 'failed' ? ((0, jsx_runtime_1.jsx)(RenderQueueRepeat_1.RenderQueueRepeatItem, { job: job })) : null, job.status === 'running' ? ((0, jsx_runtime_1.jsx)(RenderQueueItemCancelButton_1.RenderQueueCancelButton, { job: job })) : ((0, jsx_runtime_1.jsx)(RenderQueueRemoveItem_1.RenderQueueRemoveItem, { job: job })), job.status === 'done' ? (0, jsx_runtime_1.jsx)(RenderQueueOpenInFolder_1.RenderQueueOpenInFinderItem, { job: job }) : null] }));
38
39
  };
39
40
  exports.RenderQueueItem = RenderQueueItem;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { RenderJob } from '../../../preview-server/render-queue/job';
3
+ export declare const RenderQueueOpenInFinderItem: React.FC<{
4
+ job: RenderJob;
5
+ }>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderQueueOpenInFinderItem = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const InlineAction_1 = require("../InlineAction");
7
+ const NotificationCenter_1 = require("../Notifications/NotificationCenter");
8
+ const actions_1 = require("./actions");
9
+ const RenderQueueOpenInFinderItem = ({ job, }) => {
10
+ const onClick = (0, react_1.useCallback)(() => {
11
+ (0, actions_1.openInFileExplorer)({ directory: job.outName }).catch((err) => {
12
+ (0, NotificationCenter_1.sendErrorNotification)(`Could not open file: ${err.message}`);
13
+ });
14
+ }, [job.outName]);
15
+ const icon = (0, react_1.useMemo)(() => {
16
+ return {
17
+ height: 12,
18
+ };
19
+ }, []);
20
+ return ((0, jsx_runtime_1.jsx)(InlineAction_1.InlineAction, { onClick: onClick, children: (0, jsx_runtime_1.jsx)("svg", { style: icon, viewBox: "0 0 576 512", children: (0, jsx_runtime_1.jsx)("path", { fill: "currentcolor", d: "M384 480h48c11.4 0 21.9-6 27.6-15.9l112-192c5.8-9.9 5.8-22.1 .1-32.1S555.5 224 544 224H144c-11.4 0-21.9 6-27.6 15.9L48 357.1V96c0-8.8 7.2-16 16-16H181.5c4.2 0 8.3 1.7 11.3 4.7l26.5 26.5c21 21 49.5 32.8 79.2 32.8H416c8.8 0 16 7.2 16 16v32h48V160c0-35.3-28.7-64-64-64H298.5c-17 0-33.3-6.7-45.3-18.7L226.7 50.7c-12-12-28.3-18.7-45.3-18.7H64C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H87.7 384z" }) }) }));
21
+ };
22
+ exports.RenderQueueOpenInFinderItem = RenderQueueOpenInFinderItem;
@@ -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, audioCodec, }: {
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, audioCodec, disallowParallelEncoding, }: {
15
15
  compositionId: string;
16
16
  outName: string;
17
17
  imageFormat: VideoImageFormat;
@@ -33,6 +33,7 @@ export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat,
33
33
  numberOfGifLoops: number | null;
34
34
  delayRenderTimeout: number;
35
35
  audioCodec: AudioCodec;
36
+ disallowParallelEncoding: boolean;
36
37
  }) => Promise<undefined>;
37
38
  export declare const unsubscribeFromFileExistenceWatcher: ({ file, clientId, }: {
38
39
  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, audioCodec, }) => {
41
+ const addVideoRenderJob = ({ compositionId, outName, imageFormat, quality, scale, verbose, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, }) => {
42
42
  return (0, exports.callApi)('/api/render', {
43
43
  compositionId,
44
44
  type: 'video',
@@ -62,6 +62,7 @@ const addVideoRenderJob = ({ compositionId, outName, imageFormat, quality, scale
62
62
  numberOfGifLoops,
63
63
  delayRenderTimeout,
64
64
  audioCodec,
65
+ disallowParallelEncoding,
65
66
  });
66
67
  };
67
68
  exports.addVideoRenderJob = addVideoRenderJob;
@@ -53,9 +53,9 @@ const RenderStillButton = () => {
53
53
  initialQuality: defaults.quality,
54
54
  initialScale: (_b = (_a = window.remotion_renderDefaults) === null || _a === void 0 ? void 0 : _a.scale) !== null && _b !== void 0 ? _b : 1,
55
55
  initialVerbose: defaults.logLevel === 'verbose',
56
- initialAudioCodec,
56
+ initialVideoCodecForAudioTab: initialAudioCodec,
57
57
  initialRenderType,
58
- initialVideoCodec,
58
+ initialVideoCodecForVideoTab: initialVideoCodec,
59
59
  initialConcurrency: defaults.concurrency,
60
60
  maxConcurrency: defaults.maxConcurrency,
61
61
  minConcurrency: defaults.minConcurrency,
@@ -68,6 +68,7 @@ const RenderStillButton = () => {
68
68
  initialEveryNthFrame: defaults.everyNthFrame,
69
69
  initialNumberOfGifLoops: defaults.numberOfGifLoops,
70
70
  initialDelayRenderTimeout: defaults.delayRenderTimeout,
71
+ initialAudioCodec: defaults.audioCodec,
71
72
  });
72
73
  }, [video, frame, setSelectedModal]);
73
74
  if (!video) {
@@ -0,0 +1,2 @@
1
+ import type { ProResProfile } from '@remotion/renderer';
2
+ export declare const labelProResProfile: (profile: ProResProfile) => "4444" | "4444 XQ (Best)" | "HQ" | "Proxy (Worst)" | "Light" | "Standard";
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.labelProResProfile = void 0;
4
+ const labelProResProfile = (profile) => {
5
+ if (profile === '4444') {
6
+ return '4444';
7
+ }
8
+ if (profile === '4444-xq') {
9
+ return '4444 XQ (Best)';
10
+ }
11
+ if (profile === 'hq') {
12
+ return 'HQ';
13
+ }
14
+ if (profile === 'proxy') {
15
+ return 'Proxy (Worst)';
16
+ }
17
+ if (profile === 'light') {
18
+ return 'Light';
19
+ }
20
+ if (profile === 'standard') {
21
+ return 'Standard';
22
+ }
23
+ throw new TypeError(`Unknown ProRes profile: ${profile}`);
24
+ };
25
+ exports.labelProResProfile = labelProResProfile;
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import type { Codec } from '@remotion/renderer';
3
+ import type { RenderType } from '../components/RenderModal/RenderModalAdvanced';
4
+ declare type Section = 'general' | 'picture' | 'advanced' | 'gif' | 'audio';
5
+ export declare const useRenderModalSections: (renderMode: RenderType, codec: Codec) => {
6
+ tab: Section;
7
+ setTab: import("react").Dispatch<import("react").SetStateAction<Section>>;
8
+ shownTabs: Section[];
9
+ };
10
+ export {};
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useRenderModalSections = void 0;
4
+ const react_1 = require("react");
5
+ const useRenderModalSections = (renderMode, codec) => {
6
+ const [selectedTab, setTab] = (0, react_1.useState)('general');
7
+ const shownTabs = (0, react_1.useMemo)(() => {
8
+ if (renderMode === 'audio') {
9
+ return ['general', 'audio', 'advanced'];
10
+ }
11
+ if (renderMode === 'still') {
12
+ return ['general', 'picture', 'advanced'];
13
+ }
14
+ if (renderMode === 'video') {
15
+ if (codec === 'gif') {
16
+ return ['general', 'picture', 'gif', 'advanced'];
17
+ }
18
+ return ['general', 'picture', 'audio', 'advanced'];
19
+ }
20
+ throw new TypeError('Unknown render mode');
21
+ }, [codec, renderMode]);
22
+ const tab = (0, react_1.useMemo)(() => {
23
+ if (!shownTabs.includes(selectedTab)) {
24
+ return shownTabs[0];
25
+ }
26
+ return selectedTab;
27
+ }, [selectedTab, shownTabs]);
28
+ return (0, react_1.useMemo)(() => {
29
+ return { tab, setTab, shownTabs };
30
+ }, [tab, shownTabs]);
31
+ };
32
+ exports.useRenderModalSections = useRenderModalSections;
@@ -44,6 +44,7 @@ declare type RenderJobDynamicFields = {
44
44
  everyNthFrame: number;
45
45
  numberOfGifLoops: number | null;
46
46
  delayRenderTimeout: number;
47
+ disallowParallelEncoding: boolean;
47
48
  };
48
49
  export declare type RenderJob = {
49
50
  startedAt: number;
@@ -85,6 +86,7 @@ declare type AddRenderRequestDynamicFields = {
85
86
  everyNthFrame: number;
86
87
  numberOfGifLoops: number | null;
87
88
  delayRenderTimeout: number;
89
+ disallowParallelEncoding: boolean;
88
90
  };
89
91
  export declare type CancelRenderRequest = {
90
92
  jobId: string;
@@ -18,15 +18,14 @@ const makeRetryPayload = (job) => {
18
18
  compositionId: job.compositionId,
19
19
  initialFrame: job.frame,
20
20
  initialStillImageFormat: job.imageFormat,
21
- // TODO: Take from config
22
- initialVideoImageFormat: 'jpeg',
21
+ initialVideoImageFormat: defaults.videoImageFormat,
23
22
  initialQuality: (_a = job.quality) !== null && _a !== void 0 ? _a : defaults.quality,
24
23
  initialOutName: job.outName,
25
24
  initialScale: job.scale,
26
25
  initialVerbose: job.verbose,
27
- initialAudioCodec,
26
+ initialVideoCodecForAudioTab: initialAudioCodec,
28
27
  initialRenderType,
29
- initialVideoCodec,
28
+ initialVideoCodecForVideoTab: initialVideoCodec,
30
29
  initialConcurrency: defaults.concurrency,
31
30
  maxConcurrency: defaults.maxConcurrency,
32
31
  minConcurrency: defaults.minConcurrency,
@@ -39,6 +38,7 @@ const makeRetryPayload = (job) => {
39
38
  initialEveryNthFrame: defaults.everyNthFrame,
40
39
  initialNumberOfGifLoops: defaults.numberOfGifLoops,
41
40
  initialDelayRenderTimeout: defaults.delayRenderTimeout,
41
+ initialAudioCodec: defaults.audioCodec,
42
42
  };
43
43
  }
44
44
  if (job.type === 'video') {
@@ -49,8 +49,7 @@ const makeRetryPayload = (job) => {
49
49
  return {
50
50
  type: 'render',
51
51
  compositionId: job.compositionId,
52
- // TODO: Take from config
53
- initialStillImageFormat: 'png',
52
+ initialStillImageFormat: defaults.stillImageFormat,
54
53
  initialVideoImageFormat: job.imageFormat,
55
54
  initialQuality: (_b = job.quality) !== null && _b !== void 0 ? _b : defaults.quality,
56
55
  initialOutName: job.outName,
@@ -61,10 +60,10 @@ const makeRetryPayload = (job) => {
61
60
  maxConcurrency: defaults.maxConcurrency,
62
61
  minConcurrency: defaults.minConcurrency,
63
62
  initialMuted: job.muted,
64
- initialAudioCodec,
63
+ initialVideoCodecForAudioTab: initialAudioCodec,
65
64
  initialEnforceAudioTrack: job.enforceAudioTrack,
66
65
  initialRenderType,
67
- initialVideoCodec,
66
+ initialVideoCodecForVideoTab: initialVideoCodec,
68
67
  initialProResProfile: (_c = job.proResProfile) !== null && _c !== void 0 ? _c : defaults.proResProfile,
69
68
  initialPixelFormat: job.pixelFormat,
70
69
  initialAudioBitrate: job.audioBitrate,
@@ -72,6 +71,7 @@ const makeRetryPayload = (job) => {
72
71
  initialEveryNthFrame: job.everyNthFrame,
73
72
  initialNumberOfGifLoops: job.numberOfGifLoops,
74
73
  initialDelayRenderTimeout: job.delayRenderTimeout,
74
+ initialAudioCodec: job.audioCodec,
75
75
  };
76
76
  }
77
77
  throw new Error(`Job ${JSON.stringify(job)} Not implemented`);
@@ -9,7 +9,13 @@ const processStill = async ({ job, remotionRoot, entryPoint, onProgress, addClea
9
9
  if (job.type !== 'still') {
10
10
  throw new Error('Expected still job');
11
11
  }
12
- const { publicDir, browserExecutable, chromiumOptions, envVariables, inputProps, port, browser, puppeteerTimeout, } = await (0, get_cli_options_1.getCliOptions)({
12
+ const { publicDir, browserExecutable,
13
+ // TODO: Accept chromium options from UI
14
+ chromiumOptions,
15
+ // TODO: Accept env variables from UI
16
+ envVariables,
17
+ // TODO: Accept input props from UI
18
+ inputProps, port, browser, puppeteerTimeout, } = await (0, get_cli_options_1.getCliOptions)({
13
19
  isLambda: false,
14
20
  type: 'still',
15
21
  remotionRoot,
@@ -42,6 +48,5 @@ const processStill = async ({ job, remotionRoot, entryPoint, onProgress, addClea
42
48
  addCleanupCallback,
43
49
  cancelSignal: job.cancelToken.cancelSignal,
44
50
  });
45
- // TODO: Accept CLI options
46
51
  };
47
52
  exports.processStill = processStill;
@@ -9,14 +9,19 @@ const processVideoJob = async ({ job, remotionRoot, entryPoint, onProgress, addC
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, chromiumOptions, envVariables, inputProps, port, browser, ffmpegOverride, } = await (0, get_cli_options_1.getCliOptions)({
12
+ const { publicDir, browserExecutable,
13
+ // TODO: Accept chromium options from UI
14
+ chromiumOptions,
15
+ // TODO: Accept env variables from UI
16
+ envVariables,
17
+ // TODO: Accept input props from UI
18
+ inputProps, port, browser, ffmpegOverride, } = await (0, get_cli_options_1.getCliOptions)({
14
19
  isLambda: false,
15
20
  type: 'still',
16
21
  remotionRoot,
17
22
  });
18
23
  const fullEntryPoint = (0, convert_entry_point_to_serve_url_1.convertEntryPointToServeUrl)(entryPoint);
19
- await (0, render_1.renderCompFlow)({
24
+ await (0, render_1.renderVideoFlow)({
20
25
  remotionRoot,
21
26
  browser,
22
27
  browserExecutable,
@@ -58,7 +63,7 @@ const processVideoJob = async ({ job, remotionRoot, entryPoint, onProgress, addC
58
63
  videoBitrate: job.videoBitrate,
59
64
  numberOfGifLoops: job.numberOfGifLoops,
60
65
  audioCodec: job.audioCodec,
66
+ disallowParallelEncoding: job.disallowParallelEncoding,
61
67
  });
62
- // TODO: Accept CLI options
63
68
  };
64
69
  exports.processVideoJob = processVideoJob;
@@ -38,6 +38,7 @@ const handleAddRender = ({ input, entryPoint, remotionRoot, }) => {
38
38
  everyNthFrame: input.everyNthFrame,
39
39
  numberOfGifLoops: input.numberOfGifLoops,
40
40
  delayRenderTimeout: input.delayRenderTimeout,
41
+ disallowParallelEncoding: input.disallowParallelEncoding,
41
42
  },
42
43
  });
43
44
  }
@@ -1,7 +1,7 @@
1
1
  import type { AudioCodec, Browser, BrowserExecutable, CancelSignal, ChromiumOptions, Codec, Crf, FfmpegOverrideFn, FrameRange, LogLevel, PixelFormat, ProResProfile, VideoImageFormat } from '@remotion/renderer';
2
2
  import type { Loop } from '../config/number-of-gif-loops';
3
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, }: {
4
+ export declare const renderVideoFlow: ({ 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, disallowParallelEncoding, }: {
5
5
  remotionRoot: string;
6
6
  fullEntryPoint: string;
7
7
  entryPointReason: string;
@@ -33,7 +33,7 @@ export declare const renderCompFlow: ({ remotionRoot, fullEntryPoint, indent, lo
33
33
  crf: Crf | null;
34
34
  cancelSignal: CancelSignal | null;
35
35
  uiCodec: Codec | null;
36
- uiImageFormat: VideoImageFormat;
36
+ uiImageFormat: VideoImageFormat | null;
37
37
  ffmpegOverride: FfmpegOverrideFn;
38
38
  audioBitrate: string | null;
39
39
  videoBitrate: string | null;
@@ -43,4 +43,5 @@ export declare const renderCompFlow: ({ remotionRoot, fullEntryPoint, indent, lo
43
43
  pixelFormat: PixelFormat;
44
44
  numberOfGifLoops: Loop;
45
45
  audioCodec: AudioCodec | null;
46
+ disallowParallelEncoding: boolean;
46
47
  }) => Promise<void>;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.renderCompFlow = void 0;
6
+ exports.renderVideoFlow = void 0;
7
7
  const renderer_1 = require("@remotion/renderer");
8
8
  const fs_1 = __importDefault(require("fs"));
9
9
  const os_1 = __importDefault(require("os"));
@@ -22,8 +22,7 @@ const progress_bar_1 = require("../progress-bar");
22
22
  const setup_cache_1 = require("../setup-cache");
23
23
  const truthy_1 = require("../truthy");
24
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, }) => {
25
+ const renderVideoFlow = 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, disallowParallelEncoding, }) => {
27
26
  var _a;
28
27
  const downloads = [];
29
28
  const downloadMap = renderer_1.RenderInternals.makeDownloadMap();
@@ -262,7 +261,9 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
262
261
  cancelSignal: cancelSignal !== null && cancelSignal !== void 0 ? cancelSignal : undefined,
263
262
  printLog: (...str) => log_1.Log.verboseAdvanced({ indent, logLevel }, ...str),
264
263
  audioCodec,
265
- // TODO: Add missing elements
264
+ preferLossless: false,
265
+ imageFormat,
266
+ disallowParallelEncoding,
266
267
  });
267
268
  log_1.Log.verboseAdvanced({ indent, logLevel });
268
269
  log_1.Log.verboseAdvanced({ indent, logLevel }, `Slowest frames:`);
@@ -276,4 +277,4 @@ const renderCompFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
276
277
  log_1.Log.verboseAdvanced({ indent, logLevel }, line);
277
278
  }
278
279
  };
279
- exports.renderCompFlow = renderCompFlow;
280
+ exports.renderVideoFlow = renderVideoFlow;