@remotion/cli 4.0.74 → 4.0.76

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.
@@ -2,4 +2,4 @@ import type { StillImageFormat, VideoImageFormat } from '@remotion/renderer';
2
2
  export declare const setStillImageFormat: (format: StillImageFormat) => void;
3
3
  export declare const setVideoImageFormat: (format: VideoImageFormat) => void;
4
4
  export declare const getUserPreferredStillImageFormat: () => "png" | "jpeg" | "pdf" | "webp" | undefined;
5
- export declare const getUserPreferredVideoImageFormat: () => "png" | "jpeg" | "none" | undefined;
5
+ export declare const getUserPreferredVideoImageFormat: () => "none" | "png" | "jpeg" | undefined;
@@ -329,7 +329,7 @@ export declare const ConfigInternals: {
329
329
  getShouldOutputImageSequence: (frameRange: FrameRange | null) => boolean;
330
330
  getDotEnvLocation: () => string | null;
331
331
  getUserPreferredStillImageFormat: () => "png" | "jpeg" | "pdf" | "webp" | undefined;
332
- getUserPreferredVideoImageFormat: () => "png" | "jpeg" | "none" | undefined;
332
+ getUserPreferredVideoImageFormat: () => "none" | "png" | "jpeg" | undefined;
333
333
  getWebpackOverrideFn: () => WebpackOverrideFn;
334
334
  getWebpackCaching: () => boolean;
335
335
  getOutputLocation: () => string | null;
@@ -80,6 +80,11 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
80
80
  toggleFolder(item.folderName, item.parentName);
81
81
  }
82
82
  }, [item, selectComposition, toggleFolder]);
83
+ const onKeyPress = (0, react_1.useCallback)((evt) => {
84
+ if (evt.key === 'Enter') {
85
+ onClick(evt);
86
+ }
87
+ }, [onClick]);
83
88
  const contextMenu = (0, react_1.useMemo)(() => {
84
89
  if (item.type === 'composition') {
85
90
  return [
@@ -126,6 +131,6 @@ const CompositionSelectorItem = ({ item, level, currentComposition, tabIndex, se
126
131
  })
127
132
  : null] }));
128
133
  }
129
- return ((0, jsx_runtime_1.jsx)(ContextMenu_1.ContextMenu, { values: contextMenu, children: (0, jsx_runtime_1.jsx)(layout_1.Row, { align: "center", children: (0, jsx_runtime_1.jsxs)("button", { style: style, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, tabIndex: tabIndex, onClick: onClick, type: "button", title: item.composition.id, className: "__remotion-composition", "data-compname": item.composition.id, children: [(0, is_composition_still_1.isCompositionStill)(item.composition) ? ((0, jsx_runtime_1.jsx)(still_1.StillIcon, { color: hovered || selected ? 'white' : colors_1.LIGHT_TEXT, style: iconStyle })) : ((0, jsx_runtime_1.jsx)(video_1.FilmIcon, { color: hovered || selected ? 'white' : colors_1.LIGHT_TEXT, style: iconStyle })), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsx)("div", { style: label, children: item.composition.id }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(SidebarRenderButton_1.SidebarRenderButton, { visible: hovered, composition: item.composition }) })] }) }) }));
134
+ return ((0, jsx_runtime_1.jsx)(ContextMenu_1.ContextMenu, { values: contextMenu, children: (0, jsx_runtime_1.jsx)(layout_1.Row, { align: "center", children: (0, jsx_runtime_1.jsxs)("a", { style: style, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, tabIndex: tabIndex, onClick: onClick, onKeyPress: onKeyPress, type: "button", title: item.composition.id, className: "__remotion-composition", "data-compname": item.composition.id, children: [(0, is_composition_still_1.isCompositionStill)(item.composition) ? ((0, jsx_runtime_1.jsx)(still_1.StillIcon, { color: hovered || selected ? 'white' : colors_1.LIGHT_TEXT, style: iconStyle })) : ((0, jsx_runtime_1.jsx)(video_1.FilmIcon, { color: hovered || selected ? 'white' : colors_1.LIGHT_TEXT, style: iconStyle })), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsx)("div", { style: label, children: item.composition.id }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(SidebarRenderButton_1.SidebarRenderButton, { visible: hovered, composition: item.composition }) })] }) }) }));
130
135
  };
131
136
  exports.CompositionSelectorItem = CompositionSelectorItem;
@@ -12,6 +12,6 @@ export declare const getInputBorderColor: ({ status, isFocused, isHovered, }: {
12
12
  status: 'error' | 'warning' | 'ok';
13
13
  isFocused: boolean;
14
14
  isHovered: boolean;
15
- }) => "hsla(0, 0%, 100%, 0.15)" | "rgba(0, 0, 0, 0.6)" | "rgba(255, 255, 255, 0.05)" | "#ff3232" | "#f1c40f";
16
- export declare const RemotionInput: React.ForwardRefExoticComponent<Pick<Props, "status" | "key" | "rightAlign" | keyof React.InputHTMLAttributes<HTMLInputElement>> & React.RefAttributes<HTMLInputElement>>;
15
+ }) => "#ff3232" | "hsla(0, 0%, 100%, 0.15)" | "#f1c40f" | "rgba(255, 255, 255, 0.05)" | "rgba(0, 0, 0, 0.6)";
16
+ export declare const RemotionInput: React.ForwardRefExoticComponent<Pick<Props, "key" | keyof React.InputHTMLAttributes<HTMLInputElement> | "status" | "rightAlign"> & React.RefAttributes<HTMLInputElement>>;
17
17
  export {};
@@ -4,5 +4,5 @@ type Props = React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>
4
4
  status: RemInputStatus;
5
5
  name: string;
6
6
  };
7
- export declare const RemInputTypeColor: React.ForwardRefExoticComponent<Pick<Props, "status" | "key" | keyof React.InputHTMLAttributes<HTMLInputElement>> & React.RefAttributes<HTMLInputElement>>;
7
+ export declare const RemInputTypeColor: React.ForwardRefExoticComponent<Pick<Props, "key" | keyof React.InputHTMLAttributes<HTMLInputElement> | "status"> & React.RefAttributes<HTMLInputElement>>;
8
8
  export {};
@@ -3,5 +3,5 @@ type Props = React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLTextAreaEleme
3
3
  status: 'error' | 'warning' | 'ok';
4
4
  };
5
5
  export declare const inputBaseStyle: React.CSSProperties;
6
- export declare const RemTextarea: React.ForwardRefExoticComponent<Pick<Props, "status" | "key" | keyof React.InputHTMLAttributes<HTMLTextAreaElement>> & React.RefAttributes<HTMLTextAreaElement>>;
6
+ export declare const RemTextarea: React.ForwardRefExoticComponent<Pick<Props, "key" | "status" | keyof React.InputHTMLAttributes<HTMLTextAreaElement>> & React.RefAttributes<HTMLTextAreaElement>>;
7
7
  export {};
@@ -27,14 +27,15 @@ const forwardBackStyle = {
27
27
  const PlayPause = ({ playbackRate, loop }) => {
28
28
  const { inFrame, outFrame } = (0, in_out_1.useTimelineInOutFramePosition)();
29
29
  const videoConfig = remotion_1.Internals.useUnsafeVideoConfig();
30
+ const { playing, play, pause, pauseAndReturnToPlayStart, frameBack, seek, frameForward, isLastFrame, isFirstFrame, remotionInternal_currentFrameRef, } = player_1.PlayerInternals.usePlayer();
30
31
  player_1.PlayerInternals.usePlayback({
31
32
  loop,
32
33
  playbackRate,
33
34
  moveToBeginningWhenEnded: true,
34
35
  inFrame,
35
36
  outFrame,
37
+ frameRef: remotionInternal_currentFrameRef,
36
38
  });
37
- const { playing, play, pause, pauseAndReturnToPlayStart, frameBack, seek, frameForward, isLastFrame, isFirstFrame, } = player_1.PlayerInternals.usePlayer();
38
39
  const isStill = (0, is_current_selected_still_1.useIsStill)();
39
40
  (0, react_1.useEffect)(() => {
40
41
  if (isStill) {
@@ -19,6 +19,7 @@ const gif_1 = require("../../icons/gif");
19
19
  const get_default_out_name_1 = require("../../../get-default-out-name");
20
20
  const get_default_video_contexts_1 = require("../../../preview-server/render-queue/get-default-video-contexts");
21
21
  const colors_1 = require("../../helpers/colors");
22
+ const Checkmark_1 = require("../../icons/Checkmark");
22
23
  const modals_1 = require("../../state/modals");
23
24
  const sidebar_1 = require("../../state/sidebar");
24
25
  const layout_1 = require("../layout");
@@ -186,7 +187,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
186
187
  const [startFrameOrNull, setStartFrame] = (0, react_1.useState)(() => inFrameMark !== null && inFrameMark !== void 0 ? inFrameMark : null);
187
188
  const [proResProfileSetting, setProResProfile] = (0, react_1.useState)(() => initialProResProfile);
188
189
  const [x264PresetSetting, setx264Preset] = (0, react_1.useState)(() => initialx264Preset);
189
- const [pixelFormat, setPixelFormat] = (0, react_1.useState)(() => initialPixelFormat);
190
+ const [userPreferredPixelFormat, setPixelFormat] = (0, react_1.useState)(() => initialPixelFormat);
190
191
  const [preferredQualityControlType, setQualityControl] = (0, react_1.useState)(() => initialVideoBitrate === null ? 'crf' : 'bitrate');
191
192
  const [shouldHaveCustomTargetAudioBitrate, setShouldHaveCustomTargetAudioBitrate,] = (0, react_1.useState)(() => initialAudioBitrate !== null);
192
193
  const [customTargetAudioBitrate, setCustomTargetAudioBitrateValue] = (0, react_1.useState)(() => initialAudioBitrate !== null && initialAudioBitrate !== void 0 ? initialAudioBitrate : '320K');
@@ -413,6 +414,15 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
413
414
  return 1;
414
415
  }, [codec, everyNthFrameSetting]);
415
416
  const audioCodec = deriveFinalAudioCodec(codec, userSelectedAudioCodec);
417
+ const availablePixelFormats = (0, react_1.useMemo)(() => {
418
+ return client_1.BrowserSafeApis.validPixelFormatsForCodec(codec);
419
+ }, [codec]);
420
+ const pixelFormat = (0, react_1.useMemo)(() => {
421
+ if (availablePixelFormats.includes(userPreferredPixelFormat)) {
422
+ return userPreferredPixelFormat;
423
+ }
424
+ return availablePixelFormats[0];
425
+ }, [availablePixelFormats, userPreferredPixelFormat]);
416
426
  const onClickVideo = (0, react_1.useCallback)(() => {
417
427
  var _a;
418
428
  setSidebarCollapsedState({ left: null, right: 'expanded' });
@@ -734,10 +744,26 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
734
744
  enter.unregister();
735
745
  };
736
746
  }, [registerKeybinding, trigger]);
747
+ const pixelFormatOptions = (0, react_1.useMemo)(() => {
748
+ return availablePixelFormats.map((option) => {
749
+ return {
750
+ label: option,
751
+ onClick: () => setPixelFormat(option),
752
+ key: option,
753
+ id: option,
754
+ keyHint: null,
755
+ leftItem: pixelFormat === option ? (0, jsx_runtime_1.jsx)(Checkmark_1.Checkmark, {}) : null,
756
+ quickSwitcherLabel: null,
757
+ subMenu: null,
758
+ type: 'item',
759
+ value: option,
760
+ };
761
+ });
762
+ }, [availablePixelFormats, pixelFormat]);
737
763
  return ((0, jsx_runtime_1.jsxs)("div", { style: outer, children: [(0, jsx_runtime_1.jsx)(ModalHeader_1.NewCompHeader, { 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: {
738
764
  ...buttonStyle,
739
765
  backgroundColor: outnameValidation.valid ? colors_1.BLUE : colors_1.BLUE_DISABLED,
740
- }, 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, 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, jpegQuality: jpegQuality, qualityControlType: qualityControlType, setJpegQuality: setJpegQuality, setColorSpace: setColorSpace, colorSpace: colorSpace, setCustomTargetVideoBitrateValue: setCustomTargetVideoBitrateValue, setQualityControl: setQualityControl, videoImageFormat: videoImageFormat, stillImageFormat: stillImageFormat, shouldDisplayQualityControlPicker: supportsBothQualityControls })) : 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)(DataEditor_1.DataEditor, { inputProps: inputProps, setInputProps: setInputProps, unresolvedComposition: unresolvedComposition, mayShowSaveButton: false, propsEditType: "input-props", saving: saving, setSaving: setSaving })) : ((0, jsx_runtime_1.jsx)(RenderModalAdvanced_1.RenderModalAdvanced, { x264Preset: x264Preset, setx264Preset: setx264Preset, concurrency: concurrency, maxConcurrency: maxConcurrency, minConcurrency: minConcurrency, renderMode: renderMode, setConcurrency: setConcurrency, setVerboseLogging: setLogLevel, logLevel: logLevel, 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 })) })] })] }));
766
+ }, 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, 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 })) : 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)(DataEditor_1.DataEditor, { inputProps: inputProps, setInputProps: setInputProps, unresolvedComposition: unresolvedComposition, mayShowSaveButton: false, propsEditType: "input-props", saving: saving, setSaving: setSaving })) : ((0, jsx_runtime_1.jsx)(RenderModalAdvanced_1.RenderModalAdvanced, { x264Preset: x264Preset, setx264Preset: setx264Preset, concurrency: concurrency, maxConcurrency: maxConcurrency, minConcurrency: minConcurrency, renderMode: renderMode, setConcurrency: setConcurrency, setVerboseLogging: setLogLevel, logLevel: logLevel, 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 })) })] })] }));
741
767
  };
742
768
  const RenderModalWithLoader = (props) => {
743
769
  const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
@@ -1,5 +1,6 @@
1
1
  import type { ColorSpace, PixelFormat, StillImageFormat, VideoImageFormat } from '@remotion/renderer';
2
2
  import React from 'react';
3
+ import type { ComboboxValue } from '../NewComposition/ComboBox';
3
4
  import type { SegmentedControlItem } from '../SegmentedControl';
4
5
  import type { RenderType } from './RenderModalAdvanced';
5
6
  declare const qualityControlModes: readonly ["crf", "bitrate"];
@@ -9,7 +10,6 @@ export declare const RenderModalPicture: React.FC<{
9
10
  scale: number;
10
11
  setScale: React.Dispatch<React.SetStateAction<number>>;
11
12
  pixelFormat: PixelFormat;
12
- setPixelFormat: React.Dispatch<React.SetStateAction<PixelFormat>>;
13
13
  colorSpace: ColorSpace;
14
14
  setColorSpace: React.Dispatch<React.SetStateAction<ColorSpace>>;
15
15
  imageFormatOptions: SegmentedControlItem[];
@@ -26,5 +26,6 @@ export declare const RenderModalPicture: React.FC<{
26
26
  crf: number;
27
27
  customTargetVideoBitrate: string;
28
28
  shouldDisplayQualityControlPicker: boolean;
29
+ pixelFormatOptions: ComboboxValue[];
29
30
  }>;
30
31
  export {};
@@ -20,23 +20,7 @@ const qualityControlModes = ['crf', 'bitrate'];
20
20
  const container = {
21
21
  flex: 1,
22
22
  };
23
- const RenderModalPicture = ({ renderMode, scale, setScale, pixelFormat, setPixelFormat, imageFormatOptions, setQualityControl, qualityControlType, videoImageFormat, setJpegQuality, jpegQuality, maxCrf, minCrf, setCrf, shouldDisplayQualityControlPicker, setCustomTargetVideoBitrateValue, crf, customTargetVideoBitrate, stillImageFormat, colorSpace, setColorSpace, }) => {
24
- const pixelFormatOptions = (0, react_1.useMemo)(() => {
25
- return client_1.BrowserSafeApis.validPixelFormats.map((option) => {
26
- return {
27
- label: option,
28
- onClick: () => setPixelFormat(option),
29
- key: option,
30
- id: option,
31
- keyHint: null,
32
- leftItem: pixelFormat === option ? (0, jsx_runtime_1.jsx)(Checkmark_1.Checkmark, {}) : null,
33
- quickSwitcherLabel: null,
34
- subMenu: null,
35
- type: 'item',
36
- value: option,
37
- };
38
- });
39
- }, [pixelFormat, setPixelFormat]);
23
+ const RenderModalPicture = ({ renderMode, scale, setScale, pixelFormat, imageFormatOptions, setQualityControl, qualityControlType, videoImageFormat, setJpegQuality, jpegQuality, maxCrf, minCrf, setCrf, shouldDisplayQualityControlPicker, setCustomTargetVideoBitrateValue, crf, customTargetVideoBitrate, stillImageFormat, colorSpace, setColorSpace, pixelFormatOptions, }) => {
40
24
  const colorSpaceOptions = (0, react_1.useMemo)(() => {
41
25
  return client_1.BrowserSafeApis.validColorSpaces.map((option) => {
42
26
  return {
@@ -1,2 +1,2 @@
1
1
  import type { Codec } from '@remotion/renderer';
2
- export declare const humanReadableCodec: (codec: Codec) => "GIF" | "AAC" | "MP3" | "H.264" | "H.264 Matroska" | "H.265" | "ProRes" | "WebM VP8" | "WebM VP9" | "Waveform" | undefined;
2
+ export declare const humanReadableCodec: (codec: Codec) => "AAC" | "MP3" | "GIF" | "H.264" | "H.264 Matroska" | "H.265" | "ProRes" | "WebM VP8" | "WebM VP9" | "Waveform" | undefined;
@@ -21,4 +21,4 @@ export declare const SELECTED_GUIDE = "#d22d3a";
21
21
  export declare const getBackgroundFromHoverState: ({ selected, hovered, }: {
22
22
  selected: boolean;
23
23
  hovered: boolean;
24
- }) => "transparent" | "hsla(0, 0%, 100%, 0.15)" | "hsla(0, 0%, 100%, 0.25)" | "rgba(255, 255, 255, 0.06)";
24
+ }) => "transparent" | "hsla(0, 0%, 100%, 0.25)" | "hsla(0, 0%, 100%, 0.15)" | "rgba(255, 255, 255, 0.06)";
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { Codec } from '@remotion/renderer';
3
2
  import type { RenderType } from '../components/RenderModal/RenderModalAdvanced';
4
3
  type Section = 'general' | 'picture' | 'advanced' | 'data' | 'gif' | 'audio';
@@ -34,7 +34,7 @@ export declare const getCliOptions: (options: {
34
34
  videoBitrate: string | null;
35
35
  height: number | null;
36
36
  width: number | null;
37
- configFileImageFormat: "png" | "jpeg" | "none" | undefined;
37
+ configFileImageFormat: "none" | "png" | "jpeg" | undefined;
38
38
  offthreadVideoCacheSizeInBytes: number | null;
39
39
  deleteAfter: ("1-day" | "3-days" | "7-days" | "30-days") | null;
40
40
  colorSpace: "default" | "bt709";
package/dist/index.d.ts CHANGED
@@ -104,7 +104,7 @@ export declare const CliInternals: {
104
104
  videoBitrate: string | null;
105
105
  height: number | null;
106
106
  width: number | null;
107
- configFileImageFormat: "png" | "jpeg" | "none" | undefined;
107
+ configFileImageFormat: "none" | "png" | "jpeg" | undefined;
108
108
  offthreadVideoCacheSizeInBytes: number | null;
109
109
  deleteAfter: ("1-day" | "3-days" | "7-days" | "30-days") | null;
110
110
  colorSpace: "default" | "bt709";
@@ -116,7 +116,7 @@ export declare const CliInternals: {
116
116
  parsedCli: {
117
117
  "browser-executable": import("@remotion/renderer").BrowserExecutable;
118
118
  "pixel-format": "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
119
- "image-format": "png" | "jpeg" | "pdf" | "webp" | "none";
119
+ "image-format": "none" | "png" | "jpeg" | "pdf" | "webp";
120
120
  "prores-profile": "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy";
121
121
  "x264-preset": "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
122
122
  "bundle-cache": string;
@@ -187,7 +187,7 @@ export declare const CliInternals: {
187
187
  downloadName: string | null;
188
188
  outName: string | null;
189
189
  configImageFormat: "png" | "jpeg" | "pdf" | "webp" | null;
190
- cliFlag: "png" | "jpeg" | "pdf" | "webp" | "none" | null;
190
+ cliFlag: "none" | "png" | "jpeg" | "pdf" | "webp" | null;
191
191
  isLambda: boolean;
192
192
  fromUi: "png" | "jpeg" | "pdf" | "webp" | null;
193
193
  }) => {
@@ -202,8 +202,8 @@ export declare const CliInternals: {
202
202
  };
203
203
  getVideoImageFormat: ({ codec, uiImageFormat, }: {
204
204
  codec: import("@remotion/renderer").CodecOrUndefined;
205
- uiImageFormat: "png" | "jpeg" | "none" | null;
206
- }) => "png" | "jpeg" | "none";
205
+ uiImageFormat: "none" | "png" | "jpeg" | null;
206
+ }) => "none" | "png" | "jpeg";
207
207
  printCompositions: (compositions: import("remotion").VideoConfig[]) => void;
208
208
  getFinalOutputCodec: ({ cliFlag, configFile, downloadName, outName, uiCodec, compositionCodec, }: {
209
209
  cliFlag: import("@remotion/renderer").CodecOrUndefined;
@@ -11,5 +11,5 @@ type Range = {
11
11
  type Ranges = Range[] & {
12
12
  type?: string;
13
13
  };
14
- export declare function parseRange(size: number, str: string | string[]): -1 | Ranges | -2;
14
+ export declare function parseRange(size: number, str: string | string[]): -1 | -2 | Ranges;
15
15
  export {};
@@ -118,7 +118,7 @@ const makeRetryPayload = (job) => {
118
118
  initialOffthreadVideoCacheSizeInBytes: job.offthreadVideoCacheSizeInBytes,
119
119
  initialColorSpace: job.colorSpace,
120
120
  initialMultiProcessOnLinux: job.multiProcessOnLinux,
121
- defaultConfigurationVideoCodec: defaults.codec,
121
+ defaultConfigurationVideoCodec: job.codec,
122
122
  defaultConfigurationAudioCodec: job.audioCodec,
123
123
  };
124
124
  }
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import type { LogLevel } from '@remotion/renderer';
3
2
  import type { IncomingMessage, ServerResponse } from 'node:http';
4
3
  import type { LiveEventsServer } from './live-events';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/cli",
3
- "version": "4.0.74",
3
+ "version": "4.0.76",
4
4
  "description": "CLI for Remotion",
5
5
  "main": "dist/index.js",
6
6
  "sideEffects": false,
@@ -35,11 +35,11 @@
35
35
  "prompts": "2.4.1",
36
36
  "semver": "7.5.3",
37
37
  "source-map": "0.6.1",
38
- "@remotion/bundler": "4.0.74",
39
- "@remotion/media-utils": "4.0.74",
40
- "@remotion/player": "4.0.74",
41
- "@remotion/renderer": "4.0.74",
42
- "remotion": "4.0.74"
38
+ "@remotion/media-utils": "4.0.76",
39
+ "@remotion/renderer": "4.0.76",
40
+ "@remotion/bundler": "4.0.76",
41
+ "remotion": "4.0.76",
42
+ "@remotion/player": "4.0.76"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "react": ">=16.8.0",
@@ -65,8 +65,8 @@
65
65
  "react-dom": "18.2.0",
66
66
  "vitest": "0.31.1",
67
67
  "zod": "^3.22.3",
68
- "@remotion/zod-types": "4.0.74",
69
- "@remotion/tailwind": "4.0.74"
68
+ "@remotion/tailwind": "4.0.76",
69
+ "@remotion/zod-types": "4.0.76"
70
70
  },
71
71
  "keywords": [
72
72
  "remotion",