@remotion/cli 4.0.74 → 4.0.75

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
  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
- export declare const getUserPreferredStillImageFormat: () => "png" | "jpeg" | "pdf" | "webp" | undefined;
5
- export declare const getUserPreferredVideoImageFormat: () => "png" | "jpeg" | "none" | undefined;
4
+ export declare const getUserPreferredStillImageFormat: () => "jpeg" | "png" | "pdf" | "webp" | undefined;
5
+ export declare const getUserPreferredVideoImageFormat: () => "none" | "jpeg" | "png" | undefined;
@@ -306,7 +306,7 @@ export declare const ConfigInternals: {
306
306
  getOutputCodecOrUndefined: () => CodecOrUndefined;
307
307
  getBrowser: () => null;
308
308
  getPixelFormat: () => "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
309
- getProResProfile: () => "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy" | undefined;
309
+ getProResProfile: () => "light" | "4444-xq" | "4444" | "hq" | "standard" | "proxy" | undefined;
310
310
  getPresetProfile: () => "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | undefined;
311
311
  getShouldOverwrite: ({ defaultValue, }: {
312
312
  defaultValue: boolean;
@@ -328,8 +328,8 @@ export declare const ConfigInternals: {
328
328
  getStillFrame: () => number;
329
329
  getShouldOutputImageSequence: (frameRange: FrameRange | null) => boolean;
330
330
  getDotEnvLocation: () => string | null;
331
- getUserPreferredStillImageFormat: () => "png" | "jpeg" | "pdf" | "webp" | undefined;
332
- getUserPreferredVideoImageFormat: () => "png" | "jpeg" | "none" | undefined;
331
+ getUserPreferredStillImageFormat: () => "jpeg" | "png" | "pdf" | "webp" | undefined;
332
+ getUserPreferredVideoImageFormat: () => "none" | "jpeg" | "png" | undefined;
333
333
  getWebpackOverrideFn: () => WebpackOverrideFn;
334
334
  getWebpackCaching: () => boolean;
335
335
  getOutputLocation: () => string | null;
@@ -1 +1 @@
1
- export declare const getLogLevel: () => "verbose" | "info" | "warn" | "error", setLogLevel: (newLogLevel: "verbose" | "info" | "warn" | "error") => void;
1
+ export declare const getLogLevel: () => "error" | "verbose" | "info" | "warn", setLogLevel: (newLogLevel: "error" | "verbose" | "info" | "warn") => void;
@@ -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";
15
+ }) => "rgba(255, 255, 255, 0.05)" | "rgba(0, 0, 0, 0.6)" | "hsla(0, 0%, 100%, 0.15)" | "#ff3232" | "#f1c40f";
16
16
  export declare const RemotionInput: React.ForwardRefExoticComponent<Pick<Props, "status" | "key" | "rightAlign" | keyof React.InputHTMLAttributes<HTMLInputElement>> & React.RefAttributes<HTMLInputElement>>;
17
17
  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,4 +1,4 @@
1
1
  export declare const getCheckerboardBackgroundSize: (size: number) => string;
2
2
  export declare const getCheckerboardBackgroundPos: (size: number) => string;
3
- export declare const checkerboardBackgroundColor: (checkerboard: boolean) => "black" | "white";
3
+ export declare const checkerboardBackgroundColor: (checkerboard: boolean) => "white" | "black";
4
4
  export declare const checkerboardBackgroundImage: (checkerboard: boolean) => "\n linear-gradient(\n 45deg,\n rgba(0, 0, 0, 0.1) 25%,\n transparent 25%\n ),\n linear-gradient(135deg, rgba(0, 0, 0, 0.1) 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%),\n linear-gradient(135deg, transparent 75%, rgba(0, 0, 0, 0.1) 75%)\n " | 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.15)" | "rgba(255, 255, 255, 0.06)" | "hsla(0, 0%, 100%, 0.25)";
@@ -16,13 +16,13 @@ export declare const getCliOptions: (options: {
16
16
  browser: "chrome";
17
17
  crf: import("@remotion/renderer").Crf | null;
18
18
  pixelFormat: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
19
- proResProfile: "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy" | undefined;
19
+ proResProfile: "light" | "4444-xq" | "4444" | "hq" | "standard" | "proxy" | undefined;
20
20
  x264Preset: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | undefined;
21
21
  everyNthFrame: number;
22
22
  numberOfGifLoops: import("./config/number-of-gif-loops").Loop;
23
23
  stillFrame: number;
24
24
  browserExecutable: BrowserExecutable;
25
- logLevel: "verbose" | "info" | "warn" | "error";
25
+ logLevel: "error" | "verbose" | "info" | "warn";
26
26
  scale: number;
27
27
  chromiumOptions: ChromiumOptions;
28
28
  overwrite: boolean;
@@ -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" | "jpeg" | "png" | 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
@@ -74,7 +74,7 @@ export declare const CliInternals: {
74
74
  isLambda: boolean;
75
75
  type: "still" | "series" | "get-compositions";
76
76
  remotionRoot: string;
77
- logLevel: "verbose" | "info" | "warn" | "error";
77
+ logLevel: "error" | "verbose" | "info" | "warn";
78
78
  }) => Promise<{
79
79
  puppeteerTimeout: number;
80
80
  concurrency: string | number | null;
@@ -86,13 +86,13 @@ export declare const CliInternals: {
86
86
  browser: "chrome";
87
87
  crf: import("@remotion/renderer").Crf | null;
88
88
  pixelFormat: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
89
- proResProfile: "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy" | undefined;
89
+ proResProfile: "light" | "4444-xq" | "4444" | "hq" | "standard" | "proxy" | undefined;
90
90
  x264Preset: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | undefined;
91
91
  everyNthFrame: number;
92
92
  numberOfGifLoops: import("./config/number-of-gif-loops").Loop;
93
93
  stillFrame: number;
94
94
  browserExecutable: import("@remotion/renderer").BrowserExecutable;
95
- logLevel: "verbose" | "info" | "warn" | "error";
95
+ logLevel: "error" | "verbose" | "info" | "warn";
96
96
  scale: number;
97
97
  chromiumOptions: import("@remotion/renderer").ChromiumOptions;
98
98
  overwrite: boolean;
@@ -104,20 +104,20 @@ 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" | "jpeg" | "png" | undefined;
108
108
  offthreadVideoCacheSizeInBytes: number | null;
109
109
  deleteAfter: ("1-day" | "3-days" | "7-days" | "30-days") | null;
110
110
  colorSpace: "default" | "bt709";
111
111
  }>;
112
112
  loadConfig: (remotionRoot: string) => Promise<string | null>;
113
- initializeCli: (remotionRoot: string) => Promise<"verbose" | "info" | "warn" | "error">;
113
+ initializeCli: (remotionRoot: string) => Promise<"error" | "verbose" | "info" | "warn">;
114
114
  BooleanFlags: string[];
115
115
  quietFlagProvided: () => boolean;
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";
120
- "prores-profile": "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy";
119
+ "image-format": "none" | "jpeg" | "png" | "pdf" | "webp";
120
+ "prores-profile": "light" | "4444-xq" | "4444" | "hq" | "standard" | "proxy";
121
121
  "x264-preset": "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
122
122
  "bundle-cache": string;
123
123
  "env-file": string;
@@ -175,7 +175,7 @@ export declare const CliInternals: {
175
175
  } & {
176
176
  _: string[];
177
177
  };
178
- printError: (err: Error, logLevel: "verbose" | "info" | "warn" | "error") => Promise<void>;
178
+ printError: (err: Error, logLevel: "error" | "verbose" | "info" | "warn") => Promise<void>;
179
179
  formatBytes: (number: number, options?: Intl.NumberFormatOptions & {
180
180
  locale: string;
181
181
  bits?: boolean | undefined;
@@ -186,24 +186,24 @@ export declare const CliInternals: {
186
186
  determineFinalStillImageFormat: ({ downloadName, outName, configImageFormat, cliFlag, isLambda, fromUi, }: {
187
187
  downloadName: string | null;
188
188
  outName: string | null;
189
- configImageFormat: "png" | "jpeg" | "pdf" | "webp" | null;
190
- cliFlag: "png" | "jpeg" | "pdf" | "webp" | "none" | null;
189
+ configImageFormat: "jpeg" | "png" | "pdf" | "webp" | null;
190
+ cliFlag: "none" | "jpeg" | "png" | "pdf" | "webp" | null;
191
191
  isLambda: boolean;
192
- fromUi: "png" | "jpeg" | "pdf" | "webp" | null;
192
+ fromUi: "jpeg" | "png" | "pdf" | "webp" | null;
193
193
  }) => {
194
- format: "png" | "jpeg" | "pdf" | "webp";
194
+ format: "jpeg" | "png" | "pdf" | "webp";
195
195
  source: string;
196
196
  };
197
197
  minimist: typeof minimist;
198
- findEntryPoint: (args: string[], remotionRoot: string, logLevel: "verbose" | "info" | "warn" | "error") => {
198
+ findEntryPoint: (args: string[], remotionRoot: string, logLevel: "error" | "verbose" | "info" | "warn") => {
199
199
  file: string | null;
200
200
  remainingArgs: string[];
201
201
  reason: string;
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" | "jpeg" | "png" | null;
206
+ }) => "none" | "jpeg" | "png";
207
207
  printCompositions: (compositions: import("remotion").VideoConfig[]) => void;
208
208
  getFinalOutputCodec: ({ cliFlag, configFile, downloadName, outName, uiCodec, compositionCodec, }: {
209
209
  cliFlag: import("@remotion/renderer").CodecOrUndefined;
@@ -218,7 +218,7 @@ export declare const CliInternals: {
218
218
  };
219
219
  listOfRemotionPackages: string[];
220
220
  shouldUseNonOverlayingLogger: ({ logLevel, }: {
221
- logLevel: "verbose" | "info" | "warn" | "error";
221
+ logLevel: "error" | "verbose" | "info" | "warn";
222
222
  }) => boolean;
223
223
  getCompositionWithDimensionOverride: ({ height, width, args, compositionIdFromUi, chromiumOptions, envVariables, port, puppeteerInstance, timeoutInMilliseconds, browserExecutable, serveUrlOrWebpackUrl, indent, serializedInputPropsWithCustomSchema, logLevel, server, offthreadVideoCacheSizeInBytes, }: {
224
224
  height: number | null;
@@ -233,7 +233,7 @@ export declare const CliInternals: {
233
233
  browserExecutable: import("@remotion/renderer").BrowserExecutable;
234
234
  serveUrlOrWebpackUrl: string;
235
235
  indent: boolean;
236
- logLevel: "verbose" | "info" | "warn" | "error";
236
+ logLevel: "error" | "verbose" | "info" | "warn";
237
237
  serializedInputPropsWithCustomSchema: string;
238
238
  server: import("@remotion/renderer").RemotionServer;
239
239
  offthreadVideoCacheSizeInBytes: number | null;
@@ -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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/cli",
3
- "version": "4.0.74",
3
+ "version": "4.0.75",
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/bundler": "4.0.75",
39
+ "@remotion/player": "4.0.75",
40
+ "@remotion/renderer": "4.0.75",
41
+ "@remotion/media-utils": "4.0.75",
42
+ "remotion": "4.0.75"
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/zod-types": "4.0.75",
69
+ "@remotion/tailwind": "4.0.75"
70
70
  },
71
71
  "keywords": [
72
72
  "remotion",