@remotion/cli 3.3.79 → 3.3.80

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 (245) hide show
  1. package/dist/codemods/update-default-props.d.ts +5 -0
  2. package/dist/codemods/update-default-props.js +98 -0
  3. package/dist/convert-entry-point-to-serve-url.d.ts +1 -0
  4. package/dist/convert-entry-point-to-serve-url.js +15 -0
  5. package/dist/editor/components/Checkbox.d.ts +6 -0
  6. package/dist/editor/components/Checkbox.js +42 -0
  7. package/dist/editor/components/CollapsableOptions.d.ts +6 -0
  8. package/dist/editor/components/CollapsableOptions.js +35 -0
  9. package/dist/editor/components/CollapsedSidebarExpander.d.ts +5 -0
  10. package/dist/editor/components/CollapsedSidebarExpander.js +40 -0
  11. package/dist/editor/components/CurrentCompositionSideEffects.d.ts +3 -0
  12. package/dist/editor/components/CurrentCompositionSideEffects.js +52 -0
  13. package/dist/editor/components/InlineAction.d.ts +5 -0
  14. package/dist/editor/components/InlineAction.js +34 -0
  15. package/dist/editor/components/Modals.d.ts +2 -0
  16. package/dist/editor/components/Modals.js +23 -0
  17. package/dist/editor/components/NewComposition/RemTextarea.d.ts +7 -0
  18. package/dist/editor/components/NewComposition/RemTextarea.js +90 -0
  19. package/dist/editor/components/RenderButton.d.ts +6 -0
  20. package/dist/editor/components/RenderButton.js +73 -0
  21. package/dist/editor/components/RenderModal/CliCopyButton.d.ts +4 -0
  22. package/dist/editor/components/RenderModal/CliCopyButton.js +22 -0
  23. package/dist/editor/components/RenderModal/CrfSetting.d.ts +16 -0
  24. package/dist/editor/components/RenderModal/CrfSetting.js +43 -0
  25. package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.d.ts +8 -0
  26. package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.js +16 -0
  27. package/dist/editor/components/RenderModal/EnvInput.d.ts +10 -0
  28. package/dist/editor/components/RenderModal/EnvInput.js +54 -0
  29. package/dist/editor/components/RenderModal/FrameRangeSetting.d.ts +8 -0
  30. package/dist/editor/components/RenderModal/FrameRangeSetting.js +42 -0
  31. package/dist/editor/components/RenderModal/GuiRenderStatus.d.ts +5 -0
  32. package/dist/editor/components/RenderModal/GuiRenderStatus.js +78 -0
  33. package/dist/editor/components/RenderModal/InfoBubble.d.ts +5 -0
  34. package/dist/editor/components/RenderModal/InfoBubble.js +115 -0
  35. package/dist/editor/components/RenderModal/InfoTooltip.d.ts +5 -0
  36. package/dist/editor/components/RenderModal/InfoTooltip.js +39 -0
  37. package/dist/editor/components/RenderModal/InlineEyeIcon.d.ts +5 -0
  38. package/dist/editor/components/RenderModal/InlineEyeIcon.js +38 -0
  39. package/dist/editor/components/RenderModal/InlineRemoveButton.d.ts +4 -0
  40. package/dist/editor/components/RenderModal/InlineRemoveButton.js +14 -0
  41. package/dist/editor/components/RenderModal/JpegQualitySetting.d.ts +5 -0
  42. package/dist/editor/components/RenderModal/JpegQualitySetting.js +12 -0
  43. package/dist/editor/components/RenderModal/MutedSetting.d.ts +8 -0
  44. package/dist/editor/components/RenderModal/MutedSetting.js +16 -0
  45. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.d.ts +5 -0
  46. package/dist/editor/components/RenderModal/NumberOfLoopsSetting.js +26 -0
  47. package/dist/editor/components/RenderModal/NumberSetting.d.ts +12 -0
  48. package/dist/editor/components/RenderModal/NumberSetting.js +29 -0
  49. package/dist/editor/components/RenderModal/OptionExplainer.d.ts +5 -0
  50. package/dist/editor/components/RenderModal/OptionExplainer.js +45 -0
  51. package/dist/editor/components/RenderModal/RenderModal.d.ts +34 -0
  52. package/dist/editor/components/RenderModal/RenderModal.js +531 -0
  53. package/dist/editor/components/RenderModal/RenderModalAdvanced.d.ts +26 -0
  54. package/dist/editor/components/RenderModal/RenderModalAdvanced.js +54 -0
  55. package/dist/editor/components/RenderModal/RenderModalAudio.d.ts +17 -0
  56. package/dist/editor/components/RenderModal/RenderModalAudio.js +43 -0
  57. package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +23 -0
  58. package/dist/editor/components/RenderModal/RenderModalBasic.js +76 -0
  59. package/dist/editor/components/RenderModal/RenderModalData.d.ts +10 -0
  60. package/dist/editor/components/RenderModal/RenderModalData.js +55 -0
  61. package/dist/editor/components/RenderModal/RenderModalEnvironmentVariables.d.ts +5 -0
  62. package/dist/editor/components/RenderModal/RenderModalEnvironmentVariables.js +52 -0
  63. package/dist/editor/components/RenderModal/RenderModalGif.d.ts +9 -0
  64. package/dist/editor/components/RenderModal/RenderModalGif.js +16 -0
  65. package/dist/editor/components/RenderModal/RenderModalHr.d.ts +2 -0
  66. package/dist/editor/components/RenderModal/RenderModalHr.js +18 -0
  67. package/dist/editor/components/RenderModal/RenderModalInput.d.ts +10 -0
  68. package/dist/editor/components/RenderModal/RenderModalInput.js +13 -0
  69. package/dist/editor/components/RenderModal/RenderModalJSONInputPropsEditor.d.ts +8 -0
  70. package/dist/editor/components/RenderModal/RenderModalJSONInputPropsEditor.js +87 -0
  71. package/dist/editor/components/RenderModal/RenderModalPicture.d.ts +28 -0
  72. package/dist/editor/components/RenderModal/RenderModalPicture.js +53 -0
  73. package/dist/editor/components/RenderModal/RenderStatusModal.d.ts +4 -0
  74. package/dist/editor/components/RenderModal/RenderStatusModal.js +71 -0
  75. package/dist/editor/components/RenderModal/ScaleSetting.d.ts +5 -0
  76. package/dist/editor/components/RenderModal/ScaleSetting.js +17 -0
  77. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.d.ts +12 -0
  78. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.js +36 -0
  79. package/dist/editor/components/RenderModal/SchemaEditor/SchemaLabel.d.ts +15 -0
  80. package/dist/editor/components/RenderModal/SchemaEditor/SchemaLabel.js +43 -0
  81. package/dist/editor/components/RenderModal/SchemaEditor/SchemaResetButton.d.ts +4 -0
  82. package/dist/editor/components/RenderModal/SchemaEditor/SchemaResetButton.js +12 -0
  83. package/dist/editor/components/RenderModal/SchemaEditor/SchemaSaveButton.d.ts +4 -0
  84. package/dist/editor/components/RenderModal/SchemaEditor/SchemaSaveButton.js +12 -0
  85. package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayEditor.d.ts +14 -0
  86. package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayEditor.js +70 -0
  87. package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayItemEditor.d.ts +13 -0
  88. package/dist/editor/components/RenderModal/SchemaEditor/ZodArrayItemEditor.js +28 -0
  89. package/dist/editor/components/RenderModal/SchemaEditor/ZodBooleanEditor.d.ts +12 -0
  90. package/dist/editor/components/RenderModal/SchemaEditor/ZodBooleanEditor.js +27 -0
  91. package/dist/editor/components/RenderModal/SchemaEditor/ZodDateEditor.d.ts +14 -0
  92. package/dist/editor/components/RenderModal/SchemaEditor/ZodDateEditor.js +75 -0
  93. package/dist/editor/components/RenderModal/SchemaEditor/ZodEffectEditor.d.ts +14 -0
  94. package/dist/editor/components/RenderModal/SchemaEditor/ZodEffectEditor.js +51 -0
  95. package/dist/editor/components/RenderModal/SchemaEditor/ZodErrorMessages.d.ts +5 -0
  96. package/dist/editor/components/RenderModal/SchemaEditor/ZodErrorMessages.js +23 -0
  97. package/dist/editor/components/RenderModal/SchemaEditor/ZodNonEditableValue.d.ts +8 -0
  98. package/dist/editor/components/RenderModal/SchemaEditor/ZodNonEditableValue.js +23 -0
  99. package/dist/editor/components/RenderModal/SchemaEditor/ZodNumberEditor.d.ts +14 -0
  100. package/dist/editor/components/RenderModal/SchemaEditor/ZodNumberEditor.js +89 -0
  101. package/dist/editor/components/RenderModal/SchemaEditor/ZodObjectEditor.d.ts +14 -0
  102. package/dist/editor/components/RenderModal/SchemaEditor/ZodObjectEditor.js +57 -0
  103. package/dist/editor/components/RenderModal/SchemaEditor/ZodStringEditor.d.ts +14 -0
  104. package/dist/editor/components/RenderModal/SchemaEditor/ZodStringEditor.js +43 -0
  105. package/dist/editor/components/RenderModal/SchemaEditor/ZodSwitch.d.ts +14 -0
  106. package/dist/editor/components/RenderModal/SchemaEditor/ZodSwitch.js +56 -0
  107. package/dist/editor/components/RenderModal/SchemaEditor/date-serialization.d.ts +2 -0
  108. package/dist/editor/components/RenderModal/SchemaEditor/date-serialization.js +21 -0
  109. package/dist/editor/components/RenderModal/SchemaEditor/get-schema-label.d.ts +2 -0
  110. package/dist/editor/components/RenderModal/SchemaEditor/get-schema-label.js +15 -0
  111. package/dist/editor/components/RenderModal/SchemaEditor/zod-types.d.ts +1 -0
  112. package/dist/editor/components/RenderModal/SchemaEditor/zod-types.js +2 -0
  113. package/dist/editor/components/RenderModal/human-readable-audio-codecs.d.ts +2 -0
  114. package/dist/editor/components/RenderModal/human-readable-audio-codecs.js +18 -0
  115. package/dist/editor/components/RenderModal/human-readable-codec.d.ts +2 -0
  116. package/dist/editor/components/RenderModal/human-readable-codec.js +36 -0
  117. package/dist/editor/components/RenderModal/layout.d.ts +7 -0
  118. package/dist/editor/components/RenderModal/layout.js +47 -0
  119. package/dist/editor/components/RenderModal/out-name-checker.d.ts +15 -0
  120. package/dist/editor/components/RenderModal/out-name-checker.js +79 -0
  121. package/dist/editor/components/RenderQueue/CircularProgress.d.ts +5 -0
  122. package/dist/editor/components/RenderQueue/CircularProgress.js +18 -0
  123. package/dist/editor/components/RenderQueue/RenderQueueError.d.ts +5 -0
  124. package/dist/editor/components/RenderQueue/RenderQueueError.js +26 -0
  125. package/dist/editor/components/RenderQueue/RenderQueueItem.d.ts +5 -0
  126. package/dist/editor/components/RenderQueue/RenderQueueItem.js +40 -0
  127. package/dist/editor/components/RenderQueue/RenderQueueItemCancelButton.d.ts +5 -0
  128. package/dist/editor/components/RenderQueue/RenderQueueItemCancelButton.js +22 -0
  129. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.d.ts +5 -0
  130. package/dist/editor/components/RenderQueue/RenderQueueItemStatus.js +43 -0
  131. package/dist/editor/components/RenderQueue/RenderQueueOpenInFolder.d.ts +5 -0
  132. package/dist/editor/components/RenderQueue/RenderQueueOpenInFolder.js +22 -0
  133. package/dist/editor/components/RenderQueue/RenderQueueOutputName.d.ts +5 -0
  134. package/dist/editor/components/RenderQueue/RenderQueueOutputName.js +26 -0
  135. package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.d.ts +5 -0
  136. package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.js +26 -0
  137. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.d.ts +5 -0
  138. package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +33 -0
  139. package/dist/editor/components/RenderQueue/RenderQueueRepeat.d.ts +5 -0
  140. package/dist/editor/components/RenderQueue/RenderQueueRepeat.js +22 -0
  141. package/dist/editor/components/RenderQueue/SuccessIcon.d.ts +2 -0
  142. package/dist/editor/components/RenderQueue/SuccessIcon.js +14 -0
  143. package/dist/editor/components/RenderQueue/actions.d.ts +59 -0
  144. package/dist/editor/components/RenderQueue/actions.js +114 -0
  145. package/dist/editor/components/RenderQueue/context.d.ts +19 -0
  146. package/dist/editor/components/RenderQueue/context.js +56 -0
  147. package/dist/editor/components/RenderQueue/index.d.ts +2 -0
  148. package/dist/editor/components/RenderQueue/index.js +18 -0
  149. package/dist/editor/components/RenderQueue/item-style.d.ts +2 -0
  150. package/dist/editor/components/RenderQueue/item-style.js +21 -0
  151. package/dist/editor/components/RenderToolbarIcon.d.ts +2 -0
  152. package/dist/editor/components/RenderToolbarIcon.js +84 -0
  153. package/dist/editor/components/RendersTab.d.ts +6 -0
  154. package/dist/editor/components/RendersTab.js +43 -0
  155. package/dist/editor/components/RightPanel.d.ts +2 -0
  156. package/dist/editor/components/RightPanel.js +43 -0
  157. package/dist/editor/components/SegmentedControl.d.ts +16 -0
  158. package/dist/editor/components/SegmentedControl.js +63 -0
  159. package/dist/editor/components/SidebarContent.d.ts +5 -0
  160. package/dist/editor/components/SidebarContent.js +53 -0
  161. package/dist/editor/components/Tabs/index.d.ts +11 -0
  162. package/dist/editor/components/Tabs/index.js +51 -0
  163. package/dist/editor/helpers/client-id.d.ts +17 -0
  164. package/dist/editor/helpers/client-id.js +46 -0
  165. package/dist/editor/helpers/convert-env-variables.d.ts +2 -0
  166. package/dist/editor/helpers/convert-env-variables.js +20 -0
  167. package/dist/editor/helpers/prores-labels.d.ts +2 -0
  168. package/dist/editor/helpers/prores-labels.js +25 -0
  169. package/dist/editor/helpers/render-modal-sections.d.ts +10 -0
  170. package/dist/editor/helpers/render-modal-sections.js +32 -0
  171. package/dist/editor/helpers/use-file-existence.d.ts +1 -0
  172. package/dist/editor/helpers/use-file-existence.js +66 -0
  173. package/dist/editor/icons/RenderStillIcon.d.ts +3 -0
  174. package/dist/editor/icons/RenderStillIcon.js +8 -0
  175. package/dist/editor/icons/audio.d.ts +2 -0
  176. package/dist/editor/icons/audio.js +6 -0
  177. package/dist/editor/icons/data.d.ts +2 -0
  178. package/dist/editor/icons/data.js +8 -0
  179. package/dist/editor/icons/file.d.ts +2 -0
  180. package/dist/editor/icons/file.js +6 -0
  181. package/dist/editor/icons/frame.d.ts +2 -0
  182. package/dist/editor/icons/frame.js +6 -0
  183. package/dist/editor/icons/gear.d.ts +2 -0
  184. package/dist/editor/icons/gear.js +6 -0
  185. package/dist/editor/icons/gif.d.ts +2 -0
  186. package/dist/editor/icons/gif.js +6 -0
  187. package/dist/editor/icons/render.d.ts +5 -0
  188. package/dist/editor/icons/render.js +8 -0
  189. package/dist/editor/icons/save.d.ts +2 -0
  190. package/dist/editor/icons/save.js +8 -0
  191. package/dist/editor/icons/video.d.ts +5 -0
  192. package/dist/editor/icons/video.js +8 -0
  193. package/dist/ffmpeg.d.ts +2 -0
  194. package/dist/ffmpeg.js +21 -0
  195. package/dist/file-watcher.d.ts +9 -0
  196. package/dist/file-watcher.js +35 -0
  197. package/dist/get-default-out-name.d.ts +5 -0
  198. package/dist/get-default-out-name.js +10 -0
  199. package/dist/preview-server/api-routes.d.ts +4 -0
  200. package/dist/preview-server/api-routes.js +19 -0
  201. package/dist/preview-server/api-types.d.ts +28 -0
  202. package/dist/preview-server/api-types.js +2 -0
  203. package/dist/preview-server/file-existence-watchers.d.ts +13 -0
  204. package/dist/preview-server/file-existence-watchers.js +62 -0
  205. package/dist/preview-server/handler.d.ts +9 -0
  206. package/dist/preview-server/handler.js +34 -0
  207. package/dist/preview-server/parse-body.d.ts +2 -0
  208. package/dist/preview-server/parse-body.js +16 -0
  209. package/dist/preview-server/render-queue/get-default-video-contexts.d.ts +10 -0
  210. package/dist/preview-server/render-queue/get-default-video-contexts.js +13 -0
  211. package/dist/preview-server/render-queue/job.d.ts +129 -0
  212. package/dist/preview-server/render-queue/job.js +2 -0
  213. package/dist/preview-server/render-queue/make-retry-payload.d.ts +3 -0
  214. package/dist/preview-server/render-queue/make-retry-payload.js +89 -0
  215. package/dist/preview-server/render-queue/open-directory-in-finder.d.ts +1 -0
  216. package/dist/preview-server/render-queue/open-directory-in-finder.js +43 -0
  217. package/dist/preview-server/render-queue/process-still.d.ts +8 -0
  218. package/dist/preview-server/render-queue/process-still.js +46 -0
  219. package/dist/preview-server/render-queue/process-video.d.ts +8 -0
  220. package/dist/preview-server/render-queue/process-video.js +63 -0
  221. package/dist/preview-server/render-queue/queue.d.ts +21 -0
  222. package/dist/preview-server/render-queue/queue.js +207 -0
  223. package/dist/preview-server/routes/add-render.d.ts +3 -0
  224. package/dist/preview-server/routes/add-render.js +76 -0
  225. package/dist/preview-server/routes/cancel-render.d.ts +3 -0
  226. package/dist/preview-server/routes/cancel-render.js +9 -0
  227. package/dist/preview-server/routes/open-in-file-explorer.d.ts +3 -0
  228. package/dist/preview-server/routes/open-in-file-explorer.js +8 -0
  229. package/dist/preview-server/routes/remove-render.d.ts +3 -0
  230. package/dist/preview-server/routes/remove-render.js +9 -0
  231. package/dist/preview-server/routes/subscribe-to-file-existence.d.ts +3 -0
  232. package/dist/preview-server/routes/subscribe-to-file-existence.js +13 -0
  233. package/dist/preview-server/routes/unsubscribe-from-file-existence.d.ts +3 -0
  234. package/dist/preview-server/routes/unsubscribe-from-file-existence.js +13 -0
  235. package/dist/preview-server/routes/update-default-props.d.ts +3 -0
  236. package/dist/preview-server/routes/update-default-props.js +22 -0
  237. package/dist/progress-types.d.ts +32 -0
  238. package/dist/progress-types.js +17 -0
  239. package/dist/render-flows/render.d.ts +47 -0
  240. package/dist/render-flows/render.js +294 -0
  241. package/dist/render-flows/still.d.ts +29 -0
  242. package/dist/render-flows/still.js +171 -0
  243. package/dist/required-chromium-options.d.ts +3 -0
  244. package/dist/required-chromium-options.js +2 -0
  245. package/package.json +6 -6
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NumberSetting = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const layout_1 = require("../layout");
7
+ const InputDragger_1 = require("../NewComposition/InputDragger");
8
+ const RemInput_1 = require("../NewComposition/RemInput");
9
+ const InfoBubble_1 = require("./InfoBubble");
10
+ const layout_2 = require("./layout");
11
+ const OptionExplainer_1 = require("./OptionExplainer");
12
+ const NumberSetting = ({ name, value, step, hint, onValueChanged, max, min, formatter }) => {
13
+ const onTextChanged = (0, react_1.useCallback)((e) => {
14
+ onValueChanged((q) => {
15
+ const newSetting = parseInt(e, 10);
16
+ if (Number.isNaN(newSetting)) {
17
+ return q;
18
+ }
19
+ return Math.min(max !== null && max !== void 0 ? max : Infinity, Math.max(newSetting, min));
20
+ });
21
+ }, [max, min, onValueChanged]);
22
+ const onValueChange = (0, react_1.useCallback)((newConcurrency) => {
23
+ onValueChanged(newConcurrency);
24
+ }, [onValueChanged]);
25
+ return ((0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_2.label, children: [name, hint ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.25 }), ' ', (0, jsx_runtime_1.jsx)(InfoBubble_1.InfoBubble, { title: "Learn more about this option", children: (0, jsx_runtime_1.jsx)(OptionExplainer_1.OptionExplainer, { option: hint }) })] })) : null] }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(RemInput_1.RightAlignInput, { children: (0, jsx_runtime_1.jsx)(InputDragger_1.InputDragger, { value: value, name: name.toLowerCase(), onTextChange: onTextChanged, onValueChange: onValueChange, step: step, placeholder: [min, max]
26
+ .map((f) => (f !== null && f !== undefined ? f : ''))
27
+ .join('-'), min: min, max: max, formatter: formatter, status: "ok" }) }) })] }));
28
+ };
29
+ exports.NumberSetting = NumberSetting;
@@ -0,0 +1,5 @@
1
+ import type { RemotionOption } from '@remotion/renderer';
2
+ import React from 'react';
3
+ export declare const OptionExplainer: React.FC<{
4
+ option: RemotionOption;
5
+ }>;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OptionExplainer = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const layout_1 = require("../layout");
6
+ const MenuDivider_1 = require("../Menu/MenuDivider");
7
+ const CliCopyButton_1 = require("./CliCopyButton");
8
+ const container = {
9
+ fontSize: 14,
10
+ paddingTop: 10,
11
+ paddingBottom: 10,
12
+ };
13
+ const padding = {
14
+ paddingLeft: 12,
15
+ paddingRight: 12,
16
+ };
17
+ const title = {
18
+ fontSize: 14,
19
+ };
20
+ const description = {
21
+ fontSize: 14,
22
+ maxWidth: 400,
23
+ };
24
+ const link = {
25
+ fontSize: 14,
26
+ maxWidth: 200,
27
+ color: '#0b84f3',
28
+ wordWrap: 'break-word',
29
+ };
30
+ const infoRow = {
31
+ ...padding,
32
+ fontSize: 14,
33
+ display: 'flex',
34
+ flexDirection: 'row',
35
+ alignItems: 'center',
36
+ };
37
+ const infoRowLabel = {
38
+ width: 150,
39
+ fontSize: 14,
40
+ color: 'white',
41
+ };
42
+ const OptionExplainer = ({ option }) => {
43
+ return ((0, jsx_runtime_1.jsxs)("div", { style: container, className: "__remotion-info-button-container", children: [(0, jsx_runtime_1.jsxs)("div", { style: padding, children: [(0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("strong", { style: title, children: option.name }) }), (0, jsx_runtime_1.jsx)("div", { style: description, children: option.description })] }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { y: 0.5, block: true }), (0, jsx_runtime_1.jsx)(MenuDivider_1.MenuDivider, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { y: 0.5, block: true }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { style: infoRow, children: [(0, jsx_runtime_1.jsx)("div", { style: infoRowLabel, children: "CLI flag:" }), (0, jsx_runtime_1.jsx)("code", { children: option.cliFlag }), (0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', justifyContent: 'flex-end', flex: 1 }, children: (0, jsx_runtime_1.jsx)(CliCopyButton_1.CliCopyButton, { valueToCopy: option.cliFlag }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: infoRow, children: [(0, jsx_runtime_1.jsx)("div", { style: infoRowLabel, children: "Node.JS option:" }), (0, jsx_runtime_1.jsx)("code", { children: option.ssrName })] }), (0, jsx_runtime_1.jsx)("div", { style: infoRow, children: (0, jsx_runtime_1.jsx)("a", { style: link, href: option.docLink, target: "_blank", children: "Docs" }) })] })] }));
44
+ };
45
+ exports.OptionExplainer = OptionExplainer;
@@ -0,0 +1,34 @@
1
+ import type { AudioCodec, Codec, OpenGlRenderer, PixelFormat, ProResProfile, StillImageFormat, VideoImageFormat } from '@remotion/renderer';
2
+ import React from 'react';
3
+ import type { RenderType } from './RenderModalAdvanced';
4
+ export declare const RenderModal: React.FC<{
5
+ compositionId: string;
6
+ initialFrame: number;
7
+ initialVideoImageFormat: VideoImageFormat;
8
+ initialStillImageFormat: StillImageFormat;
9
+ initialQuality: number;
10
+ initialScale: number;
11
+ initialVerbose: boolean;
12
+ initialOutName: string;
13
+ initialRenderType: RenderType;
14
+ initialVideoCodecForAudioTab: Codec;
15
+ initialVideoCodecForVideoTab: Codec;
16
+ initialAudioCodec: AudioCodec | null;
17
+ initialConcurrency: number;
18
+ minConcurrency: number;
19
+ maxConcurrency: number;
20
+ initialMuted: boolean;
21
+ initialEnforceAudioTrack: boolean;
22
+ initialProResProfile: ProResProfile;
23
+ initialPixelFormat: PixelFormat;
24
+ initialVideoBitrate: string | null;
25
+ initialAudioBitrate: string | null;
26
+ initialEveryNthFrame: number;
27
+ initialNumberOfGifLoops: number | null;
28
+ initialDelayRenderTimeout: number;
29
+ initialEnvVariables: Record<string, string>;
30
+ initialDisableWebSecurity: boolean;
31
+ initialGl: OpenGlRenderer | null;
32
+ initialIgnoreCertificateErrors: boolean;
33
+ initialHeadless: boolean;
34
+ }>;
@@ -0,0 +1,531 @@
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 convert_env_variables_1 = require("../../helpers/convert-env-variables");
10
+ const render_modal_sections_1 = require("../../helpers/render-modal-sections");
11
+ const audio_1 = require("../../icons/audio");
12
+ const data_1 = require("../../icons/data");
13
+ const file_1 = require("../../icons/file");
14
+ const frame_1 = require("../../icons/frame");
15
+ const gear_1 = require("../../icons/gear");
16
+ const gif_1 = require("../../icons/gif");
17
+ const modals_1 = require("../../state/modals");
18
+ const layout_1 = require("../layout");
19
+ const ModalContainer_1 = require("../ModalContainer");
20
+ const ModalHeader_1 = require("../ModalHeader");
21
+ const actions_1 = require("../RenderQueue/actions");
22
+ const SegmentedControl_1 = require("../SegmentedControl");
23
+ const SidebarContent_1 = require("../SidebarContent");
24
+ const Tabs_1 = require("../Tabs");
25
+ const CrfSetting_1 = require("./CrfSetting");
26
+ const out_name_checker_1 = require("./out-name-checker");
27
+ const RenderModalAdvanced_1 = require("./RenderModalAdvanced");
28
+ const RenderModalAudio_1 = require("./RenderModalAudio");
29
+ const RenderModalBasic_1 = require("./RenderModalBasic");
30
+ const RenderModalData_1 = require("./RenderModalData");
31
+ const RenderModalGif_1 = require("./RenderModalGif");
32
+ const RenderModalPicture_1 = require("./RenderModalPicture");
33
+ const initialState = { type: 'idle' };
34
+ const reducer = (state, action) => {
35
+ if (action.type === 'start') {
36
+ return {
37
+ type: 'load',
38
+ };
39
+ }
40
+ if (action.type === 'fail') {
41
+ return {
42
+ type: 'error',
43
+ };
44
+ }
45
+ if (action.type === 'succeed') {
46
+ return {
47
+ type: 'success',
48
+ };
49
+ }
50
+ return state;
51
+ };
52
+ const container = {
53
+ display: 'flex',
54
+ flexDirection: 'row',
55
+ alignItems: 'center',
56
+ padding: '12px 16px',
57
+ width: '100%',
58
+ borderBottom: '1px solid black',
59
+ };
60
+ const scrollPanel = {
61
+ height: 600,
62
+ overflow: 'auto',
63
+ minWidth: 650,
64
+ };
65
+ const horizontalLayout = {
66
+ display: 'flex',
67
+ flexDirection: 'row',
68
+ };
69
+ const leftSidebar = {
70
+ padding: 12,
71
+ };
72
+ const horizontalTab = {
73
+ width: 250,
74
+ display: 'flex',
75
+ flexDirection: 'row',
76
+ alignItems: 'center',
77
+ textAlign: 'left',
78
+ fontSize: 16,
79
+ fontWeight: 'bold',
80
+ paddingLeft: 15,
81
+ paddingTop: 12,
82
+ paddingBottom: 12,
83
+ };
84
+ const iconContainer = {
85
+ width: 20,
86
+ height: 20,
87
+ marginRight: 15,
88
+ display: 'inline-flex',
89
+ justifyContent: 'center',
90
+ alignItems: 'center',
91
+ };
92
+ const icon = {
93
+ color: 'currentcolor',
94
+ height: 20,
95
+ };
96
+ const buttonStyle = {
97
+ backgroundColor: 'var(--blue)',
98
+ color: 'white',
99
+ };
100
+ const flexer = {
101
+ flex: 1,
102
+ };
103
+ 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, initialEnvVariables, initialDisableWebSecurity, initialGl, initialHeadless, initialIgnoreCertificateErrors, }) => {
104
+ const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
105
+ const onQuit = (0, react_1.useCallback)(() => {
106
+ setSelectedModal(null);
107
+ }, [setSelectedModal]);
108
+ const isMounted = (0, react_1.useRef)(true);
109
+ const [state, dispatch] = (0, react_1.useReducer)(reducer, initialState);
110
+ const [unclampedFrame, setFrame] = (0, react_1.useState)(() => initialFrame);
111
+ const [stillImageFormat, setStillImageFormat] = (0, react_1.useState)(() => initialStillImageFormat);
112
+ const [videoImageFormat, setVideoImageFormat] = (0, react_1.useState)(() => initialVideoImageFormat);
113
+ const [concurrency, setConcurrency] = (0, react_1.useState)(() => initialConcurrency);
114
+ const [videoCodecForVideoTab, setVideoCodecForVideoTab] = (0, react_1.useState)(() => initialVideoCodecForVideoTab);
115
+ const [userSelectedAudioCodec, setUserSelectedAudioCodec] = (0, react_1.useState)(() => initialAudioCodec);
116
+ const [envVariables, setEnvVariables] = (0, react_1.useState)(() => (0, convert_env_variables_1.envVariablesObjectToArray)(initialEnvVariables).filter(([key]) => key !== 'NODE_ENV'));
117
+ const [videoCodecForAudioTab, setVideoCodecForAudioTab] = (0, react_1.useState)(() => initialVideoCodecForAudioTab);
118
+ const [mutedState, setMuted] = (0, react_1.useState)(() => initialMuted);
119
+ const [enforceAudioTrackState, setEnforceAudioTrackState] = (0, react_1.useState)(() => initialEnforceAudioTrack);
120
+ const [renderMode, setRenderModeState] = (0, react_1.useState)(initialRenderType);
121
+ const [quality, setQuality] = (0, react_1.useState)(() => initialQuality);
122
+ const [scale, setScale] = (0, react_1.useState)(() => initialScale);
123
+ const [verbose, setVerboseLogging] = (0, react_1.useState)(() => initialVerbose);
124
+ const [disallowParallelEncoding, setDisallowParallelEncoding] = (0, react_1.useState)(false);
125
+ const [disableWebSecurity, setDisableWebSecurity] = (0, react_1.useState)(() => initialDisableWebSecurity);
126
+ const [headless, setHeadless] = (0, react_1.useState)(() => initialHeadless);
127
+ const [ignoreCertificateErrors, setIgnoreCertificateErrors] = (0, react_1.useState)(() => initialIgnoreCertificateErrors);
128
+ const [openGlOption, setOpenGlOption] = (0, react_1.useState)(() => initialGl !== null && initialGl !== void 0 ? initialGl : 'default');
129
+ const chromiumOptions = (0, react_1.useMemo)(() => {
130
+ return {
131
+ headless,
132
+ disableWebSecurity,
133
+ ignoreCertificateErrors,
134
+ gl: openGlOption === 'default' ? null : openGlOption,
135
+ };
136
+ }, [headless, disableWebSecurity, ignoreCertificateErrors, openGlOption]);
137
+ const [outName, setOutName] = (0, react_1.useState)(() => initialOutName);
138
+ const [endFrameOrNull, setEndFrame] = (0, react_1.useState)(() => null);
139
+ const [startFrameOrNull, setStartFrame] = (0, react_1.useState)(() => null);
140
+ const [proResProfileSetting, setProResProfile] = (0, react_1.useState)(() => initialProResProfile);
141
+ const [pixelFormat, setPixelFormat] = (0, react_1.useState)(() => initialPixelFormat);
142
+ const [qualityControlType, setQualityControl] = (0, react_1.useState)(() => initialVideoBitrate === null ? 'crf' : 'bitrate');
143
+ const [shouldHaveCustomTargetAudioBitrate, setShouldHaveCustomTargetAudioBitrate,] = (0, react_1.useState)(() => initialAudioBitrate !== null);
144
+ const [customTargetAudioBitrate, setCustomTargetAudioBitrateValue] = (0, react_1.useState)(() => initialAudioBitrate !== null && initialAudioBitrate !== void 0 ? initialAudioBitrate : '320K');
145
+ const [customTargetVideoBitrate, setCustomTargetVideoBitrateValue] = (0, react_1.useState)(() => initialVideoBitrate !== null && initialVideoBitrate !== void 0 ? initialVideoBitrate : '1M');
146
+ const [limitNumberOfGifLoops, setLimitNumberOfGifLoops] = (0, react_1.useState)(() => initialNumberOfGifLoops !== null);
147
+ const [numberOfGifLoopsSetting, setNumberOfGifLoopsSetting] = (0, react_1.useState)(() => initialNumberOfGifLoops !== null && initialNumberOfGifLoops !== void 0 ? initialNumberOfGifLoops : 1);
148
+ const [delayRenderTimeout, setDelayRenderTimeout] = (0, react_1.useState)(() => initialDelayRenderTimeout);
149
+ const codec = (0, react_1.useMemo)(() => {
150
+ if (renderMode === 'audio') {
151
+ return videoCodecForAudioTab;
152
+ }
153
+ return videoCodecForVideoTab;
154
+ }, [videoCodecForAudioTab, renderMode, videoCodecForVideoTab]);
155
+ const numberOfGifLoops = (0, react_1.useMemo)(() => {
156
+ if (codec === 'gif' && limitNumberOfGifLoops) {
157
+ return numberOfGifLoopsSetting;
158
+ }
159
+ return null;
160
+ }, [codec, limitNumberOfGifLoops, numberOfGifLoopsSetting]);
161
+ const audioBitrate = (0, react_1.useMemo)(() => {
162
+ if (shouldHaveCustomTargetAudioBitrate) {
163
+ return customTargetAudioBitrate;
164
+ }
165
+ return null;
166
+ }, [customTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate]);
167
+ const videoBitrate = (0, react_1.useMemo)(() => {
168
+ if (qualityControlType === 'bitrate') {
169
+ return customTargetVideoBitrate;
170
+ }
171
+ return null;
172
+ }, [customTargetVideoBitrate, qualityControlType]);
173
+ const { crf, maxCrf, minCrf, setCrf, shouldDisplayOption: shouldDisplayCrfOption, } = (0, CrfSetting_1.useCrfState)(codec);
174
+ const dispatchIfMounted = (0, react_1.useCallback)((payload) => {
175
+ if (isMounted.current === false)
176
+ return;
177
+ dispatch(payload);
178
+ }, []);
179
+ const muted = (0, react_1.useMemo)(() => {
180
+ if (renderMode === 'video') {
181
+ return mutedState;
182
+ }
183
+ return false;
184
+ }, [mutedState, renderMode]);
185
+ const enforceAudioTrack = (0, react_1.useMemo)(() => {
186
+ if (renderMode === 'video') {
187
+ return enforceAudioTrackState;
188
+ }
189
+ return false;
190
+ }, [enforceAudioTrackState, renderMode]);
191
+ const proResProfile = (0, react_1.useMemo)(() => {
192
+ if (renderMode === 'video' && codec === 'prores') {
193
+ return proResProfileSetting;
194
+ }
195
+ return null;
196
+ }, [codec, proResProfileSetting, renderMode]);
197
+ const { compositions } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
198
+ const currentComposition = (0, react_1.useMemo)(() => {
199
+ for (const composition of compositions) {
200
+ if (composition.id === compositionId) {
201
+ return composition;
202
+ }
203
+ }
204
+ return null;
205
+ }, [compositionId, compositions]);
206
+ if (currentComposition === null) {
207
+ throw new Error('This composition does not exist');
208
+ }
209
+ const [inputProps, setInputProps] = (0, react_1.useState)(() => currentComposition.defaultProps);
210
+ const endFrame = (0, react_1.useMemo)(() => {
211
+ if (endFrameOrNull === null) {
212
+ return currentComposition.durationInFrames - 1;
213
+ }
214
+ return Math.max(0, Math.min(currentComposition.durationInFrames - 1, endFrameOrNull));
215
+ }, [currentComposition.durationInFrames, endFrameOrNull]);
216
+ const startFrame = (0, react_1.useMemo)(() => {
217
+ if (startFrameOrNull === null) {
218
+ return 0;
219
+ }
220
+ return Math.max(0, Math.min(endFrame - 1, startFrameOrNull));
221
+ }, [endFrame, startFrameOrNull]);
222
+ const frame = (0, react_1.useMemo)(() => {
223
+ const parsed = Math.floor(unclampedFrame);
224
+ return Math.max(0, Math.min(currentComposition.durationInFrames - 1, parsed));
225
+ }, [currentComposition.durationInFrames, unclampedFrame]);
226
+ const getStringBeforeSuffix = (0, react_1.useCallback)((fileName) => {
227
+ const dotPos = fileName.lastIndexOf('.');
228
+ const bitBeforeDot = fileName.substring(0, dotPos);
229
+ return bitBeforeDot;
230
+ }, []);
231
+ const deriveFinalAudioCodec = (0, react_1.useCallback)((passedVideoCodec, passedAudioCodec) => {
232
+ if (passedAudioCodec !== null &&
233
+ client_1.BrowserSafeApis.supportedAudioCodecs[passedVideoCodec].includes(passedAudioCodec)) {
234
+ return passedAudioCodec;
235
+ }
236
+ return client_1.BrowserSafeApis.defaultAudioCodecs[passedVideoCodec]
237
+ .compressed;
238
+ }, []);
239
+ const setDefaultOutName = (0, react_1.useCallback)((options) => {
240
+ if (options.type === 'still') {
241
+ setOutName((prev) => {
242
+ const newFileName = getStringBeforeSuffix(prev) + '.' + options.imageFormat;
243
+ return newFileName;
244
+ });
245
+ }
246
+ else {
247
+ setOutName((prev) => {
248
+ const codecSuffix = client_1.BrowserSafeApis.getFileExtensionFromCodec(options.codec, deriveFinalAudioCodec(options.codec, options.audioCodec));
249
+ const newFileName = getStringBeforeSuffix(prev) + '.' + codecSuffix;
250
+ return newFileName;
251
+ });
252
+ }
253
+ }, [deriveFinalAudioCodec, getStringBeforeSuffix]);
254
+ const setAudioCodec = (0, react_1.useCallback)((newAudioCodec) => {
255
+ setUserSelectedAudioCodec(newAudioCodec);
256
+ setDefaultOutName({
257
+ type: 'render',
258
+ codec: videoCodecForVideoTab,
259
+ audioCodec: newAudioCodec,
260
+ });
261
+ }, [setDefaultOutName, videoCodecForVideoTab]);
262
+ const setCodec = (0, react_1.useCallback)((newCodec) => {
263
+ if (renderMode === 'audio') {
264
+ setVideoCodecForAudioTab(newCodec);
265
+ }
266
+ else {
267
+ setVideoCodecForVideoTab(newCodec);
268
+ }
269
+ setDefaultOutName({
270
+ type: 'render',
271
+ codec: newCodec,
272
+ audioCodec: deriveFinalAudioCodec(newCodec, userSelectedAudioCodec),
273
+ });
274
+ }, [
275
+ userSelectedAudioCodec,
276
+ deriveFinalAudioCodec,
277
+ renderMode,
278
+ setDefaultOutName,
279
+ ]);
280
+ const setStillFormat = (0, react_1.useCallback)((format) => {
281
+ setStillImageFormat(format);
282
+ setDefaultOutName({ type: 'still', imageFormat: format });
283
+ }, [setDefaultOutName]);
284
+ const onClickStill = (0, react_1.useCallback)(() => {
285
+ var _a;
286
+ (_a = SidebarContent_1.leftSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectRendersPanel();
287
+ dispatchIfMounted({ type: 'start' });
288
+ (0, actions_1.addStillRenderJob)({
289
+ compositionId,
290
+ outName,
291
+ imageFormat: stillImageFormat,
292
+ quality: stillImageFormat === 'jpeg' ? quality : null,
293
+ frame,
294
+ scale,
295
+ verbose,
296
+ chromiumOptions,
297
+ delayRenderTimeout,
298
+ envVariables: (0, convert_env_variables_1.envVariablesArrayToObject)(envVariables),
299
+ inputProps,
300
+ })
301
+ .then(() => {
302
+ dispatchIfMounted({ type: 'succeed' });
303
+ setSelectedModal(null);
304
+ })
305
+ .catch(() => {
306
+ dispatchIfMounted({ type: 'fail' });
307
+ });
308
+ }, [
309
+ dispatchIfMounted,
310
+ compositionId,
311
+ outName,
312
+ stillImageFormat,
313
+ quality,
314
+ frame,
315
+ scale,
316
+ verbose,
317
+ chromiumOptions,
318
+ delayRenderTimeout,
319
+ envVariables,
320
+ inputProps,
321
+ setSelectedModal,
322
+ ]);
323
+ const [everyNthFrameSetting, setEveryNthFrameSetting] = (0, react_1.useState)(() => initialEveryNthFrame);
324
+ const everyNthFrame = (0, react_1.useMemo)(() => {
325
+ if (codec === 'gif') {
326
+ return everyNthFrameSetting;
327
+ }
328
+ return 1;
329
+ }, [codec, everyNthFrameSetting]);
330
+ const audioCodec = deriveFinalAudioCodec(codec, userSelectedAudioCodec);
331
+ const onClickVideo = (0, react_1.useCallback)(() => {
332
+ var _a;
333
+ (_a = SidebarContent_1.leftSidebarTabs.current) === null || _a === void 0 ? void 0 : _a.selectRendersPanel();
334
+ dispatchIfMounted({ type: 'start' });
335
+ (0, actions_1.addVideoRenderJob)({
336
+ compositionId,
337
+ outName,
338
+ imageFormat: videoImageFormat,
339
+ quality: stillImageFormat === 'jpeg' ? quality : null,
340
+ scale,
341
+ verbose,
342
+ codec,
343
+ concurrency,
344
+ crf: qualityControlType === 'crf' ? crf : null,
345
+ endFrame,
346
+ startFrame,
347
+ muted,
348
+ enforceAudioTrack,
349
+ proResProfile,
350
+ pixelFormat,
351
+ audioBitrate,
352
+ videoBitrate,
353
+ everyNthFrame,
354
+ numberOfGifLoops,
355
+ delayRenderTimeout,
356
+ audioCodec,
357
+ disallowParallelEncoding,
358
+ chromiumOptions,
359
+ envVariables: (0, convert_env_variables_1.envVariablesArrayToObject)(envVariables),
360
+ inputProps,
361
+ })
362
+ .then(() => {
363
+ dispatchIfMounted({ type: 'succeed' });
364
+ setSelectedModal(null);
365
+ })
366
+ .catch(() => {
367
+ dispatchIfMounted({ type: 'fail' });
368
+ });
369
+ }, [
370
+ dispatchIfMounted,
371
+ compositionId,
372
+ outName,
373
+ videoImageFormat,
374
+ stillImageFormat,
375
+ quality,
376
+ scale,
377
+ verbose,
378
+ codec,
379
+ concurrency,
380
+ qualityControlType,
381
+ crf,
382
+ endFrame,
383
+ startFrame,
384
+ muted,
385
+ enforceAudioTrack,
386
+ proResProfile,
387
+ pixelFormat,
388
+ audioBitrate,
389
+ videoBitrate,
390
+ everyNthFrame,
391
+ numberOfGifLoops,
392
+ delayRenderTimeout,
393
+ audioCodec,
394
+ disallowParallelEncoding,
395
+ chromiumOptions,
396
+ envVariables,
397
+ inputProps,
398
+ setSelectedModal,
399
+ ]);
400
+ (0, react_1.useEffect)(() => {
401
+ return () => {
402
+ isMounted.current = false;
403
+ };
404
+ }, []);
405
+ const imageFormatOptions = (0, react_1.useMemo)(() => {
406
+ if (renderMode === 'still') {
407
+ return [
408
+ {
409
+ label: 'PNG',
410
+ onClick: () => setStillFormat('png'),
411
+ key: 'png',
412
+ selected: stillImageFormat === 'png',
413
+ },
414
+ {
415
+ label: 'JPEG',
416
+ onClick: () => setStillFormat('jpeg'),
417
+ key: 'jpeg',
418
+ selected: stillImageFormat === 'jpeg',
419
+ },
420
+ {
421
+ label: 'PDF',
422
+ onClick: () => setStillFormat('pdf'),
423
+ key: 'pdf',
424
+ selected: stillImageFormat === 'pdf',
425
+ },
426
+ {
427
+ label: 'WebP',
428
+ onClick: () => setStillFormat('webp'),
429
+ key: 'webp',
430
+ selected: stillImageFormat === 'webp',
431
+ },
432
+ ];
433
+ }
434
+ return [
435
+ {
436
+ label: 'PNG',
437
+ onClick: () => setVideoImageFormat('png'),
438
+ key: 'png',
439
+ selected: videoImageFormat === 'png',
440
+ },
441
+ {
442
+ label: 'JPEG',
443
+ onClick: () => setVideoImageFormat('jpeg'),
444
+ key: 'jpeg',
445
+ selected: videoImageFormat === 'jpeg',
446
+ },
447
+ ];
448
+ }, [stillImageFormat, renderMode, setStillFormat, videoImageFormat]);
449
+ const setRenderMode = (0, react_1.useCallback)((newRenderMode) => {
450
+ setRenderModeState(newRenderMode);
451
+ if (newRenderMode === 'audio') {
452
+ setDefaultOutName({
453
+ type: 'render',
454
+ codec: videoCodecForAudioTab,
455
+ audioCodec: deriveFinalAudioCodec(videoCodecForAudioTab, userSelectedAudioCodec),
456
+ });
457
+ }
458
+ if (newRenderMode === 'video') {
459
+ setDefaultOutName({
460
+ type: 'render',
461
+ codec: videoCodecForVideoTab,
462
+ audioCodec: deriveFinalAudioCodec(videoCodecForVideoTab, userSelectedAudioCodec),
463
+ });
464
+ }
465
+ if (newRenderMode === 'still') {
466
+ setDefaultOutName({ type: 'still', imageFormat: stillImageFormat });
467
+ }
468
+ }, [
469
+ videoCodecForAudioTab,
470
+ userSelectedAudioCodec,
471
+ deriveFinalAudioCodec,
472
+ setDefaultOutName,
473
+ stillImageFormat,
474
+ videoCodecForVideoTab,
475
+ ]);
476
+ const renderTabOptions = (0, react_1.useMemo)(() => {
477
+ if ((currentComposition === null || currentComposition === void 0 ? void 0 : currentComposition.durationInFrames) < 2) {
478
+ return [
479
+ {
480
+ label: 'Still',
481
+ onClick: () => {
482
+ setRenderMode('still');
483
+ },
484
+ key: 'still',
485
+ selected: renderMode === 'still',
486
+ },
487
+ ];
488
+ }
489
+ return [
490
+ {
491
+ label: 'Still',
492
+ onClick: () => {
493
+ setRenderMode('still');
494
+ },
495
+ key: 'still',
496
+ selected: renderMode === 'still',
497
+ },
498
+ {
499
+ label: 'Video',
500
+ onClick: () => {
501
+ setRenderMode('video');
502
+ },
503
+ key: 'video',
504
+ selected: renderMode === 'video',
505
+ },
506
+ {
507
+ label: 'Audio',
508
+ onClick: () => {
509
+ setRenderMode('audio');
510
+ },
511
+ key: 'audio',
512
+ selected: renderMode === 'audio',
513
+ },
514
+ ];
515
+ }, [currentComposition === null || currentComposition === void 0 ? void 0 : currentComposition.durationInFrames, renderMode, setRenderMode]);
516
+ const outnameValidation = (0, out_name_checker_1.validateOutnameGui)({
517
+ outName,
518
+ codec,
519
+ audioCodec,
520
+ renderMode,
521
+ stillImageFormat,
522
+ });
523
+ const { tab, setTab, shownTabs } = (0, render_modal_sections_1.useRenderModalSections)(renderMode, codec);
524
+ 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' || !outnameValidation.valid, style: {
525
+ ...buttonStyle,
526
+ backgroundColor: outnameValidation.valid
527
+ ? 'var(--blue)'
528
+ : 'var(--blue-disabled)',
529
+ }, 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('data') ? ((0, jsx_runtime_1.jsxs)(Tabs_1.Tab, { style: horizontalTab, selected: tab === 'data', onClick: () => setTab('data'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(data_1.DataIcon, { style: icon }) }), "Input Props"] })) : 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, className: "__remotion-vertical-scrollbar", 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, validationMessage: outnameValidation.valid ? null : outnameValidation.error.message })) : 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 })) : tab === 'data' ? ((0, jsx_runtime_1.jsx)(RenderModalData_1.RenderModalData, { inputProps: inputProps, setInputProps: setInputProps, composition: currentComposition, compact: false, updateButton: false, showSaveButton: false })) : ((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, setDisableWebSecurity: setDisableWebSecurity, setIgnoreCertificateErrors: setIgnoreCertificateErrors, setHeadless: setHeadless, headless: headless, ignoreCertificateErrors: ignoreCertificateErrors, disableWebSecurity: disableWebSecurity, openGlOption: openGlOption, setOpenGlOption: setOpenGlOption, setEnvVariables: setEnvVariables, envVariables: envVariables })), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { block: true, y: 0.5 })] })] })] }));
530
+ };
531
+ exports.RenderModal = RenderModal;