@remotion/cli 4.0.53 → 4.0.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/config/image-format.d.ts +1 -1
  2. package/dist/config/index.d.ts +2 -2
  3. package/dist/config/presets-profile.d.ts +3 -0
  4. package/dist/config/presets-profile.js +12 -0
  5. package/dist/editor/components/CompositionSelector.js +11 -8
  6. package/dist/editor/components/CurrentComposition.d.ts +1 -0
  7. package/dist/editor/components/CurrentComposition.js +3 -2
  8. package/dist/editor/components/DownloadButton.d.ts +0 -0
  9. package/dist/editor/components/DownloadButton.js +1 -0
  10. package/dist/editor/components/MenuBuildIndicator.js +1 -1
  11. package/dist/editor/components/MenuToolbar.js +3 -3
  12. package/dist/editor/components/NewComposition/RemInput.d.ts +1 -1
  13. package/dist/editor/components/NewComposition/RemInputTypeColor.d.ts +1 -1
  14. package/dist/editor/components/NewComposition/RemTextarea.d.ts +1 -1
  15. package/dist/editor/components/OpenEditorButton.js +2 -3
  16. package/dist/editor/components/PlayPause.js +5 -1
  17. package/dist/editor/components/PreviewToolbar.js +1 -1
  18. package/dist/editor/components/RenderModal/human-readable-codec.d.ts +1 -1
  19. package/dist/editor/components/Splitter/SplitterHandle.js +6 -1
  20. package/dist/editor/components/Timeline/is-collapsed.js +5 -0
  21. package/dist/editor/components/UpdateCheck.js +7 -2
  22. package/dist/editor/components/UpdateModal/UpdateModal.js +1 -1
  23. package/dist/editor/helpers/get-timeline-sequence-sort-key.js +3 -1
  24. package/dist/editor/helpers/presets-labels.d.ts +1 -1
  25. package/dist/editor/icons/media-volume.js +1 -1
  26. package/dist/ffmpeg.js +7 -4
  27. package/dist/get-cli-options.d.ts +2 -2
  28. package/dist/handle-common-errors.d.ts +2 -0
  29. package/dist/handle-common-errors.js +60 -0
  30. package/dist/index.d.ts +7 -7
  31. package/package.json +8 -8
  32. package/styles/styles.css +42 -6
@@ -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;
@@ -296,7 +296,7 @@ export declare const ConfigInternals: {
296
296
  getBrowser: () => null;
297
297
  getPixelFormat: () => "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
298
298
  getProResProfile: () => "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy" | undefined;
299
- getPresetProfile: () => "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | undefined;
299
+ getPresetProfile: () => "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | undefined;
300
300
  getShouldOverwrite: ({ defaultValue, }: {
301
301
  defaultValue: boolean;
302
302
  }) => boolean;
@@ -316,7 +316,7 @@ export declare const ConfigInternals: {
316
316
  getShouldOutputImageSequence: (frameRange: FrameRange | null) => boolean;
317
317
  getDotEnvLocation: () => string | null;
318
318
  getUserPreferredStillImageFormat: () => "png" | "jpeg" | "pdf" | "webp" | undefined;
319
- getUserPreferredVideoImageFormat: () => "png" | "jpeg" | "none" | undefined;
319
+ getUserPreferredVideoImageFormat: () => "none" | "png" | "jpeg" | undefined;
320
320
  getWebpackOverrideFn: () => WebpackOverrideFn;
321
321
  getWebpackCaching: () => boolean;
322
322
  getOutputLocation: () => string | null;
@@ -0,0 +1,3 @@
1
+ import type { x264Preset } from '@remotion/renderer';
2
+ export declare const getPresetProfile: () => x264Preset | undefined;
3
+ export declare const setPresetProfile: (profile: x264Preset | undefined) => void;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setPresetProfile = exports.getPresetProfile = void 0;
4
+ let preset;
5
+ const getPresetProfile = () => {
6
+ return preset;
7
+ };
8
+ exports.getPresetProfile = getPresetProfile;
9
+ const setPresetProfile = (profile) => {
10
+ preset = profile;
11
+ };
12
+ exports.setPresetProfile = setPresetProfile;
@@ -18,10 +18,6 @@ const container = {
18
18
  overflow: 'hidden',
19
19
  backgroundColor: colors_1.BACKGROUND,
20
20
  };
21
- const list = {
22
- height: 'calc(100% - 80px)',
23
- overflowY: 'auto',
24
- };
25
21
  const getKeysToExpand = (initialFolderName, parentFolderName, initial = []) => {
26
22
  initial.push((0, persist_open_folders_1.openFolderKey)(initialFolderName, parentFolderName));
27
23
  const { name, parent } = (0, create_folder_tree_1.splitParentIntoNameAndParent)(parentFolderName);
@@ -90,10 +86,17 @@ const CompositionSelector = () => {
90
86
  const items = (0, react_1.useMemo)(() => {
91
87
  return (0, create_folder_tree_1.createFolderTree)(compositions, folders, foldersExpanded);
92
88
  }, [compositions, folders, foldersExpanded]);
93
- return ((0, jsx_runtime_1.jsxs)("div", { style: container, children: [canvasContent && canvasContent.type === 'composition' ? ((0, jsx_runtime_1.jsx)(CurrentComposition_1.CurrentComposition, {})) : null, (0, jsx_runtime_1.jsx)("div", { className: "__remotion-vertical-scrollbar", style: list, children: items.map((c) => {
94
- return ((0, jsx_runtime_1.jsx)(CompositionSelectorItem_1.CompositionSelectorItem, { level: 0, currentComposition: canvasContent && canvasContent.type === 'composition'
95
- ? canvasContent.compositionId
96
- : null, selectComposition: selectComposition, toggleFolder: toggleFolder, tabIndex: tabIndex, item: c }, c.key + c.type));
89
+ const showCurrentComposition = canvasContent && canvasContent.type === 'composition';
90
+ const list = (0, react_1.useMemo)(() => {
91
+ return {
92
+ height: showCurrentComposition
93
+ ? `calc(100% - ${CurrentComposition_1.CURRENT_COMPOSITION_HEIGHT}px)`
94
+ : '100%',
95
+ overflowY: 'auto',
96
+ };
97
+ }, [showCurrentComposition]);
98
+ return ((0, jsx_runtime_1.jsxs)("div", { style: container, children: [showCurrentComposition ? (0, jsx_runtime_1.jsx)(CurrentComposition_1.CurrentComposition, {}) : null, (0, jsx_runtime_1.jsx)("div", { className: "__remotion-vertical-scrollbar", style: list, children: items.map((c) => {
99
+ return ((0, jsx_runtime_1.jsx)(CompositionSelectorItem_1.CompositionSelectorItem, { level: 0, currentComposition: showCurrentComposition ? canvasContent.compositionId : null, selectComposition: selectComposition, toggleFolder: toggleFolder, tabIndex: tabIndex, item: c }, c.key + c.type));
97
100
  }) })] }));
98
101
  };
99
102
  exports.CompositionSelector = CompositionSelector;
@@ -1,2 +1,3 @@
1
1
  /// <reference types="react" />
2
+ export declare const CURRENT_COMPOSITION_HEIGHT = 80;
2
3
  export declare const CurrentComposition: () => JSX.Element;
@@ -1,13 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CurrentComposition = void 0;
3
+ exports.CurrentComposition = exports.CURRENT_COMPOSITION_HEIGHT = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const remotion_1 = require("remotion");
6
6
  const colors_1 = require("../helpers/colors");
7
7
  const is_composition_still_1 = require("../helpers/is-composition-still");
8
8
  const render_frame_1 = require("../state/render-frame");
9
+ exports.CURRENT_COMPOSITION_HEIGHT = 80;
9
10
  const container = {
10
- height: 80,
11
+ height: exports.CURRENT_COMPOSITION_HEIGHT,
11
12
  display: 'block',
12
13
  borderBottom: `1px solid ${colors_1.BORDER_COLOR}`,
13
14
  padding: 12,
File without changes
@@ -0,0 +1 @@
1
+ "use strict";
@@ -40,6 +40,6 @@ const MenuBuildIndicator = () => {
40
40
  window.remotion_finishedBuilding = undefined;
41
41
  };
42
42
  }, []);
43
- return ((0, jsx_runtime_1.jsxs)("div", { style: cwd, title: window.remotion_cwd, children: [showButton ? (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }) : null, isBuilding ? ((0, jsx_runtime_1.jsx)("div", { style: spinner, children: (0, jsx_runtime_1.jsx)(Spinner_1.Spinner, { duration: 0.5, size: spinnerSize }) })) : ((0, jsx_runtime_1.jsx)("div", { style: noSpinner })), showButton ? (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }) : null, window.remotion_projectName, showButton ? (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }) : null, showButton ? (0, jsx_runtime_1.jsx)(OpenEditorButton_1.OpenEditorButton, {}) : null] }));
43
+ return ((0, jsx_runtime_1.jsxs)("div", { style: cwd, title: window.remotion_cwd, children: [showButton ? (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }) : null, isBuilding ? ((0, jsx_runtime_1.jsx)("div", { style: spinner, children: (0, jsx_runtime_1.jsx)(Spinner_1.Spinner, { duration: 0.5, size: spinnerSize }) })) : ((0, jsx_runtime_1.jsx)("div", { style: noSpinner })), showButton ? (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.5 }) : null, window.remotion_projectName, showButton ? (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.25 }) : null, showButton ? (0, jsx_runtime_1.jsx)(OpenEditorButton_1.OpenEditorButton, {}) : null] }));
44
44
  };
45
45
  exports.MenuBuildIndicator = MenuBuildIndicator;
@@ -22,13 +22,13 @@ const row = {
22
22
  backgroundColor: colors_1.BACKGROUND,
23
23
  };
24
24
  const fixedWidthRight = {
25
- minWidth: '350px',
25
+ width: '330px',
26
26
  display: 'flex',
27
27
  alignItems: 'center',
28
28
  justifyContent: 'flex-end',
29
29
  };
30
30
  const fixedWidthLeft = {
31
- minWidth: '350px',
31
+ minWidth: '330px',
32
32
  display: 'flex',
33
33
  alignItems: 'center',
34
34
  justifyContent: 'flex-start',
@@ -75,7 +75,7 @@ const MenuToolbar = () => {
75
75
  const onItemQuit = (0, react_1.useCallback)(() => {
76
76
  setSelected(null);
77
77
  }, [setSelected]);
78
- return ((0, jsx_runtime_1.jsxs)(layout_1.Row, { justify: "center", align: "center", className: "css-reset", style: row, children: [(0, jsx_runtime_1.jsxs)("div", { style: fixedWidthLeft, children: [structure.map((s) => {
78
+ return ((0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", className: "css-reset", style: row, children: [(0, jsx_runtime_1.jsxs)("div", { style: fixedWidthLeft, children: [structure.map((s) => {
79
79
  return ((0, jsx_runtime_1.jsx)(MenuItem_1.MenuItem, { selected: selected === s.id, onItemSelected: itemClicked, onItemHovered: itemHovered, id: s.id, label: s.label, onItemQuit: onItemQuit, menu: s, onPreviousMenu: onPreviousMenu, onNextMenu: onNextMenu, leaveLeftPadding: s.leaveLeftPadding }, s.id));
80
80
  }), (0, jsx_runtime_1.jsx)(UpdateCheck_1.UpdateCheck, {})] }), (0, jsx_runtime_1.jsx)("div", { style: flex }), (0, jsx_runtime_1.jsx)(MenuBuildIndicator_1.MenuBuildIndicator, {}), (0, jsx_runtime_1.jsx)("div", { style: flex }), (0, jsx_runtime_1.jsx)("div", { style: fixedWidthRight, children: (0, jsx_runtime_1.jsx)(SidebarCollapserControls_1.SidebarCollapserControls, {}) }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 })] }));
81
81
  };
@@ -13,5 +13,5 @@ export declare const getInputBorderColor: ({ status, isFocused, isHovered, }: {
13
13
  isFocused: boolean;
14
14
  isHovered: boolean;
15
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" | keyof React.InputHTMLAttributes<HTMLInputElement> | "rightAlign"> & React.RefAttributes<HTMLInputElement>>;
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 {};
@@ -7,12 +7,11 @@ const colors_1 = require("../helpers/colors");
7
7
  const open_in_editor_1 = require("../helpers/open-in-editor");
8
8
  const NotificationCenter_1 = require("./Notifications/NotificationCenter");
9
9
  const svgStyle = {
10
- width: '11px',
11
- height: '11px',
10
+ width: 11,
11
+ height: 11,
12
12
  };
13
13
  const buttonStyle = {
14
14
  border: 'none',
15
- width: '20px',
16
15
  height: '20px',
17
16
  display: 'flex',
18
17
  justifyContent: 'center',
@@ -16,6 +16,10 @@ const in_out_1 = require("../state/in-out");
16
16
  const ControlButton_1 = require("./ControlButton");
17
17
  const imperative_state_1 = require("./Timeline/imperative-state");
18
18
  const timeline_scroll_logic_1 = require("./Timeline/timeline-scroll-logic");
19
+ const backStyle = {
20
+ height: 18,
21
+ color: 'white',
22
+ };
19
23
  const forwardBackStyle = {
20
24
  height: 16,
21
25
  color: 'white',
@@ -186,7 +190,7 @@ const PlayPause = ({ playbackRate, loop }) => {
186
190
  onEnter,
187
191
  onSpace,
188
192
  ]);
189
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ControlButton_1.ControlButton, { "aria-label": "Jump to beginning", title: "Jump to beginning", disabled: !videoConfig || isFirstFrame, onClick: jumpToStart, children: (0, jsx_runtime_1.jsx)(jump_to_start_1.JumpToStart, { style: forwardBackStyle }) }), (0, jsx_runtime_1.jsx)(ControlButton_1.ControlButton, { "aria-label": "Step back one frame", title: "Step back one frame", disabled: !videoConfig || isFirstFrame, onClick: oneFrameBack, children: (0, jsx_runtime_1.jsx)(step_back_1.StepBack, { style: forwardBackStyle }) }), (0, jsx_runtime_1.jsx)(ControlButton_1.ControlButton, { "aria-label": playing ? 'Pause' : 'Play', title: playing ? 'Pause' : 'Play', onClick: playing ? pause : play, disabled: !videoConfig, children: playing ? ((0, jsx_runtime_1.jsx)(pause_1.Pause, { style: {
193
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ControlButton_1.ControlButton, { "aria-label": "Jump to beginning", title: "Jump to beginning", disabled: !videoConfig || isFirstFrame, onClick: jumpToStart, children: (0, jsx_runtime_1.jsx)(jump_to_start_1.JumpToStart, { style: backStyle }) }), (0, jsx_runtime_1.jsx)(ControlButton_1.ControlButton, { "aria-label": "Step back one frame", title: "Step back one frame", disabled: !videoConfig || isFirstFrame, onClick: oneFrameBack, children: (0, jsx_runtime_1.jsx)(step_back_1.StepBack, { style: forwardBackStyle }) }), (0, jsx_runtime_1.jsx)(ControlButton_1.ControlButton, { "aria-label": playing ? 'Pause' : 'Play', title: playing ? 'Pause' : 'Play', onClick: playing ? pause : play, disabled: !videoConfig, children: playing ? ((0, jsx_runtime_1.jsx)(pause_1.Pause, { style: {
190
194
  height: 14,
191
195
  width: 14,
192
196
  color: 'white',
@@ -50,6 +50,6 @@ const PreviewToolbar = () => {
50
50
  const isStill = (0, is_current_selected_still_1.useIsStill)();
51
51
  const [loop, setLoop] = (0, react_1.useState)((0, loop_1.loadLoopOption)());
52
52
  const isFullscreenSupported = document.fullscreenEnabled || document.webkitFullscreenEnabled;
53
- return ((0, jsx_runtime_1.jsxs)("div", { style: container, className: "css-reset", children: [(0, jsx_runtime_1.jsxs)("div", { style: sideContainer, children: [(0, jsx_runtime_1.jsx)("div", { style: padding }), (0, jsx_runtime_1.jsx)(TimelineZoomControls_1.TimelineZoomControls, {})] }), (0, jsx_runtime_1.jsx)(layout_1.Flex, {}), (0, jsx_runtime_1.jsx)(SizeSelector_1.SizeSelector, {}), isStill || isVideoComposition ? ((0, jsx_runtime_1.jsx)(PlaybackRateSelector_1.PlaybackRateSelector, { setPlaybackRate: setPlaybackRate, playbackRate: playbackRate })) : null, isVideoComposition ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(PlayPause_1.PlayPause, { loop: loop, playbackRate: playbackRate }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(LoopToggle_1.LoopToggle, { loop: loop, setLoop: setLoop }), (0, jsx_runtime_1.jsx)(CheckboardToggle_1.CheckboardToggle, {}), (0, jsx_runtime_1.jsx)(TimelineInOutToggle_1.TimelineInOutPointToggle, {}), (0, jsx_runtime_1.jsx)(MuteToggle_1.MuteToggle, { muted: mediaMuted, setMuted: setMediaMuted })] })) : null, isFullscreenSupported && (0, jsx_runtime_1.jsx)(FullscreenToggle_1.FullScreenToggle, {}), (0, jsx_runtime_1.jsx)(layout_1.Flex, {}), (0, jsx_runtime_1.jsxs)("div", { style: sideContainer, children: [(0, jsx_runtime_1.jsx)(layout_1.Flex, {}), (0, jsx_runtime_1.jsx)(FpsCounter_1.FpsCounter, { playbackSpeed: playbackRate }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(RenderButton_1.RenderButton, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1.5 })] }), (0, jsx_runtime_1.jsx)(PlaybackKeyboardShortcutsManager_1.PlaybackKeyboardShortcutsManager, { setPlaybackRate: setPlaybackRate }), (0, jsx_runtime_1.jsx)(PlaybackRatePersistor_1.PlaybackRatePersistor, {})] }));
53
+ return ((0, jsx_runtime_1.jsxs)("div", { style: container, className: "css-reset", children: [(0, jsx_runtime_1.jsxs)("div", { style: sideContainer, children: [(0, jsx_runtime_1.jsx)("div", { style: padding }), (0, jsx_runtime_1.jsx)(TimelineZoomControls_1.TimelineZoomControls, {})] }), (0, jsx_runtime_1.jsx)(layout_1.Flex, {}), (0, jsx_runtime_1.jsx)(SizeSelector_1.SizeSelector, {}), isStill || isVideoComposition ? ((0, jsx_runtime_1.jsx)(PlaybackRateSelector_1.PlaybackRateSelector, { setPlaybackRate: setPlaybackRate, playbackRate: playbackRate })) : null, isVideoComposition ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(PlayPause_1.PlayPause, { loop: loop, playbackRate: playbackRate }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(LoopToggle_1.LoopToggle, { loop: loop, setLoop: setLoop }), (0, jsx_runtime_1.jsx)(MuteToggle_1.MuteToggle, { muted: mediaMuted, setMuted: setMediaMuted }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(TimelineInOutToggle_1.TimelineInOutPointToggle, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(CheckboardToggle_1.CheckboardToggle, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 })] })) : null, isFullscreenSupported && (0, jsx_runtime_1.jsx)(FullscreenToggle_1.FullScreenToggle, {}), (0, jsx_runtime_1.jsx)(layout_1.Flex, {}), (0, jsx_runtime_1.jsxs)("div", { style: sideContainer, children: [(0, jsx_runtime_1.jsx)(layout_1.Flex, {}), (0, jsx_runtime_1.jsx)(FpsCounter_1.FpsCounter, { playbackSpeed: playbackRate }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 2 }), (0, jsx_runtime_1.jsx)(RenderButton_1.RenderButton, {}), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1.5 })] }), (0, jsx_runtime_1.jsx)(PlaybackKeyboardShortcutsManager_1.PlaybackKeyboardShortcutsManager, { setPlaybackRate: setPlaybackRate }), (0, jsx_runtime_1.jsx)(PlaybackRatePersistor_1.PlaybackRatePersistor, {})] }));
54
54
  };
55
55
  exports.PreviewToolbar = PreviewToolbar;
@@ -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;
@@ -115,6 +115,11 @@ const SplitterHandle = ({ allowToCollapse, onCollapse }) => {
115
115
  lastPointerUp,
116
116
  onCollapse,
117
117
  ]);
118
- return ((0, jsx_runtime_1.jsx)("div", { ref: ref, className: "remotion-splitter", style: context.orientation === 'horizontal' ? containerRow : containerColumn }));
118
+ return ((0, jsx_runtime_1.jsx)("div", { ref: ref, className: [
119
+ 'remotion-splitter',
120
+ context.orientation === 'horizontal'
121
+ ? 'remotion-splitter-horizontal'
122
+ : 'remotion-splitter-vertical',
123
+ ].join(' '), style: context.orientation === 'horizontal' ? containerRow : containerColumn }));
119
124
  };
120
125
  exports.SplitterHandle = SplitterHandle;
@@ -13,6 +13,11 @@ const isTrackHidden = (track, allTracks, viewState) => {
13
13
  return false;
14
14
  }
15
15
  const parent = allTracks.find((t) => t.sequence.id === track.sequence.parent);
16
+ // Due to effects and conditional `showInTimeline`, a parent
17
+ // may not exist in the `allTracks` array.
18
+ if (!parent) {
19
+ return true;
20
+ }
16
21
  if ((0, exports.isTrackCollapsed)(parent.hash, viewState)) {
17
22
  return true;
18
23
  }
@@ -16,6 +16,8 @@ const buttonStyle = {
16
16
  backgroundColor: 'transparent',
17
17
  cursor: 'pointer',
18
18
  fontSize: 14,
19
+ display: 'inline-flex',
20
+ justifyContent: 'center',
19
21
  };
20
22
  const UpdateCheck = () => {
21
23
  const [info, setInfo] = (0, react_1.useState)(null);
@@ -74,7 +76,7 @@ const UpdateCheck = () => {
74
76
  const dynButtonStyle = (0, react_1.useMemo)(() => {
75
77
  return {
76
78
  ...buttonStyle,
77
- color: hasKnownBugs ? colors_1.WARNING_COLOR : colors_1.BLUE,
79
+ color: hasKnownBugs ? colors_1.WARNING_COLOR : colors_1.LIGHT_TEXT,
78
80
  };
79
81
  }, [hasKnownBugs]);
80
82
  if (!info) {
@@ -83,6 +85,9 @@ const UpdateCheck = () => {
83
85
  if (!info.updateAvailable) {
84
86
  return null;
85
87
  }
86
- return ((0, jsx_runtime_1.jsx)("button", { tabIndex: tabIndex, style: dynButtonStyle, onClick: openModal, type: "button", children: hasKnownBugs ? 'Bugfixes available' : 'Update available' }));
88
+ return ((0, jsx_runtime_1.jsx)("button", { tabIndex: tabIndex, style: dynButtonStyle, onClick: openModal, type: "button", title: hasKnownBugs ? 'Bugfixes available' : 'Update available', children: hasKnownBugs ? ('Bugfixes available') : ((0, jsx_runtime_1.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", style: {
89
+ height: 16,
90
+ width: 16,
91
+ }, viewBox: "0 0 512 512", children: (0, jsx_runtime_1.jsx)("path", { fill: "currentcolor", d: "M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM135.1 217.4c-4.5 4.2-7.1 10.1-7.1 16.3c0 12.3 10 22.3 22.3 22.3H208v96c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32V256h57.7c12.3 0 22.3-10 22.3-22.3c0-6.2-2.6-12.1-7.1-16.3L269.8 117.5c-3.8-3.5-8.7-5.5-13.8-5.5s-10.1 2-13.8 5.5L135.1 217.4z" }) })) }));
87
92
  };
88
93
  exports.UpdateCheck = UpdateCheck;
@@ -58,6 +58,6 @@ const UpdateModal = ({ info, knownBugs }) => {
58
58
  (0, NotificationCenter_1.sendErrorNotification)(`Could not copy: ${err.message}`);
59
59
  });
60
60
  }, [command]);
61
- return ((0, jsx_runtime_1.jsxs)(ModalContainer_1.ModalContainer, { onOutsideClick: onQuit, onEscape: onQuit, children: [(0, jsx_runtime_1.jsx)(ModalHeader_1.NewCompHeader, { title: "Update available" }), (0, jsx_runtime_1.jsxs)("div", { style: container, children: [hasKnownBugs ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { style: title, children: ["The currently installed version ", info.currentVersion, " has the following known bugs:"] }), (0, jsx_runtime_1.jsx)(KnownBugs_1.KnownBugs, { bugs: knownBugs }), (0, jsx_runtime_1.jsx)("div", { style: { height: '20px' } }), (0, jsx_runtime_1.jsx)("div", { style: text, children: "To upgrade, run the following command:" })] })) : ((0, jsx_runtime_1.jsx)("div", { style: text, children: "A new update for Remotion is available! Run the following command:" })), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)(layout_1.Flex, { children: (0, jsx_runtime_1.jsx)("pre", { onClick: onClick, style: code, children: command }) }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsx)(CopyButton_1.CopyButton, { textToCopy: command, label: "Copy", labelWhenCopied: "Copied!" })] }), (0, jsx_runtime_1.jsxs)("div", { style: text, children: ["This will upgrade Remotion from ", info.currentVersion, " to", ' ', info.latestVersion, "."] }), (0, jsx_runtime_1.jsxs)("div", { style: text, children: ["Read the", ' ', (0, jsx_runtime_1.jsx)("a", { style: link, target: "_blank", href: "https://github.com/remotion-dev/remotion/releases", children: "Release notes" }), ' ', "to know what", "'s", " new in Remotion."] })] })] }));
61
+ return ((0, jsx_runtime_1.jsxs)(ModalContainer_1.ModalContainer, { onOutsideClick: onQuit, onEscape: onQuit, children: [(0, jsx_runtime_1.jsx)(ModalHeader_1.NewCompHeader, { title: "Update available" }), (0, jsx_runtime_1.jsxs)("div", { style: container, children: [hasKnownBugs ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { style: title, children: ["The currently installed version ", info.currentVersion, " has the following known bugs:"] }), (0, jsx_runtime_1.jsx)(KnownBugs_1.KnownBugs, { bugs: knownBugs }), (0, jsx_runtime_1.jsx)("div", { style: { height: '20px' } }), (0, jsx_runtime_1.jsx)("div", { style: text, children: "To upgrade, run the following command:" })] })) : ((0, jsx_runtime_1.jsx)("div", { style: title, children: "A new update for Remotion is available! Run the following command:" })), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)(layout_1.Flex, { children: (0, jsx_runtime_1.jsx)("pre", { onClick: onClick, style: code, children: command }) }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 1 }), (0, jsx_runtime_1.jsx)(CopyButton_1.CopyButton, { textToCopy: command, label: "Copy", labelWhenCopied: "Copied!" })] }), (0, jsx_runtime_1.jsxs)("div", { style: text, children: ["This will upgrade Remotion from ", info.currentVersion, " to", ' ', info.latestVersion, "."] }), (0, jsx_runtime_1.jsxs)("div", { style: text, children: ["Read the", ' ', (0, jsx_runtime_1.jsx)("a", { style: link, target: "_blank", href: "https://github.com/remotion-dev/remotion/releases", children: "Release notes" }), ' ', "to know what", "'s", " new in Remotion."] })] })] }));
62
62
  };
63
63
  exports.UpdateModal = UpdateModal;
@@ -9,7 +9,9 @@ const getTimelineSequenceSequenceSortKey = (track, tracks, sameHashes = {}) => {
9
9
  }
10
10
  const parent = tracks.find((t) => t.sequence.id === track.sequence.parent);
11
11
  if (!parent) {
12
- throw new Error('Cannot find parent');
12
+ // Due to effects and conditional `showInTimeline`, a parent
13
+ // may not exist in the `allTracks` array.
14
+ return id;
13
15
  }
14
16
  const firstParentWithSameHash = tracks.find((a) => {
15
17
  return sameHashes[parent.hash].includes(a.sequence.id);
@@ -1,2 +1,2 @@
1
1
  import type { X264Preset } from '@remotion/renderer';
2
- export declare const labelx264Preset: (profile: X264Preset) => "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
2
+ export declare const labelx264Preset: (profile: X264Preset) => "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VolumeOnIcon = exports.VolumeOffIcon = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const colors_1 = require("../helpers/colors");
6
- const size = 25;
6
+ const size = 22;
7
7
  const VolumeOffIcon = () => {
8
8
  return ((0, jsx_runtime_1.jsx)("svg", { width: size, height: size, viewBox: "0 0 24 24", children: (0, jsx_runtime_1.jsx)("path", { d: "M3.63 3.63a.996.996 0 000 1.41L7.29 8.7 7 9H4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h3l3.29 3.29c.63.63 1.71.18 1.71-.71v-4.17l4.18 4.18c-.49.37-1.02.68-1.6.91-.36.15-.58.53-.58.92 0 .72.73 1.18 1.39.91.8-.33 1.55-.77 2.22-1.31l1.34 1.34a.996.996 0 101.41-1.41L5.05 3.63c-.39-.39-1.02-.39-1.42 0zM19 12c0 .82-.15 1.61-.41 2.34l1.53 1.53c.56-1.17.88-2.48.88-3.87 0-3.83-2.4-7.11-5.78-8.4-.59-.23-1.22.23-1.22.86v.19c0 .38.25.71.61.85C17.18 6.54 19 9.06 19 12zm-8.71-6.29l-.17.17L12 7.76V6.41c0-.89-1.08-1.33-1.71-.7zM16.5 12A4.5 4.5 0 0014 7.97v1.79l2.48 2.48c.01-.08.02-.16.02-.24z", fill: colors_1.BLUE }) }));
9
9
  };
package/dist/ffmpeg.js CHANGED
@@ -4,25 +4,28 @@ exports.ffprobeCommand = exports.ffmpegCommand = void 0;
4
4
  const renderer_1 = require("@remotion/renderer");
5
5
  const node_child_process_1 = require("node:child_process");
6
6
  const node_fs_1 = require("node:fs");
7
+ const config_1 = require("./config");
7
8
  const ffmpegCommand = (_root, args) => {
8
- const binary = renderer_1.RenderInternals.getExecutablePath('ffmpeg');
9
+ const logLevel = config_1.ConfigInternals.Logging.getLogLevel();
10
+ const binary = renderer_1.RenderInternals.getExecutablePath('ffmpeg', false, logLevel);
9
11
  if (!process.env.READ_ONLY_FS) {
10
12
  (0, node_fs_1.chmodSync)(binary, 0o755);
11
13
  }
12
14
  const done = (0, node_child_process_1.spawnSync)(binary, args, {
13
- ...renderer_1.RenderInternals.dynamicLibraryPathOptions(),
15
+ ...renderer_1.RenderInternals.dynamicLibraryPathOptions(false, logLevel),
14
16
  stdio: 'inherit',
15
17
  });
16
18
  process.exit(done.status);
17
19
  };
18
20
  exports.ffmpegCommand = ffmpegCommand;
19
21
  const ffprobeCommand = (_root, args) => {
20
- const binary = renderer_1.RenderInternals.getExecutablePath('ffprobe');
22
+ const logLevel = config_1.ConfigInternals.Logging.getLogLevel();
23
+ const binary = renderer_1.RenderInternals.getExecutablePath('ffprobe', false, logLevel);
21
24
  if (!process.env.READ_ONLY_FS) {
22
25
  (0, node_fs_1.chmodSync)(binary, 0o755);
23
26
  }
24
27
  const done = (0, node_child_process_1.spawnSync)(binary, args, {
25
- ...renderer_1.RenderInternals.dynamicLibraryPathOptions(),
28
+ ...renderer_1.RenderInternals.dynamicLibraryPathOptions(false, logLevel),
26
29
  stdio: 'inherit',
27
30
  });
28
31
  process.exit(done.status);
@@ -16,7 +16,7 @@ export declare const getCliOptions: (options: {
16
16
  crf: import("@remotion/renderer").Crf | null;
17
17
  pixelFormat: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
18
18
  proResProfile: "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy" | undefined;
19
- x264Preset: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | undefined;
19
+ x264Preset: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | undefined;
20
20
  everyNthFrame: number;
21
21
  numberOfGifLoops: import("./config/number-of-gif-loops").Loop;
22
22
  stillFrame: number;
@@ -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";
@@ -0,0 +1,2 @@
1
+ import type { LogLevel } from '@remotion/renderer';
2
+ export declare const handleCommonError: (err: Error, logLevel: LogLevel) => Promise<void>;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleCommonError = void 0;
4
+ const chalk_1 = require("./chalk");
5
+ const log_1 = require("./log");
6
+ const print_error_1 = require("./print-error");
7
+ const truthy_1 = require("./truthy");
8
+ const handleCommonError = async (err, logLevel) => {
9
+ var _a;
10
+ await (0, print_error_1.printError)(err, logLevel);
11
+ if (err.message.includes('Could not play video with')) {
12
+ log_1.Log.info();
13
+ log_1.Log.info('💡 Get help for this issue at https://remotion.dev/docs/media-playback-error');
14
+ }
15
+ if (err.message.includes('A delayRender()') &&
16
+ err.message.includes('was called but not cleared after')) {
17
+ log_1.Log.info();
18
+ log_1.Log.info('💡 Get help for this issue at https://remotion.dev/docs/timeout');
19
+ }
20
+ if (err.message.includes('Target closed')) {
21
+ log_1.Log.info();
22
+ log_1.Log.info('💡 Get help for this issue at https://remotion.dev/docs/target-closed');
23
+ }
24
+ if (err.message.includes('ENAMETOOLONG')) {
25
+ log_1.Log.info();
26
+ log_1.Log.info('💡 Get help for this issue at https://remotion.dev/docs/enametoolong');
27
+ }
28
+ if (err.message.includes('Error creating WebGL context')) {
29
+ log_1.Log.info();
30
+ log_1.Log.warn('💡 You might need to set the OpenGL renderer to "angle" (or "swangle" if rendering on lambda). Learn why at https://www.remotion.dev/docs/three');
31
+ log_1.Log.warn("💡 Check how it's done at https://www.remotion.dev/docs/chromium-flags#--gl");
32
+ }
33
+ if (err.message.includes('The bucket does not allow ACLs')) {
34
+ log_1.Log.info();
35
+ log_1.Log.info(chalk_1.chalk.green('💡 Fix this issue https://remotion.dev/docs/lambda/troubleshooting/bucket-disallows-acl'));
36
+ }
37
+ if (err.message.includes('Minified React error #306')) {
38
+ const componentName = (_a = err.message.match(/<\w+>/)) === null || _a === void 0 ? void 0 : _a[0];
39
+ log_1.Log.info([
40
+ '💡 This error indicates that the component',
41
+ componentName ? `(${componentName})` : null,
42
+ 'you are trying to render is not imported correctly.',
43
+ ]
44
+ .filter(truthy_1.truthy)
45
+ .join(' '));
46
+ log_1.Log.info();
47
+ log_1.Log.info(' Check the root file and ensure that the component is not undefined.');
48
+ log_1.Log.info(' Oftentimes, this happens if the component is missing the `export` keyword');
49
+ log_1.Log.info(' or if the component was renamed and the import statement not properly adjusted.');
50
+ }
51
+ if (err.message.includes('GLIBC_')) {
52
+ log_1.Log.info('💡 Remotion requires at least Libc 2.35.');
53
+ log_1.Log.info('💡 Get help for this issue: https://github.com/remotion-dev/remotion/issues/2439');
54
+ }
55
+ if (err.message.includes('EBADF')) {
56
+ log_1.Log.info('💡 This error might be fixed by changing your Node version:');
57
+ log_1.Log.info(' https://github.com/remotion-dev/remotion/issues/2452');
58
+ }
59
+ };
60
+ exports.handleCommonError = handleCommonError;
package/dist/index.d.ts CHANGED
@@ -101,7 +101,7 @@ export declare const CliInternals: {
101
101
  crf: import("@remotion/renderer").Crf | null;
102
102
  pixelFormat: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
103
103
  proResProfile: "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy" | undefined;
104
- x264Preset: "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo" | undefined;
104
+ x264Preset: "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo" | undefined;
105
105
  everyNthFrame: number;
106
106
  numberOfGifLoops: import("./config/number-of-gif-loops").Loop;
107
107
  stillFrame: number;
@@ -119,7 +119,7 @@ export declare const CliInternals: {
119
119
  videoBitrate: string | null;
120
120
  height: number | null;
121
121
  width: number | null;
122
- configFileImageFormat: "png" | "jpeg" | "none" | undefined;
122
+ configFileImageFormat: "none" | "png" | "jpeg" | undefined;
123
123
  offthreadVideoCacheSizeInBytes: number | null;
124
124
  deleteAfter: ("1-day" | "3-days" | "7-days" | "30-days") | null;
125
125
  colorSpace: "default" | "bt709";
@@ -131,9 +131,9 @@ export declare const CliInternals: {
131
131
  parsedCli: {
132
132
  "browser-executable": import("@remotion/renderer").BrowserExecutable;
133
133
  "pixel-format": "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
134
- "image-format": "png" | "jpeg" | "pdf" | "webp" | "none";
134
+ "image-format": "none" | "png" | "jpeg" | "pdf" | "webp";
135
135
  "prores-profile": "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy";
136
- "x264-preset": "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "medium" | "slow" | "slower" | "veryslow" | "placebo";
136
+ "x264-preset": "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
137
137
  "bundle-cache": string;
138
138
  "env-file": string;
139
139
  "ignore-certificate-errors": string;
@@ -202,7 +202,7 @@ export declare const CliInternals: {
202
202
  downloadName: string | null;
203
203
  outName: string | null;
204
204
  configImageFormat: "png" | "jpeg" | "pdf" | "webp" | null;
205
- cliFlag: "png" | "jpeg" | "pdf" | "webp" | "none" | null;
205
+ cliFlag: "none" | "png" | "jpeg" | "pdf" | "webp" | null;
206
206
  isLambda: boolean;
207
207
  fromUi: "png" | "jpeg" | "pdf" | "webp" | null;
208
208
  }) => {
@@ -217,8 +217,8 @@ export declare const CliInternals: {
217
217
  };
218
218
  getVideoImageFormat: ({ codec, uiImageFormat, }: {
219
219
  codec: import("@remotion/renderer").CodecOrUndefined;
220
- uiImageFormat: "png" | "jpeg" | "none" | null;
221
- }) => "png" | "jpeg" | "none";
220
+ uiImageFormat: "none" | "png" | "jpeg" | null;
221
+ }) => "none" | "png" | "jpeg";
222
222
  printCompositions: (compositions: import("remotion").VideoConfig[]) => void;
223
223
  getFinalOutputCodec: ({ cliFlag, configFile, downloadName, outName, uiCodec, compositionCodec, }: {
224
224
  cliFlag: import("@remotion/renderer").CodecOrUndefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/cli",
3
- "version": "4.0.53",
3
+ "version": "4.0.55",
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.53",
39
- "@remotion/media-utils": "4.0.53",
40
- "@remotion/player": "4.0.53",
41
- "@remotion/renderer": "4.0.53",
42
- "remotion": "4.0.53"
38
+ "@remotion/bundler": "4.0.55",
39
+ "@remotion/media-utils": "4.0.55",
40
+ "@remotion/player": "4.0.55",
41
+ "remotion": "4.0.55",
42
+ "@remotion/renderer": "4.0.55"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "react": ">=16.8.0",
@@ -65,8 +65,8 @@
65
65
  "react-dom": "^18.0.0",
66
66
  "vitest": "0.31.1",
67
67
  "zod": "^3.22.3",
68
- "@remotion/zod-types": "4.0.53",
69
- "@remotion/tailwind": "4.0.53"
68
+ "@remotion/zod-types": "4.0.55",
69
+ "@remotion/tailwind": "4.0.55"
70
70
  },
71
71
  "keywords": [
72
72
  "remotion",
package/styles/styles.css CHANGED
@@ -10,14 +10,47 @@ body {
10
10
  }
11
11
 
12
12
  .remotion-splitter {
13
- background-color: black;
14
- transition: background-color 0.2s ease;
15
13
  user-select: none;
16
14
  }
17
15
 
18
- .remotion-splitter:hover,
19
- .remotion-splitter-active {
20
- background-color: var(--remotion-cli-internals-blue);
16
+ .remotion-splitter-horizontal {
17
+ transform: scaleY(2);
18
+ background: linear-gradient(
19
+ to bottom,
20
+ transparent 25%,
21
+ black 25%,
22
+ black 75%,
23
+ transparent
24
+ );
25
+ }
26
+
27
+ .remotion-splitter-horizontal:hover,
28
+ .remotion-splitter-horizontal.remotion-splitter-active {
29
+ background: linear-gradient(
30
+ to bottom,
31
+ var(--remotion-cli-internals-blue),
32
+ var(--remotion-cli-internals-blue)
33
+ );
34
+ }
35
+
36
+ .remotion-splitter-vertical {
37
+ transform: scaleX(2);
38
+ background: linear-gradient(
39
+ to right,
40
+ transparent 25%,
41
+ black 25%,
42
+ black 75%,
43
+ transparent
44
+ );
45
+ }
46
+
47
+ .remotion-splitter-vertical:hover,
48
+ .remotion-splitter-vertical.remotion-splitter-active {
49
+ background: linear-gradient(
50
+ to right,
51
+ var(--remotion-cli-internals-blue),
52
+ var(--remotion-cli-internals-blue)
53
+ );
21
54
  }
22
55
 
23
56
  input::-webkit-outer-spin-button,
@@ -31,7 +64,10 @@ textarea:focus,
31
64
  button:focus,
32
65
  a:focus {
33
66
  outline: none;
34
- box-shadow: inset 1px 1px #555, inset -1px -1px #555, inset 1px -1px #555,
67
+ box-shadow:
68
+ inset 1px 1px #555,
69
+ inset -1px -1px #555,
70
+ inset 1px -1px #555,
35
71
  inset -1px 1px #555;
36
72
  border-radius: 0 !important;
37
73
  }