@remotion/cli 3.3.1 → 3.3.3
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/compositions.js +2 -44
- package/dist/config/index.js +2 -0
- package/dist/config/number-of-shared-audio-tags.d.ts +2 -0
- package/dist/config/number-of-shared-audio-tags.js +12 -0
- package/dist/editor/components/RenderButton.d.ts +6 -0
- package/dist/editor/components/RenderButton.js +53 -0
- package/dist/editor/components/RenderModal/RenderModal.d.ts +5 -0
- package/dist/editor/components/RenderModal/RenderModal.js +90 -0
- package/dist/editor/components/RenderQueue/RenderQueueItem.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueItem.js +25 -0
- package/dist/editor/components/RenderQueue/RenderQueueItemStatus.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueItemStatus.js +19 -0
- package/dist/editor/components/RenderQueue/RenderQueueOutputName.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueOutputName.js +70 -0
- package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +56 -0
- package/dist/editor/components/RenderQueue/context.d.ts +18 -0
- package/dist/editor/components/RenderQueue/context.js +49 -0
- package/dist/editor/components/RenderQueue/index.d.ts +2 -0
- package/dist/editor/components/RenderQueue/index.js +18 -0
- package/dist/editor/components/RendersTab.d.ts +6 -0
- package/dist/editor/components/RendersTab.js +40 -0
- package/dist/editor/components/SidebarContent.d.ts +5 -0
- package/dist/editor/components/SidebarContent.js +34 -0
- package/dist/editor/components/Tabs/index.d.ts +11 -0
- package/dist/editor/components/Tabs/index.js +49 -0
- package/dist/editor/icons/render.d.ts +6 -0
- package/dist/editor/icons/render.js +8 -0
- package/dist/get-default-out-name.d.ts +4 -0
- package/dist/get-default-out-name.js +8 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +2 -0
- package/dist/parse-command-line.d.ts +8 -2
- package/dist/preview-server/live-event-listener.d.ts +0 -0
- package/dist/preview-server/live-event-listener.js +1 -0
- package/dist/preview-server/parse-body.d.ts +2 -0
- package/dist/preview-server/parse-body.js +16 -0
- package/dist/preview-server/render-queue/add-render.d.ts +2 -0
- package/dist/preview-server/render-queue/add-render.js +39 -0
- package/dist/preview-server/render-queue/index.d.ts +7 -0
- package/dist/preview-server/render-queue/index.js +105 -0
- package/dist/preview-server/render-queue/job.d.ts +29 -0
- package/dist/preview-server/render-queue/job.js +2 -0
- package/dist/preview-server/render-queue/open-directory-in-finder.d.ts +1 -0
- package/dist/preview-server/render-queue/open-directory-in-finder.js +32 -0
- package/dist/preview-server/render-queue/open-in-file-explorer.d.ts +2 -0
- package/dist/preview-server/render-queue/open-in-file-explorer.js +30 -0
- package/dist/preview-server/render-queue/remove-render.d.ts +2 -0
- package/dist/preview-server/render-queue/remove-render.js +28 -0
- package/dist/preview-server/routes.js +4 -0
- package/dist/previewEntry.js +1 -1
- package/dist/print-compositions.d.ts +2 -0
- package/dist/print-compositions.js +50 -0
- package/dist/progress-bar.d.ts +13 -1
- package/dist/progress-bar.js +41 -2
- package/dist/setup-cache.js +52 -5
- package/package.json +7 -7
- package/dist/deps.d.ts +0 -2
- package/dist/deps.js +0 -36
- package/dist/editor/components/KeyboardShortcutsModal.d.ts +0 -2
- package/dist/editor/components/KeyboardShortcutsModal.js +0 -67
- package/dist/editor/components/QuickSwitcher/agolia-search.d.ts +0 -2
- package/dist/editor/components/QuickSwitcher/agolia-search.js +0 -40
- package/dist/remotion-cli.d.ts +0 -1
- package/dist/remotion-cli.js +0 -15
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Tab = exports.Tabs = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const colors_1 = require("../../helpers/colors");
|
|
7
|
+
const tabsContainer = {
|
|
8
|
+
display: 'flex',
|
|
9
|
+
flexDirection: 'row',
|
|
10
|
+
};
|
|
11
|
+
const Tabs = ({ children, style }) => {
|
|
12
|
+
const definiteStyle = (0, react_1.useMemo)(() => {
|
|
13
|
+
return {
|
|
14
|
+
...tabsContainer,
|
|
15
|
+
...style,
|
|
16
|
+
};
|
|
17
|
+
}, [style]);
|
|
18
|
+
return (0, jsx_runtime_1.jsx)("div", { style: definiteStyle, children: children });
|
|
19
|
+
};
|
|
20
|
+
exports.Tabs = Tabs;
|
|
21
|
+
const selectorButton = {
|
|
22
|
+
border: 'none',
|
|
23
|
+
flex: 1,
|
|
24
|
+
padding: 8,
|
|
25
|
+
fontSize: 13,
|
|
26
|
+
};
|
|
27
|
+
const Tab = ({ children, onClick, style, selected }) => {
|
|
28
|
+
const [hovered, setHovered] = (0, react_1.useState)(false);
|
|
29
|
+
const onPointerEnter = (0, react_1.useCallback)(() => {
|
|
30
|
+
setHovered(true);
|
|
31
|
+
}, []);
|
|
32
|
+
const onPointerLeave = (0, react_1.useCallback)(() => {
|
|
33
|
+
setHovered(false);
|
|
34
|
+
}, []);
|
|
35
|
+
const definiteStyle = (0, react_1.useMemo)(() => {
|
|
36
|
+
return {
|
|
37
|
+
...selectorButton,
|
|
38
|
+
backgroundColor: selected
|
|
39
|
+
? colors_1.SELECTED_BACKGROUND
|
|
40
|
+
: hovered
|
|
41
|
+
? colors_1.CLEAR_HOVER
|
|
42
|
+
: 'transparent',
|
|
43
|
+
color: selected ? 'white' : colors_1.LIGHT_TEXT,
|
|
44
|
+
...style,
|
|
45
|
+
};
|
|
46
|
+
}, [hovered, selected, style]);
|
|
47
|
+
return ((0, jsx_runtime_1.jsx)("button", { style: definiteStyle, type: "button", onClick: onClick, onPointerLeave: onPointerLeave, onPointerEnter: onPointerEnter, children: children }));
|
|
48
|
+
};
|
|
49
|
+
exports.Tab = Tab;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RenderIcon = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const RenderIcon = (props) => {
|
|
6
|
+
return ((0, jsx_runtime_1.jsx)("svg", { ...props.svgProps, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 512 512", children: (0, jsx_runtime_1.jsx)("path", { fill: props.color, d: "M408 143.1C408 166.1 390.1 183.1 368 183.1C345.9 183.1 328 166.1 328 143.1C328 121.9 345.9 103.1 368 103.1C390.1 103.1 408 121.9 408 143.1zM384 312.1V394.2C384 419.7 370.6 443.2 348.7 456.2L260.2 508.6C252.8 513 243.6 513.1 236.1 508.9C228.6 504.6 224 496.6 224 488V373.3C224 350.6 215 328.1 199 312.1C183 296.1 161.4 288 138.7 288H24C15.38 288 7.414 283.4 3.146 275.9C-1.123 268.4-1.042 259.2 3.357 251.8L55.83 163.3C68.79 141.4 92.33 127.1 117.8 127.1H199.9C281.7-3.798 408.8-8.546 483.9 5.272C495.6 7.411 504.6 16.45 506.7 28.07C520.5 103.2 515.8 230.3 384 312.1V312.1zM197.9 253.9C210.8 260.2 222.6 268.7 232.1 279C243.3 289.4 251.8 301.2 258.1 314.1C363.9 284.1 414.8 234.5 439.7 188C464.7 141.3 466.1 90.47 461.7 50.33C421.5 45.02 370.7 47.34 323.1 72.33C277.5 97.16 227.9 148.1 197.9 253.9H197.9zM41.98 345.5C76.37 311.1 132.1 311.1 166.5 345.5C200.9 379.9 200.9 435.6 166.5 470C117 519.5 .4765 511.5 .4765 511.5C.4765 511.5-7.516 394.1 41.98 345.5V345.5zM64.58 447.4C64.58 447.4 103.3 450.1 119.8 433.6C131.2 422.2 131.2 403.6 119.8 392.2C108.3 380.8 89.81 380.8 78.38 392.2C61.92 408.7 64.58 447.4 64.58 447.4z" }) }));
|
|
7
|
+
};
|
|
8
|
+
exports.RenderIcon = RenderIcon;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDefaultOutLocation = void 0;
|
|
4
|
+
const getDefaultOutLocation = ({ compositionName, defaultExtension, }) => {
|
|
5
|
+
const defaultName = `out/${compositionName}.${defaultExtension}`;
|
|
6
|
+
return defaultName;
|
|
7
|
+
};
|
|
8
|
+
exports.getDefaultOutLocation = getDefaultOutLocation;
|
package/dist/index.d.ts
CHANGED
|
@@ -106,7 +106,9 @@ export declare const CliInternals: {
|
|
|
106
106
|
initializeCli: (remotionRoot: string) => Promise<void>;
|
|
107
107
|
BooleanFlags: string[];
|
|
108
108
|
quietFlagProvided: () => boolean;
|
|
109
|
-
parsedCli: import("./parse-command-line").CommandLineOptions &
|
|
109
|
+
parsedCli: import("./parse-command-line").CommandLineOptions & {
|
|
110
|
+
_: string[];
|
|
111
|
+
};
|
|
110
112
|
handleCommonError: (err: Error) => Promise<void>;
|
|
111
113
|
formatBytes: (number: number, options?: Intl.NumberFormatOptions & {
|
|
112
114
|
locale: string;
|
|
@@ -143,4 +145,5 @@ export declare const CliInternals: {
|
|
|
143
145
|
reason: string;
|
|
144
146
|
};
|
|
145
147
|
getImageFormat: (codec: import("@remotion/renderer").CodecOrUndefined) => "png" | "jpeg" | "none";
|
|
148
|
+
printCompositions: (compositions: import("remotion").TCompMetadata[]) => void;
|
|
146
149
|
};
|
package/dist/index.js
CHANGED
|
@@ -39,6 +39,7 @@ const log_1 = require("./log");
|
|
|
39
39
|
const make_progress_bar_1 = require("./make-progress-bar");
|
|
40
40
|
const parse_command_line_1 = require("./parse-command-line");
|
|
41
41
|
const preview_1 = require("./preview");
|
|
42
|
+
const print_compositions_1 = require("./print-compositions");
|
|
42
43
|
const print_help_1 = require("./print-help");
|
|
43
44
|
const progress_bar_1 = require("./progress-bar");
|
|
44
45
|
const render_1 = require("./render");
|
|
@@ -133,4 +134,5 @@ exports.CliInternals = {
|
|
|
133
134
|
selectComposition: select_composition_1.selectComposition,
|
|
134
135
|
findEntryPoint: entry_point_1.findEntryPoint,
|
|
135
136
|
getImageFormat: image_formats_1.getImageFormat,
|
|
137
|
+
printCompositions: print_compositions_1.printCompositions,
|
|
136
138
|
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { BrowserExecutable, Codec, FfmpegExecutable, ImageFormat, OpenGlRenderer, PixelFormat, ProResProfile } from '@remotion/renderer';
|
|
2
|
-
import minimist from 'minimist';
|
|
3
2
|
export declare type CommandLineOptions = {
|
|
4
3
|
['browser-executable']: BrowserExecutable;
|
|
5
4
|
['ffmpeg-executable']: FfmpegExecutable;
|
|
@@ -13,11 +12,14 @@ export declare type CommandLineOptions = {
|
|
|
13
12
|
['disable-web-security']: string;
|
|
14
13
|
['every-nth-frame']: number;
|
|
15
14
|
['number-of-gif-loops']: number;
|
|
15
|
+
['number-of-shared-audio-tags']: number;
|
|
16
16
|
codec: Codec;
|
|
17
17
|
concurrency: number;
|
|
18
18
|
timeout: number;
|
|
19
19
|
config: string;
|
|
20
20
|
['public-dir']: string;
|
|
21
|
+
['audio-bitrate']: string;
|
|
22
|
+
['video-bitrate']: string;
|
|
21
23
|
crf: number;
|
|
22
24
|
force: boolean;
|
|
23
25
|
overwrite: boolean;
|
|
@@ -38,11 +40,15 @@ export declare type CommandLineOptions = {
|
|
|
38
40
|
muted: boolean;
|
|
39
41
|
height: number;
|
|
40
42
|
width: number;
|
|
43
|
+
runs: number;
|
|
44
|
+
concurrencies: string;
|
|
41
45
|
['enforce-audio-track']: boolean;
|
|
42
46
|
gl: OpenGlRenderer;
|
|
43
47
|
['package-manager']: string;
|
|
44
48
|
};
|
|
45
49
|
export declare const BooleanFlags: string[];
|
|
46
|
-
export declare const parsedCli: CommandLineOptions &
|
|
50
|
+
export declare const parsedCli: CommandLineOptions & {
|
|
51
|
+
_: string[];
|
|
52
|
+
};
|
|
47
53
|
export declare const parseCommandLine: () => void;
|
|
48
54
|
export declare const quietFlagProvided: () => boolean;
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseRequestBody = void 0;
|
|
4
|
+
const parseRequestBody = async (req) => {
|
|
5
|
+
const body = await new Promise((_resolve) => {
|
|
6
|
+
let data = '';
|
|
7
|
+
req.on('data', (chunk) => {
|
|
8
|
+
data += chunk;
|
|
9
|
+
});
|
|
10
|
+
req.on('end', () => {
|
|
11
|
+
_resolve(data.toString());
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
return JSON.parse(body);
|
|
15
|
+
};
|
|
16
|
+
exports.parseRequestBody = parseRequestBody;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.handleAddRender = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const _1 = require(".");
|
|
9
|
+
const parse_body_1 = require("../parse-body");
|
|
10
|
+
const handleAddRender = async (remotionRoot, req, res, entryPoint) => {
|
|
11
|
+
if (req.method === 'OPTIONS') {
|
|
12
|
+
res.statusCode = 200;
|
|
13
|
+
res.end();
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
const body = (await (0, parse_body_1.parseRequestBody)(req));
|
|
17
|
+
(0, _1.addJob)({
|
|
18
|
+
compositionId: body.compositionId,
|
|
19
|
+
id: String(Math.random()).replace('0.', ''),
|
|
20
|
+
startedAt: Date.now(),
|
|
21
|
+
type: 'still',
|
|
22
|
+
outputLocation: path_1.default.resolve(remotionRoot, body.outName),
|
|
23
|
+
status: 'idle',
|
|
24
|
+
}, entryPoint);
|
|
25
|
+
res.setHeader('content-type', 'application/json');
|
|
26
|
+
res.writeHead(200);
|
|
27
|
+
res.end(JSON.stringify({
|
|
28
|
+
success: true,
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
res.setHeader('content-type', 'application/json');
|
|
33
|
+
res.writeHead(200);
|
|
34
|
+
res.end(JSON.stringify({
|
|
35
|
+
success: false,
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
exports.handleAddRender = handleAddRender;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RenderJob } from './job';
|
|
2
|
+
export declare const getRenderQueue: () => RenderJob[];
|
|
3
|
+
export declare const notifyClientsOfJobUpdate: () => void;
|
|
4
|
+
export declare const processJob: (job: RenderJob, entryPoint: string) => Promise<never>;
|
|
5
|
+
export declare const addJob: (job: RenderJob, entryPoint: string) => void;
|
|
6
|
+
export declare const removeJob: (jobId: string) => void;
|
|
7
|
+
export declare const processJobIfPossible: (entryPoint: string) => Promise<void>;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.processJobIfPossible = exports.removeJob = exports.addJob = exports.processJob = exports.notifyClientsOfJobUpdate = exports.getRenderQueue = void 0;
|
|
4
|
+
const bundler_1 = require("@remotion/bundler");
|
|
5
|
+
const renderer_1 = require("@remotion/renderer");
|
|
6
|
+
const live_events_1 = require("../live-events");
|
|
7
|
+
let jobQueue = [];
|
|
8
|
+
const updateJob = (id, updater) => {
|
|
9
|
+
jobQueue = jobQueue.map((j) => {
|
|
10
|
+
if (id === j.id) {
|
|
11
|
+
return updater(j);
|
|
12
|
+
}
|
|
13
|
+
return j;
|
|
14
|
+
});
|
|
15
|
+
(0, exports.notifyClientsOfJobUpdate)();
|
|
16
|
+
};
|
|
17
|
+
const getRenderQueue = () => {
|
|
18
|
+
return jobQueue;
|
|
19
|
+
};
|
|
20
|
+
exports.getRenderQueue = getRenderQueue;
|
|
21
|
+
const notifyClientsOfJobUpdate = () => {
|
|
22
|
+
(0, live_events_1.waitForLiveEventsListener)().then((listener) => {
|
|
23
|
+
listener.sendEventToClient({
|
|
24
|
+
type: 'render-queue-updated',
|
|
25
|
+
queue: jobQueue,
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
exports.notifyClientsOfJobUpdate = notifyClientsOfJobUpdate;
|
|
30
|
+
const processJob = async (job, entryPoint) => {
|
|
31
|
+
if (job.type === 'still') {
|
|
32
|
+
const serveUrl = await (0, bundler_1.bundle)({
|
|
33
|
+
entryPoint,
|
|
34
|
+
// TODO: Accept CLI options
|
|
35
|
+
});
|
|
36
|
+
const compositions = await (0, renderer_1.getCompositions)(serveUrl, {
|
|
37
|
+
// TODO: Accept CLI option
|
|
38
|
+
});
|
|
39
|
+
const composition = compositions.find((c) => {
|
|
40
|
+
return c.id === job.compositionId;
|
|
41
|
+
});
|
|
42
|
+
if (!composition) {
|
|
43
|
+
throw new TypeError(`Composition ${job.compositionId} not found`);
|
|
44
|
+
}
|
|
45
|
+
await (0, renderer_1.renderStill)({
|
|
46
|
+
composition,
|
|
47
|
+
output: job.outputLocation,
|
|
48
|
+
serveUrl,
|
|
49
|
+
// TODO: Accept CLI options
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
throw new TypeError(`Could not process job of type ${job.type}`);
|
|
53
|
+
};
|
|
54
|
+
exports.processJob = processJob;
|
|
55
|
+
const addJob = (job, entryPoint) => {
|
|
56
|
+
jobQueue.push(job);
|
|
57
|
+
(0, exports.processJobIfPossible)(entryPoint);
|
|
58
|
+
(0, exports.notifyClientsOfJobUpdate)();
|
|
59
|
+
};
|
|
60
|
+
exports.addJob = addJob;
|
|
61
|
+
const removeJob = (jobId) => {
|
|
62
|
+
jobQueue = jobQueue.filter((job) => job.id !== jobId);
|
|
63
|
+
(0, exports.notifyClientsOfJobUpdate)();
|
|
64
|
+
};
|
|
65
|
+
exports.removeJob = removeJob;
|
|
66
|
+
const processJobIfPossible = async (entryPoint) => {
|
|
67
|
+
const nextJob = jobQueue.find((q) => {
|
|
68
|
+
return q.status === 'idle';
|
|
69
|
+
});
|
|
70
|
+
if (!nextJob) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
updateJob(nextJob.id, (job) => {
|
|
75
|
+
return {
|
|
76
|
+
...job,
|
|
77
|
+
status: 'running',
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
await (0, exports.processJob)(nextJob, entryPoint);
|
|
81
|
+
updateJob(nextJob.id, (job) => {
|
|
82
|
+
return {
|
|
83
|
+
...job,
|
|
84
|
+
status: 'done',
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
updateJob(nextJob.id, (job) => {
|
|
90
|
+
return {
|
|
91
|
+
...job,
|
|
92
|
+
status: 'failed',
|
|
93
|
+
error: err,
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
(0, live_events_1.waitForLiveEventsListener)().then((listener) => {
|
|
97
|
+
listener.sendEventToClient({
|
|
98
|
+
type: 'render-job-failed',
|
|
99
|
+
compositionId: nextJob.compositionId,
|
|
100
|
+
error: err,
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
exports.processJobIfPossible = processJobIfPossible;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
declare type RenderJobDynamicStatus = {
|
|
2
|
+
status: 'done';
|
|
3
|
+
} | {
|
|
4
|
+
status: 'running';
|
|
5
|
+
} | {
|
|
6
|
+
status: 'idle';
|
|
7
|
+
} | {
|
|
8
|
+
status: 'failed';
|
|
9
|
+
error: Error;
|
|
10
|
+
};
|
|
11
|
+
export declare type RenderJob = {
|
|
12
|
+
startedAt: number;
|
|
13
|
+
compositionId: string;
|
|
14
|
+
type: 'still' | 'composition';
|
|
15
|
+
id: string;
|
|
16
|
+
outputLocation: string;
|
|
17
|
+
} & RenderJobDynamicStatus;
|
|
18
|
+
export declare type AddRenderRequest = {
|
|
19
|
+
compositionId: string;
|
|
20
|
+
type: 'still' | 'composition';
|
|
21
|
+
outName: string;
|
|
22
|
+
};
|
|
23
|
+
export declare type RemoveRenderRequest = {
|
|
24
|
+
jobId: string;
|
|
25
|
+
};
|
|
26
|
+
export declare type OpenInFileExplorerRequest = {
|
|
27
|
+
directory: string;
|
|
28
|
+
};
|
|
29
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const openDirectoryInFinder: (dirToOpen: string) => Promise<void>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.openDirectoryInFinder = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const os_1 = require("os");
|
|
6
|
+
const openDirectoryInFinder = (dirToOpen) => {
|
|
7
|
+
const command = (0, os_1.platform)() === 'darwin'
|
|
8
|
+
? 'open'
|
|
9
|
+
: (0, os_1.platform)() === 'linux'
|
|
10
|
+
? 'xdg-open'
|
|
11
|
+
: 'explorer';
|
|
12
|
+
// TODO: What if file was deleted in the meanwhile?
|
|
13
|
+
// TODO: '-R' only works on macOS
|
|
14
|
+
const p = (0, child_process_1.spawn)(command, ['-R', dirToOpen]);
|
|
15
|
+
return new Promise((resolve, reject) => {
|
|
16
|
+
p.on('exit', (code) => {
|
|
17
|
+
if (code === 0) {
|
|
18
|
+
resolve();
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
reject(new Error(`Exited with code ${code}`));
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
p.on('error', (err) => {
|
|
25
|
+
p.kill();
|
|
26
|
+
if (err) {
|
|
27
|
+
reject(err);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
exports.openDirectoryInFinder = openDirectoryInFinder;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleOpenInFileExplorer = void 0;
|
|
4
|
+
const parse_body_1 = require("../parse-body");
|
|
5
|
+
const open_directory_in_finder_1 = require("./open-directory-in-finder");
|
|
6
|
+
const handleOpenInFileExplorer = async (req, res) => {
|
|
7
|
+
if (req.method === 'OPTIONS') {
|
|
8
|
+
res.statusCode = 200;
|
|
9
|
+
res.end();
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const body = (await (0, parse_body_1.parseRequestBody)(req));
|
|
13
|
+
// TODO: Disallow opening file that is not in Remotion CWD
|
|
14
|
+
await (0, open_directory_in_finder_1.openDirectoryInFinder)(body.directory);
|
|
15
|
+
res.setHeader('content-type', 'application/json');
|
|
16
|
+
res.writeHead(200);
|
|
17
|
+
res.end(JSON.stringify({
|
|
18
|
+
success: true,
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
res.setHeader('content-type', 'application/json');
|
|
23
|
+
res.writeHead(200);
|
|
24
|
+
res.end(JSON.stringify({
|
|
25
|
+
success: false,
|
|
26
|
+
error: err.message,
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
exports.handleOpenInFileExplorer = handleOpenInFileExplorer;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleRemoveRender = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const parse_body_1 = require("../parse-body");
|
|
6
|
+
const handleRemoveRender = async (req, res) => {
|
|
7
|
+
if (req.method === 'OPTIONS') {
|
|
8
|
+
res.statusCode = 200;
|
|
9
|
+
res.end();
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const body = (await (0, parse_body_1.parseRequestBody)(req));
|
|
13
|
+
(0, _1.removeJob)(body.jobId);
|
|
14
|
+
res.setHeader('content-type', 'application/json');
|
|
15
|
+
res.writeHead(200);
|
|
16
|
+
res.end(JSON.stringify({
|
|
17
|
+
success: true,
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
res.setHeader('content-type', 'application/json');
|
|
22
|
+
res.writeHead(200);
|
|
23
|
+
res.end(JSON.stringify({
|
|
24
|
+
success: false,
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
exports.handleRemoveRender = handleRemoveRender;
|
|
@@ -8,6 +8,8 @@ const bundler_1 = require("@remotion/bundler");
|
|
|
8
8
|
const fs_1 = require("fs");
|
|
9
9
|
const path_1 = __importDefault(require("path"));
|
|
10
10
|
const url_1 = require("url");
|
|
11
|
+
const number_of_shared_audio_tags_1 = require("../config/number-of-shared-audio-tags");
|
|
12
|
+
const parse_command_line_1 = require("../parse-command-line");
|
|
11
13
|
const get_file_source_1 = require("./error-overlay/react-overlay/utils/get-file-source");
|
|
12
14
|
const open_in_editor_1 = require("./error-overlay/react-overlay/utils/open-in-editor");
|
|
13
15
|
const get_package_manager_1 = require("./get-package-manager");
|
|
@@ -26,6 +28,7 @@ const static404 = (response) => {
|
|
|
26
28
|
response.end('The static/ prefix has been changed, this URL is no longer valid.');
|
|
27
29
|
};
|
|
28
30
|
const handleFallback = async ({ remotionRoot, hash, response, getCurrentInputProps, getEnvVariables, }) => {
|
|
31
|
+
var _a;
|
|
29
32
|
const [edit] = await editorGuess;
|
|
30
33
|
const displayName = (0, open_in_editor_1.getDisplayNameForEditor)(edit ? edit.command : null);
|
|
31
34
|
response.setHeader('content-type', 'text/html');
|
|
@@ -39,6 +42,7 @@ const handleFallback = async ({ remotionRoot, hash, response, getCurrentInputPro
|
|
|
39
42
|
inputProps: getCurrentInputProps(),
|
|
40
43
|
remotionRoot,
|
|
41
44
|
previewServerCommand: packageManager === 'unknown' ? null : packageManager.startCommand,
|
|
45
|
+
numberOfAudioTags: (_a = parse_command_line_1.parsedCli['number-of-shared-audio-tags']) !== null && _a !== void 0 ? _a : (0, number_of_shared_audio_tags_1.getNumberOfSharedAudioTags)(),
|
|
42
46
|
}));
|
|
43
47
|
};
|
|
44
48
|
const handleProjectInfo = async (remotionRoot, _, response) => {
|
package/dist/previewEntry.js
CHANGED
|
@@ -16,7 +16,7 @@ remotion_1.Internals.CSSUtils.injectCSS(remotion_1.Internals.CSSUtils.makeDefaul
|
|
|
16
16
|
const getServerDisconnectedDomElement = () => {
|
|
17
17
|
return document.getElementById('server-disconnected-overlay');
|
|
18
18
|
};
|
|
19
|
-
const content = ((0, jsx_runtime_1.jsx)(remotion_1.Internals.RemotionRoot, { children: (0, jsx_runtime_1.jsx)(EditorContexts_1.EditorContexts, { children: (0, jsx_runtime_1.jsx)(Editor_1.Editor, {}) }) }));
|
|
19
|
+
const content = ((0, jsx_runtime_1.jsx)(remotion_1.Internals.RemotionRoot, { numberOfAudioTags: window.remotion_numberOfAudioTags, children: (0, jsx_runtime_1.jsx)(EditorContexts_1.EditorContexts, { children: (0, jsx_runtime_1.jsx)(Editor_1.Editor, {}) }) }));
|
|
20
20
|
if (client_1.default.createRoot) {
|
|
21
21
|
client_1.default.createRoot(remotion_1.Internals.getPreviewDomElement()).render(content);
|
|
22
22
|
client_1.default.createRoot(getServerDisconnectedDomElement()).render((0, jsx_runtime_1.jsx)(ServerDisconnected_1.ServerDisconnected, {}));
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.printCompositions = void 0;
|
|
4
|
+
const log_1 = require("./log");
|
|
5
|
+
const parse_command_line_1 = require("./parse-command-line");
|
|
6
|
+
const max = (arr) => {
|
|
7
|
+
if (arr.length === 0) {
|
|
8
|
+
throw new Error('Array of 0 length');
|
|
9
|
+
}
|
|
10
|
+
let biggest = arr[0];
|
|
11
|
+
for (let i = 0; i < arr.length; i++) {
|
|
12
|
+
const elem = arr[i];
|
|
13
|
+
if (elem > biggest) {
|
|
14
|
+
biggest = elem;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return biggest;
|
|
18
|
+
};
|
|
19
|
+
const printCompositions = (compositions) => {
|
|
20
|
+
if (!(0, parse_command_line_1.quietFlagProvided)()) {
|
|
21
|
+
log_1.Log.info();
|
|
22
|
+
log_1.Log.info('The following compositions are available:');
|
|
23
|
+
log_1.Log.info();
|
|
24
|
+
}
|
|
25
|
+
if ((0, parse_command_line_1.quietFlagProvided)()) {
|
|
26
|
+
log_1.Log.info(compositions.map((c) => c.id).join(' '));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const firstColumnLength = max(compositions.map(({ id }) => id.length)) + 4;
|
|
30
|
+
const secondColumnLength = 8;
|
|
31
|
+
const thirdColumnLength = 15;
|
|
32
|
+
log_1.Log.info(compositions
|
|
33
|
+
.map((comp) => {
|
|
34
|
+
const isStill = comp.durationInFrames === 1;
|
|
35
|
+
const dimensions = `${comp.width}x${comp.height}`;
|
|
36
|
+
const fps = isStill ? '' : comp.fps.toString();
|
|
37
|
+
const durationInSeconds = (comp.durationInFrames / comp.fps).toFixed(2);
|
|
38
|
+
const formattedDuration = isStill
|
|
39
|
+
? 'Still'
|
|
40
|
+
: `${comp.durationInFrames} (${durationInSeconds} sec)`;
|
|
41
|
+
return [
|
|
42
|
+
comp.id.padEnd(firstColumnLength, ' '),
|
|
43
|
+
fps.padEnd(secondColumnLength, ' '),
|
|
44
|
+
dimensions.padEnd(thirdColumnLength, ' '),
|
|
45
|
+
formattedDuration,
|
|
46
|
+
].join('');
|
|
47
|
+
})
|
|
48
|
+
.join('\n'));
|
|
49
|
+
};
|
|
50
|
+
exports.printCompositions = printCompositions;
|
package/dist/progress-bar.d.ts
CHANGED
|
@@ -6,10 +6,22 @@ export declare const createProgressBar: (quiet: boolean) => {
|
|
|
6
6
|
export declare const createOverwriteableCliOutput: (quiet: boolean) => {
|
|
7
7
|
update: (up: string) => boolean;
|
|
8
8
|
};
|
|
9
|
-
export declare
|
|
9
|
+
export declare type CopyingState = {
|
|
10
|
+
bytes: number;
|
|
11
|
+
doneIn: number | null;
|
|
12
|
+
};
|
|
13
|
+
export declare type BundlingState = {
|
|
10
14
|
progress: number;
|
|
11
15
|
steps: RenderStep[];
|
|
12
16
|
doneIn: number | null;
|
|
17
|
+
};
|
|
18
|
+
export declare type SymbolicLinksState = {
|
|
19
|
+
symlinks: string[];
|
|
20
|
+
};
|
|
21
|
+
export declare const makeBundlingAndCopyProgress: ({ bundling, copying, symLinks, }: {
|
|
22
|
+
bundling: BundlingState;
|
|
23
|
+
copying: CopyingState;
|
|
24
|
+
symLinks: SymbolicLinksState;
|
|
13
25
|
}) => string;
|
|
14
26
|
declare type RenderingProgressInput = {
|
|
15
27
|
frames: number;
|
package/dist/progress-bar.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.makeRenderingAndStitchingProgress = exports.makeStitchingProgress = exports.makeRenderingProgress = exports.
|
|
3
|
+
exports.makeRenderingAndStitchingProgress = exports.makeStitchingProgress = exports.makeRenderingProgress = exports.makeBundlingAndCopyProgress = exports.createOverwriteableCliOutput = exports.createProgressBar = void 0;
|
|
4
4
|
const renderer_1 = require("@remotion/renderer");
|
|
5
5
|
const ansi_diff_1 = require("./ansi/ansi-diff");
|
|
6
6
|
const chalk_1 = require("./chalk");
|
|
@@ -37,7 +37,46 @@ const makeBundlingProgress = ({ progress, steps, doneIn, }) => [
|
|
|
37
37
|
]
|
|
38
38
|
.filter(truthy_1.truthy)
|
|
39
39
|
.join(' ');
|
|
40
|
-
|
|
40
|
+
const makeCopyingProgress = (options) => {
|
|
41
|
+
// Don't show copy progress lower than 200MB
|
|
42
|
+
if (options.bytes < 1000 * 1000 * 200) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return [
|
|
46
|
+
' +',
|
|
47
|
+
options.doneIn ? (0, make_progress_bar_1.makeProgressBar)(1) : (0, download_progress_1.getFileSizeDownloadBar)(options.bytes),
|
|
48
|
+
'Copying public dir',
|
|
49
|
+
options.doneIn === null ? null : chalk_1.chalk.gray(`${options.doneIn}ms`),
|
|
50
|
+
]
|
|
51
|
+
.filter(truthy_1.truthy)
|
|
52
|
+
.join(' ');
|
|
53
|
+
};
|
|
54
|
+
const makeSymlinkProgress = (options) => {
|
|
55
|
+
if (options.symlinks.length === 0) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
if (options.symlinks.length === 1) {
|
|
59
|
+
return [
|
|
60
|
+
chalk_1.chalk.gray(` Found a symbolic link in the public folder:`),
|
|
61
|
+
chalk_1.chalk.gray(' ' + options.symlinks[0]),
|
|
62
|
+
chalk_1.chalk.gray(' The symlink will be forwarded in to the bundle.'),
|
|
63
|
+
].join('\n');
|
|
64
|
+
}
|
|
65
|
+
return [
|
|
66
|
+
chalk_1.chalk.gray(` Found ${options.symlinks.length} symbolic links in the public folder.`),
|
|
67
|
+
chalk_1.chalk.gray(' The symlinks will be forwarded in to the bundle.'),
|
|
68
|
+
].join('\n');
|
|
69
|
+
};
|
|
70
|
+
const makeBundlingAndCopyProgress = ({ bundling, copying, symLinks, }) => {
|
|
71
|
+
return [
|
|
72
|
+
makeBundlingProgress(bundling),
|
|
73
|
+
makeCopyingProgress(copying),
|
|
74
|
+
makeSymlinkProgress(symLinks),
|
|
75
|
+
]
|
|
76
|
+
.filter(truthy_1.truthy)
|
|
77
|
+
.join('\n');
|
|
78
|
+
};
|
|
79
|
+
exports.makeBundlingAndCopyProgress = makeBundlingAndCopyProgress;
|
|
41
80
|
const makeRenderingProgress = ({ frames, totalFrames, steps, concurrency, doneIn, }) => {
|
|
42
81
|
const progress = frames / totalFrames;
|
|
43
82
|
return [
|