@remotion/cli 3.3.76 → 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 (168) hide show
  1. package/dist/config/still-frame.js +5 -1
  2. package/dist/convert-entry-point-to-serve-url.d.ts +1 -0
  3. package/dist/convert-entry-point-to-serve-url.js +15 -0
  4. package/dist/editor/components/Checkbox.d.ts +6 -0
  5. package/dist/editor/components/Checkbox.js +41 -0
  6. package/dist/editor/components/CollapsableOptions.d.ts +6 -0
  7. package/dist/editor/components/CollapsableOptions.js +35 -0
  8. package/dist/editor/components/CurrentCompositionSideEffects.d.ts +3 -0
  9. package/dist/editor/components/CurrentCompositionSideEffects.js +43 -0
  10. package/dist/editor/components/InlineAction.d.ts +5 -0
  11. package/dist/editor/components/InlineAction.js +34 -0
  12. package/dist/editor/components/Modals.d.ts +2 -0
  13. package/dist/editor/components/Modals.js +23 -0
  14. package/dist/editor/components/RenderButton.d.ts +6 -0
  15. package/dist/editor/components/RenderButton.js +68 -0
  16. package/dist/editor/components/RenderModal/CrfSetting.d.ts +15 -0
  17. package/dist/editor/components/RenderModal/CrfSetting.js +43 -0
  18. package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.d.ts +6 -0
  19. package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.js +14 -0
  20. package/dist/editor/components/RenderModal/FrameRangeSetting.d.ts +8 -0
  21. package/dist/editor/components/RenderModal/FrameRangeSetting.js +42 -0
  22. package/dist/editor/components/RenderModal/InfoBubble.d.ts +5 -0
  23. package/dist/editor/components/RenderModal/InfoBubble.js +111 -0
  24. package/dist/editor/components/RenderModal/InfoTooltip.d.ts +4 -0
  25. package/dist/editor/components/RenderModal/InfoTooltip.js +30 -0
  26. package/dist/editor/components/RenderModal/MutedSetting.d.ts +6 -0
  27. package/dist/editor/components/RenderModal/MutedSetting.js +14 -0
  28. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.d.ts +5 -0
  29. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.js +26 -0
  30. package/dist/editor/components/RenderModal/NumberSetting.d.ts +12 -0
  31. package/dist/editor/components/RenderModal/NumberSetting.js +29 -0
  32. package/dist/editor/components/RenderModal/OptionExplainer.d.ts +5 -0
  33. package/dist/editor/components/RenderModal/OptionExplainer.js +21 -0
  34. package/dist/editor/components/RenderModal/QualitySetting.d.ts +5 -0
  35. package/dist/editor/components/RenderModal/QualitySetting.js +27 -0
  36. package/dist/editor/components/RenderModal/RenderErrorModal.d.ts +5 -0
  37. package/dist/editor/components/RenderModal/RenderErrorModal.js +64 -0
  38. package/dist/editor/components/RenderModal/RenderModal.d.ts +29 -0
  39. package/dist/editor/components/RenderModal/RenderModal.js +488 -0
  40. package/dist/editor/components/RenderModal/RenderModalAdvanced.d.ts +15 -0
  41. package/dist/editor/components/RenderModal/RenderModalAdvanced.js +22 -0
  42. package/dist/editor/components/RenderModal/RenderModalAudio.d.ts +17 -0
  43. package/dist/editor/components/RenderModal/RenderModalAudio.js +41 -0
  44. package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +22 -0
  45. package/dist/editor/components/RenderModal/RenderModalBasic.js +78 -0
  46. package/dist/editor/components/RenderModal/RenderModalGif.d.ts +9 -0
  47. package/dist/editor/components/RenderModal/RenderModalGif.js +16 -0
  48. package/dist/editor/components/RenderModal/RenderModalHr.d.ts +2 -0
  49. package/dist/editor/components/RenderModal/RenderModalHr.js +18 -0
  50. package/dist/editor/components/RenderModal/RenderModalPicture.d.ts +28 -0
  51. package/dist/editor/components/RenderModal/RenderModalPicture.js +51 -0
  52. package/dist/editor/components/RenderModal/ScaleSetting.d.ts +5 -0
  53. package/dist/editor/components/RenderModal/ScaleSetting.js +14 -0
  54. package/dist/editor/components/RenderModal/human-readable-audio-codecs.d.ts +2 -0
  55. package/dist/editor/components/RenderModal/human-readable-audio-codecs.js +18 -0
  56. package/dist/editor/components/RenderModal/human-readable-codec.d.ts +2 -0
  57. package/dist/editor/components/RenderModal/human-readable-codec.js +36 -0
  58. package/dist/editor/components/RenderModal/layout.d.ts +5 -0
  59. package/dist/editor/components/RenderModal/layout.js +31 -0
  60. package/dist/editor/components/RenderQueue/CircularProgress.d.ts +5 -0
  61. package/dist/editor/components/RenderQueue/CircularProgress.js +18 -0
  62. package/dist/editor/components/RenderQueue/RenderQueueError.d.ts +5 -0
  63. package/dist/editor/components/RenderQueue/RenderQueueError.js +26 -0
  64. package/dist/editor/components/RenderQueue/RenderQueueItem.d.ts +5 -0
  65. package/dist/editor/components/RenderQueue/RenderQueueItem.js +40 -0
  66. package/dist/editor/components/RenderQueue/RenderQueueItemCancelButton.d.ts +5 -0
  67. package/dist/editor/components/RenderQueue/RenderQueueItemCancelButton.js +22 -0
  68. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.d.ts +5 -0
  69. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.js +27 -0
  70. package/dist/editor/components/RenderQueue/RenderQueueOpenInFolder.d.ts +5 -0
  71. package/dist/editor/components/RenderQueue/RenderQueueOpenInFolder.js +22 -0
  72. package/dist/editor/components/RenderQueue/RenderQueueOutputName.d.ts +5 -0
  73. package/dist/editor/components/RenderQueue/RenderQueueOutputName.js +24 -0
  74. package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.d.ts +5 -0
  75. package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.js +27 -0
  76. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.d.ts +5 -0
  77. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +23 -0
  78. package/dist/editor/components/RenderQueue/RenderQueueRepeat.d.ts +5 -0
  79. package/dist/editor/components/RenderQueue/RenderQueueRepeat.js +22 -0
  80. package/dist/editor/components/RenderQueue/actions.d.ts +50 -0
  81. package/dist/editor/components/RenderQueue/actions.js +99 -0
  82. package/dist/editor/components/RenderQueue/context.d.ts +19 -0
  83. package/dist/editor/components/RenderQueue/context.js +56 -0
  84. package/dist/editor/components/RenderQueue/index.d.ts +2 -0
  85. package/dist/editor/components/RenderQueue/index.js +18 -0
  86. package/dist/editor/components/RenderQueue/item-style.d.ts +2 -0
  87. package/dist/editor/components/RenderQueue/item-style.js +21 -0
  88. package/dist/editor/components/RenderToolbarIcon.d.ts +2 -0
  89. package/dist/editor/components/RenderToolbarIcon.js +79 -0
  90. package/dist/editor/components/RendersTab.d.ts +6 -0
  91. package/dist/editor/components/RendersTab.js +43 -0
  92. package/dist/editor/components/SegmentedControl.d.ts +16 -0
  93. package/dist/editor/components/SegmentedControl.js +63 -0
  94. package/dist/editor/components/SidebarContent.d.ts +5 -0
  95. package/dist/editor/components/SidebarContent.js +52 -0
  96. package/dist/editor/components/Tabs/index.d.ts +11 -0
  97. package/dist/editor/components/Tabs/index.js +51 -0
  98. package/dist/editor/helpers/client-id.d.ts +17 -0
  99. package/dist/editor/helpers/client-id.js +46 -0
  100. package/dist/editor/helpers/prores-labels.d.ts +2 -0
  101. package/dist/editor/helpers/prores-labels.js +25 -0
  102. package/dist/editor/helpers/render-modal-sections.d.ts +10 -0
  103. package/dist/editor/helpers/render-modal-sections.js +32 -0
  104. package/dist/editor/helpers/use-file-existence.d.ts +1 -0
  105. package/dist/editor/helpers/use-file-existence.js +66 -0
  106. package/dist/editor/icons/RenderStillIcon.d.ts +3 -0
  107. package/dist/editor/icons/RenderStillIcon.js +8 -0
  108. package/dist/editor/icons/audio.d.ts +2 -0
  109. package/dist/editor/icons/audio.js +6 -0
  110. package/dist/editor/icons/file.d.ts +2 -0
  111. package/dist/editor/icons/file.js +6 -0
  112. package/dist/editor/icons/frame.d.ts +2 -0
  113. package/dist/editor/icons/frame.js +6 -0
  114. package/dist/editor/icons/gear.d.ts +2 -0
  115. package/dist/editor/icons/gear.js +6 -0
  116. package/dist/editor/icons/gif.d.ts +2 -0
  117. package/dist/editor/icons/gif.js +6 -0
  118. package/dist/editor/icons/render.d.ts +5 -0
  119. package/dist/editor/icons/render.js +8 -0
  120. package/dist/editor/icons/video.d.ts +5 -0
  121. package/dist/editor/icons/video.js +8 -0
  122. package/dist/file-watcher.d.ts +9 -0
  123. package/dist/file-watcher.js +35 -0
  124. package/dist/gcp-command.d.ts +1 -0
  125. package/dist/gcp-command.js +27 -0
  126. package/dist/get-default-out-name.d.ts +5 -0
  127. package/dist/get-default-out-name.js +10 -0
  128. package/dist/preview-server/api-routes.d.ts +4 -0
  129. package/dist/preview-server/api-routes.js +17 -0
  130. package/dist/preview-server/api-types.d.ts +27 -0
  131. package/dist/preview-server/api-types.js +2 -0
  132. package/dist/preview-server/file-existence-watchers.d.ts +13 -0
  133. package/dist/preview-server/file-existence-watchers.js +62 -0
  134. package/dist/preview-server/handler.d.ts +9 -0
  135. package/dist/preview-server/handler.js +34 -0
  136. package/dist/preview-server/parse-body.d.ts +2 -0
  137. package/dist/preview-server/parse-body.js +16 -0
  138. package/dist/preview-server/render-queue/get-default-video-contexts.d.ts +10 -0
  139. package/dist/preview-server/render-queue/get-default-video-contexts.js +13 -0
  140. package/dist/preview-server/render-queue/job.d.ts +116 -0
  141. package/dist/preview-server/render-queue/job.js +2 -0
  142. package/dist/preview-server/render-queue/make-retry-payload.d.ts +3 -0
  143. package/dist/preview-server/render-queue/make-retry-payload.js +79 -0
  144. package/dist/preview-server/render-queue/open-directory-in-finder.d.ts +1 -0
  145. package/dist/preview-server/render-queue/open-directory-in-finder.js +34 -0
  146. package/dist/preview-server/render-queue/process-still.d.ts +8 -0
  147. package/dist/preview-server/render-queue/process-still.js +52 -0
  148. package/dist/preview-server/render-queue/process-video.d.ts +8 -0
  149. package/dist/preview-server/render-queue/process-video.js +69 -0
  150. package/dist/preview-server/render-queue/queue.d.ts +21 -0
  151. package/dist/preview-server/render-queue/queue.js +185 -0
  152. package/dist/preview-server/routes/add-render.d.ts +3 -0
  153. package/dist/preview-server/routes/add-render.js +69 -0
  154. package/dist/preview-server/routes/cancel-render.d.ts +3 -0
  155. package/dist/preview-server/routes/cancel-render.js +9 -0
  156. package/dist/preview-server/routes/open-in-file-explorer.d.ts +3 -0
  157. package/dist/preview-server/routes/open-in-file-explorer.js +14 -0
  158. package/dist/preview-server/routes/remove-render.d.ts +3 -0
  159. package/dist/preview-server/routes/remove-render.js +9 -0
  160. package/dist/preview-server/routes/subscribe-to-file-existence.d.ts +3 -0
  161. package/dist/preview-server/routes/subscribe-to-file-existence.js +13 -0
  162. package/dist/preview-server/routes/unsubscribe-from-file-existence.d.ts +3 -0
  163. package/dist/preview-server/routes/unsubscribe-from-file-existence.js +13 -0
  164. package/dist/render-flows/render.d.ts +47 -0
  165. package/dist/render-flows/render.js +280 -0
  166. package/dist/render-flows/still.d.ts +29 -0
  167. package/dist/render-flows/still.js +171 -0
  168. package/package.json +6 -6
@@ -0,0 +1,488 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderModal = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const client_1 = require("@remotion/renderer/client");
6
+ const react_1 = require("react");
7
+ const remotion_1 = require("remotion");
8
+ const Button_1 = require("../../../preview-server/error-overlay/remotion-overlay/Button");
9
+ const render_modal_sections_1 = require("../../helpers/render-modal-sections");
10
+ const audio_1 = require("../../icons/audio");
11
+ const file_1 = require("../../icons/file");
12
+ const frame_1 = require("../../icons/frame");
13
+ const gear_1 = require("../../icons/gear");
14
+ const gif_1 = require("../../icons/gif");
15
+ const modals_1 = require("../../state/modals");
16
+ const layout_1 = require("../layout");
17
+ const ModalContainer_1 = require("../ModalContainer");
18
+ const ModalHeader_1 = require("../ModalHeader");
19
+ const actions_1 = require("../RenderQueue/actions");
20
+ const SegmentedControl_1 = require("../SegmentedControl");
21
+ const SidebarContent_1 = require("../SidebarContent");
22
+ const Tabs_1 = require("../Tabs");
23
+ const CrfSetting_1 = require("./CrfSetting");
24
+ const RenderModalAdvanced_1 = require("./RenderModalAdvanced");
25
+ const RenderModalAudio_1 = require("./RenderModalAudio");
26
+ const RenderModalBasic_1 = require("./RenderModalBasic");
27
+ const RenderModalGif_1 = require("./RenderModalGif");
28
+ const RenderModalPicture_1 = require("./RenderModalPicture");
29
+ const initialState = { type: 'idle' };
30
+ const reducer = (state, action) => {
31
+ if (action.type === 'start') {
32
+ return {
33
+ type: 'load',
34
+ };
35
+ }
36
+ if (action.type === 'fail') {
37
+ return {
38
+ type: 'error',
39
+ };
40
+ }
41
+ if (action.type === 'succeed') {
42
+ return {
43
+ type: 'success',
44
+ };
45
+ }
46
+ return state;
47
+ };
48
+ const container = {
49
+ display: 'flex',
50
+ flexDirection: 'row',
51
+ alignItems: 'center',
52
+ padding: '12px 16px',
53
+ width: '100%',
54
+ borderBottom: '1px solid black',
55
+ };
56
+ const scrollPanel = {
57
+ minHeight: '35vh',
58
+ maxHeight: '50vh',
59
+ overflow: 'auto',
60
+ minWidth: 650,
61
+ };
62
+ const horizontalLayout = {
63
+ display: 'flex',
64
+ flexDirection: 'row',
65
+ };
66
+ const leftSidebar = {
67
+ padding: 12,
68
+ };
69
+ const horizontalTab = {
70
+ width: 250,
71
+ display: 'flex',
72
+ flexDirection: 'row',
73
+ alignItems: 'center',
74
+ textAlign: 'left',
75
+ fontSize: 16,
76
+ fontWeight: 'bold',
77
+ paddingLeft: 15,
78
+ paddingTop: 12,
79
+ paddingBottom: 12,
80
+ };
81
+ const iconContainer = {
82
+ width: 20,
83
+ height: 20,
84
+ marginRight: 15,
85
+ display: 'inline-flex',
86
+ justifyContent: 'center',
87
+ alignItems: 'center',
88
+ };
89
+ const icon = {
90
+ color: 'currentcolor',
91
+ height: 20,
92
+ };
93
+ const buttonStyle = {
94
+ backgroundColor: 'var(--blue)',
95
+ color: 'white',
96
+ };
97
+ const flexer = {
98
+ flex: 1,
99
+ };
100
+ const RenderModal = ({ compositionId, initialFrame, initialVideoImageFormat, initialStillImageFormat, initialQuality, initialScale, initialVerbose, initialOutName, initialRenderType, initialVideoCodecForAudioTab, initialVideoCodecForVideoTab, initialConcurrency, maxConcurrency, minConcurrency, initialMuted, initialEnforceAudioTrack, initialProResProfile, initialPixelFormat, initialVideoBitrate, initialAudioBitrate, initialEveryNthFrame, initialNumberOfGifLoops, initialDelayRenderTimeout, initialAudioCodec, }) => {
101
+ const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
102
+ const onQuit = (0, react_1.useCallback)(() => {
103
+ setSelectedModal(null);
104
+ }, [setSelectedModal]);
105
+ const isMounted = (0, react_1.useRef)(true);
106
+ const [state, dispatch] = (0, react_1.useReducer)(reducer, initialState);
107
+ const [unclampedFrame, setFrame] = (0, react_1.useState)(() => initialFrame);
108
+ const [stillImageFormat, setStillImageFormat] = (0, react_1.useState)(() => initialStillImageFormat);
109
+ const [videoImageFormat, setVideoImageFormat] = (0, react_1.useState)(() => initialVideoImageFormat);
110
+ const [concurrency, setConcurrency] = (0, react_1.useState)(() => initialConcurrency);
111
+ const [videoCodecForVideoTab, setVideoCodecForVideoTab] = (0, react_1.useState)(() => initialVideoCodecForVideoTab);
112
+ const [userSelectedAudioCodec, setUserSelectedAudioCodec] = (0, react_1.useState)(() => initialAudioCodec);
113
+ const [videoCodecForAudioTab, setVideoCodecForAudioTab] = (0, react_1.useState)(() => initialVideoCodecForAudioTab);
114
+ const [mutedState, setMuted] = (0, react_1.useState)(() => initialMuted);
115
+ const [enforceAudioTrackState, setEnforceAudioTrackState] = (0, react_1.useState)(() => initialEnforceAudioTrack);
116
+ const [renderMode, setRenderModeState] = (0, react_1.useState)(initialRenderType);
117
+ const [quality, setQuality] = (0, react_1.useState)(() => initialQuality);
118
+ const [scale, setScale] = (0, react_1.useState)(() => initialScale);
119
+ const [verbose, setVerboseLogging] = (0, react_1.useState)(() => initialVerbose);
120
+ const [disallowParallelEncoding, setDisallowParallelEncoding] = (0, react_1.useState)(false);
121
+ const [outName, setOutName] = (0, react_1.useState)(() => initialOutName);
122
+ const [endFrameOrNull, setEndFrame] = (0, react_1.useState)(() => null);
123
+ const [startFrameOrNull, setStartFrame] = (0, react_1.useState)(() => null);
124
+ const [proResProfileSetting, setProResProfile] = (0, react_1.useState)(() => initialProResProfile);
125
+ const [pixelFormat, setPixelFormat] = (0, react_1.useState)(() => initialPixelFormat);
126
+ const [qualityControlType, setQualityControl] = (0, react_1.useState)(() => initialVideoBitrate === null ? 'crf' : 'bitrate');
127
+ const [shouldHaveCustomTargetAudioBitrate, setShouldHaveCustomTargetAudioBitrate,] = (0, react_1.useState)(() => initialAudioBitrate !== null);
128
+ const [customTargetAudioBitrate, setCustomTargetAudioBitrateValue] = (0, react_1.useState)(() => initialAudioBitrate !== null && initialAudioBitrate !== void 0 ? initialAudioBitrate : '256K');
129
+ const [customTargetVideoBitrate, setCustomTargetVideoBitrateValue] = (0, react_1.useState)(() => initialVideoBitrate !== null && initialVideoBitrate !== void 0 ? initialVideoBitrate : '1M');
130
+ const [limitNumberOfGifLoops, setLimitNumberOfGifLoops] = (0, react_1.useState)(() => initialNumberOfGifLoops !== null);
131
+ const [numberOfGifLoopsSetting, setNumberOfGifLoopsSetting] = (0, react_1.useState)(() => initialNumberOfGifLoops !== null && initialNumberOfGifLoops !== void 0 ? initialNumberOfGifLoops : 1);
132
+ const [delayRenderTimeout, setDelayRenderTimeout] = (0, react_1.useState)(() => initialDelayRenderTimeout);
133
+ const codec = (0, react_1.useMemo)(() => {
134
+ if (renderMode === 'audio') {
135
+ return videoCodecForAudioTab;
136
+ }
137
+ return videoCodecForVideoTab;
138
+ }, [videoCodecForAudioTab, renderMode, videoCodecForVideoTab]);
139
+ const numberOfGifLoops = (0, react_1.useMemo)(() => {
140
+ if (codec === 'gif' && limitNumberOfGifLoops) {
141
+ return numberOfGifLoopsSetting;
142
+ }
143
+ return null;
144
+ }, [codec, limitNumberOfGifLoops, numberOfGifLoopsSetting]);
145
+ const audioBitrate = (0, react_1.useMemo)(() => {
146
+ if (shouldHaveCustomTargetAudioBitrate) {
147
+ return customTargetAudioBitrate;
148
+ }
149
+ return null;
150
+ }, [customTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate]);
151
+ const videoBitrate = (0, react_1.useMemo)(() => {
152
+ if (qualityControlType === 'bitrate') {
153
+ return customTargetVideoBitrate;
154
+ }
155
+ return null;
156
+ }, [customTargetVideoBitrate, qualityControlType]);
157
+ const { crf, maxCrf, minCrf, setCrf, shouldDisplayOption: shouldDisplayCrfOption, } = (0, CrfSetting_1.useCrfState)(codec);
158
+ const dispatchIfMounted = (0, react_1.useCallback)((payload) => {
159
+ if (isMounted.current === false)
160
+ return;
161
+ dispatch(payload);
162
+ }, []);
163
+ const muted = (0, react_1.useMemo)(() => {
164
+ if (renderMode === 'video') {
165
+ return mutedState;
166
+ }
167
+ return false;
168
+ }, [mutedState, renderMode]);
169
+ const enforceAudioTrack = (0, react_1.useMemo)(() => {
170
+ if (renderMode === 'video') {
171
+ return enforceAudioTrackState;
172
+ }
173
+ return false;
174
+ }, [enforceAudioTrackState, renderMode]);
175
+ const proResProfile = (0, react_1.useMemo)(() => {
176
+ if (renderMode === 'video' && codec === 'prores') {
177
+ return proResProfileSetting;
178
+ }
179
+ return null;
180
+ }, [codec, proResProfileSetting, renderMode]);
181
+ const { compositions } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
182
+ const currentComposition = (0, react_1.useMemo)(() => {
183
+ for (const composition of compositions) {
184
+ if (composition.id === compositionId) {
185
+ return composition;
186
+ }
187
+ }
188
+ return null;
189
+ }, [compositionId, compositions]);
190
+ if (currentComposition === null) {
191
+ throw new Error('This composition does not exist');
192
+ }
193
+ const endFrame = (0, react_1.useMemo)(() => {
194
+ if (endFrameOrNull === null) {
195
+ return currentComposition.durationInFrames - 1;
196
+ }
197
+ return Math.max(0, Math.min(currentComposition.durationInFrames - 1, endFrameOrNull));
198
+ }, [currentComposition.durationInFrames, endFrameOrNull]);
199
+ const startFrame = (0, react_1.useMemo)(() => {
200
+ if (startFrameOrNull === null) {
201
+ return 0;
202
+ }
203
+ return Math.max(0, Math.min(endFrame - 1, startFrameOrNull));
204
+ }, [endFrame, startFrameOrNull]);
205
+ const frame = (0, react_1.useMemo)(() => {
206
+ const parsed = Math.floor(unclampedFrame);
207
+ return Math.max(0, Math.min(currentComposition.durationInFrames - 1, parsed));
208
+ }, [currentComposition.durationInFrames, unclampedFrame]);
209
+ const getStringBeforeSuffix = (0, react_1.useCallback)((fileName) => {
210
+ const dotPos = fileName.lastIndexOf('.');
211
+ const bitBeforeDot = fileName.substring(0, dotPos);
212
+ return bitBeforeDot;
213
+ }, []);
214
+ const deriveFinalAudioCodec = (0, react_1.useCallback)((passedVideoCodec, passedAudioCodec) => {
215
+ if (passedAudioCodec !== null &&
216
+ client_1.BrowserSafeApis.supportedAudioCodecs[passedVideoCodec].includes(passedAudioCodec)) {
217
+ return passedAudioCodec;
218
+ }
219
+ return client_1.BrowserSafeApis.defaultAudioCodecs[passedVideoCodec]
220
+ .compressed;
221
+ }, []);
222
+ const setDefaultOutName = (0, react_1.useCallback)((options) => {
223
+ if (options.type === 'still') {
224
+ setOutName((prev) => {
225
+ const newFileName = getStringBeforeSuffix(prev) + '.' + options.imageFormat;
226
+ return newFileName;
227
+ });
228
+ }
229
+ else {
230
+ setOutName((prev) => {
231
+ const codecSuffix = client_1.BrowserSafeApis.getFileExtensionFromCodec(options.codec, deriveFinalAudioCodec(options.codec, options.audioCodec));
232
+ const newFileName = getStringBeforeSuffix(prev) + '.' + codecSuffix;
233
+ return newFileName;
234
+ });
235
+ }
236
+ }, [deriveFinalAudioCodec, getStringBeforeSuffix]);
237
+ const setAudioCodec = (0, react_1.useCallback)((newAudioCodec) => {
238
+ setUserSelectedAudioCodec(newAudioCodec);
239
+ setDefaultOutName({
240
+ type: 'render',
241
+ codec: videoCodecForVideoTab,
242
+ audioCodec: newAudioCodec,
243
+ });
244
+ }, [setDefaultOutName, videoCodecForVideoTab]);
245
+ const setCodec = (0, react_1.useCallback)((newCodec) => {
246
+ if (renderMode === 'audio') {
247
+ setVideoCodecForAudioTab(newCodec);
248
+ }
249
+ else {
250
+ setVideoCodecForVideoTab(newCodec);
251
+ }
252
+ setDefaultOutName({
253
+ type: 'render',
254
+ codec: newCodec,
255
+ audioCodec: deriveFinalAudioCodec(newCodec, userSelectedAudioCodec),
256
+ });
257
+ }, [
258
+ userSelectedAudioCodec,
259
+ deriveFinalAudioCodec,
260
+ renderMode,
261
+ setDefaultOutName,
262
+ ]);
263
+ const setStillFormat = (0, react_1.useCallback)((format) => {
264
+ setStillImageFormat(format);
265
+ setDefaultOutName({ type: 'still', imageFormat: format });
266
+ }, [setDefaultOutName]);
267
+ const onClickStill = (0, react_1.useCallback)(() => {
268
+ var _a;
269
+ (_a = SidebarContent_1.leftSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectRendersPanel();
270
+ dispatchIfMounted({ type: 'start' });
271
+ (0, actions_1.addStillRenderJob)({
272
+ compositionId,
273
+ outName,
274
+ imageFormat: stillImageFormat,
275
+ quality: stillImageFormat === 'jpeg' ? quality : null,
276
+ frame,
277
+ scale,
278
+ verbose,
279
+ })
280
+ .then(() => {
281
+ dispatchIfMounted({ type: 'succeed' });
282
+ setSelectedModal(null);
283
+ })
284
+ .catch(() => {
285
+ dispatchIfMounted({ type: 'fail' });
286
+ });
287
+ }, [
288
+ compositionId,
289
+ dispatchIfMounted,
290
+ frame,
291
+ stillImageFormat,
292
+ outName,
293
+ quality,
294
+ scale,
295
+ setSelectedModal,
296
+ verbose,
297
+ ]);
298
+ const [everyNthFrameSetting, setEveryNthFrameSetting] = (0, react_1.useState)(() => initialEveryNthFrame);
299
+ const everyNthFrame = (0, react_1.useMemo)(() => {
300
+ if (codec === 'gif') {
301
+ return everyNthFrameSetting;
302
+ }
303
+ return 1;
304
+ }, [codec, everyNthFrameSetting]);
305
+ const audioCodec = deriveFinalAudioCodec(codec, userSelectedAudioCodec);
306
+ const onClickVideo = (0, react_1.useCallback)(() => {
307
+ var _a;
308
+ (_a = SidebarContent_1.leftSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectRendersPanel();
309
+ dispatchIfMounted({ type: 'start' });
310
+ (0, actions_1.addVideoRenderJob)({
311
+ compositionId,
312
+ outName,
313
+ imageFormat: videoImageFormat,
314
+ quality: stillImageFormat === 'jpeg' ? quality : null,
315
+ scale,
316
+ verbose,
317
+ codec,
318
+ concurrency,
319
+ crf: qualityControlType === 'crf' ? crf : null,
320
+ endFrame,
321
+ startFrame,
322
+ muted,
323
+ enforceAudioTrack,
324
+ proResProfile,
325
+ pixelFormat,
326
+ audioBitrate,
327
+ videoBitrate,
328
+ everyNthFrame,
329
+ numberOfGifLoops,
330
+ delayRenderTimeout,
331
+ audioCodec,
332
+ disallowParallelEncoding,
333
+ })
334
+ .then(() => {
335
+ dispatchIfMounted({ type: 'succeed' });
336
+ setSelectedModal(null);
337
+ })
338
+ .catch(() => {
339
+ dispatchIfMounted({ type: 'fail' });
340
+ });
341
+ }, [
342
+ dispatchIfMounted,
343
+ compositionId,
344
+ outName,
345
+ videoImageFormat,
346
+ stillImageFormat,
347
+ quality,
348
+ scale,
349
+ verbose,
350
+ codec,
351
+ concurrency,
352
+ qualityControlType,
353
+ crf,
354
+ endFrame,
355
+ startFrame,
356
+ muted,
357
+ enforceAudioTrack,
358
+ proResProfile,
359
+ pixelFormat,
360
+ audioBitrate,
361
+ videoBitrate,
362
+ everyNthFrame,
363
+ numberOfGifLoops,
364
+ delayRenderTimeout,
365
+ audioCodec,
366
+ disallowParallelEncoding,
367
+ setSelectedModal,
368
+ ]);
369
+ (0, react_1.useEffect)(() => {
370
+ return () => {
371
+ isMounted.current = false;
372
+ };
373
+ }, []);
374
+ const imageFormatOptions = (0, react_1.useMemo)(() => {
375
+ if (renderMode === 'still') {
376
+ return [
377
+ {
378
+ label: 'PNG',
379
+ onClick: () => setStillFormat('png'),
380
+ key: 'png',
381
+ selected: stillImageFormat === 'png',
382
+ },
383
+ {
384
+ label: 'JPEG',
385
+ onClick: () => setStillFormat('jpeg'),
386
+ key: 'jpeg',
387
+ selected: stillImageFormat === 'jpeg',
388
+ },
389
+ {
390
+ label: 'PDF',
391
+ onClick: () => setStillFormat('pdf'),
392
+ key: 'pdf',
393
+ selected: stillImageFormat === 'pdf',
394
+ },
395
+ {
396
+ label: 'WebP',
397
+ onClick: () => setStillFormat('webp'),
398
+ key: 'webp',
399
+ selected: stillImageFormat === 'webp',
400
+ },
401
+ ];
402
+ }
403
+ return [
404
+ {
405
+ label: 'PNG',
406
+ onClick: () => setVideoImageFormat('png'),
407
+ key: 'png',
408
+ selected: videoImageFormat === 'png',
409
+ },
410
+ {
411
+ label: 'JPEG',
412
+ onClick: () => setVideoImageFormat('jpeg'),
413
+ key: 'jpeg',
414
+ selected: videoImageFormat === 'jpeg',
415
+ },
416
+ ];
417
+ }, [stillImageFormat, renderMode, setStillFormat, videoImageFormat]);
418
+ const setRenderMode = (0, react_1.useCallback)((newRenderMode) => {
419
+ setRenderModeState(newRenderMode);
420
+ if (newRenderMode === 'audio') {
421
+ setDefaultOutName({
422
+ type: 'render',
423
+ codec: videoCodecForAudioTab,
424
+ audioCodec: deriveFinalAudioCodec(videoCodecForAudioTab, userSelectedAudioCodec),
425
+ });
426
+ }
427
+ if (newRenderMode === 'video') {
428
+ setDefaultOutName({
429
+ type: 'render',
430
+ codec: videoCodecForVideoTab,
431
+ audioCodec: deriveFinalAudioCodec(videoCodecForVideoTab, userSelectedAudioCodec),
432
+ });
433
+ }
434
+ if (newRenderMode === 'still') {
435
+ setDefaultOutName({ type: 'still', imageFormat: stillImageFormat });
436
+ }
437
+ }, [
438
+ videoCodecForAudioTab,
439
+ userSelectedAudioCodec,
440
+ deriveFinalAudioCodec,
441
+ setDefaultOutName,
442
+ stillImageFormat,
443
+ videoCodecForVideoTab,
444
+ ]);
445
+ const renderTabOptions = (0, react_1.useMemo)(() => {
446
+ if ((currentComposition === null || currentComposition === void 0 ? void 0 : currentComposition.durationInFrames) < 2) {
447
+ return [
448
+ {
449
+ label: 'Still',
450
+ onClick: () => {
451
+ setRenderMode('still');
452
+ },
453
+ key: 'still',
454
+ selected: renderMode === 'still',
455
+ },
456
+ ];
457
+ }
458
+ return [
459
+ {
460
+ label: 'Still',
461
+ onClick: () => {
462
+ setRenderMode('still');
463
+ },
464
+ key: 'still',
465
+ selected: renderMode === 'still',
466
+ },
467
+ {
468
+ label: 'Video',
469
+ onClick: () => {
470
+ setRenderMode('video');
471
+ },
472
+ key: 'video',
473
+ selected: renderMode === 'video',
474
+ },
475
+ {
476
+ label: 'Audio',
477
+ onClick: () => {
478
+ setRenderMode('audio');
479
+ },
480
+ key: 'audio',
481
+ selected: renderMode === 'audio',
482
+ },
483
+ ];
484
+ }, [currentComposition === null || currentComposition === void 0 ? void 0 : currentComposition.durationInFrames, renderMode, setRenderMode]);
485
+ const { tab, setTab, shownTabs } = (0, render_modal_sections_1.useRenderModalSections)(renderMode, codec);
486
+ return ((0, jsx_runtime_1.jsxs)(ModalContainer_1.ModalContainer, { onOutsideClick: onQuit, onEscape: onQuit, children: [(0, jsx_runtime_1.jsx)(ModalHeader_1.NewCompHeader, { title: `Render ${compositionId}` }), (0, jsx_runtime_1.jsxs)("div", { style: container, children: [(0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: renderTabOptions, needsWrapping: false }), (0, jsx_runtime_1.jsx)("div", { style: flexer }), (0, jsx_runtime_1.jsx)(Button_1.Button, { autoFocus: true, onClick: renderMode === 'still' ? onClickStill : onClickVideo, disabled: state.type === 'load', style: buttonStyle, children: state.type === 'idle' ? `Render ${renderMode}` : 'Rendering...' })] }), (0, jsx_runtime_1.jsxs)("div", { style: horizontalLayout, children: [(0, jsx_runtime_1.jsxs)("div", { style: leftSidebar, children: [shownTabs.includes('general') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'general', onClick: () => setTab('general'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(file_1.FileIcon, { style: icon }) }), "General"] })) : null, shownTabs.includes('picture') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'picture', onClick: () => setTab('picture'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(frame_1.PicIcon, { style: icon }) }), "Picture"] })) : null, shownTabs.includes('audio') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'audio', onClick: () => setTab('audio'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(audio_1.AudioIcon, { style: icon }) }), "Audio"] })) : null, shownTabs.includes('gif') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'gif', onClick: () => setTab('gif'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(gif_1.GifIcon, { style: icon }) }), "GIF"] })) : null, shownTabs.includes('advanced') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'advanced', onClick: () => setTab('advanced'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(gear_1.GearIcon, { style: icon }) }), "Other"] })) : null] }), (0, jsx_runtime_1.jsxs)("div", { style: scrollPanel, children: [(0, jsx_runtime_1.jsx)(layout_1.Spacing, { block: true, y: 0.5 }), tab === 'general' ? ((0, jsx_runtime_1.jsx)(RenderModalBasic_1.RenderModalBasic, { codec: codec, currentComposition: currentComposition, frame: frame, imageFormatOptions: imageFormatOptions, outName: outName, proResProfile: proResProfile, renderMode: renderMode, setVideoCodec: setCodec, setFrame: setFrame, setOutName: setOutName, setProResProfile: setProResProfile, endFrame: endFrame, setEndFrame: setEndFrame, setStartFrame: setStartFrame, startFrame: startFrame })) : tab === 'picture' ? ((0, jsx_runtime_1.jsx)(RenderModalPicture_1.RenderModalPicture, { renderMode: renderMode, scale: scale, setScale: setScale, pixelFormat: pixelFormat, setPixelFormat: setPixelFormat, imageFormatOptions: imageFormatOptions, crf: crf, setCrf: setCrf, customTargetVideoBitrate: customTargetVideoBitrate, maxCrf: maxCrf, minCrf: minCrf, quality: quality, qualityControlType: qualityControlType, setQuality: setQuality, setCustomTargetVideoBitrateValue: setCustomTargetVideoBitrateValue, setQualityControl: setQualityControl, shouldDisplayCrfOption: shouldDisplayCrfOption, videoImageFormat: videoImageFormat, stillImageFormat: stillImageFormat })) : tab === 'audio' ? ((0, jsx_runtime_1.jsx)(RenderModalAudio_1.RenderModalAudio, { muted: muted, renderMode: renderMode, setMuted: setMuted, codec: codec, audioCodec: audioCodec, setAudioCodec: setAudioCodec, enforceAudioTrack: enforceAudioTrack, setEnforceAudioTrackState: setEnforceAudioTrackState, customTargetAudioBitrate: customTargetAudioBitrate, setCustomTargetAudioBitrateValue: setCustomTargetAudioBitrateValue, setShouldHaveCustomTargetAudioBitrate: setShouldHaveCustomTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate: shouldHaveCustomTargetAudioBitrate })) : tab === 'gif' ? ((0, jsx_runtime_1.jsx)(RenderModalGif_1.RenderModalGif, { everyNthFrame: everyNthFrame, limitNumberOfGifLoops: limitNumberOfGifLoops, numberOfGifLoopsSetting: numberOfGifLoopsSetting, setEveryNthFrameSetting: setEveryNthFrameSetting, setLimitNumberOfGifLoops: setLimitNumberOfGifLoops, setNumberOfGifLoopsSetting: setNumberOfGifLoopsSetting })) : ((0, jsx_runtime_1.jsx)(RenderModalAdvanced_1.RenderModalAdvanced, { concurrency: concurrency, maxConcurrency: maxConcurrency, minConcurrency: minConcurrency, renderMode: renderMode, setConcurrency: setConcurrency, setVerboseLogging: setVerboseLogging, verbose: verbose, delayRenderTimeout: delayRenderTimeout, setDelayRenderTimeout: setDelayRenderTimeout, disallowParallelEncoding: disallowParallelEncoding, setDisallowParallelEncoding: setDisallowParallelEncoding })), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { block: true, y: 0.5 })] })] })] }));
487
+ };
488
+ exports.RenderModal = RenderModal;
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ export declare type RenderType = 'still' | 'video' | 'audio';
3
+ export declare const RenderModalAdvanced: React.FC<{
4
+ renderMode: RenderType;
5
+ minConcurrency: number;
6
+ maxConcurrency: number;
7
+ setConcurrency: React.Dispatch<React.SetStateAction<number>>;
8
+ concurrency: number;
9
+ setVerboseLogging: React.Dispatch<React.SetStateAction<boolean>>;
10
+ verbose: boolean;
11
+ delayRenderTimeout: number;
12
+ setDelayRenderTimeout: React.Dispatch<React.SetStateAction<number>>;
13
+ disallowParallelEncoding: boolean;
14
+ setDisallowParallelEncoding: React.Dispatch<React.SetStateAction<boolean>>;
15
+ }>;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderModalAdvanced = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const Checkbox_1 = require("../Checkbox");
7
+ const layout_1 = require("./layout");
8
+ const NumberSetting_1 = require("./NumberSetting");
9
+ const RenderModalAdvanced = ({ renderMode, maxConcurrency, minConcurrency, setConcurrency, concurrency, setVerboseLogging, verbose, delayRenderTimeout, setDelayRenderTimeout, disallowParallelEncoding, setDisallowParallelEncoding, }) => {
10
+ const onVerboseLoggingChanged = (0, react_1.useCallback)((e) => {
11
+ setVerboseLogging(e.target.checked);
12
+ }, [setVerboseLogging]);
13
+ const onDisallowParallelEncodingChanged = (0, react_1.useCallback)((e) => {
14
+ setDisallowParallelEncoding(e.target.checked);
15
+ }, [setDisallowParallelEncoding]);
16
+ return ((0, jsx_runtime_1.jsxs)("div", { children: [renderMode === 'still' ? null : ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: minConcurrency, max: maxConcurrency, step: 1, name: "Concurrency", formatter: (w) => `${w}x`, onValueChanged: setConcurrency, value: concurrency })), (0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting
17
+ // Also appears in packages/renderer/src/validate-puppeteer-timeout.ts
18
+ , {
19
+ // Also appears in packages/renderer/src/validate-puppeteer-timeout.ts
20
+ min: 7000, max: 900000, name: "delayRender() timeout", onValueChanged: setDelayRenderTimeout, formatter: (w) => `${w}ms`, step: 1000, value: delayRenderTimeout }), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "No parallel encoding" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: disallowParallelEncoding, onChange: onDisallowParallelEncodingChanged }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Verbose logging" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: verbose, onChange: onVerboseLoggingChanged }) })] })] }));
21
+ };
22
+ exports.RenderModalAdvanced = RenderModalAdvanced;
@@ -0,0 +1,17 @@
1
+ import type { AudioCodec, Codec } from '@remotion/renderer';
2
+ import React from 'react';
3
+ import type { RenderType } from './RenderModalAdvanced';
4
+ export declare const RenderModalAudio: React.FC<{
5
+ muted: boolean;
6
+ setMuted: React.Dispatch<React.SetStateAction<boolean>>;
7
+ renderMode: RenderType;
8
+ enforceAudioTrack: boolean;
9
+ setEnforceAudioTrackState: React.Dispatch<React.SetStateAction<boolean>>;
10
+ shouldHaveCustomTargetAudioBitrate: boolean;
11
+ setShouldHaveCustomTargetAudioBitrate: React.Dispatch<React.SetStateAction<boolean>>;
12
+ setCustomTargetAudioBitrateValue: React.Dispatch<React.SetStateAction<string>>;
13
+ customTargetAudioBitrate: string;
14
+ audioCodec: AudioCodec;
15
+ setAudioCodec: (newAudioCodec: AudioCodec) => void;
16
+ codec: Codec;
17
+ }>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderModalAudio = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const client_1 = require("@remotion/renderer/client");
6
+ const react_1 = require("react");
7
+ const Checkmark_1 = require("../../icons/Checkmark");
8
+ const Checkbox_1 = require("../Checkbox");
9
+ const ComboBox_1 = require("../NewComposition/ComboBox");
10
+ const RemInput_1 = require("../NewComposition/RemInput");
11
+ const EnforceAudioTrackSetting_1 = require("./EnforceAudioTrackSetting");
12
+ const human_readable_audio_codecs_1 = require("./human-readable-audio-codecs");
13
+ const layout_1 = require("./layout");
14
+ const MutedSetting_1 = require("./MutedSetting");
15
+ const RenderModalHr_1 = require("./RenderModalHr");
16
+ const RenderModalAudio = ({ muted, setMuted, renderMode, enforceAudioTrack, setEnforceAudioTrackState, setShouldHaveCustomTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate, setCustomTargetAudioBitrateValue, customTargetAudioBitrate, audioCodec, codec, setAudioCodec, }) => {
17
+ const onShouldHaveTargetAudioBitrateChanged = (0, react_1.useCallback)((e) => {
18
+ setShouldHaveCustomTargetAudioBitrate(e.target.checked);
19
+ }, [setShouldHaveCustomTargetAudioBitrate]);
20
+ const onTargetAudioBitrateChanged = (0, react_1.useCallback)((e) => {
21
+ setCustomTargetAudioBitrateValue(e.target.value);
22
+ }, [setCustomTargetAudioBitrateValue]);
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] }));
40
+ };
41
+ exports.RenderModalAudio = RenderModalAudio;
@@ -0,0 +1,22 @@
1
+ import type { Codec, ProResProfile } from '@remotion/renderer';
2
+ import React from 'react';
3
+ import type { TComposition } from 'remotion';
4
+ import type { SegmentedControlItem } from '../SegmentedControl';
5
+ import type { RenderType } from './RenderModalAdvanced';
6
+ export declare const RenderModalBasic: React.FC<{
7
+ renderMode: RenderType;
8
+ imageFormatOptions: SegmentedControlItem[];
9
+ codec: Codec;
10
+ setVideoCodec: (newCodec: Codec) => void;
11
+ outName: string;
12
+ proResProfile: ProResProfile | null;
13
+ setProResProfile: React.Dispatch<React.SetStateAction<ProResProfile>>;
14
+ frame: number;
15
+ setFrame: React.Dispatch<React.SetStateAction<number>>;
16
+ currentComposition: TComposition<unknown>;
17
+ setOutName: (value: React.SetStateAction<string>) => void;
18
+ setEndFrame: React.Dispatch<React.SetStateAction<number | null>>;
19
+ startFrame: number;
20
+ endFrame: number;
21
+ setStartFrame: React.Dispatch<React.SetStateAction<number | null>>;
22
+ }>;