@remotion/cli 4.0.16 → 4.0.18
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.
- package/dist/cloudrun-command.js +1 -1
- package/dist/editor/components/CurrentCompositionSideEffects.js +9 -5
- package/dist/editor/components/FullscreenToggle.js +23 -1
- package/dist/editor/components/KeyboardShortcutsExplainer.js +1 -1
- package/dist/editor/components/RenderModal/RenderModalJSONPropsEditor.js +4 -0
- package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.js +4 -0
- package/dist/editor/components/RenderModal/SchemaEditor/input-props-serialization.d.ts +14 -0
- package/dist/editor/components/RenderModal/SchemaEditor/input-props-serialization.js +42 -0
- package/dist/editor/components/RightPanel.js +12 -45
- package/dist/editor/helpers/document-title.d.ts +4 -0
- package/dist/editor/helpers/document-title.js +60 -0
- package/dist/editor/helpers/render-modal-sections.d.ts +1 -0
- package/dist/get-cli-options.d.ts +1 -1
- package/dist/get-cli-options.js +1 -1
- package/dist/get-input-props.js +2 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -0
- package/dist/preview-server/routes.d.ts +1 -0
- package/package.json +8 -9
package/dist/cloudrun-command.js
CHANGED
|
@@ -17,7 +17,7 @@ const cloudrunCommand = async (remotionRoot, args) => {
|
|
|
17
17
|
const manager = (0, get_package_manager_1.getPackageManager)(remotionRoot, undefined);
|
|
18
18
|
const installCommand = manager === 'unknown' ? 'npm i' : manager.installCommand;
|
|
19
19
|
log_1.Log.error(err);
|
|
20
|
-
log_1.Log.error('Remotion
|
|
20
|
+
log_1.Log.error('Remotion Cloud Run is not installed.');
|
|
21
21
|
log_1.Log.info('');
|
|
22
22
|
log_1.Log.info('You can install it using:');
|
|
23
23
|
log_1.Log.info(`${installCommand} @remotion/cloudrun@${(0, update_available_1.getRemotionVersion)()}`);
|
|
@@ -4,17 +4,21 @@ exports.CurrentCompositionKeybindings = exports.TitleUpdater = void 0;
|
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const remotion_1 = require("remotion");
|
|
6
6
|
const client_id_1 = require("../helpers/client-id");
|
|
7
|
+
const document_title_1 = require("../helpers/document-title");
|
|
7
8
|
const use_keybinding_1 = require("../helpers/use-keybinding");
|
|
8
9
|
const NotificationCenter_1 = require("./Notifications/NotificationCenter");
|
|
10
|
+
const context_1 = require("./RenderQueue/context");
|
|
9
11
|
const TitleUpdater = () => {
|
|
10
12
|
const video = remotion_1.Internals.useVideo();
|
|
13
|
+
const renderQueue = (0, react_1.useContext)(context_1.RenderQueueContext);
|
|
14
|
+
const { jobs } = renderQueue;
|
|
11
15
|
(0, react_1.useEffect)(() => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
document.title = `${video.id} / ${window.remotion_projectName} - Remotion Studio`;
|
|
16
|
+
var _a;
|
|
17
|
+
(0, document_title_1.setCurrentVideoId)((_a = video === null || video === void 0 ? void 0 : video.id) !== null && _a !== void 0 ? _a : null);
|
|
17
18
|
}, [video]);
|
|
19
|
+
(0, react_1.useEffect)(() => {
|
|
20
|
+
(0, document_title_1.setRenderJobs)(jobs);
|
|
21
|
+
}, [jobs]);
|
|
18
22
|
return null;
|
|
19
23
|
};
|
|
20
24
|
exports.TitleUpdater = TitleUpdater;
|
|
@@ -3,10 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.FullScreenToggle = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
|
+
const truthy_1 = require("../../truthy");
|
|
7
|
+
const use_keybinding_1 = require("../helpers/use-keybinding");
|
|
6
8
|
const canvas_ref_1 = require("../state/canvas-ref");
|
|
7
9
|
const preview_size_1 = require("../state/preview-size");
|
|
8
10
|
const ControlButton_1 = require("./ControlButton");
|
|
11
|
+
const accessibilityLabel = [
|
|
12
|
+
'Enter fullscreen preview',
|
|
13
|
+
(0, use_keybinding_1.areKeyboardShortcutsDisabled)() ? null : '(F)',
|
|
14
|
+
]
|
|
15
|
+
.filter(truthy_1.truthy)
|
|
16
|
+
.join(' ');
|
|
9
17
|
const FullScreenToggle = () => {
|
|
18
|
+
const keybindings = (0, use_keybinding_1.useKeybinding)();
|
|
10
19
|
const { setSize } = (0, react_1.useContext)(preview_size_1.PreviewSizeContext);
|
|
11
20
|
const onClick = (0, react_1.useCallback)(() => {
|
|
12
21
|
var _a;
|
|
@@ -20,6 +29,19 @@ const FullScreenToggle = () => {
|
|
|
20
29
|
},
|
|
21
30
|
}));
|
|
22
31
|
}, [setSize]);
|
|
23
|
-
|
|
32
|
+
(0, react_1.useEffect)(() => {
|
|
33
|
+
const f = keybindings.registerKeybinding({
|
|
34
|
+
event: 'keydown',
|
|
35
|
+
key: 'f',
|
|
36
|
+
callback: onClick,
|
|
37
|
+
commandCtrlKey: false,
|
|
38
|
+
preventDefault: true,
|
|
39
|
+
triggerIfInputFieldFocused: false,
|
|
40
|
+
});
|
|
41
|
+
return () => {
|
|
42
|
+
f.unregister();
|
|
43
|
+
};
|
|
44
|
+
}, [keybindings, onClick]);
|
|
45
|
+
return ((0, jsx_runtime_1.jsx)(ControlButton_1.ControlButton, { title: accessibilityLabel, "aria-label": accessibilityLabel, onClick: onClick, children: (0, jsx_runtime_1.jsx)("svg", { style: { width: 18, height: 18 }, viewBox: "0 0 448 512", fill: "#fff", children: (0, jsx_runtime_1.jsx)("path", { d: "M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z" }) }) }));
|
|
24
46
|
};
|
|
25
47
|
exports.FullScreenToggle = FullScreenToggle;
|
|
@@ -52,6 +52,6 @@ const li = {
|
|
|
52
52
|
fontSize: 14,
|
|
53
53
|
};
|
|
54
54
|
const KeyboardShortcutsExplainer = () => {
|
|
55
|
-
return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, use_keybinding_1.areKeyboardShortcutsDisabled)() ? ((0, jsx_runtime_1.jsxs)("div", { style: keyboardShortcutsDisabled, children: ["Keyboard shortcuts disabled either due to:", (0, jsx_runtime_1.jsxs)("ul", { style: ul, children: [(0, jsx_runtime_1.jsx)("li", { style: li, children: "a) --disable-keyboard-shortcuts being passed" }), (0, jsx_runtime_1.jsx)("li", { style: li, children: "b) Config.setKeyboardShortcutsEnabled(false) being set or" }), (0, jsx_runtime_1.jsx)("li", { style: li, children: " c) a Remotion version mismatch." })] })] })) : null, (0, jsx_runtime_1.jsxs)(layout_1.Row, { style: container, children: [(0, jsx_runtime_1.jsxs)(layout_1.Column, { children: [(0, jsx_runtime_1.jsx)("div", { style: title, children: "Playback" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: (0, jsx_runtime_1.jsx)(keys_1.ShiftIcon, {}) }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: (0, jsx_runtime_1.jsx)(keys_1.ArrowLeft, {}) })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "1 second back" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: (0, jsx_runtime_1.jsx)(keys_1.ArrowLeft, {}) }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Previous frame" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "Space" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Play / Pause" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: (0, jsx_runtime_1.jsx)(keys_1.ArrowRight, {}) }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Next frame" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: (0, jsx_runtime_1.jsx)(keys_1.ShiftIcon, {}) }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: (0, jsx_runtime_1.jsx)(keys_1.ArrowRight, {}) })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "1 second forward" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "A" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Jump to beginning" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "E" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Jump to end" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "J" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Reverse playback" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "K" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Pause" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "L" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Play / Speed up" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "Enter" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Pause & return to playback start" })] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("div", { style: title, children: "Sidebar" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "B" })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Toggle left sidebar" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "J" })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Toggle right sidebar" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "G" })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Toggle both sidebars" })] }), (0, jsx_runtime_1.jsx)("br", {})] }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 8 }), (0, jsx_runtime_1.jsxs)(layout_1.Column, { children: [(0, jsx_runtime_1.jsx)("div", { style: title, children: "Navigation" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "N" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "New composition" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "R" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Render composition" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "T" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Toggle checkerboard transparency" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "?" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Show keyboard shortcuts" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "K" })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Quick Switcher" })] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("div", { style: title, children: "Playback range" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "I" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Set In Point" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "O" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Set Out Point" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "X" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Clear In/Out Points" })] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("div", { style: title, children: "Zoom" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "+" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Zoom in" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "-" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Zoom out" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "0" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Reset zoom" })] }), ' ', (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("div", { style: title, children: "Props Editor" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "S" })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Save" })] })] })] })] }));
|
|
55
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, use_keybinding_1.areKeyboardShortcutsDisabled)() ? ((0, jsx_runtime_1.jsxs)("div", { style: keyboardShortcutsDisabled, children: ["Keyboard shortcuts disabled either due to:", (0, jsx_runtime_1.jsxs)("ul", { style: ul, children: [(0, jsx_runtime_1.jsx)("li", { style: li, children: "a) --disable-keyboard-shortcuts being passed" }), (0, jsx_runtime_1.jsx)("li", { style: li, children: "b) Config.setKeyboardShortcutsEnabled(false) being set or" }), (0, jsx_runtime_1.jsx)("li", { style: li, children: " c) a Remotion version mismatch." })] })] })) : null, (0, jsx_runtime_1.jsxs)(layout_1.Row, { style: container, children: [(0, jsx_runtime_1.jsxs)(layout_1.Column, { children: [(0, jsx_runtime_1.jsx)("div", { style: title, children: "Playback" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: (0, jsx_runtime_1.jsx)(keys_1.ShiftIcon, {}) }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: (0, jsx_runtime_1.jsx)(keys_1.ArrowLeft, {}) })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "1 second back" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: (0, jsx_runtime_1.jsx)(keys_1.ArrowLeft, {}) }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Previous frame" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "Space" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Play / Pause" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: (0, jsx_runtime_1.jsx)(keys_1.ArrowRight, {}) }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Next frame" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: (0, jsx_runtime_1.jsx)(keys_1.ShiftIcon, {}) }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: (0, jsx_runtime_1.jsx)(keys_1.ArrowRight, {}) })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "1 second forward" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "A" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Jump to beginning" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "E" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Jump to end" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "J" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Reverse playback" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "K" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Pause" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "L" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Play / Speed up" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "Enter" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Pause & return to playback start" })] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("div", { style: title, children: "Sidebar" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "B" })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Toggle left sidebar" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "J" })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Toggle right sidebar" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "G" })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Toggle both sidebars" })] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("div", { style: title, children: "View" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "F" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Enter fullscreen" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "esc" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Exit fullscreen" })] })] }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 8 }), (0, jsx_runtime_1.jsxs)(layout_1.Column, { children: [(0, jsx_runtime_1.jsx)("div", { style: title, children: "Navigation" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "N" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "New composition" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "R" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Render composition" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "T" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Toggle checkerboard transparency" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "?" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Show keyboard shortcuts" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "K" })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Quick Switcher" })] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("div", { style: title, children: "Playback range" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "I" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Set In Point" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "O" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Set Out Point" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "X" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Clear In/Out Points" })] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("div", { style: title, children: "Zoom" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "+" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Zoom in" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "-" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Zoom out" })] }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsx)("div", { style: left, children: (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "0" }) }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Reset zoom" })] }), ' ', (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("div", { style: title, children: "Props Editor" }), (0, jsx_runtime_1.jsxs)(layout_1.Row, { align: "center", children: [(0, jsx_runtime_1.jsxs)("div", { style: left, children: [(0, jsx_runtime_1.jsx)("kbd", { style: key, children: ShortcutHint_1.cmdOrCtrlCharacter }), (0, jsx_runtime_1.jsx)(layout_1.Spacing, { x: 0.3 }), (0, jsx_runtime_1.jsx)("kbd", { style: key, children: "S" })] }), (0, jsx_runtime_1.jsx)("div", { style: right, children: "Save" })] })] })] })] }));
|
|
56
56
|
};
|
|
57
57
|
exports.KeyboardShortcutsExplainer = KeyboardShortcutsExplainer;
|
|
@@ -29,6 +29,7 @@ const react_1 = __importStar(require("react"));
|
|
|
29
29
|
const remotion_1 = require("remotion");
|
|
30
30
|
const Button_1 = require("../../../preview-server/error-overlay/remotion-overlay/Button");
|
|
31
31
|
const colors_1 = require("../../helpers/colors");
|
|
32
|
+
const document_title_1 = require("../../helpers/document-title");
|
|
32
33
|
const use_keybinding_1 = require("../../helpers/use-keybinding");
|
|
33
34
|
const layout_1 = require("../layout");
|
|
34
35
|
const RemTextarea_1 = require("../NewComposition/RemTextarea");
|
|
@@ -95,6 +96,9 @@ const RenderModalJSONPropsEditor = ({ setValue, value, defaultProps, onSave, sho
|
|
|
95
96
|
const hasChanged = (0, react_1.useMemo)(() => {
|
|
96
97
|
return !(0, deep_equal_1.deepEqual)(value, defaultProps);
|
|
97
98
|
}, [defaultProps, value]);
|
|
99
|
+
(0, react_1.useEffect)(() => {
|
|
100
|
+
(0, document_title_1.setUnsavedProps)(hasChanged);
|
|
101
|
+
}, [hasChanged]);
|
|
98
102
|
const onQuickSave = (0, react_1.useCallback)(() => {
|
|
99
103
|
if (hasChanged) {
|
|
100
104
|
onSave();
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SchemaEditor = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
|
+
const document_title_1 = require("../../../helpers/document-title");
|
|
6
7
|
const use_keybinding_1 = require("../../../helpers/use-keybinding");
|
|
7
8
|
const get_zod_if_possible_1 = require("../../get-zod-if-possible");
|
|
8
9
|
const is_menu_item_1 = require("../../Menu/is-menu-item");
|
|
@@ -23,6 +24,9 @@ const SchemaEditor = ({ schema, value, setValue, zodValidationResult, defaultPro
|
|
|
23
24
|
const hasChanged = (0, react_1.useMemo)(() => {
|
|
24
25
|
return !(0, deep_equal_1.deepEqual)(defaultProps, value);
|
|
25
26
|
}, [defaultProps, value]);
|
|
27
|
+
(0, react_1.useEffect)(() => {
|
|
28
|
+
(0, document_title_1.setUnsavedProps)(hasChanged);
|
|
29
|
+
}, [hasChanged]);
|
|
26
30
|
const onQuickSave = (0, react_1.useCallback)(() => {
|
|
27
31
|
if (hasChanged && showSaveButton) {
|
|
28
32
|
onSave(() => {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type SerializedJSONWithCustomFields = {
|
|
2
|
+
serializedString: string;
|
|
3
|
+
customDateUsed: boolean;
|
|
4
|
+
customFileUsed: boolean;
|
|
5
|
+
mapUsed: boolean;
|
|
6
|
+
setUsed: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const FILE_TOKEN = "remotion-file:";
|
|
9
|
+
export declare const serializeJSONWithDate: ({ data, indent, staticBase, }: {
|
|
10
|
+
data: unknown;
|
|
11
|
+
indent: number | undefined;
|
|
12
|
+
staticBase: string;
|
|
13
|
+
}) => SerializedJSONWithCustomFields;
|
|
14
|
+
export declare const deserializeJSONWithCustomFields: (data: string) => any;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deserializeJSONWithCustomFields = exports.serializeJSONWithDate = exports.FILE_TOKEN = void 0;
|
|
4
|
+
const DATE_TOKEN = 'remotion-date:';
|
|
5
|
+
exports.FILE_TOKEN = 'remotion-file:';
|
|
6
|
+
const serializeJSONWithDate = ({ data, indent, staticBase, }) => {
|
|
7
|
+
let customDateUsed = false;
|
|
8
|
+
let customFileUsed = false;
|
|
9
|
+
let mapUsed = false;
|
|
10
|
+
let setUsed = false;
|
|
11
|
+
const serializedString = JSON.stringify(data, function (key, value) {
|
|
12
|
+
const item = this[key];
|
|
13
|
+
if (item instanceof Date) {
|
|
14
|
+
customDateUsed = true;
|
|
15
|
+
return `${DATE_TOKEN}${item.toISOString()}`;
|
|
16
|
+
}
|
|
17
|
+
if (item instanceof Map) {
|
|
18
|
+
mapUsed = true;
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
if (item instanceof Set) {
|
|
22
|
+
setUsed = true;
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
if (typeof item === 'string' && item.startsWith(staticBase)) {
|
|
26
|
+
customFileUsed = true;
|
|
27
|
+
return `${exports.FILE_TOKEN}${item.replace(staticBase + '/', '')}`;
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
}, indent);
|
|
31
|
+
return { serializedString, customDateUsed, customFileUsed, mapUsed, setUsed };
|
|
32
|
+
};
|
|
33
|
+
exports.serializeJSONWithDate = serializeJSONWithDate;
|
|
34
|
+
const deserializeJSONWithCustomFields = (data) => {
|
|
35
|
+
return JSON.parse(data, (_, value) => {
|
|
36
|
+
if (typeof value === 'string' && value.startsWith(DATE_TOKEN)) {
|
|
37
|
+
return new Date(value.replace(DATE_TOKEN, ''));
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
exports.deserializeJSONWithCustomFields = deserializeJSONWithCustomFields;
|
|
@@ -4,10 +4,8 @@ exports.RightPanel = exports.rightSidebarTabs = exports.persistSelectedPanel = v
|
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const remotion_1 = require("remotion");
|
|
7
|
-
const ShortcutHint_1 = require("../../preview-server/error-overlay/remotion-overlay/ShortcutHint");
|
|
8
7
|
const colors_1 = require("../helpers/colors");
|
|
9
8
|
const DataEditor_1 = require("./RenderModal/DataEditor");
|
|
10
|
-
const deep_equal_1 = require("./RenderModal/SchemaEditor/deep-equal");
|
|
11
9
|
const RenderQueue_1 = require("./RenderQueue");
|
|
12
10
|
const RendersTab_1 = require("./RendersTab");
|
|
13
11
|
const Tabs_1 = require("./Tabs");
|
|
@@ -18,10 +16,17 @@ const container = {
|
|
|
18
16
|
display: 'flex',
|
|
19
17
|
flexDirection: 'column',
|
|
20
18
|
};
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
const PropsEditor = ({ composition }) => {
|
|
20
|
+
const { props, updateProps } = (0, react_1.useContext)(remotion_1.Internals.EditorPropsContext);
|
|
21
|
+
const setInputProps = (0, react_1.useCallback)((newProps) => {
|
|
22
|
+
updateProps({
|
|
23
|
+
id: composition.id,
|
|
24
|
+
defaultProps: composition.defaultProps,
|
|
25
|
+
newProps,
|
|
26
|
+
});
|
|
27
|
+
}, [composition.defaultProps, composition.id, updateProps]);
|
|
28
|
+
const actualProps = (0, react_1.useMemo)(() => { var _a, _b; return (_b = (_a = props[composition.id]) !== null && _a !== void 0 ? _a : composition.defaultProps) !== null && _b !== void 0 ? _b : {}; }, [composition.defaultProps, composition.id, props]);
|
|
29
|
+
return ((0, jsx_runtime_1.jsx)(DataEditor_1.DataEditor, { unresolvedComposition: composition, inputProps: actualProps, setInputProps: setInputProps, mayShowSaveButton: true, propsEditType: "default-props" }, composition.id));
|
|
25
30
|
};
|
|
26
31
|
const localStorageKey = 'remotion.sidebarPanel';
|
|
27
32
|
const getSelectedPanel = () => {
|
|
@@ -40,8 +45,6 @@ const persistSelectedPanel = (panel) => {
|
|
|
40
45
|
exports.persistSelectedPanel = persistSelectedPanel;
|
|
41
46
|
exports.rightSidebarTabs = (0, react_1.createRef)();
|
|
42
47
|
const RightPanel = () => {
|
|
43
|
-
const { props, updateProps } = (0, react_1.useContext)(remotion_1.Internals.EditorPropsContext);
|
|
44
|
-
const [saving, setSaving] = (0, react_1.useState)(false);
|
|
45
48
|
const [panel, setPanel] = (0, react_1.useState)(() => getSelectedPanel());
|
|
46
49
|
const onCompositionsSelected = (0, react_1.useCallback)(() => {
|
|
47
50
|
setPanel('input-props');
|
|
@@ -60,14 +63,6 @@ const RightPanel = () => {
|
|
|
60
63
|
};
|
|
61
64
|
}, []);
|
|
62
65
|
const { compositions, currentComposition } = (0, react_1.useContext)(remotion_1.Internals.CompositionManager);
|
|
63
|
-
const circleStyle = (0, react_1.useMemo)(() => {
|
|
64
|
-
const onTabColor = saving ? colors_1.LIGHT_TEXT : 'white';
|
|
65
|
-
return {
|
|
66
|
-
...circle,
|
|
67
|
-
backgroundColor: panel === 'input-props' ? onTabColor : colors_1.LIGHT_TEXT,
|
|
68
|
-
cursor: 'help',
|
|
69
|
-
};
|
|
70
|
-
}, [panel, saving]);
|
|
71
66
|
const composition = (0, react_1.useMemo)(() => {
|
|
72
67
|
for (const comp of compositions) {
|
|
73
68
|
if (comp.id === currentComposition) {
|
|
@@ -76,37 +71,9 @@ const RightPanel = () => {
|
|
|
76
71
|
}
|
|
77
72
|
return null;
|
|
78
73
|
}, [compositions, currentComposition]);
|
|
79
|
-
const saveToolTip = (0, react_1.useMemo)(() => {
|
|
80
|
-
return process.env.KEYBOARD_SHORTCUTS_ENABLED
|
|
81
|
-
? `Save using ${ShortcutHint_1.cmdOrCtrlCharacter}+S`
|
|
82
|
-
: 'There are unsaved changes';
|
|
83
|
-
}, []);
|
|
84
|
-
const setInputProps = (0, react_1.useCallback)((newProps) => {
|
|
85
|
-
if (composition === null) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
updateProps({
|
|
89
|
-
id: composition.id,
|
|
90
|
-
defaultProps: composition.defaultProps,
|
|
91
|
-
newProps,
|
|
92
|
-
});
|
|
93
|
-
}, [composition, updateProps]);
|
|
94
|
-
const actualProps = (0, react_1.useMemo)(() => {
|
|
95
|
-
var _a, _b;
|
|
96
|
-
if (composition === null) {
|
|
97
|
-
return {};
|
|
98
|
-
}
|
|
99
|
-
return (_b = (_a = props[composition.id]) !== null && _a !== void 0 ? _a : composition.defaultProps) !== null && _b !== void 0 ? _b : {};
|
|
100
|
-
}, [composition, props]);
|
|
101
|
-
const unsavedChangesExist = (0, react_1.useMemo)(() => {
|
|
102
|
-
if (composition === null || composition.defaultProps === undefined) {
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
return !(0, deep_equal_1.deepEqual)(composition.defaultProps, actualProps);
|
|
106
|
-
}, [actualProps, composition]);
|
|
107
74
|
if (composition === null) {
|
|
108
75
|
return null;
|
|
109
76
|
}
|
|
110
|
-
return ((0, jsx_runtime_1.jsxs)("div", { style: container, className: "css-reset", children: [(0, jsx_runtime_1.jsx)("div", { style: tabsContainer, children: (0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { children: [(0, jsx_runtime_1.
|
|
77
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: container, className: "css-reset", children: [(0, jsx_runtime_1.jsx)("div", { style: tabsContainer, children: (0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { children: [(0, jsx_runtime_1.jsx)(Tabs_1.Tab, { selected: panel === 'input-props', onClick: onCompositionsSelected, children: "Props" }), (0, jsx_runtime_1.jsx)(RendersTab_1.RendersTab, { onClick: onRendersSelected, selected: panel === 'renders' })] }) }), panel === 'renders' ? ((0, jsx_runtime_1.jsx)(RenderQueue_1.RenderQueue, {})) : ((0, jsx_runtime_1.jsx)(PropsEditor, { composition: composition }))] }));
|
|
111
78
|
};
|
|
112
79
|
exports.RightPanel = RightPanel;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RenderJob } from '../../preview-server/render-queue/job';
|
|
2
|
+
export declare const setCurrentVideoId: (id: string | null) => void;
|
|
3
|
+
export declare const setUnsavedProps: (unsaved: boolean) => void;
|
|
4
|
+
export declare const setRenderJobs: (jobs: RenderJob[]) => void;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setRenderJobs = exports.setUnsavedProps = exports.setCurrentVideoId = void 0;
|
|
4
|
+
const truthy_1 = require("../../truthy");
|
|
5
|
+
let currentVideoId = null;
|
|
6
|
+
let unsavedProps = false;
|
|
7
|
+
let tabInactive = false;
|
|
8
|
+
let renderJobs = [];
|
|
9
|
+
const setCurrentVideoId = (id) => {
|
|
10
|
+
currentVideoId = id;
|
|
11
|
+
updateTitle();
|
|
12
|
+
};
|
|
13
|
+
exports.setCurrentVideoId = setCurrentVideoId;
|
|
14
|
+
const setUnsavedProps = (unsaved) => {
|
|
15
|
+
unsavedProps = unsaved;
|
|
16
|
+
};
|
|
17
|
+
exports.setUnsavedProps = setUnsavedProps;
|
|
18
|
+
const setRenderJobs = (jobs) => {
|
|
19
|
+
renderJobs = jobs;
|
|
20
|
+
updateTitle();
|
|
21
|
+
};
|
|
22
|
+
exports.setRenderJobs = setRenderJobs;
|
|
23
|
+
document.addEventListener('visibilitychange', () => {
|
|
24
|
+
tabInactive = document.visibilityState === 'hidden';
|
|
25
|
+
updateTitle();
|
|
26
|
+
});
|
|
27
|
+
const productName = 'Remotion Studio';
|
|
28
|
+
const suffix = `- ${productName}`;
|
|
29
|
+
const updateTitle = () => {
|
|
30
|
+
if (!currentVideoId) {
|
|
31
|
+
document.title = productName;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const currentCompTitle = `${currentVideoId} / ${window.remotion_projectName}`;
|
|
35
|
+
document.title = [
|
|
36
|
+
getProgressInBrackets(currentVideoId, renderJobs),
|
|
37
|
+
unsavedProps && tabInactive ? '✏️' : null,
|
|
38
|
+
`${currentCompTitle} ${suffix}`,
|
|
39
|
+
]
|
|
40
|
+
.filter(truthy_1.truthy)
|
|
41
|
+
.join(' ');
|
|
42
|
+
};
|
|
43
|
+
const getProgressInBrackets = (selectedCompositionId, jobs) => {
|
|
44
|
+
const currentRender = jobs.find((job) => job.status === 'running');
|
|
45
|
+
if (!currentRender) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
if (currentRender.status !== 'running') {
|
|
49
|
+
throw new Error('expected running job');
|
|
50
|
+
}
|
|
51
|
+
const progInPercent = Math.ceil(currentRender.progress.value * 100);
|
|
52
|
+
const progressInBrackets = currentRender.compositionId === selectedCompositionId
|
|
53
|
+
? `[${progInPercent}%]`
|
|
54
|
+
: `[${progInPercent}% ${currentRender.compositionId}]`;
|
|
55
|
+
return progressInBrackets;
|
|
56
|
+
};
|
|
57
|
+
document.addEventListener('visibilitychange', () => {
|
|
58
|
+
tabInactive = document.visibilityState === 'hidden';
|
|
59
|
+
updateTitle();
|
|
60
|
+
});
|
|
@@ -12,7 +12,7 @@ export declare const getCliOptions: (options: {
|
|
|
12
12
|
inputProps: Record<string, unknown>;
|
|
13
13
|
envVariables: Record<string, string>;
|
|
14
14
|
jpegQuality: number;
|
|
15
|
-
browser:
|
|
15
|
+
browser: "chrome";
|
|
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;
|
package/dist/get-cli-options.js
CHANGED
|
@@ -47,7 +47,7 @@ const getProResProfile = () => {
|
|
|
47
47
|
const getAndValidateBrowser = async (browserExecutable) => {
|
|
48
48
|
const browser = getBrowser();
|
|
49
49
|
try {
|
|
50
|
-
await renderer_1.RenderInternals.ensureLocalBrowser(
|
|
50
|
+
await renderer_1.RenderInternals.ensureLocalBrowser(browserExecutable);
|
|
51
51
|
}
|
|
52
52
|
catch (err) {
|
|
53
53
|
log_1.Log.error('Could not download a browser for rendering frames.');
|
package/dist/get-input-props.js
CHANGED
|
@@ -33,7 +33,8 @@ const getInputProps = (onUpdate) => {
|
|
|
33
33
|
return JSON.parse(parse_command_line_1.parsedCli.props);
|
|
34
34
|
}
|
|
35
35
|
catch (err) {
|
|
36
|
-
log_1.Log.error('You passed --props but it was neither valid JSON nor a file path to a valid JSON file.'
|
|
36
|
+
log_1.Log.error('You passed --props but it was neither valid JSON nor a file path to a valid JSON file. Provided value: ' +
|
|
37
|
+
parse_command_line_1.parsedCli.props);
|
|
37
38
|
log_1.Log.info('Got the following value:', parse_command_line_1.parsedCli.props);
|
|
38
39
|
log_1.Log.error('Check that your input is parseable using `JSON.parse` and try again.');
|
|
39
40
|
if (node_os_1.default.platform() === 'win32') {
|
package/dist/index.d.ts
CHANGED
|
@@ -97,7 +97,7 @@ export declare const CliInternals: {
|
|
|
97
97
|
inputProps: Record<string, unknown>;
|
|
98
98
|
envVariables: Record<string, string>;
|
|
99
99
|
jpegQuality: number;
|
|
100
|
-
browser:
|
|
100
|
+
browser: "chrome";
|
|
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;
|
package/dist/index.js
CHANGED
|
@@ -23,6 +23,7 @@ const minimist_1 = __importDefault(require("minimist"));
|
|
|
23
23
|
const benchmark_1 = require("./benchmark");
|
|
24
24
|
const chalk_1 = require("./chalk");
|
|
25
25
|
const cleanup_before_quit_1 = require("./cleanup-before-quit");
|
|
26
|
+
const cloudrun_command_1 = require("./cloudrun-command");
|
|
26
27
|
const compositions_1 = require("./compositions");
|
|
27
28
|
const config_1 = require("./config");
|
|
28
29
|
const determine_image_format_1 = require("./determine-image-format");
|
|
@@ -77,6 +78,9 @@ const cli = async () => {
|
|
|
77
78
|
else if (command === 'lambda') {
|
|
78
79
|
await (0, lambda_command_1.lambdaCommand)(remotionRoot, args);
|
|
79
80
|
}
|
|
81
|
+
else if (command === 'cloudrun') {
|
|
82
|
+
await (0, cloudrun_command_1.cloudrunCommand)(remotionRoot, args);
|
|
83
|
+
}
|
|
80
84
|
else if (command === 'render') {
|
|
81
85
|
await (0, render_1.render)(remotionRoot, args);
|
|
82
86
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
3
|
import type { LiveEventsServer } from './live-events';
|
|
3
4
|
export declare const handleRoutes: ({ hash, hashPrefix, request, response, liveEventsServer, getCurrentInputProps, getEnvVariables, remotionRoot, entryPoint, publicDir, }: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/cli",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.18",
|
|
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": "4.0.
|
|
39
|
-
"@remotion/
|
|
40
|
-
"@remotion/
|
|
41
|
-
"
|
|
42
|
-
"@remotion/
|
|
38
|
+
"@remotion/media-utils": "4.0.18",
|
|
39
|
+
"@remotion/player": "4.0.18",
|
|
40
|
+
"@remotion/renderer": "4.0.18",
|
|
41
|
+
"remotion": "4.0.18",
|
|
42
|
+
"@remotion/bundler": "4.0.18"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"react": ">=16.8.0",
|
|
@@ -62,11 +62,10 @@
|
|
|
62
62
|
"prettier-plugin-organize-imports": "^3.2.2",
|
|
63
63
|
"react": "^18.0.0",
|
|
64
64
|
"react-dom": "^18.0.0",
|
|
65
|
-
"typescript": "4.9.5",
|
|
66
65
|
"vitest": "0.31.1",
|
|
67
66
|
"zod": "^3.21.4",
|
|
68
|
-
"@remotion/tailwind": "4.0.
|
|
69
|
-
"@remotion/zod-types": "4.0.
|
|
67
|
+
"@remotion/tailwind": "4.0.18",
|
|
68
|
+
"@remotion/zod-types": "4.0.18"
|
|
70
69
|
},
|
|
71
70
|
"keywords": [
|
|
72
71
|
"remotion",
|