@remotion/cli 3.3.75 → 3.3.77
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/config/still-frame.js +5 -1
- package/dist/convert-entry-point-to-serve-url.d.ts +1 -0
- package/dist/convert-entry-point-to-serve-url.js +15 -0
- package/dist/editor/components/Checkbox.d.ts +5 -0
- package/dist/editor/components/Checkbox.js +38 -0
- package/dist/editor/components/CollapsableOptions.d.ts +6 -0
- package/dist/editor/components/CollapsableOptions.js +35 -0
- package/dist/editor/components/CurrentCompositionSideEffects.d.ts +3 -0
- package/dist/editor/components/CurrentCompositionSideEffects.js +43 -0
- package/dist/editor/components/InlineAction.d.ts +5 -0
- package/dist/editor/components/InlineAction.js +34 -0
- package/dist/editor/components/Modals.d.ts +2 -0
- package/dist/editor/components/Modals.js +23 -0
- package/dist/editor/components/RenderButton.d.ts +6 -0
- package/dist/editor/components/RenderButton.js +67 -0
- package/dist/editor/components/RenderModal/CrfSetting.d.ts +15 -0
- package/dist/editor/components/RenderModal/CrfSetting.js +43 -0
- package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.d.ts +5 -0
- package/dist/editor/components/RenderModal/EnforceAudioTrackSetting.js +14 -0
- package/dist/editor/components/RenderModal/FrameRangeSetting.d.ts +8 -0
- package/dist/editor/components/RenderModal/FrameRangeSetting.js +42 -0
- package/dist/editor/components/RenderModal/MutedSetting.d.ts +5 -0
- package/dist/editor/components/RenderModal/MutedSetting.js +14 -0
- package/dist/editor/components/RenderModal/NumberOfLoopsSetting.d.ts +5 -0
- package/dist/editor/components/RenderModal/NumberOfLoopsSetting.js +26 -0
- package/dist/editor/components/RenderModal/NumberSetting.d.ts +9 -0
- package/dist/editor/components/RenderModal/NumberSetting.js +26 -0
- package/dist/editor/components/RenderModal/QualitySetting.d.ts +5 -0
- package/dist/editor/components/RenderModal/QualitySetting.js +27 -0
- package/dist/editor/components/RenderModal/RenderErrorModal.d.ts +5 -0
- package/dist/editor/components/RenderModal/RenderErrorModal.js +64 -0
- package/dist/editor/components/RenderModal/RenderModal.d.ts +28 -0
- package/dist/editor/components/RenderModal/RenderModal.js +484 -0
- package/dist/editor/components/RenderModal/RenderModalAdvanced.d.ts +11 -0
- package/dist/editor/components/RenderModal/RenderModalAdvanced.js +15 -0
- package/dist/editor/components/RenderModal/RenderModalAudio.d.ts +13 -0
- package/dist/editor/components/RenderModal/RenderModalAudio.js +22 -0
- package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +24 -0
- package/dist/editor/components/RenderModal/RenderModalBasic.js +87 -0
- package/dist/editor/components/RenderModal/RenderModalGif.d.ts +9 -0
- package/dist/editor/components/RenderModal/RenderModalGif.js +16 -0
- package/dist/editor/components/RenderModal/RenderModalHr.d.ts +2 -0
- package/dist/editor/components/RenderModal/RenderModalHr.js +18 -0
- package/dist/editor/components/RenderModal/RenderModalPicture.d.ts +28 -0
- package/dist/editor/components/RenderModal/RenderModalPicture.js +51 -0
- package/dist/editor/components/RenderModal/ScaleSetting.d.ts +5 -0
- package/dist/editor/components/RenderModal/ScaleSetting.js +11 -0
- package/dist/editor/components/RenderModal/human-readable-audio-codecs.d.ts +2 -0
- package/dist/editor/components/RenderModal/human-readable-audio-codecs.js +18 -0
- package/dist/editor/components/RenderModal/human-readable-codec.d.ts +2 -0
- package/dist/editor/components/RenderModal/human-readable-codec.js +36 -0
- package/dist/editor/components/RenderModal/layout.d.ts +5 -0
- package/dist/editor/components/RenderModal/layout.js +31 -0
- package/dist/editor/components/RenderQueue/CircularProgress.d.ts +5 -0
- package/dist/editor/components/RenderQueue/CircularProgress.js +18 -0
- package/dist/editor/components/RenderQueue/RenderQueueError.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueError.js +26 -0
- package/dist/editor/components/RenderQueue/RenderQueueItem.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueItem.js +39 -0
- package/dist/editor/components/RenderQueue/RenderQueueItemCancelButton.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueItemCancelButton.js +22 -0
- package/dist/editor/components/RenderQueue/RenderQueueItemStatus.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueItemStatus.js +27 -0
- package/dist/editor/components/RenderQueue/RenderQueueOutputName.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueOutputName.js +24 -0
- package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueProgressMessage.js +27 -0
- package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueRemoveItem.js +23 -0
- package/dist/editor/components/RenderQueue/RenderQueueRepeat.d.ts +5 -0
- package/dist/editor/components/RenderQueue/RenderQueueRepeat.js +22 -0
- package/dist/editor/components/RenderQueue/actions.d.ts +49 -0
- package/dist/editor/components/RenderQueue/actions.js +98 -0
- package/dist/editor/components/RenderQueue/context.d.ts +19 -0
- package/dist/editor/components/RenderQueue/context.js +56 -0
- package/dist/editor/components/RenderQueue/index.d.ts +2 -0
- package/dist/editor/components/RenderQueue/index.js +18 -0
- package/dist/editor/components/RenderQueue/item-style.d.ts +2 -0
- package/dist/editor/components/RenderQueue/item-style.js +21 -0
- package/dist/editor/components/RenderToolbarIcon.d.ts +2 -0
- package/dist/editor/components/RenderToolbarIcon.js +78 -0
- package/dist/editor/components/RendersTab.d.ts +6 -0
- package/dist/editor/components/RendersTab.js +43 -0
- package/dist/editor/components/SegmentedControl.d.ts +16 -0
- package/dist/editor/components/SegmentedControl.js +63 -0
- package/dist/editor/components/SidebarContent.d.ts +5 -0
- package/dist/editor/components/SidebarContent.js +52 -0
- package/dist/editor/components/Tabs/index.d.ts +11 -0
- package/dist/editor/components/Tabs/index.js +51 -0
- package/dist/editor/helpers/client-id.d.ts +17 -0
- package/dist/editor/helpers/client-id.js +46 -0
- package/dist/editor/helpers/use-file-existence.d.ts +1 -0
- package/dist/editor/helpers/use-file-existence.js +66 -0
- package/dist/editor/icons/RenderStillIcon.d.ts +3 -0
- package/dist/editor/icons/RenderStillIcon.js +8 -0
- package/dist/editor/icons/audio.d.ts +2 -0
- package/dist/editor/icons/audio.js +6 -0
- package/dist/editor/icons/file.d.ts +2 -0
- package/dist/editor/icons/file.js +6 -0
- package/dist/editor/icons/frame.d.ts +2 -0
- package/dist/editor/icons/frame.js +6 -0
- package/dist/editor/icons/gear.d.ts +2 -0
- package/dist/editor/icons/gear.js +6 -0
- package/dist/editor/icons/gif.d.ts +2 -0
- package/dist/editor/icons/gif.js +6 -0
- package/dist/editor/icons/render.d.ts +5 -0
- package/dist/editor/icons/render.js +8 -0
- package/dist/editor/icons/video.d.ts +5 -0
- package/dist/editor/icons/video.js +8 -0
- package/dist/ffmpeg.d.ts +2 -0
- package/dist/ffmpeg.js +21 -0
- package/dist/file-watcher.d.ts +9 -0
- package/dist/file-watcher.js +35 -0
- package/dist/gcp-command.d.ts +1 -0
- package/dist/gcp-command.js +27 -0
- package/dist/get-default-out-name.d.ts +5 -0
- package/dist/get-default-out-name.js +10 -0
- package/dist/preview-server/api-routes.d.ts +4 -0
- package/dist/preview-server/api-routes.js +17 -0
- package/dist/preview-server/api-types.d.ts +27 -0
- package/dist/preview-server/api-types.js +2 -0
- package/dist/preview-server/file-existence-watchers.d.ts +13 -0
- package/dist/preview-server/file-existence-watchers.js +62 -0
- package/dist/preview-server/handler.d.ts +9 -0
- package/dist/preview-server/handler.js +34 -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/get-default-video-contexts.d.ts +10 -0
- package/dist/preview-server/render-queue/get-default-video-contexts.js +13 -0
- package/dist/preview-server/render-queue/job.d.ts +114 -0
- package/dist/preview-server/render-queue/job.js +2 -0
- package/dist/preview-server/render-queue/make-retry-payload.d.ts +3 -0
- package/dist/preview-server/render-queue/make-retry-payload.js +79 -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 +34 -0
- package/dist/preview-server/render-queue/process-still.d.ts +8 -0
- package/dist/preview-server/render-queue/process-still.js +47 -0
- package/dist/preview-server/render-queue/process-video.d.ts +8 -0
- package/dist/preview-server/render-queue/process-video.js +64 -0
- package/dist/preview-server/render-queue/queue.d.ts +21 -0
- package/dist/preview-server/render-queue/queue.js +185 -0
- package/dist/preview-server/routes/add-render.d.ts +3 -0
- package/dist/preview-server/routes/add-render.js +68 -0
- package/dist/preview-server/routes/cancel-render.d.ts +3 -0
- package/dist/preview-server/routes/cancel-render.js +9 -0
- package/dist/preview-server/routes/open-in-file-explorer.d.ts +3 -0
- package/dist/preview-server/routes/open-in-file-explorer.js +14 -0
- package/dist/preview-server/routes/remove-render.d.ts +3 -0
- package/dist/preview-server/routes/remove-render.js +9 -0
- package/dist/preview-server/routes/subscribe-to-file-existence.d.ts +3 -0
- package/dist/preview-server/routes/subscribe-to-file-existence.js +13 -0
- package/dist/preview-server/routes/unsubscribe-from-file-existence.d.ts +3 -0
- package/dist/preview-server/routes/unsubscribe-from-file-existence.js +13 -0
- package/dist/render-flows/render.d.ts +46 -0
- package/dist/render-flows/render.js +279 -0
- package/dist/render-flows/still.d.ts +29 -0
- package/dist/render-flows/still.js +171 -0
- package/package.json +6 -6
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Codec } from '@remotion/renderer';
|
|
2
|
+
import type { RenderType } from '../../editor/components/RenderModal/RenderModalAdvanced';
|
|
3
|
+
export declare const getDefaultCodecs: ({ defaultCodec, isStill, }: {
|
|
4
|
+
defaultCodec: Codec;
|
|
5
|
+
isStill: boolean;
|
|
6
|
+
}) => {
|
|
7
|
+
initialAudioCodec: Codec;
|
|
8
|
+
initialVideoCodec: Codec;
|
|
9
|
+
initialRenderType: RenderType;
|
|
10
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDefaultCodecs = void 0;
|
|
4
|
+
const client_1 = require("@remotion/renderer/client");
|
|
5
|
+
const getDefaultCodecs = ({ defaultCodec, isStill, }) => {
|
|
6
|
+
const isAudioCodec = client_1.BrowserSafeApis.isAudioCodec(defaultCodec);
|
|
7
|
+
return {
|
|
8
|
+
initialAudioCodec: isAudioCodec ? defaultCodec : 'mp3',
|
|
9
|
+
initialVideoCodec: isAudioCodec ? 'h264' : defaultCodec,
|
|
10
|
+
initialRenderType: isStill ? 'still' : isAudioCodec ? 'audio' : 'video',
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
exports.getDefaultCodecs = getDefaultCodecs;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { AudioCodec, Codec, makeCancelSignal, PixelFormat, ProResProfile, StillImageFormat, VideoImageFormat } from '@remotion/renderer';
|
|
2
|
+
declare type RenderJobDynamicStatus = {
|
|
3
|
+
status: 'done';
|
|
4
|
+
} | {
|
|
5
|
+
status: 'running';
|
|
6
|
+
progress: number;
|
|
7
|
+
message: string;
|
|
8
|
+
} | {
|
|
9
|
+
status: 'idle';
|
|
10
|
+
} | {
|
|
11
|
+
status: 'failed';
|
|
12
|
+
error: {
|
|
13
|
+
message: string;
|
|
14
|
+
stack: string | undefined;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export declare type JobProgressCallback = (options: {
|
|
18
|
+
progress: number;
|
|
19
|
+
message: string;
|
|
20
|
+
}) => void;
|
|
21
|
+
declare type RenderJobDynamicFields = {
|
|
22
|
+
type: 'still';
|
|
23
|
+
imageFormat: StillImageFormat;
|
|
24
|
+
quality: number | null;
|
|
25
|
+
frame: number;
|
|
26
|
+
scale: number;
|
|
27
|
+
} | {
|
|
28
|
+
type: 'video';
|
|
29
|
+
imageFormat: VideoImageFormat;
|
|
30
|
+
quality: number | null;
|
|
31
|
+
scale: number;
|
|
32
|
+
codec: Codec;
|
|
33
|
+
audioCodec: AudioCodec;
|
|
34
|
+
concurrency: number;
|
|
35
|
+
crf: number | null;
|
|
36
|
+
startFrame: number;
|
|
37
|
+
endFrame: number;
|
|
38
|
+
muted: boolean;
|
|
39
|
+
enforceAudioTrack: boolean;
|
|
40
|
+
proResProfile: ProResProfile | null;
|
|
41
|
+
pixelFormat: PixelFormat;
|
|
42
|
+
audioBitrate: string | null;
|
|
43
|
+
videoBitrate: string | null;
|
|
44
|
+
everyNthFrame: number;
|
|
45
|
+
numberOfGifLoops: number | null;
|
|
46
|
+
delayRenderTimeout: number;
|
|
47
|
+
};
|
|
48
|
+
export declare type RenderJob = {
|
|
49
|
+
startedAt: number;
|
|
50
|
+
compositionId: string;
|
|
51
|
+
id: string;
|
|
52
|
+
outName: string;
|
|
53
|
+
deletedOutputLocation: boolean;
|
|
54
|
+
verbose: boolean;
|
|
55
|
+
cancelToken: ReturnType<typeof makeCancelSignal>;
|
|
56
|
+
} & RenderJobDynamicStatus & RenderJobDynamicFields;
|
|
57
|
+
export declare type RenderJobWithCleanup = RenderJob & {
|
|
58
|
+
cleanup: (() => void)[];
|
|
59
|
+
};
|
|
60
|
+
declare type AddRenderRequestDynamicFields = {
|
|
61
|
+
type: 'still';
|
|
62
|
+
imageFormat: StillImageFormat;
|
|
63
|
+
quality: number | null;
|
|
64
|
+
frame: number;
|
|
65
|
+
scale: number;
|
|
66
|
+
verbose: boolean;
|
|
67
|
+
} | {
|
|
68
|
+
type: 'video';
|
|
69
|
+
codec: Codec;
|
|
70
|
+
audioCodec: AudioCodec;
|
|
71
|
+
imageFormat: VideoImageFormat;
|
|
72
|
+
quality: number | null;
|
|
73
|
+
scale: number;
|
|
74
|
+
verbose: boolean;
|
|
75
|
+
concurrency: number;
|
|
76
|
+
crf: number | null;
|
|
77
|
+
startFrame: number;
|
|
78
|
+
endFrame: number;
|
|
79
|
+
muted: boolean;
|
|
80
|
+
enforceAudioTrack: boolean;
|
|
81
|
+
proResProfile: ProResProfile | null;
|
|
82
|
+
pixelFormat: PixelFormat;
|
|
83
|
+
audioBitrate: string | null;
|
|
84
|
+
videoBitrate: string | null;
|
|
85
|
+
everyNthFrame: number;
|
|
86
|
+
numberOfGifLoops: number | null;
|
|
87
|
+
delayRenderTimeout: number;
|
|
88
|
+
};
|
|
89
|
+
export declare type CancelRenderRequest = {
|
|
90
|
+
jobId: string;
|
|
91
|
+
};
|
|
92
|
+
export declare type CancelRenderResponse = {};
|
|
93
|
+
export declare type AddRenderRequest = {
|
|
94
|
+
compositionId: string;
|
|
95
|
+
outName: string;
|
|
96
|
+
} & AddRenderRequestDynamicFields;
|
|
97
|
+
export declare type RemoveRenderRequest = {
|
|
98
|
+
jobId: string;
|
|
99
|
+
};
|
|
100
|
+
export declare type OpenInFileExplorerRequest = {
|
|
101
|
+
directory: string;
|
|
102
|
+
};
|
|
103
|
+
export declare type SubscribeToFileExistenceRequest = {
|
|
104
|
+
file: string;
|
|
105
|
+
clientId: string;
|
|
106
|
+
};
|
|
107
|
+
export declare type SubscribeToFileExistenceResponse = {
|
|
108
|
+
exists: boolean;
|
|
109
|
+
};
|
|
110
|
+
export declare type UnsubscribeFromFileExistenceRequest = {
|
|
111
|
+
file: string;
|
|
112
|
+
clientId: string;
|
|
113
|
+
};
|
|
114
|
+
export {};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeRetryPayload = void 0;
|
|
4
|
+
const get_default_video_contexts_1 = require("./get-default-video-contexts");
|
|
5
|
+
const makeRetryPayload = (job) => {
|
|
6
|
+
var _a, _b, _c;
|
|
7
|
+
const defaults = window.remotion_renderDefaults;
|
|
8
|
+
if (!defaults) {
|
|
9
|
+
throw new Error('defaults not set');
|
|
10
|
+
}
|
|
11
|
+
if (job.type === 'still') {
|
|
12
|
+
const { initialAudioCodec, initialRenderType, initialVideoCodec } = (0, get_default_video_contexts_1.getDefaultCodecs)({
|
|
13
|
+
defaultCodec: defaults.codec,
|
|
14
|
+
isStill: true,
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
type: 'render',
|
|
18
|
+
compositionId: job.compositionId,
|
|
19
|
+
initialFrame: job.frame,
|
|
20
|
+
initialStillImageFormat: job.imageFormat,
|
|
21
|
+
// TODO: Take from config
|
|
22
|
+
initialVideoImageFormat: 'jpeg',
|
|
23
|
+
initialQuality: (_a = job.quality) !== null && _a !== void 0 ? _a : defaults.quality,
|
|
24
|
+
initialOutName: job.outName,
|
|
25
|
+
initialScale: job.scale,
|
|
26
|
+
initialVerbose: job.verbose,
|
|
27
|
+
initialAudioCodec,
|
|
28
|
+
initialRenderType,
|
|
29
|
+
initialVideoCodec,
|
|
30
|
+
initialConcurrency: defaults.concurrency,
|
|
31
|
+
maxConcurrency: defaults.maxConcurrency,
|
|
32
|
+
minConcurrency: defaults.minConcurrency,
|
|
33
|
+
initialMuted: defaults.muted,
|
|
34
|
+
initialEnforceAudioTrack: defaults.enforceAudioTrack,
|
|
35
|
+
initialProResProfile: defaults.proResProfile,
|
|
36
|
+
initialPixelFormat: defaults.pixelFormat,
|
|
37
|
+
initialAudioBitrate: defaults.audioBitrate,
|
|
38
|
+
initialVideoBitrate: defaults.videoBitrate,
|
|
39
|
+
initialEveryNthFrame: defaults.everyNthFrame,
|
|
40
|
+
initialNumberOfGifLoops: defaults.numberOfGifLoops,
|
|
41
|
+
initialDelayRenderTimeout: defaults.delayRenderTimeout,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
if (job.type === 'video') {
|
|
45
|
+
const { initialAudioCodec, initialRenderType, initialVideoCodec } = (0, get_default_video_contexts_1.getDefaultCodecs)({
|
|
46
|
+
defaultCodec: defaults.codec,
|
|
47
|
+
isStill: false,
|
|
48
|
+
});
|
|
49
|
+
return {
|
|
50
|
+
type: 'render',
|
|
51
|
+
compositionId: job.compositionId,
|
|
52
|
+
// TODO: Take from config
|
|
53
|
+
initialStillImageFormat: 'png',
|
|
54
|
+
initialVideoImageFormat: job.imageFormat,
|
|
55
|
+
initialQuality: (_b = job.quality) !== null && _b !== void 0 ? _b : defaults.quality,
|
|
56
|
+
initialOutName: job.outName,
|
|
57
|
+
initialScale: job.scale,
|
|
58
|
+
initialVerbose: job.verbose,
|
|
59
|
+
initialFrame: 0,
|
|
60
|
+
initialConcurrency: job.concurrency,
|
|
61
|
+
maxConcurrency: defaults.maxConcurrency,
|
|
62
|
+
minConcurrency: defaults.minConcurrency,
|
|
63
|
+
initialMuted: job.muted,
|
|
64
|
+
initialAudioCodec,
|
|
65
|
+
initialEnforceAudioTrack: job.enforceAudioTrack,
|
|
66
|
+
initialRenderType,
|
|
67
|
+
initialVideoCodec,
|
|
68
|
+
initialProResProfile: (_c = job.proResProfile) !== null && _c !== void 0 ? _c : defaults.proResProfile,
|
|
69
|
+
initialPixelFormat: job.pixelFormat,
|
|
70
|
+
initialAudioBitrate: job.audioBitrate,
|
|
71
|
+
initialVideoBitrate: job.videoBitrate,
|
|
72
|
+
initialEveryNthFrame: job.everyNthFrame,
|
|
73
|
+
initialNumberOfGifLoops: job.numberOfGifLoops,
|
|
74
|
+
initialDelayRenderTimeout: job.delayRenderTimeout,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
throw new Error(`Job ${JSON.stringify(job)} Not implemented`);
|
|
78
|
+
};
|
|
79
|
+
exports.makeRetryPayload = makeRetryPayload;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const openDirectoryInFinder: (dirToOpen: string) => Promise<void>;
|
|
@@ -0,0 +1,34 @@
|
|
|
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 truthy_1 = require("../../truthy");
|
|
7
|
+
const openDirectoryInFinder = (dirToOpen) => {
|
|
8
|
+
const command = (0, os_1.platform)() === 'darwin'
|
|
9
|
+
? 'open'
|
|
10
|
+
: (0, os_1.platform)() === 'linux'
|
|
11
|
+
? 'xdg-open'
|
|
12
|
+
: 'start';
|
|
13
|
+
const p = (0, child_process_1.spawn)(command, [(0, os_1.platform)() === 'darwin' ? '-R' : null, dirToOpen].filter(truthy_1.truthy));
|
|
14
|
+
const stderrChunks = [];
|
|
15
|
+
p.stderr.on('data', (d) => stderrChunks.push(d));
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
p.on('exit', (code) => {
|
|
18
|
+
if (code === 0) {
|
|
19
|
+
resolve();
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
const message = Buffer.concat(stderrChunks).toString('utf-8');
|
|
23
|
+
reject(new Error(message));
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
p.on('error', (err) => {
|
|
27
|
+
p.kill();
|
|
28
|
+
if (err) {
|
|
29
|
+
reject(err);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
exports.openDirectoryInFinder = openDirectoryInFinder;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { JobProgressCallback, RenderJob } from './job';
|
|
2
|
+
export declare const processStill: ({ job, remotionRoot, entryPoint, onProgress, addCleanupCallback, }: {
|
|
3
|
+
job: RenderJob;
|
|
4
|
+
remotionRoot: string;
|
|
5
|
+
entryPoint: string;
|
|
6
|
+
onProgress: JobProgressCallback;
|
|
7
|
+
addCleanupCallback: (cb: () => void) => void;
|
|
8
|
+
}) => Promise<void>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.processStill = void 0;
|
|
4
|
+
const convert_entry_point_to_serve_url_1 = require("../../convert-entry-point-to-serve-url");
|
|
5
|
+
const get_cli_options_1 = require("../../get-cli-options");
|
|
6
|
+
const still_1 = require("../../render-flows/still");
|
|
7
|
+
const processStill = async ({ job, remotionRoot, entryPoint, onProgress, addCleanupCallback, }) => {
|
|
8
|
+
var _a;
|
|
9
|
+
if (job.type !== 'still') {
|
|
10
|
+
throw new Error('Expected still job');
|
|
11
|
+
}
|
|
12
|
+
const { publicDir, browserExecutable, chromiumOptions, envVariables, inputProps, port, browser, puppeteerTimeout, } = await (0, get_cli_options_1.getCliOptions)({
|
|
13
|
+
isLambda: false,
|
|
14
|
+
type: 'still',
|
|
15
|
+
remotionRoot,
|
|
16
|
+
});
|
|
17
|
+
const fullEntryPoint = (0, convert_entry_point_to_serve_url_1.convertEntryPointToServeUrl)(entryPoint);
|
|
18
|
+
await (0, still_1.renderStillFlow)({
|
|
19
|
+
remotionRoot,
|
|
20
|
+
browser,
|
|
21
|
+
browserExecutable,
|
|
22
|
+
chromiumOptions,
|
|
23
|
+
entryPointReason: 'same as preview',
|
|
24
|
+
envVariables,
|
|
25
|
+
height: null,
|
|
26
|
+
fullEntryPoint,
|
|
27
|
+
inputProps,
|
|
28
|
+
overwrite: true,
|
|
29
|
+
port,
|
|
30
|
+
publicDir,
|
|
31
|
+
puppeteerTimeout,
|
|
32
|
+
quality: (_a = job.quality) !== null && _a !== void 0 ? _a : undefined,
|
|
33
|
+
remainingArgs: [],
|
|
34
|
+
scale: job.scale,
|
|
35
|
+
stillFrame: job.frame,
|
|
36
|
+
width: null,
|
|
37
|
+
compositionIdFromUi: job.compositionId,
|
|
38
|
+
imageFormatFromUi: job.imageFormat,
|
|
39
|
+
logLevel: job.verbose ? 'verbose' : 'info',
|
|
40
|
+
onProgress,
|
|
41
|
+
indentOutput: true,
|
|
42
|
+
addCleanupCallback,
|
|
43
|
+
cancelSignal: job.cancelToken.cancelSignal,
|
|
44
|
+
});
|
|
45
|
+
// TODO: Accept CLI options
|
|
46
|
+
};
|
|
47
|
+
exports.processStill = processStill;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { JobProgressCallback, RenderJob } from './job';
|
|
2
|
+
export declare const processVideoJob: ({ job, remotionRoot, entryPoint, onProgress, addCleanupCallback, }: {
|
|
3
|
+
job: RenderJob;
|
|
4
|
+
remotionRoot: string;
|
|
5
|
+
entryPoint: string;
|
|
6
|
+
onProgress: JobProgressCallback;
|
|
7
|
+
addCleanupCallback: (cb: () => void) => void;
|
|
8
|
+
}) => Promise<void>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.processVideoJob = void 0;
|
|
4
|
+
const convert_entry_point_to_serve_url_1 = require("../../convert-entry-point-to-serve-url");
|
|
5
|
+
const get_cli_options_1 = require("../../get-cli-options");
|
|
6
|
+
const render_1 = require("../../render-flows/render");
|
|
7
|
+
const processVideoJob = async ({ job, remotionRoot, entryPoint, onProgress, addCleanupCallback, }) => {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
if (job.type !== 'video') {
|
|
10
|
+
throw new Error('Expected video job');
|
|
11
|
+
}
|
|
12
|
+
// TODO: Change until none can be derived from UI
|
|
13
|
+
const { publicDir, browserExecutable, chromiumOptions, envVariables, inputProps, port, browser, ffmpegOverride, } = await (0, get_cli_options_1.getCliOptions)({
|
|
14
|
+
isLambda: false,
|
|
15
|
+
type: 'still',
|
|
16
|
+
remotionRoot,
|
|
17
|
+
});
|
|
18
|
+
const fullEntryPoint = (0, convert_entry_point_to_serve_url_1.convertEntryPointToServeUrl)(entryPoint);
|
|
19
|
+
await (0, render_1.renderCompFlow)({
|
|
20
|
+
remotionRoot,
|
|
21
|
+
browser,
|
|
22
|
+
browserExecutable,
|
|
23
|
+
chromiumOptions,
|
|
24
|
+
entryPointReason: 'same as preview',
|
|
25
|
+
envVariables,
|
|
26
|
+
height: null,
|
|
27
|
+
fullEntryPoint,
|
|
28
|
+
inputProps,
|
|
29
|
+
overwrite: true,
|
|
30
|
+
port,
|
|
31
|
+
publicDir,
|
|
32
|
+
puppeteerTimeout: job.delayRenderTimeout,
|
|
33
|
+
quality: (_a = job.quality) !== null && _a !== void 0 ? _a : undefined,
|
|
34
|
+
remainingArgs: [],
|
|
35
|
+
scale: job.scale,
|
|
36
|
+
width: null,
|
|
37
|
+
compositionIdFromUi: job.compositionId,
|
|
38
|
+
logLevel: job.verbose ? 'verbose' : 'info',
|
|
39
|
+
onProgress,
|
|
40
|
+
indent: true,
|
|
41
|
+
concurrency: job.concurrency,
|
|
42
|
+
everyNthFrame: job.everyNthFrame,
|
|
43
|
+
frameRange: [job.startFrame, job.endFrame],
|
|
44
|
+
quiet: false,
|
|
45
|
+
shouldOutputImageSequence: false,
|
|
46
|
+
addCleanupCallback,
|
|
47
|
+
outputLocationFromUI: job.outName,
|
|
48
|
+
uiCodec: job.codec,
|
|
49
|
+
uiImageFormat: job.imageFormat,
|
|
50
|
+
cancelSignal: job.cancelToken.cancelSignal,
|
|
51
|
+
crf: job.crf,
|
|
52
|
+
ffmpegOverride,
|
|
53
|
+
audioBitrate: job.audioBitrate,
|
|
54
|
+
muted: job.muted,
|
|
55
|
+
enforceAudioTrack: job.enforceAudioTrack,
|
|
56
|
+
proResProfile: (_b = job.proResProfile) !== null && _b !== void 0 ? _b : undefined,
|
|
57
|
+
pixelFormat: job.pixelFormat,
|
|
58
|
+
videoBitrate: job.videoBitrate,
|
|
59
|
+
numberOfGifLoops: job.numberOfGifLoops,
|
|
60
|
+
audioCodec: job.audioCodec,
|
|
61
|
+
});
|
|
62
|
+
// TODO: Accept CLI options
|
|
63
|
+
};
|
|
64
|
+
exports.processVideoJob = processVideoJob;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { JobProgressCallback, RenderJob, RenderJobWithCleanup } from './job';
|
|
2
|
+
export declare const getRenderQueue: () => RenderJob[];
|
|
3
|
+
export declare const notifyClientsOfJobUpdate: () => void;
|
|
4
|
+
export declare const processJob: ({ job, remotionRoot, entryPoint, onProgress, addCleanupCallback, }: {
|
|
5
|
+
job: RenderJob;
|
|
6
|
+
remotionRoot: string;
|
|
7
|
+
entryPoint: string;
|
|
8
|
+
onProgress: JobProgressCallback;
|
|
9
|
+
addCleanupCallback: (cb: () => void) => void;
|
|
10
|
+
}) => Promise<void>;
|
|
11
|
+
export declare const addJob: ({ job, entryPoint, remotionRoot, }: {
|
|
12
|
+
job: RenderJobWithCleanup;
|
|
13
|
+
entryPoint: string;
|
|
14
|
+
remotionRoot: string;
|
|
15
|
+
}) => void;
|
|
16
|
+
export declare const removeJob: (jobId: string) => void;
|
|
17
|
+
export declare const cancelJob: (jobId: string) => void;
|
|
18
|
+
export declare const processJobIfPossible: ({ remotionRoot, entryPoint, }: {
|
|
19
|
+
remotionRoot: string;
|
|
20
|
+
entryPoint: string;
|
|
21
|
+
}) => Promise<void>;
|
|
@@ -0,0 +1,185 @@
|
|
|
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.processJobIfPossible = exports.cancelJob = exports.removeJob = exports.addJob = exports.processJob = exports.notifyClientsOfJobUpdate = exports.getRenderQueue = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const chalk_1 = require("../../chalk");
|
|
9
|
+
const file_watcher_1 = require("../../file-watcher");
|
|
10
|
+
const log_1 = require("../../log");
|
|
11
|
+
const live_events_1 = require("../live-events");
|
|
12
|
+
const process_still_1 = require("./process-still");
|
|
13
|
+
const process_video_1 = require("./process-video");
|
|
14
|
+
let jobQueue = [];
|
|
15
|
+
const updateJob = (id, updater) => {
|
|
16
|
+
jobQueue = jobQueue.map((j) => {
|
|
17
|
+
if (id === j.id) {
|
|
18
|
+
return updater(j);
|
|
19
|
+
}
|
|
20
|
+
return j;
|
|
21
|
+
});
|
|
22
|
+
(0, exports.notifyClientsOfJobUpdate)();
|
|
23
|
+
};
|
|
24
|
+
const getRenderQueue = () => {
|
|
25
|
+
return jobQueue.map((j) => {
|
|
26
|
+
const { cleanup, ...rest } = j;
|
|
27
|
+
return rest;
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
exports.getRenderQueue = getRenderQueue;
|
|
31
|
+
const notifyClientsOfJobUpdate = () => {
|
|
32
|
+
(0, live_events_1.waitForLiveEventsListener)().then((listener) => {
|
|
33
|
+
listener.sendEventToClient({
|
|
34
|
+
type: 'render-queue-updated',
|
|
35
|
+
queue: (0, exports.getRenderQueue)(),
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
exports.notifyClientsOfJobUpdate = notifyClientsOfJobUpdate;
|
|
40
|
+
const processJob = async ({ job, remotionRoot, entryPoint, onProgress, addCleanupCallback, }) => {
|
|
41
|
+
if (job.type === 'still') {
|
|
42
|
+
await (0, process_still_1.processStill)({
|
|
43
|
+
job,
|
|
44
|
+
remotionRoot,
|
|
45
|
+
entryPoint,
|
|
46
|
+
onProgress,
|
|
47
|
+
addCleanupCallback,
|
|
48
|
+
});
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (job.type === 'video') {
|
|
52
|
+
await (0, process_video_1.processVideoJob)({
|
|
53
|
+
job,
|
|
54
|
+
remotionRoot,
|
|
55
|
+
entryPoint,
|
|
56
|
+
onProgress,
|
|
57
|
+
addCleanupCallback,
|
|
58
|
+
});
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
throw new Error(`Unknown job ${JSON.stringify(job)}`);
|
|
62
|
+
};
|
|
63
|
+
exports.processJob = processJob;
|
|
64
|
+
const addJob = ({ job, entryPoint, remotionRoot, }) => {
|
|
65
|
+
jobQueue.push(job);
|
|
66
|
+
(0, exports.processJobIfPossible)({ entryPoint, remotionRoot });
|
|
67
|
+
(0, exports.notifyClientsOfJobUpdate)();
|
|
68
|
+
};
|
|
69
|
+
exports.addJob = addJob;
|
|
70
|
+
const removeJob = (jobId) => {
|
|
71
|
+
jobQueue = jobQueue.filter((job) => {
|
|
72
|
+
if (job.id === jobId) {
|
|
73
|
+
job.cleanup.forEach((c) => {
|
|
74
|
+
c();
|
|
75
|
+
});
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
});
|
|
80
|
+
(0, exports.notifyClientsOfJobUpdate)();
|
|
81
|
+
};
|
|
82
|
+
exports.removeJob = removeJob;
|
|
83
|
+
const cancelJob = (jobId) => {
|
|
84
|
+
for (const job of jobQueue) {
|
|
85
|
+
if (job.id === jobId) {
|
|
86
|
+
if (job.status !== 'running') {
|
|
87
|
+
throw new Error('Job is not running');
|
|
88
|
+
}
|
|
89
|
+
job.cancelToken.cancel();
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
exports.cancelJob = cancelJob;
|
|
95
|
+
const processJobIfPossible = async ({ remotionRoot, entryPoint, }) => {
|
|
96
|
+
const nextJob = jobQueue.find((q) => {
|
|
97
|
+
return q.status === 'idle';
|
|
98
|
+
});
|
|
99
|
+
if (!nextJob) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const jobCleanups = [];
|
|
103
|
+
try {
|
|
104
|
+
updateJob(nextJob.id, (job) => {
|
|
105
|
+
return {
|
|
106
|
+
...job,
|
|
107
|
+
status: 'running',
|
|
108
|
+
progress: 0,
|
|
109
|
+
message: 'Starting job...',
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
const startTime = Date.now();
|
|
113
|
+
log_1.Log.info(chalk_1.chalk.gray('╭─ Starting render '));
|
|
114
|
+
await (0, exports.processJob)({
|
|
115
|
+
job: nextJob,
|
|
116
|
+
entryPoint,
|
|
117
|
+
remotionRoot,
|
|
118
|
+
onProgress: ({ message, progress }) => {
|
|
119
|
+
updateJob(nextJob.id, (job) => {
|
|
120
|
+
// Ignore late callbacks of progress updates after cancelling
|
|
121
|
+
if (job.status === 'failed' || job.status === 'done') {
|
|
122
|
+
return job;
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
...job,
|
|
126
|
+
status: 'running',
|
|
127
|
+
progress,
|
|
128
|
+
message,
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
},
|
|
132
|
+
addCleanupCallback: (cleanup) => {
|
|
133
|
+
jobCleanups.push(cleanup);
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
log_1.Log.info(chalk_1.chalk.gray('╰─ Done in ' + (Date.now() - startTime) + 'ms.'));
|
|
137
|
+
const { unwatch } = (0, file_watcher_1.installFileWatcher)({
|
|
138
|
+
file: path_1.default.resolve(remotionRoot, nextJob.outName),
|
|
139
|
+
onChange: (type) => {
|
|
140
|
+
if (type === 'created') {
|
|
141
|
+
updateJob(nextJob.id, (job) => ({
|
|
142
|
+
...job,
|
|
143
|
+
deletedOutputLocation: false,
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
if (type === 'deleted') {
|
|
147
|
+
updateJob(nextJob.id, (job) => ({
|
|
148
|
+
...job,
|
|
149
|
+
deletedOutputLocation: true,
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
updateJob(nextJob.id, (job) => ({
|
|
155
|
+
...job,
|
|
156
|
+
status: 'done',
|
|
157
|
+
cleanup: [...job.cleanup, unwatch],
|
|
158
|
+
}));
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
// TODO: Tell to look in preview to find the error
|
|
162
|
+
log_1.Log.error(chalk_1.chalk.gray('╰─ Render failed:'), err);
|
|
163
|
+
updateJob(nextJob.id, (job) => {
|
|
164
|
+
return {
|
|
165
|
+
...job,
|
|
166
|
+
status: 'failed',
|
|
167
|
+
error: {
|
|
168
|
+
message: err.message,
|
|
169
|
+
stack: err.stack,
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
});
|
|
173
|
+
(0, live_events_1.waitForLiveEventsListener)().then((listener) => {
|
|
174
|
+
listener.sendEventToClient({
|
|
175
|
+
type: 'render-job-failed',
|
|
176
|
+
compositionId: nextJob.compositionId,
|
|
177
|
+
error: err,
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
finally {
|
|
182
|
+
await Promise.all(jobCleanups.map((c) => c()));
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
exports.processJobIfPossible = processJobIfPossible;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleAddRender = void 0;
|
|
4
|
+
const renderer_1 = require("@remotion/renderer");
|
|
5
|
+
const queue_1 = require("../render-queue/queue");
|
|
6
|
+
const handleAddRender = ({ input, entryPoint, remotionRoot, }) => {
|
|
7
|
+
const id = String(Math.random()).replace('0.', '');
|
|
8
|
+
if (input.type === 'video') {
|
|
9
|
+
(0, queue_1.addJob)({
|
|
10
|
+
entryPoint,
|
|
11
|
+
remotionRoot,
|
|
12
|
+
job: {
|
|
13
|
+
cleanup: [],
|
|
14
|
+
codec: input.codec,
|
|
15
|
+
audioCodec: input.audioCodec,
|
|
16
|
+
compositionId: input.compositionId,
|
|
17
|
+
deletedOutputLocation: false,
|
|
18
|
+
type: 'video',
|
|
19
|
+
status: 'idle',
|
|
20
|
+
id,
|
|
21
|
+
imageFormat: input.imageFormat,
|
|
22
|
+
outName: input.outName,
|
|
23
|
+
quality: input.quality,
|
|
24
|
+
scale: input.scale,
|
|
25
|
+
startedAt: Date.now(),
|
|
26
|
+
verbose: input.verbose,
|
|
27
|
+
cancelToken: (0, renderer_1.makeCancelSignal)(),
|
|
28
|
+
concurrency: input.concurrency,
|
|
29
|
+
crf: input.crf,
|
|
30
|
+
endFrame: input.endFrame,
|
|
31
|
+
startFrame: input.startFrame,
|
|
32
|
+
muted: input.muted,
|
|
33
|
+
enforceAudioTrack: input.enforceAudioTrack,
|
|
34
|
+
proResProfile: input.proResProfile,
|
|
35
|
+
pixelFormat: input.pixelFormat,
|
|
36
|
+
audioBitrate: input.audioBitrate,
|
|
37
|
+
videoBitrate: input.videoBitrate,
|
|
38
|
+
everyNthFrame: input.everyNthFrame,
|
|
39
|
+
numberOfGifLoops: input.numberOfGifLoops,
|
|
40
|
+
delayRenderTimeout: input.delayRenderTimeout,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (input.type === 'still') {
|
|
45
|
+
(0, queue_1.addJob)({
|
|
46
|
+
job: {
|
|
47
|
+
compositionId: input.compositionId,
|
|
48
|
+
id: String(Math.random()).replace('0.', ''),
|
|
49
|
+
startedAt: Date.now(),
|
|
50
|
+
type: 'still',
|
|
51
|
+
outName: input.outName,
|
|
52
|
+
status: 'idle',
|
|
53
|
+
imageFormat: input.imageFormat,
|
|
54
|
+
quality: input.quality,
|
|
55
|
+
frame: input.frame,
|
|
56
|
+
scale: input.scale,
|
|
57
|
+
cleanup: [],
|
|
58
|
+
deletedOutputLocation: false,
|
|
59
|
+
verbose: input.verbose,
|
|
60
|
+
cancelToken: (0, renderer_1.makeCancelSignal)(),
|
|
61
|
+
},
|
|
62
|
+
entryPoint,
|
|
63
|
+
remotionRoot,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return Promise.resolve(undefined);
|
|
67
|
+
};
|
|
68
|
+
exports.handleAddRender = handleAddRender;
|