@remotion/studio 4.0.246 → 4.0.247

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.
@@ -1,5 +1,5 @@
1
1
 
2
2
  
3
- > @remotion/studio@4.0.245 make /Users/jonathanburger/remotion/packages/studio
3
+ > @remotion/studio@4.0.246 make /Users/jonathanburger/remotion/packages/studio
4
4
  > tsc -d && bun --env-file=../.env.bundle bundle.ts
5
5
 
@@ -20,7 +20,7 @@ const Modals = ({ readOnlyStudio }) => {
20
20
  const { selectedModal: modalContextType } = (0, react_1.useContext)(modals_1.ModalsContext);
21
21
  const canRender = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).previewServerState.type ===
22
22
  'connected';
23
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'duplicate-comp' && ((0, jsx_runtime_1.jsx)(DuplicateComposition_1.DuplicateComposition, { compositionType: modalContextType.compositionType, compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-comp' && ((0, jsx_runtime_1.jsx)(DeleteComposition_1.DeleteComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'rename-comp' && ((0, jsx_runtime_1.jsx)(RenameComposition_1.RenameComposition, { compositionId: modalContextType.compositionId })), modalContextType && canRender && modalContextType.type === 'render' && ((0, jsx_runtime_1.jsx)(RenderModal_1.RenderModalWithLoader, { initialFrame: modalContextType.initialFrame, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender, defaultMetadata: modalContextType.defaulMetadata, initialHardwareAcceleration: modalContextType.initialHardwareAcceleration })), modalContextType &&
23
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'duplicate-comp' && ((0, jsx_runtime_1.jsx)(DuplicateComposition_1.DuplicateComposition, { compositionType: modalContextType.compositionType, compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'delete-comp' && ((0, jsx_runtime_1.jsx)(DeleteComposition_1.DeleteComposition, { compositionId: modalContextType.compositionId })), modalContextType && modalContextType.type === 'rename-comp' && ((0, jsx_runtime_1.jsx)(RenameComposition_1.RenameComposition, { compositionId: modalContextType.compositionId })), modalContextType && canRender && modalContextType.type === 'render' && ((0, jsx_runtime_1.jsx)(RenderModal_1.RenderModalWithLoader, { initialFrame: modalContextType.initialFrame, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialScale: modalContextType.initialScale, initialLogLevel: modalContextType.initialLogLevel, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, initialEncodingBufferSize: modalContextType.initialEncodingBufferSize, initialEncodingMaxRate: modalContextType.initialEncodingMaxRate, initialUserAgent: modalContextType.initialUserAgent, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux, initialRepro: modalContextType.initialRepro, initialBeep: modalContextType.initialBeep, initialForSeamlessAacConcatenation: modalContextType.initialForSeamlessAacConcatenation, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, defaultConfigurationAudioCodec: modalContextType.defaultConfigurationAudioCodec, defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec, renderTypeOfLastRender: modalContextType.renderTypeOfLastRender, defaultMetadata: modalContextType.defaulMetadata, initialHardwareAcceleration: modalContextType.initialHardwareAcceleration, initialChromeMode: modalContextType.initialChromeMode })), modalContextType &&
24
24
  canRender &&
25
25
  modalContextType.type === 'render-progress' && ((0, jsx_runtime_1.jsx)(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'update' && ((0, jsx_runtime_1.jsx)(UpdateModal_1.UpdateModal, { info: modalContextType.info, knownBugs: modalContextType.knownBugs })), modalContextType && modalContextType.type === 'install-packages' && ((0, jsx_runtime_1.jsx)(InstallPackage_1.InstallPackageModal, { packageManager: modalContextType.packageManager })), modalContextType && modalContextType.type === 'quick-switcher' && ((0, jsx_runtime_1.jsx)(QuickSwitcher_1.default, { readOnlyStudio: readOnlyStudio, invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode }))] }));
26
26
  };
@@ -94,6 +94,7 @@ const RenderButton = () => {
94
94
  renderTypeOfLastRender: null,
95
95
  defaulMetadata: defaults.metadata,
96
96
  initialHardwareAcceleration: defaults.hardwareAcceleration,
97
+ initialChromeMode: defaults.chromeMode,
97
98
  });
98
99
  }, [video, setSelectedModal, getCurrentFrame, props, inFrame, outFrame]);
99
100
  if (!video) {
@@ -1,4 +1,4 @@
1
- import type { AudioCodec, Codec, ColorSpace, LogLevel, OpenGlRenderer, PixelFormat, ProResProfile, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
1
+ import type { AudioCodec, ChromeMode, Codec, ColorSpace, LogLevel, OpenGlRenderer, PixelFormat, ProResProfile, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
2
2
  import type { HardwareAccelerationOption } from '@remotion/renderer/client';
3
3
  import React from 'react';
4
4
  import type { RenderType } from './RenderModalAdvanced';
@@ -44,6 +44,7 @@ type RenderModalProps = {
44
44
  readonly initialForSeamlessAacConcatenation: boolean;
45
45
  readonly initialHardwareAcceleration: HardwareAccelerationOption;
46
46
  readonly renderTypeOfLastRender: RenderType | null;
47
+ readonly initialChromeMode: ChromeMode;
47
48
  readonly defaultMetadata: Record<string, string> | null;
48
49
  };
49
50
  export declare const RenderModalWithLoader: React.FC<RenderModalProps>;
@@ -116,7 +116,7 @@ const outer = {
116
116
  display: 'flex',
117
117
  flexDirection: 'column',
118
118
  };
119
- const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageFormat, initialJpegQuality, initialScale, initialLogLevel, initialConcurrency, maxConcurrency, minConcurrency, initialMuted, initialEnforceAudioTrack, initialProResProfile, initialx264Preset, initialPixelFormat, initialVideoBitrate, initialAudioBitrate, initialEveryNthFrame, initialNumberOfGifLoops, initialDelayRenderTimeout, initialOffthreadVideoCacheSizeInBytes, initialEnvVariables, initialDisableWebSecurity, initialGl, initialHeadless, initialIgnoreCertificateErrors, initialEncodingBufferSize, initialEncodingMaxRate, initialUserAgent, defaultProps, inFrameMark, outFrameMark, initialColorSpace, initialMultiProcessOnLinux, defaultConfigurationAudioCodec, defaultConfigurationVideoCodec, initialBeep, initialRepro, initialForSeamlessAacConcatenation, renderTypeOfLastRender, initialHardwareAcceleration, defaultMetadata, }) => {
119
+ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageFormat, initialJpegQuality, initialScale, initialLogLevel, initialConcurrency, maxConcurrency, minConcurrency, initialMuted, initialEnforceAudioTrack, initialProResProfile, initialx264Preset, initialPixelFormat, initialVideoBitrate, initialAudioBitrate, initialEveryNthFrame, initialNumberOfGifLoops, initialDelayRenderTimeout, initialOffthreadVideoCacheSizeInBytes, initialEnvVariables, initialDisableWebSecurity, initialGl, initialHeadless, initialIgnoreCertificateErrors, initialEncodingBufferSize, initialEncodingMaxRate, initialUserAgent, defaultProps, inFrameMark, outFrameMark, initialColorSpace, initialMultiProcessOnLinux, defaultConfigurationAudioCodec, defaultConfigurationVideoCodec, initialBeep, initialRepro, initialForSeamlessAacConcatenation, renderTypeOfLastRender, initialHardwareAcceleration, defaultMetadata, initialChromeMode, }) => {
120
120
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
121
121
  const context = (0, react_1.useContext)(ResolveCompositionBeforeModal_1.ResolvedCompositionContext);
122
122
  if (!context) {
@@ -214,6 +214,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
214
214
  const [limitNumberOfGifLoops, setLimitNumberOfGifLoops] = (0, react_1.useState)(() => initialNumberOfGifLoops !== null);
215
215
  const [numberOfGifLoopsSetting, setNumberOfGifLoopsSetting] = (0, react_1.useState)(() => initialNumberOfGifLoops !== null && initialNumberOfGifLoops !== void 0 ? initialNumberOfGifLoops : 0);
216
216
  const [delayRenderTimeout, setDelayRenderTimeout] = (0, react_1.useState)(() => initialDelayRenderTimeout);
217
+ const [chromeMode, setChromeMode] = (0, react_1.useState)(() => initialChromeMode);
217
218
  const [offthreadVideoCacheSizeInBytes, setOffthreadVideoCacheSizeInBytes] = (0, react_1.useState)(initialOffthreadVideoCacheSizeInBytes);
218
219
  const codec = (0, react_1.useMemo)(() => {
219
220
  if (renderMode === 'audio') {
@@ -402,6 +403,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
402
403
  multiProcessOnLinux,
403
404
  beepOnFinish,
404
405
  metadata,
406
+ chromeMode,
405
407
  })
406
408
  .then(() => {
407
409
  dispatchIfMounted({ type: 'succeed' });
@@ -429,6 +431,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
429
431
  beepOnFinish,
430
432
  setSelectedModal,
431
433
  metadata,
434
+ chromeMode,
432
435
  ]);
433
436
  const [everyNthFrameSetting, setEveryNthFrameSetting] = (0, react_1.useState)(() => initialEveryNthFrame);
434
437
  const everyNthFrame = (0, react_1.useMemo)(() => {
@@ -491,6 +494,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
491
494
  separateAudioTo,
492
495
  metadata,
493
496
  hardwareAcceleration,
497
+ chromeMode,
494
498
  })
495
499
  .then(() => {
496
500
  dispatchIfMounted({ type: 'succeed' });
@@ -542,6 +546,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
542
546
  setSelectedModal,
543
547
  metadata,
544
548
  hardwareAcceleration,
549
+ chromeMode,
545
550
  ]);
546
551
  const onClickSequence = (0, react_1.useCallback)(() => {
547
552
  var _a;
@@ -569,6 +574,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
569
574
  beepOnFinish,
570
575
  repro,
571
576
  metadata,
577
+ chromeMode,
572
578
  })
573
579
  .then(() => {
574
580
  dispatchIfMounted({ type: 'succeed' });
@@ -600,6 +606,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
600
606
  repro,
601
607
  setSelectedModal,
602
608
  metadata,
609
+ chromeMode,
603
610
  ]);
604
611
  (0, react_1.useEffect)(() => {
605
612
  return () => {
@@ -810,7 +817,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
810
817
  return ((0, jsx_runtime_1.jsxs)("div", { style: outer, children: [(0, jsx_runtime_1.jsx)(ModalHeader_1.ModalHeader, { title: `Render ${resolvedComposition.id}` }), (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.jsxs)(Button_1.Button, { autoFocus: true, onClick: trigger, disabled: renderDisabled, style: {
811
818
  ...buttonStyle,
812
819
  backgroundColor: outnameValidation.valid ? colors_1.BLUE : colors_1.BLUE_DISABLED,
813
- }, children: [state.type === 'idle' ? `Render ${renderMode}` : 'Rendering...', (0, jsx_runtime_1.jsx)(ShortcutHint_1.ShortcutHint, { keyToPress: "\u21B5", cmdOrCtrl: true })] })] }), (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)(vertical_1.VerticalTab, { 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)(vertical_1.VerticalTab, { 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)(vertical_1.VerticalTab, { 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)(vertical_1.VerticalTab, { 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)(vertical_1.VerticalTab, { 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)(vertical_1.VerticalTab, { 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.jsx)("div", { style: optionsPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: tab === 'general' ? ((0, jsx_runtime_1.jsx)(RenderModalBasic_1.RenderModalBasic, { codec: codec, resolvedComposition: resolvedComposition, frame: frame, imageFormatOptions: imageFormatOptions, outName: outName, proResProfile: proResProfile, renderMode: renderMode, setVideoCodec: setCodec, setFrame: setFrame, setOutName: setOutName, setProResProfile: setProResProfile, endFrame: endFrame, setEndFrame: setEndFrame, setStartFrame: setStartFrame, setVerboseLogging: setLogLevel, logLevel: logLevel, 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, pixelFormatOptions: pixelFormatOptions, imageFormatOptions: imageFormatOptions, crf: crf, setCrf: setCrf, customTargetVideoBitrate: customTargetVideoBitrate, maxCrf: maxCrf, minCrf: minCrf, jpegQuality: jpegQuality, qualityControlType: qualityControlType, setJpegQuality: setJpegQuality, setColorSpace: setColorSpace, colorSpace: colorSpace, setCustomTargetVideoBitrateValue: setCustomTargetVideoBitrateValue, setQualityControl: setQualityControl, videoImageFormat: videoImageFormat, stillImageFormat: stillImageFormat, shouldDisplayQualityControlPicker: supportsBothQualityControls, encodingBufferSize: encodingBufferSize, setEncodingBufferSize: setEncodingBufferSize, encodingMaxRate: encodingMaxRate, setEncodingMaxRate: setEncodingMaxRate })) : 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, forSeamlessAacConcatenation: forSeamlessAacConcatenation, setForSeamlessAacConcatenation: setForSeamlessAacConcatenation, separateAudioTo: separateAudioTo, setSeparateAudioTo: setSeparateAudioTo, outName: outName })) : 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)(DataEditor_1.DataEditor, { defaultProps: inputProps, setDefaultProps: setInputProps, unresolvedComposition: unresolvedComposition, mayShowSaveButton: false, propsEditType: "input-props", saving: saving, setSaving: setSaving, readOnlyStudio: false })) : ((0, jsx_runtime_1.jsx)(RenderModalAdvanced_1.RenderModalAdvanced, { x264Preset: x264Preset, setx264Preset: setx264Preset, concurrency: concurrency, maxConcurrency: maxConcurrency, minConcurrency: minConcurrency, renderMode: renderMode, setConcurrency: setConcurrency, 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, offthreadVideoCacheSizeInBytes: offthreadVideoCacheSizeInBytes, setOffthreadVideoCacheSizeInBytes: setOffthreadVideoCacheSizeInBytes, enableMultiProcessOnLinux: multiProcessOnLinux, setChromiumMultiProcessOnLinux: setChromiumMultiProcessOnLinux, codec: codec, userAgent: userAgent, setUserAgent: setUserAgent, setBeep: setBeepOnFinish, beep: beepOnFinish, repro: repro, setRepro: setRepro, hardwareAcceleration: hardwareAcceleration, setHardwareAcceleration: setHardwareAcceleration })) })] })] }));
820
+ }, children: [state.type === 'idle' ? `Render ${renderMode}` : 'Rendering...', (0, jsx_runtime_1.jsx)(ShortcutHint_1.ShortcutHint, { keyToPress: "\u21B5", cmdOrCtrl: true })] })] }), (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)(vertical_1.VerticalTab, { 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)(vertical_1.VerticalTab, { 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)(vertical_1.VerticalTab, { 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)(vertical_1.VerticalTab, { 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)(vertical_1.VerticalTab, { 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)(vertical_1.VerticalTab, { 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.jsx)("div", { style: optionsPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: tab === 'general' ? ((0, jsx_runtime_1.jsx)(RenderModalBasic_1.RenderModalBasic, { codec: codec, resolvedComposition: resolvedComposition, frame: frame, imageFormatOptions: imageFormatOptions, outName: outName, proResProfile: proResProfile, renderMode: renderMode, setVideoCodec: setCodec, setFrame: setFrame, setOutName: setOutName, setProResProfile: setProResProfile, endFrame: endFrame, setEndFrame: setEndFrame, setStartFrame: setStartFrame, setVerboseLogging: setLogLevel, logLevel: logLevel, 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, pixelFormatOptions: pixelFormatOptions, imageFormatOptions: imageFormatOptions, crf: crf, setCrf: setCrf, customTargetVideoBitrate: customTargetVideoBitrate, maxCrf: maxCrf, minCrf: minCrf, jpegQuality: jpegQuality, qualityControlType: qualityControlType, setJpegQuality: setJpegQuality, setColorSpace: setColorSpace, colorSpace: colorSpace, setCustomTargetVideoBitrateValue: setCustomTargetVideoBitrateValue, setQualityControl: setQualityControl, videoImageFormat: videoImageFormat, stillImageFormat: stillImageFormat, shouldDisplayQualityControlPicker: supportsBothQualityControls, encodingBufferSize: encodingBufferSize, setEncodingBufferSize: setEncodingBufferSize, encodingMaxRate: encodingMaxRate, setEncodingMaxRate: setEncodingMaxRate })) : 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, forSeamlessAacConcatenation: forSeamlessAacConcatenation, setForSeamlessAacConcatenation: setForSeamlessAacConcatenation, separateAudioTo: separateAudioTo, setSeparateAudioTo: setSeparateAudioTo, outName: outName })) : 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)(DataEditor_1.DataEditor, { defaultProps: inputProps, setDefaultProps: setInputProps, unresolvedComposition: unresolvedComposition, mayShowSaveButton: false, propsEditType: "input-props", saving: saving, setSaving: setSaving, readOnlyStudio: false })) : ((0, jsx_runtime_1.jsx)(RenderModalAdvanced_1.RenderModalAdvanced, { x264Preset: x264Preset, setx264Preset: setx264Preset, concurrency: concurrency, maxConcurrency: maxConcurrency, minConcurrency: minConcurrency, renderMode: renderMode, setConcurrency: setConcurrency, 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, offthreadVideoCacheSizeInBytes: offthreadVideoCacheSizeInBytes, setOffthreadVideoCacheSizeInBytes: setOffthreadVideoCacheSizeInBytes, enableMultiProcessOnLinux: multiProcessOnLinux, setChromiumMultiProcessOnLinux: setChromiumMultiProcessOnLinux, codec: codec, userAgent: userAgent, setUserAgent: setUserAgent, setBeep: setBeepOnFinish, beep: beepOnFinish, repro: repro, setRepro: setRepro, hardwareAcceleration: hardwareAcceleration, setHardwareAcceleration: setHardwareAcceleration, chromeModeOption: chromeMode, setChromeModeOption: setChromeMode })) })] })] }));
814
821
  };
815
822
  const RenderModalWithLoader = (props) => {
816
823
  return ((0, jsx_runtime_1.jsx)(DismissableModal_1.DismissableModal, { children: (0, jsx_runtime_1.jsx)(ResolveCompositionBeforeModal_1.ResolveCompositionBeforeModal, { compositionId: props.compositionId, children: (0, jsx_runtime_1.jsx)(RenderModal, { ...props }) }) }));
@@ -1,4 +1,4 @@
1
- import type { Codec, X264Preset } from '@remotion/renderer';
1
+ import type { ChromeMode, Codec, X264Preset } from '@remotion/renderer';
2
2
  import type { HardwareAccelerationOption } from '@remotion/renderer/client';
3
3
  import type { UiOpenGlOptions } from '@remotion/studio-shared';
4
4
  import React from 'react';
@@ -21,6 +21,8 @@ export declare const RenderModalAdvanced: React.FC<{
21
21
  readonly disableWebSecurity: boolean;
22
22
  readonly openGlOption: UiOpenGlOptions;
23
23
  readonly setOpenGlOption: React.Dispatch<React.SetStateAction<UiOpenGlOptions>>;
24
+ readonly chromeModeOption: ChromeMode;
25
+ readonly setChromeModeOption: React.Dispatch<React.SetStateAction<ChromeMode>>;
24
26
  readonly envVariables: [string, string][];
25
27
  readonly setEnvVariables: React.Dispatch<React.SetStateAction<[string, string][]>>;
26
28
  readonly x264Preset: X264Preset | null;
@@ -20,7 +20,7 @@ const container = {
20
20
  flex: 1,
21
21
  overflowY: 'auto',
22
22
  };
23
- const RenderModalAdvanced = ({ renderMode, maxConcurrency, minConcurrency, setConcurrency, concurrency, delayRenderTimeout, setDelayRenderTimeout, disallowParallelEncoding, setDisallowParallelEncoding, setDisableWebSecurity, setIgnoreCertificateErrors, setHeadless, headless, ignoreCertificateErrors, disableWebSecurity, openGlOption, setOpenGlOption, setEnvVariables, envVariables, setx264Preset, x264Preset, codec, offthreadVideoCacheSizeInBytes, setOffthreadVideoCacheSizeInBytes, enableMultiProcessOnLinux, setChromiumMultiProcessOnLinux, setUserAgent, userAgent, beep, setBeep, repro, setRepro, hardwareAcceleration, setHardwareAcceleration, }) => {
23
+ const RenderModalAdvanced = ({ renderMode, maxConcurrency, minConcurrency, setConcurrency, concurrency, delayRenderTimeout, setDelayRenderTimeout, disallowParallelEncoding, setDisallowParallelEncoding, setDisableWebSecurity, setIgnoreCertificateErrors, setHeadless, headless, ignoreCertificateErrors, disableWebSecurity, openGlOption, setOpenGlOption, setEnvVariables, envVariables, setx264Preset, x264Preset, codec, offthreadVideoCacheSizeInBytes, setOffthreadVideoCacheSizeInBytes, enableMultiProcessOnLinux, setChromiumMultiProcessOnLinux, setUserAgent, userAgent, beep, setBeep, repro, setRepro, hardwareAcceleration, chromeModeOption, setChromeModeOption, setHardwareAcceleration, }) => {
24
24
  const extendedOpenGlOptions = (0, react_1.useMemo)(() => {
25
25
  return [
26
26
  'angle',
@@ -88,6 +88,22 @@ const RenderModalAdvanced = ({ renderMode, maxConcurrency, minConcurrency, setCo
88
88
  };
89
89
  });
90
90
  }, [extendedOpenGlOptions, openGlOption, setOpenGlOption]);
91
+ const chromeModeOptions = (0, react_1.useMemo)(() => {
92
+ return client_1.BrowserSafeApis.validChromeModeOptions.map((option) => {
93
+ return {
94
+ label: option,
95
+ onClick: () => setChromeModeOption(option),
96
+ key: option,
97
+ leftItem: chromeModeOption === option ? (0, jsx_runtime_1.jsx)(Checkmark_1.Checkmark, {}) : null,
98
+ id: option,
99
+ keyHint: null,
100
+ quickSwitcherLabel: null,
101
+ subMenu: null,
102
+ type: 'item',
103
+ value: option,
104
+ };
105
+ });
106
+ }, [chromeModeOption, setChromeModeOption]);
91
107
  const x264PresetOptions = (0, react_1.useMemo)(() => {
92
108
  return client_1.BrowserSafeApis.x264PresetOptions.map((option) => {
93
109
  return {
@@ -135,6 +151,6 @@ const RenderModalAdvanced = ({ renderMode, maxConcurrency, minConcurrency, setCo
135
151
  , {
136
152
  // Also appears in packages/renderer/src/validate-puppeteer-timeout.ts
137
153
  min: 7000, max: 900000, name: "delayRender() timeout", onValueChanged: setDelayRenderTimeout, formatter: (w) => `${w}ms`, step: 1000, hint: "delayRenderTimeoutInMillisecondsOption", value: delayRenderTimeout }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_2.label, children: "No parallel encoding" }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: disallowParallelEncoding, onChange: onDisallowParallelEncodingChanged, name: "disallow-parallel-encoding" }) })] }), renderMode === 'audio' ? null : ((0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_2.label, children: "Custom OffthreadVideo cache" }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)(OptionExplainerBubble_1.OptionExplainerBubble, { id: "offthreadVideoCacheSizeInBytesOption" }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: offthreadVideoCacheSizeInBytes !== null, onChange: toggleCustomOffthreadVideoCacheSizeInBytes, name: "custom-audio-bitrate" }) })] })), renderMode === 'audio' ||
138
- offthreadVideoCacheSizeInBytes === null ? null : ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: minConcurrency, max: 2000 * 1024 * 1024, step: 1024, name: "OffthreadVideo cache size", formatter: (w) => `${w} bytes`, onValueChanged: changeOffthreadVideoCacheSizeInBytes, value: offthreadVideoCacheSizeInBytes })), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_2.label, children: "Disable web security" }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: disableWebSecurity, onChange: onDisableWebSecurityChanged, name: "disable-web-security" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_2.label, children: "Ignore certificate errors" }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: ignoreCertificateErrors, onChange: onIgnoreCertificatErrors, name: "ignore-certificate-errors" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_2.label, children: ["Headless mode", (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)(OptionExplainerBubble_1.OptionExplainerBubble, { id: "headlessOption" })] }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: headless, onChange: onHeadless, name: "headless" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_2.label, children: ["OpenGL render backend ", (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)(OptionExplainerBubble_1.OptionExplainerBubble, { id: "glOption" })] }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: openGlOptions, selectedId: openGlOption, title: "OpenGl option" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_2.label, children: "Multi-process Chrome on Linux" }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)(OptionExplainerBubble_1.OptionExplainerBubble, { id: "enableMultiprocessOnLinuxOption" }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: enableMultiProcessOnLinux, onChange: onEnableMultiProcessOnLinux, name: "enable-multi-process-on-linux" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_2.label, children: "Custom User Agent" }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: userAgent !== null, onChange: toggleCustomUserAgent, name: "custom-user-agent" }) })] }), userAgent === null ? null : ((0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_2.label, children: "User Agent" }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { style: layout_2.input, value: userAgent, onChange: onUserAgentChanged, status: "ok", rightAlign: true }) }) })] })), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_2.label, children: ["Create a reproduction ", (0, jsx_runtime_1.jsx)(OptionExplainerBubble_1.OptionExplainerBubble, { id: "reproOption" })] }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: repro, onChange: onReproToggle, name: "repro" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_2.label, children: ["Beep when finished ", (0, jsx_runtime_1.jsx)(OptionExplainerBubble_1.OptionExplainerBubble, { id: "beepOnFinishOption" })] }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: beep, onChange: onPlayBeepSound, name: "beep-when-finished" }) })] }), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), (0, jsx_runtime_1.jsx)(RenderModalEnvironmentVariables_1.RenderModalEnvironmentVariables, { envVariables: envVariables, setEnvVariables: setEnvVariables })] }));
154
+ offthreadVideoCacheSizeInBytes === null ? null : ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: minConcurrency, max: 2000 * 1024 * 1024, step: 1024, name: "OffthreadVideo cache size", formatter: (w) => `${w} bytes`, onValueChanged: changeOffthreadVideoCacheSizeInBytes, value: offthreadVideoCacheSizeInBytes })), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_2.label, children: "Disable web security" }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: disableWebSecurity, onChange: onDisableWebSecurityChanged, name: "disable-web-security" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_2.label, children: "Ignore certificate errors" }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: ignoreCertificateErrors, onChange: onIgnoreCertificatErrors, name: "ignore-certificate-errors" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_2.label, children: ["Headless mode", (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)(OptionExplainerBubble_1.OptionExplainerBubble, { id: "headlessOption" })] }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: headless, onChange: onHeadless, name: "headless" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_2.label, children: ["Chrome Mode ", (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)(OptionExplainerBubble_1.OptionExplainerBubble, { id: "chromeModeOption" })] }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: chromeModeOptions, selectedId: chromeModeOption, title: "Chrome mode" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_2.label, children: ["OpenGL render backend ", (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)(OptionExplainerBubble_1.OptionExplainerBubble, { id: "glOption" })] }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: openGlOptions, selectedId: openGlOption, title: "OpenGl option" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_2.label, children: "Multi-process Chrome on Linux" }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)(OptionExplainerBubble_1.OptionExplainerBubble, { id: "enableMultiprocessOnLinuxOption" }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: enableMultiProcessOnLinux, onChange: onEnableMultiProcessOnLinux, name: "enable-multi-process-on-linux" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_2.label, children: "Custom User Agent" }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: userAgent !== null, onChange: toggleCustomUserAgent, name: "custom-user-agent" }) })] }), userAgent === null ? null : ((0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_2.label, children: "User Agent" }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { style: layout_2.input, value: userAgent, onChange: onUserAgentChanged, status: "ok", rightAlign: true }) }) })] })), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_2.label, children: ["Create a reproduction ", (0, jsx_runtime_1.jsx)(OptionExplainerBubble_1.OptionExplainerBubble, { id: "reproOption" })] }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: repro, onChange: onReproToggle, name: "repro" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_2.optionRow, children: [(0, jsx_runtime_1.jsxs)("div", { style: layout_2.label, children: ["Beep when finished ", (0, jsx_runtime_1.jsx)(OptionExplainerBubble_1.OptionExplainerBubble, { id: "beepOnFinishOption" })] }), (0, jsx_runtime_1.jsx)("div", { style: layout_2.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: beep, onChange: onPlayBeepSound, name: "beep-when-finished" }) })] }), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), (0, jsx_runtime_1.jsx)(RenderModalEnvironmentVariables_1.RenderModalEnvironmentVariables, { envVariables: envVariables, setEnvVariables: setEnvVariables })] }));
139
155
  };
140
156
  exports.RenderModalAdvanced = RenderModalAdvanced;
@@ -1,7 +1,7 @@
1
- import type { AudioCodec, Codec, ColorSpace, LogLevel, PixelFormat, ProResProfile, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
1
+ import type { AudioCodec, ChromeMode, Codec, ColorSpace, LogLevel, PixelFormat, ProResProfile, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
2
2
  import type { HardwareAccelerationOption } from '@remotion/renderer/client';
3
3
  import type { CanUpdateDefaultPropsResponse, EnumPath, RecastCodemod, RenderJob, RequiredChromiumOptions } from '@remotion/studio-shared';
4
- export declare const addStillRenderJob: ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, multiProcessOnLinux, beepOnFinish, metadata, }: {
4
+ export declare const addStillRenderJob: ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, multiProcessOnLinux, beepOnFinish, metadata, chromeMode, }: {
5
5
  compositionId: string;
6
6
  outName: string;
7
7
  imageFormat: StillImageFormat;
@@ -17,8 +17,9 @@ export declare const addStillRenderJob: ({ compositionId, outName, imageFormat,
17
17
  multiProcessOnLinux: boolean;
18
18
  beepOnFinish: boolean;
19
19
  metadata: Record<string, string> | null;
20
+ chromeMode: ChromeMode;
20
21
  }) => Promise<undefined>;
21
- export declare const addSequenceRenderJob: ({ compositionId, outName, imageFormat, startFrame, endFrame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, concurrency, offthreadVideoCacheSizeInBytes, jpegQuality, disallowParallelEncoding, multiProcessOnLinux, beepOnFinish, repro, metadata, }: {
22
+ export declare const addSequenceRenderJob: ({ compositionId, outName, imageFormat, startFrame, endFrame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, concurrency, offthreadVideoCacheSizeInBytes, jpegQuality, disallowParallelEncoding, multiProcessOnLinux, beepOnFinish, repro, metadata, chromeMode, }: {
22
23
  compositionId: string;
23
24
  outName: string;
24
25
  imageFormat: VideoImageFormat;
@@ -38,8 +39,9 @@ export declare const addSequenceRenderJob: ({ compositionId, outName, imageForma
38
39
  beepOnFinish: boolean;
39
40
  repro: boolean;
40
41
  metadata: Record<string, string> | null;
42
+ chromeMode: ChromeMode;
41
43
  }) => Promise<undefined>;
42
- export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat, jpegQuality, scale, logLevel, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, colorSpace, multiProcessOnLinux, encodingMaxRate, encodingBufferSize, beepOnFinish, repro, forSeamlessAacConcatenation, separateAudioTo, metadata, hardwareAcceleration, }: {
44
+ export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat, jpegQuality, scale, logLevel, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, colorSpace, multiProcessOnLinux, encodingMaxRate, encodingBufferSize, beepOnFinish, repro, forSeamlessAacConcatenation, separateAudioTo, metadata, hardwareAcceleration, chromeMode, }: {
43
45
  compositionId: string;
44
46
  outName: string;
45
47
  imageFormat: VideoImageFormat;
@@ -77,6 +79,7 @@ export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat,
77
79
  separateAudioTo: string | null;
78
80
  metadata: Record<string, string> | null;
79
81
  hardwareAcceleration: HardwareAccelerationOption;
82
+ chromeMode: ChromeMode;
80
83
  }) => Promise<undefined>;
81
84
  export declare const unsubscribeFromFileExistenceWatcher: ({ file, clientId, }: {
82
85
  file: string;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.canUpdateDefaultProps = exports.callUpdateDefaultPropsApi = exports.getProjectInfo = exports.updateAvailable = exports.cancelRenderJob = exports.removeRenderJob = exports.applyCodemod = exports.openInFileExplorer = exports.subscribeToFileExistenceWatcher = exports.unsubscribeFromFileExistenceWatcher = exports.addVideoRenderJob = exports.addSequenceRenderJob = exports.addStillRenderJob = void 0;
4
4
  const no_react_1 = require("remotion/no-react");
5
5
  const call_api_1 = require("../call-api");
6
- const addStillRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, multiProcessOnLinux, beepOnFinish, metadata, }) => {
6
+ const addStillRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, multiProcessOnLinux, beepOnFinish, metadata, chromeMode, }) => {
7
7
  return (0, call_api_1.callApi)('/api/render', {
8
8
  compositionId,
9
9
  type: 'still',
@@ -25,10 +25,11 @@ const addStillRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, f
25
25
  multiProcessOnLinux,
26
26
  beepOnFinish,
27
27
  metadata,
28
+ chromeMode,
28
29
  });
29
30
  };
30
31
  exports.addStillRenderJob = addStillRenderJob;
31
- const addSequenceRenderJob = ({ compositionId, outName, imageFormat, startFrame, endFrame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, concurrency, offthreadVideoCacheSizeInBytes, jpegQuality, disallowParallelEncoding, multiProcessOnLinux, beepOnFinish, repro, metadata, }) => {
32
+ const addSequenceRenderJob = ({ compositionId, outName, imageFormat, startFrame, endFrame, scale, logLevel, chromiumOptions, delayRenderTimeout, envVariables, inputProps, concurrency, offthreadVideoCacheSizeInBytes, jpegQuality, disallowParallelEncoding, multiProcessOnLinux, beepOnFinish, repro, metadata, chromeMode, }) => {
32
33
  return (0, call_api_1.callApi)('/api/render', {
33
34
  compositionId,
34
35
  type: 'sequence',
@@ -54,10 +55,11 @@ const addSequenceRenderJob = ({ compositionId, outName, imageFormat, startFrame,
54
55
  beepOnFinish,
55
56
  repro,
56
57
  metadata,
58
+ chromeMode,
57
59
  });
58
60
  };
59
61
  exports.addSequenceRenderJob = addSequenceRenderJob;
60
- const addVideoRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, scale, logLevel, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, colorSpace, multiProcessOnLinux, encodingMaxRate, encodingBufferSize, beepOnFinish, repro, forSeamlessAacConcatenation, separateAudioTo, metadata, hardwareAcceleration, }) => {
62
+ const addVideoRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, scale, logLevel, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, colorSpace, multiProcessOnLinux, encodingMaxRate, encodingBufferSize, beepOnFinish, repro, forSeamlessAacConcatenation, separateAudioTo, metadata, hardwareAcceleration, chromeMode, }) => {
61
63
  return (0, call_api_1.callApi)('/api/render', {
62
64
  compositionId,
63
65
  type: 'video',
@@ -101,6 +103,7 @@ const addVideoRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, s
101
103
  separateAudioTo,
102
104
  metadata,
103
105
  hardwareAcceleration,
106
+ chromeMode,
104
107
  });
105
108
  };
106
109
  exports.addVideoRenderJob = addVideoRenderJob;
@@ -75,6 +75,7 @@ const SidebarRenderButton = ({ composition, visible }) => {
75
75
  renderTypeOfLastRender: null,
76
76
  defaulMetadata: defaults.metadata,
77
77
  initialHardwareAcceleration: defaults.hardwareAcceleration,
78
+ initialChromeMode: defaults.chromeMode,
78
79
  });
79
80
  if (isMobileLayout) {
80
81
  setSidebarCollapsedState({ left: 'collapsed', right: 'collapsed' });
@@ -2585,7 +2585,8 @@ var SidebarRenderButton = ({ composition, visible }) => {
2585
2585
  initialForSeamlessAacConcatenation: defaults.forSeamlessAacConcatenation,
2586
2586
  renderTypeOfLastRender: null,
2587
2587
  defaulMetadata: defaults.metadata,
2588
- initialHardwareAcceleration: defaults.hardwareAcceleration
2588
+ initialHardwareAcceleration: defaults.hardwareAcceleration,
2589
+ initialChromeMode: defaults.chromeMode
2589
2590
  });
2590
2591
  if (isMobileLayout) {
2591
2592
  setSidebarCollapsedState({ left: "collapsed", right: "collapsed" });
@@ -3226,7 +3227,8 @@ var addStillRenderJob = ({
3226
3227
  offthreadVideoCacheSizeInBytes,
3227
3228
  multiProcessOnLinux,
3228
3229
  beepOnFinish,
3229
- metadata
3230
+ metadata,
3231
+ chromeMode
3230
3232
  }) => {
3231
3233
  return callApi("/api/render", {
3232
3234
  compositionId,
@@ -3248,7 +3250,8 @@ var addStillRenderJob = ({
3248
3250
  offthreadVideoCacheSizeInBytes,
3249
3251
  multiProcessOnLinux,
3250
3252
  beepOnFinish,
3251
- metadata
3253
+ metadata,
3254
+ chromeMode
3252
3255
  });
3253
3256
  };
3254
3257
  var addSequenceRenderJob = ({
@@ -3270,7 +3273,8 @@ var addSequenceRenderJob = ({
3270
3273
  multiProcessOnLinux,
3271
3274
  beepOnFinish,
3272
3275
  repro,
3273
- metadata
3276
+ metadata,
3277
+ chromeMode
3274
3278
  }) => {
3275
3279
  return callApi("/api/render", {
3276
3280
  compositionId,
@@ -3296,7 +3300,8 @@ var addSequenceRenderJob = ({
3296
3300
  multiProcessOnLinux,
3297
3301
  beepOnFinish,
3298
3302
  repro,
3299
- metadata
3303
+ metadata,
3304
+ chromeMode
3300
3305
  });
3301
3306
  };
3302
3307
  var addVideoRenderJob = ({
@@ -3336,7 +3341,8 @@ var addVideoRenderJob = ({
3336
3341
  forSeamlessAacConcatenation,
3337
3342
  separateAudioTo,
3338
3343
  metadata,
3339
- hardwareAcceleration
3344
+ hardwareAcceleration,
3345
+ chromeMode
3340
3346
  }) => {
3341
3347
  return callApi("/api/render", {
3342
3348
  compositionId,
@@ -3380,7 +3386,8 @@ var addVideoRenderJob = ({
3380
3386
  forSeamlessAacConcatenation,
3381
3387
  separateAudioTo,
3382
3388
  metadata,
3383
- hardwareAcceleration
3389
+ hardwareAcceleration,
3390
+ chromeMode
3384
3391
  });
3385
3392
  };
3386
3393
  var unsubscribeFromFileExistenceWatcher = ({
@@ -15197,7 +15204,8 @@ var makeRetryPayload = (job) => {
15197
15204
  initialForSeamlessAacConcatenation: defaults.forSeamlessAacConcatenation,
15198
15205
  defaulMetadata: job.metadata,
15199
15206
  renderTypeOfLastRender: "still",
15200
- initialHardwareAcceleration: defaults.hardwareAcceleration
15207
+ initialHardwareAcceleration: defaults.hardwareAcceleration,
15208
+ initialChromeMode: job.chromeMode
15201
15209
  };
15202
15210
  }
15203
15211
  if (job.type === "sequence") {
@@ -15244,7 +15252,8 @@ var makeRetryPayload = (job) => {
15244
15252
  initialForSeamlessAacConcatenation: defaults.forSeamlessAacConcatenation,
15245
15253
  defaulMetadata: job.metadata,
15246
15254
  renderTypeOfLastRender: "sequence",
15247
- initialHardwareAcceleration: defaults.hardwareAcceleration
15255
+ initialHardwareAcceleration: defaults.hardwareAcceleration,
15256
+ initialChromeMode: job.chromeMode
15248
15257
  };
15249
15258
  }
15250
15259
  if (job.type === "video") {
@@ -15291,7 +15300,8 @@ var makeRetryPayload = (job) => {
15291
15300
  initialForSeamlessAacConcatenation: job.forSeamlessAacConcatenation,
15292
15301
  defaulMetadata: job.metadata,
15293
15302
  renderTypeOfLastRender: "video",
15294
- initialHardwareAcceleration: job.hardwareAcceleration
15303
+ initialHardwareAcceleration: job.hardwareAcceleration,
15304
+ initialChromeMode: job.chromeMode
15295
15305
  };
15296
15306
  }
15297
15307
  throw new Error(`Job ${JSON.stringify(job)} Not implemented`);
@@ -16654,7 +16664,8 @@ var RenderButton = () => {
16654
16664
  initialForSeamlessAacConcatenation: defaults.forSeamlessAacConcatenation,
16655
16665
  renderTypeOfLastRender: null,
16656
16666
  defaulMetadata: defaults.metadata,
16657
- initialHardwareAcceleration: defaults.hardwareAcceleration
16667
+ initialHardwareAcceleration: defaults.hardwareAcceleration,
16668
+ initialChromeMode: defaults.chromeMode
16658
16669
  });
16659
16670
  }, [video, setSelectedModal, getCurrentFrame2, props, inFrame, outFrame]);
16660
16671
  if (!video) {
@@ -23232,6 +23243,8 @@ var RenderModalAdvanced = ({
23232
23243
  repro,
23233
23244
  setRepro,
23234
23245
  hardwareAcceleration,
23246
+ chromeModeOption,
23247
+ setChromeModeOption,
23235
23248
  setHardwareAcceleration
23236
23249
  }) => {
23237
23250
  const extendedOpenGlOptions = useMemo115(() => {
@@ -23301,6 +23314,22 @@ var RenderModalAdvanced = ({
23301
23314
  };
23302
23315
  });
23303
23316
  }, [extendedOpenGlOptions, openGlOption, setOpenGlOption]);
23317
+ const chromeModeOptions = useMemo115(() => {
23318
+ return BrowserSafeApis3.validChromeModeOptions.map((option) => {
23319
+ return {
23320
+ label: option,
23321
+ onClick: () => setChromeModeOption(option),
23322
+ key: option,
23323
+ leftItem: chromeModeOption === option ? /* @__PURE__ */ jsx227(Checkmark, {}) : null,
23324
+ id: option,
23325
+ keyHint: null,
23326
+ quickSwitcherLabel: null,
23327
+ subMenu: null,
23328
+ type: "item",
23329
+ value: option
23330
+ };
23331
+ });
23332
+ }, [chromeModeOption, setChromeModeOption]);
23304
23333
  const x264PresetOptions = useMemo115(() => {
23305
23334
  return BrowserSafeApis3.x264PresetOptions.map((option) => {
23306
23335
  return {
@@ -23525,6 +23554,31 @@ var RenderModalAdvanced = ({
23525
23554
  })
23526
23555
  ]
23527
23556
  }),
23557
+ /* @__PURE__ */ jsxs113("div", {
23558
+ style: optionRow,
23559
+ children: [
23560
+ /* @__PURE__ */ jsxs113("div", {
23561
+ style: label5,
23562
+ children: [
23563
+ "Chrome Mode ",
23564
+ /* @__PURE__ */ jsx227(Spacing, {
23565
+ x: 0.5
23566
+ }),
23567
+ /* @__PURE__ */ jsx227(OptionExplainerBubble, {
23568
+ id: "chromeModeOption"
23569
+ })
23570
+ ]
23571
+ }),
23572
+ /* @__PURE__ */ jsx227("div", {
23573
+ style: rightRow,
23574
+ children: /* @__PURE__ */ jsx227(Combobox, {
23575
+ values: chromeModeOptions,
23576
+ selectedId: chromeModeOption,
23577
+ title: "Chrome mode"
23578
+ })
23579
+ })
23580
+ ]
23581
+ }),
23528
23582
  /* @__PURE__ */ jsxs113("div", {
23529
23583
  style: optionRow,
23530
23584
  children: [
@@ -25237,7 +25291,8 @@ var RenderModal = ({
25237
25291
  initialForSeamlessAacConcatenation,
25238
25292
  renderTypeOfLastRender,
25239
25293
  initialHardwareAcceleration,
25240
- defaultMetadata
25294
+ defaultMetadata,
25295
+ initialChromeMode
25241
25296
  }) => {
25242
25297
  const { setSelectedModal } = useContext76(ModalsContext);
25243
25298
  const context = useContext76(ResolvedCompositionContext);
@@ -25340,6 +25395,7 @@ var RenderModal = ({
25340
25395
  const [limitNumberOfGifLoops, setLimitNumberOfGifLoops] = useState71(() => initialNumberOfGifLoops !== null);
25341
25396
  const [numberOfGifLoopsSetting, setNumberOfGifLoopsSetting] = useState71(() => initialNumberOfGifLoops ?? 0);
25342
25397
  const [delayRenderTimeout, setDelayRenderTimeout] = useState71(() => initialDelayRenderTimeout);
25398
+ const [chromeMode, setChromeMode] = useState71(() => initialChromeMode);
25343
25399
  const [offthreadVideoCacheSizeInBytes, setOffthreadVideoCacheSizeInBytes] = useState71(initialOffthreadVideoCacheSizeInBytes);
25344
25400
  const codec = useMemo120(() => {
25345
25401
  if (renderMode === "audio") {
@@ -25521,7 +25577,8 @@ var RenderModal = ({
25521
25577
  offthreadVideoCacheSizeInBytes,
25522
25578
  multiProcessOnLinux,
25523
25579
  beepOnFinish,
25524
- metadata
25580
+ metadata,
25581
+ chromeMode
25525
25582
  }).then(() => {
25526
25583
  dispatchIfMounted({ type: "succeed" });
25527
25584
  setSelectedModal(null);
@@ -25546,7 +25603,8 @@ var RenderModal = ({
25546
25603
  multiProcessOnLinux,
25547
25604
  beepOnFinish,
25548
25605
  setSelectedModal,
25549
- metadata
25606
+ metadata,
25607
+ chromeMode
25550
25608
  ]);
25551
25609
  const [everyNthFrameSetting, setEveryNthFrameSetting] = useState71(() => initialEveryNthFrame);
25552
25610
  const everyNthFrame = useMemo120(() => {
@@ -25607,7 +25665,8 @@ var RenderModal = ({
25607
25665
  forSeamlessAacConcatenation,
25608
25666
  separateAudioTo,
25609
25667
  metadata,
25610
- hardwareAcceleration
25668
+ hardwareAcceleration,
25669
+ chromeMode
25611
25670
  }).then(() => {
25612
25671
  dispatchIfMounted({ type: "succeed" });
25613
25672
  setSelectedModal(null);
@@ -25656,7 +25715,8 @@ var RenderModal = ({
25656
25715
  separateAudioTo,
25657
25716
  setSelectedModal,
25658
25717
  metadata,
25659
- hardwareAcceleration
25718
+ hardwareAcceleration,
25719
+ chromeMode
25660
25720
  ]);
25661
25721
  const onClickSequence = useCallback118(() => {
25662
25722
  setSidebarCollapsedState({ left: null, right: "expanded" });
@@ -25682,7 +25742,8 @@ var RenderModal = ({
25682
25742
  multiProcessOnLinux,
25683
25743
  beepOnFinish,
25684
25744
  repro,
25685
- metadata
25745
+ metadata,
25746
+ chromeMode
25686
25747
  }).then(() => {
25687
25748
  dispatchIfMounted({ type: "succeed" });
25688
25749
  setSelectedModal(null);
@@ -25711,7 +25772,8 @@ var RenderModal = ({
25711
25772
  beepOnFinish,
25712
25773
  repro,
25713
25774
  setSelectedModal,
25714
- metadata
25775
+ metadata,
25776
+ chromeMode
25715
25777
  ]);
25716
25778
  useEffect69(() => {
25717
25779
  return () => {
@@ -26159,7 +26221,9 @@ var RenderModal = ({
26159
26221
  repro,
26160
26222
  setRepro,
26161
26223
  hardwareAcceleration,
26162
- setHardwareAcceleration
26224
+ setHardwareAcceleration,
26225
+ chromeModeOption: chromeMode,
26226
+ setChromeModeOption: setChromeMode
26163
26227
  })
26164
26228
  })
26165
26229
  ]
@@ -26839,7 +26903,8 @@ var Modals = ({ readOnlyStudio }) => {
26839
26903
  defaultConfigurationVideoCodec: modalContextType.defaultConfigurationVideoCodec,
26840
26904
  renderTypeOfLastRender: modalContextType.renderTypeOfLastRender,
26841
26905
  defaultMetadata: modalContextType.defaulMetadata,
26842
- initialHardwareAcceleration: modalContextType.initialHardwareAcceleration
26906
+ initialHardwareAcceleration: modalContextType.initialHardwareAcceleration,
26907
+ initialChromeMode: modalContextType.initialChromeMode
26843
26908
  }),
26844
26909
  modalContextType && canRender && modalContextType.type === "render-progress" && /* @__PURE__ */ jsx249(RenderStatusModal, {
26845
26910
  jobId: modalContextType.jobId
@@ -53,6 +53,7 @@ const makeRetryPayload = (job) => {
53
53
  defaulMetadata: job.metadata,
54
54
  renderTypeOfLastRender: 'still',
55
55
  initialHardwareAcceleration: defaults.hardwareAcceleration,
56
+ initialChromeMode: job.chromeMode,
56
57
  };
57
58
  }
58
59
  if (job.type === 'sequence') {
@@ -100,6 +101,7 @@ const makeRetryPayload = (job) => {
100
101
  defaulMetadata: job.metadata,
101
102
  renderTypeOfLastRender: 'sequence',
102
103
  initialHardwareAcceleration: defaults.hardwareAcceleration,
104
+ initialChromeMode: job.chromeMode,
103
105
  };
104
106
  }
105
107
  if (job.type === 'video') {
@@ -147,6 +149,7 @@ const makeRetryPayload = (job) => {
147
149
  defaulMetadata: job.metadata,
148
150
  renderTypeOfLastRender: 'video',
149
151
  initialHardwareAcceleration: job.hardwareAcceleration,
152
+ initialChromeMode: job.chromeMode,
150
153
  };
151
154
  }
152
155
  throw new Error(`Job ${JSON.stringify(job)} Not implemented`);
@@ -1,4 +1,4 @@
1
- import type { AudioCodec, Codec, ColorSpace, LogLevel, OpenGlRenderer, PixelFormat, ProResProfile, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
1
+ import type { AudioCodec, ChromeMode, Codec, ColorSpace, LogLevel, OpenGlRenderer, PixelFormat, ProResProfile, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
2
2
  import type { HardwareAccelerationOption } from '@remotion/renderer/client';
3
3
  import type { PackageManager } from '@remotion/studio-shared';
4
4
  import type React from 'react';
@@ -41,6 +41,7 @@ export type RenderModalState = {
41
41
  initialHardwareAcceleration: HardwareAccelerationOption;
42
42
  initialBeep: boolean;
43
43
  initialRepro: boolean;
44
+ initialChromeMode: ChromeMode;
44
45
  minConcurrency: number;
45
46
  maxConcurrency: number;
46
47
  defaultProps: Record<string, unknown>;