@remotion/cli 4.0.40 → 4.0.42
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/chromium-flags.d.ts +3 -1
- package/dist/config/chromium-flags.js +8 -1
- package/dist/config/image-format.d.ts +1 -1
- package/dist/config/index.d.ts +12 -4
- package/dist/config/index.js +2 -0
- package/dist/editor/components/Modals.js +1 -1
- package/dist/editor/components/NewComposition/RemInput.d.ts +1 -1
- package/dist/editor/components/NewComposition/RemInputTypeColor.d.ts +1 -1
- package/dist/editor/components/NewComposition/RemTextarea.d.ts +1 -1
- package/dist/editor/components/QuickSwitcher/QuickSwitcherContent.js +1 -1
- package/dist/editor/components/RenderButton.js +1 -0
- package/dist/editor/components/RenderModal/RenderModal.d.ts +1 -0
- package/dist/editor/components/RenderModal/RenderModal.js +43 -6
- package/dist/editor/components/RenderModal/RenderModalAdvanced.d.ts +2 -0
- package/dist/editor/components/RenderModal/RenderModalAdvanced.js +6 -3
- package/dist/editor/components/RenderModal/human-readable-codec.d.ts +1 -1
- package/dist/editor/components/RenderQueue/actions.d.ts +6 -3
- package/dist/editor/components/RenderQueue/actions.js +6 -3
- package/dist/editor/components/SidebarRenderButton.js +1 -0
- package/dist/editor/state/modals.d.ts +1 -0
- package/dist/get-cli-options.d.ts +1 -1
- package/dist/get-cli-options.js +1 -0
- package/dist/index.d.ts +7 -6
- package/dist/parse-command-line.d.ts +2 -1
- package/dist/parse-command-line.js +4 -0
- package/dist/preview-server/dev-middleware/range-parser.d.ts +1 -1
- package/dist/preview-server/project-info.js +2 -0
- package/dist/preview-server/render-queue/job.d.ts +2 -0
- package/dist/preview-server/render-queue/make-retry-payload.js +3 -0
- package/dist/preview-server/routes/add-render.js +3 -0
- package/dist/preview-server/routes.js +2 -0
- package/dist/render-flows/render.js +1 -0
- package/package.json +8 -8
- package/dist/config/presets-profile.d.ts +0 -3
- package/dist/config/presets-profile.js +0 -12
- package/dist/handle-common-errors.d.ts +0 -2
- package/dist/handle-common-errors.js +0 -60
|
@@ -3,7 +3,9 @@ export declare const getChromiumDisableWebSecurity: () => boolean;
|
|
|
3
3
|
export declare const setChromiumDisableWebSecurity: (should: boolean) => void;
|
|
4
4
|
export declare const getIgnoreCertificateErrors: () => boolean;
|
|
5
5
|
export declare const setChromiumIgnoreCertificateErrors: (should: boolean) => void;
|
|
6
|
-
export declare const getChromiumOpenGlRenderer: () => "swangle" | "angle" | "egl" | "swiftshader" | null;
|
|
6
|
+
export declare const getChromiumOpenGlRenderer: () => "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | null;
|
|
7
7
|
export declare const setChromiumOpenGlRenderer: (renderer: OpenGlRenderer) => void;
|
|
8
8
|
export declare const getChromiumHeadlessMode: () => boolean;
|
|
9
9
|
export declare const setChromiumHeadlessMode: (should: boolean) => void;
|
|
10
|
+
export declare const getChromiumMultiProcessOnLinux: () => boolean;
|
|
11
|
+
export declare const setChromiumMultiProcessOnLinux: (should: boolean) => void;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setChromiumHeadlessMode = exports.getChromiumHeadlessMode = exports.setChromiumOpenGlRenderer = exports.getChromiumOpenGlRenderer = exports.setChromiumIgnoreCertificateErrors = exports.getIgnoreCertificateErrors = exports.setChromiumDisableWebSecurity = exports.getChromiumDisableWebSecurity = void 0;
|
|
3
|
+
exports.setChromiumMultiProcessOnLinux = exports.getChromiumMultiProcessOnLinux = exports.setChromiumHeadlessMode = exports.getChromiumHeadlessMode = exports.setChromiumOpenGlRenderer = exports.getChromiumOpenGlRenderer = exports.setChromiumIgnoreCertificateErrors = exports.getIgnoreCertificateErrors = exports.setChromiumDisableWebSecurity = exports.getChromiumDisableWebSecurity = void 0;
|
|
4
4
|
const renderer_1 = require("@remotion/renderer");
|
|
5
5
|
let chromiumDisableWebSecurity = false;
|
|
6
6
|
let ignoreCertificateErrors = false;
|
|
7
7
|
let openGlRenderer = renderer_1.RenderInternals.DEFAULT_OPENGL_RENDERER;
|
|
8
8
|
let headlessMode = true;
|
|
9
|
+
let multiProcessOnLinux = false;
|
|
9
10
|
const getChromiumDisableWebSecurity = () => chromiumDisableWebSecurity;
|
|
10
11
|
exports.getChromiumDisableWebSecurity = getChromiumDisableWebSecurity;
|
|
11
12
|
const setChromiumDisableWebSecurity = (should) => {
|
|
@@ -31,3 +32,9 @@ const setChromiumHeadlessMode = (should) => {
|
|
|
31
32
|
headlessMode = should;
|
|
32
33
|
};
|
|
33
34
|
exports.setChromiumHeadlessMode = setChromiumHeadlessMode;
|
|
35
|
+
const getChromiumMultiProcessOnLinux = () => multiProcessOnLinux;
|
|
36
|
+
exports.getChromiumMultiProcessOnLinux = getChromiumMultiProcessOnLinux;
|
|
37
|
+
const setChromiumMultiProcessOnLinux = (should) => {
|
|
38
|
+
multiProcessOnLinux = should;
|
|
39
|
+
};
|
|
40
|
+
exports.setChromiumMultiProcessOnLinux = setChromiumMultiProcessOnLinux;
|
|
@@ -2,4 +2,4 @@ import type { StillImageFormat, VideoImageFormat } from '@remotion/renderer';
|
|
|
2
2
|
export declare const setStillImageFormat: (format: StillImageFormat) => void;
|
|
3
3
|
export declare const setVideoImageFormat: (format: VideoImageFormat) => void;
|
|
4
4
|
export declare const getUserPreferredStillImageFormat: () => "png" | "jpeg" | "pdf" | "webp" | undefined;
|
|
5
|
-
export declare const getUserPreferredVideoImageFormat: () => "
|
|
5
|
+
export declare const getUserPreferredVideoImageFormat: () => "none" | "png" | "jpeg" | undefined;
|
package/dist/config/index.d.ts
CHANGED
|
@@ -103,10 +103,10 @@ declare global {
|
|
|
103
103
|
*/
|
|
104
104
|
readonly setChromiumHeadlessMode: (should: boolean) => void;
|
|
105
105
|
/**
|
|
106
|
-
* Set the OpenGL rendering backend for Chrome. Possible values: 'egl', 'angle', 'swiftshader' and '
|
|
106
|
+
* Set the OpenGL rendering backend for Chrome. Possible values: 'egl', 'angle', 'swiftshader', 'swangle' and 'vulkan'.
|
|
107
107
|
* Default: 'swangle' in Lambda, null elsewhere.
|
|
108
108
|
*/
|
|
109
|
-
readonly setChromiumOpenGlRenderer: (renderer: 'swangle' | 'angle' | 'egl' | 'swiftshader') => void;
|
|
109
|
+
readonly setChromiumOpenGlRenderer: (renderer: 'swangle' | 'angle' | 'egl' | 'swiftshader' | 'vulkan') => void;
|
|
110
110
|
/**
|
|
111
111
|
* Set the user agent for Chrome. Only works during rendering.
|
|
112
112
|
* Default is the default user agent for Chrome
|
|
@@ -243,6 +243,13 @@ declare global {
|
|
|
243
243
|
* Opt into bt709 rendering.
|
|
244
244
|
*/
|
|
245
245
|
readonly setColorSpace: (colorSpace: ColorSpace) => void;
|
|
246
|
+
/**
|
|
247
|
+
* Removes the --single-process flag that gets passed to
|
|
248
|
+
Chromium on Linux by default. This will make the render faster because
|
|
249
|
+
multiple processes can be used, but may cause issues with some Linux
|
|
250
|
+
distributions or if window server libraries are missing.
|
|
251
|
+
*/
|
|
252
|
+
readonly setChromiumMultiProcessOnLinux: (multiProcessOnLinux: boolean) => void;
|
|
246
253
|
}
|
|
247
254
|
}
|
|
248
255
|
type FlatConfig = RemotionConfigObject & RemotionBundlingOptions & {
|
|
@@ -299,7 +306,7 @@ export declare const ConfigInternals: {
|
|
|
299
306
|
getChromiumDisableWebSecurity: () => boolean;
|
|
300
307
|
getIgnoreCertificateErrors: () => boolean;
|
|
301
308
|
getChromiumHeadlessMode: () => boolean;
|
|
302
|
-
getChromiumOpenGlRenderer: () => "swangle" | "angle" | "egl" | "swiftshader" | null;
|
|
309
|
+
getChromiumOpenGlRenderer: () => "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | null;
|
|
303
310
|
getEveryNthFrame: () => number;
|
|
304
311
|
getConcurrency: () => string | number | null;
|
|
305
312
|
getCurrentPuppeteerTimeout: () => number;
|
|
@@ -309,7 +316,7 @@ export declare const ConfigInternals: {
|
|
|
309
316
|
getShouldOutputImageSequence: (frameRange: FrameRange | null) => boolean;
|
|
310
317
|
getDotEnvLocation: () => string | null;
|
|
311
318
|
getUserPreferredStillImageFormat: () => "png" | "jpeg" | "pdf" | "webp" | undefined;
|
|
312
|
-
getUserPreferredVideoImageFormat: () => "
|
|
319
|
+
getUserPreferredVideoImageFormat: () => "none" | "png" | "jpeg" | undefined;
|
|
313
320
|
getWebpackOverrideFn: () => WebpackOverrideFn;
|
|
314
321
|
getWebpackCaching: () => boolean;
|
|
315
322
|
getOutputLocation: () => string | null;
|
|
@@ -339,4 +346,5 @@ export declare const ConfigInternals: {
|
|
|
339
346
|
getDeleteAfter: () => ("1-day" | "3-days" | "7-days" | "30-days") | null;
|
|
340
347
|
getColorSpace: () => "default" | "bt709";
|
|
341
348
|
getEnableFolderExpiry: () => boolean | null;
|
|
349
|
+
getChromiumMultiProcessOnLinux: () => boolean;
|
|
342
350
|
};
|
package/dist/config/index.js
CHANGED
|
@@ -128,6 +128,7 @@ exports.Config = {
|
|
|
128
128
|
setChromiumUserAgent: user_agent_1.setChromiumUserAgent,
|
|
129
129
|
setDotEnvLocation: env_file_2.setDotEnvLocation,
|
|
130
130
|
setConcurrency: concurrency_2.setConcurrency,
|
|
131
|
+
setChromiumMultiProcessOnLinux: chromium_flags_1.setChromiumMultiProcessOnLinux,
|
|
131
132
|
setQuality: () => {
|
|
132
133
|
throw new Error('setQuality() has been renamed - use setJpegQuality() instead.');
|
|
133
134
|
},
|
|
@@ -216,4 +217,5 @@ exports.ConfigInternals = {
|
|
|
216
217
|
getDeleteAfter: render_folder_expiry_1.getDeleteAfter,
|
|
217
218
|
getColorSpace: color_space_1.getColorSpace,
|
|
218
219
|
getEnableFolderExpiry: enable_folder_expiry_1.getEnableFolderExpiry,
|
|
220
|
+
getChromiumMultiProcessOnLinux: chromium_flags_1.getChromiumMultiProcessOnLinux,
|
|
219
221
|
};
|
|
@@ -16,7 +16,7 @@ const UpdateModal_1 = require("./UpdateModal/UpdateModal");
|
|
|
16
16
|
const Modals = () => {
|
|
17
17
|
const { selectedModal: modalContextType } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
18
18
|
const canRender = (0, react_1.useContext)(client_id_1.StudioServerConnectionCtx).type === 'connected';
|
|
19
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'new-comp' && ((0, jsx_runtime_1.jsx)(NewComposition_1.default, { initialCompType: modalContextType.compType })), modalContextType && canRender && modalContextType.type === 'render' && ((0, jsx_runtime_1.jsx)(RenderModal_1.RenderModalWithLoader, { initialFrame: modalContextType.initialFrame, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialOutName: modalContextType.initialOutName, initialScale: modalContextType.initialScale, initialVerbose: modalContextType.initialVerbose, initialRenderType: modalContextType.initialRenderType, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialVideoCodecForAudioTab: modalContextType.initialVideoCodecForAudioTab, initialVideoCodecForVideoTab: modalContextType.initialVideoCodecForVideoTab, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialAudioCodec: modalContextType.initialAudioCodec, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, initialColorSpace: modalContextType.initialColorSpace })), modalContextType &&
|
|
19
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [modalContextType && modalContextType.type === 'new-comp' && ((0, jsx_runtime_1.jsx)(NewComposition_1.default, { initialCompType: modalContextType.compType })), modalContextType && canRender && modalContextType.type === 'render' && ((0, jsx_runtime_1.jsx)(RenderModal_1.RenderModalWithLoader, { initialFrame: modalContextType.initialFrame, compositionId: modalContextType.compositionId, initialVideoImageFormat: modalContextType.initialVideoImageFormat, initialJpegQuality: modalContextType.initialJpegQuality, initialOutName: modalContextType.initialOutName, initialScale: modalContextType.initialScale, initialVerbose: modalContextType.initialVerbose, initialRenderType: modalContextType.initialRenderType, initialOffthreadVideoCacheSizeInBytes: modalContextType.initialOffthreadVideoCacheSizeInBytes, initialVideoCodecForAudioTab: modalContextType.initialVideoCodecForAudioTab, initialVideoCodecForVideoTab: modalContextType.initialVideoCodecForVideoTab, initialConcurrency: modalContextType.initialConcurrency, maxConcurrency: modalContextType.maxConcurrency, minConcurrency: modalContextType.minConcurrency, initialStillImageFormat: modalContextType.initialStillImageFormat, initialMuted: modalContextType.initialMuted, initialEnforceAudioTrack: modalContextType.initialEnforceAudioTrack, initialProResProfile: modalContextType.initialProResProfile, initialx264Preset: modalContextType.initialx264Preset, initialPixelFormat: modalContextType.initialPixelFormat, initialAudioBitrate: modalContextType.initialAudioBitrate, initialVideoBitrate: modalContextType.initialVideoBitrate, initialEveryNthFrame: modalContextType.initialEveryNthFrame, initialNumberOfGifLoops: modalContextType.initialNumberOfGifLoops, initialDelayRenderTimeout: modalContextType.initialDelayRenderTimeout, initialAudioCodec: modalContextType.initialAudioCodec, initialEnvVariables: modalContextType.initialEnvVariables, initialDisableWebSecurity: modalContextType.initialDisableWebSecurity, initialGl: modalContextType.initialOpenGlRenderer, initialHeadless: modalContextType.initialHeadless, initialIgnoreCertificateErrors: modalContextType.initialIgnoreCertificateErrors, defaultProps: modalContextType.defaultProps, inFrameMark: modalContextType.inFrameMark, outFrameMark: modalContextType.outFrameMark, initialColorSpace: modalContextType.initialColorSpace, initialMultiProcessOnLinux: modalContextType.initialMultiProcessOnLinux })), modalContextType &&
|
|
20
20
|
canRender &&
|
|
21
21
|
modalContextType.type === 'render-progress' && ((0, jsx_runtime_1.jsx)(RenderStatusModal_1.RenderStatusModal, { jobId: modalContextType.jobId })), modalContextType && modalContextType.type === 'update' && ((0, jsx_runtime_1.jsx)(UpdateModal_1.UpdateModal, { info: modalContextType.info })), modalContextType && modalContextType.type === 'quick-switcher' && ((0, jsx_runtime_1.jsx)(QuickSwitcher_1.default, { invocationTimestamp: modalContextType.invocationTimestamp, initialMode: modalContextType.mode }))] }));
|
|
22
22
|
};
|
|
@@ -13,5 +13,5 @@ export declare const getInputBorderColor: ({ status, isFocused, isHovered, }: {
|
|
|
13
13
|
isFocused: boolean;
|
|
14
14
|
isHovered: boolean;
|
|
15
15
|
}) => "hsla(0, 0%, 100%, 0.15)" | "rgba(0, 0, 0, 0.6)" | "rgba(255, 255, 255, 0.05)" | "#ff3232" | "#f1c40f";
|
|
16
|
-
export declare const RemotionInput: React.ForwardRefExoticComponent<Pick<Props, "
|
|
16
|
+
export declare const RemotionInput: React.ForwardRefExoticComponent<Pick<Props, "key" | keyof React.InputHTMLAttributes<HTMLInputElement> | "status" | "rightAlign"> & React.RefAttributes<HTMLInputElement>>;
|
|
17
17
|
export {};
|
|
@@ -4,5 +4,5 @@ type Props = React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>
|
|
|
4
4
|
status: RemInputStatus;
|
|
5
5
|
name: string;
|
|
6
6
|
};
|
|
7
|
-
export declare const RemInputTypeColor: React.ForwardRefExoticComponent<Pick<Props, "
|
|
7
|
+
export declare const RemInputTypeColor: React.ForwardRefExoticComponent<Pick<Props, "key" | keyof React.InputHTMLAttributes<HTMLInputElement> | "status"> & React.RefAttributes<HTMLInputElement>>;
|
|
8
8
|
export {};
|
|
@@ -3,5 +3,5 @@ type Props = React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLTextAreaEleme
|
|
|
3
3
|
status: 'error' | 'warning' | 'ok';
|
|
4
4
|
};
|
|
5
5
|
export declare const inputBaseStyle: React.CSSProperties;
|
|
6
|
-
export declare const RemTextarea: React.ForwardRefExoticComponent<Pick<Props, "
|
|
6
|
+
export declare const RemTextarea: React.ForwardRefExoticComponent<Pick<Props, "key" | "status" | keyof React.InputHTMLAttributes<HTMLTextAreaElement>> & React.RefAttributes<HTMLTextAreaElement>>;
|
|
7
7
|
export {};
|
|
@@ -135,7 +135,7 @@ const QuickSwitcherContent = ({ initialMode, invocationTimestamp }) => {
|
|
|
135
135
|
var _a;
|
|
136
136
|
selectComposition(c, true);
|
|
137
137
|
setSelectedModal(null);
|
|
138
|
-
const selector = `.__remotion-composition[data-compname
|
|
138
|
+
const selector = `.__remotion-composition[data-compname="${c.id}"]`;
|
|
139
139
|
(_a = CompositionSelector_1.compositionSelectorRef.current) === null || _a === void 0 ? void 0 : _a.expandComposition(c.id);
|
|
140
140
|
waitForElm(selector).then(() => {
|
|
141
141
|
var _a;
|
|
@@ -100,6 +100,7 @@ const RenderButton = () => {
|
|
|
100
100
|
inFrameMark: inFrame,
|
|
101
101
|
outFrameMark: outFrame,
|
|
102
102
|
initialColorSpace: defaults.colorSpace,
|
|
103
|
+
initialMultiProcessOnLinux: defaults.multiProcessOnLinux,
|
|
103
104
|
});
|
|
104
105
|
}, [video, setSelectedModal, frame, props, inFrame, outFrame]);
|
|
105
106
|
if (!video) {
|
|
@@ -37,6 +37,7 @@ type RenderModalProps = {
|
|
|
37
37
|
defaultProps: Record<string, unknown>;
|
|
38
38
|
inFrameMark: number | null;
|
|
39
39
|
outFrameMark: number | null;
|
|
40
|
+
initialMultiProcessOnLinux: boolean;
|
|
40
41
|
};
|
|
41
42
|
export declare const RenderModalWithLoader: React.FC<RenderModalProps>;
|
|
42
43
|
export {};
|
|
@@ -114,13 +114,14 @@ const outer = {
|
|
|
114
114
|
display: 'flex',
|
|
115
115
|
flexDirection: 'column',
|
|
116
116
|
};
|
|
117
|
-
const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageFormat, initialJpegQuality, initialScale, initialVerbose, initialOutName, initialRenderType, initialVideoCodecForAudioTab, initialVideoCodecForVideoTab, initialConcurrency, maxConcurrency, minConcurrency, initialMuted, initialEnforceAudioTrack, initialProResProfile, initialx264Preset, initialPixelFormat, initialVideoBitrate, initialAudioBitrate, initialEveryNthFrame, initialNumberOfGifLoops, initialDelayRenderTimeout, initialOffthreadVideoCacheSizeInBytes, initialAudioCodec, initialEnvVariables, initialDisableWebSecurity, initialGl, initialHeadless, initialIgnoreCertificateErrors, defaultProps, inFrameMark, outFrameMark, onClose, resolvedComposition, unresolvedComposition, initialColorSpace, }) => {
|
|
117
|
+
const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageFormat, initialJpegQuality, initialScale, initialVerbose, initialOutName, initialRenderType, initialVideoCodecForAudioTab, initialVideoCodecForVideoTab, initialConcurrency, maxConcurrency, minConcurrency, initialMuted, initialEnforceAudioTrack, initialProResProfile, initialx264Preset, initialPixelFormat, initialVideoBitrate, initialAudioBitrate, initialEveryNthFrame, initialNumberOfGifLoops, initialDelayRenderTimeout, initialOffthreadVideoCacheSizeInBytes, initialAudioCodec, initialEnvVariables, initialDisableWebSecurity, initialGl, initialHeadless, initialIgnoreCertificateErrors, defaultProps, inFrameMark, outFrameMark, onClose, resolvedComposition, unresolvedComposition, initialColorSpace, initialMultiProcessOnLinux, }) => {
|
|
118
118
|
const isMounted = (0, react_1.useRef)(true);
|
|
119
119
|
const [state, dispatch] = (0, react_1.useReducer)(reducer, initialState);
|
|
120
120
|
const [unclampedFrame, setFrame] = (0, react_1.useState)(() => initialFrame);
|
|
121
121
|
const [saving, setSaving] = (0, react_1.useState)(false);
|
|
122
122
|
const [stillImageFormat, setStillImageFormat] = (0, react_1.useState)(() => initialStillImageFormat);
|
|
123
123
|
const [videoImageFormat, setVideoImageFormat] = (0, react_1.useState)(() => initialVideoImageFormat);
|
|
124
|
+
const [sequenceImageFormat, setSequenceImageFormat] = (0, react_1.useState)(() => initialStillImageFormat === 'jpeg' ? 'jpeg' : 'png');
|
|
124
125
|
const [concurrency, setConcurrency] = (0, react_1.useState)(() => initialConcurrency);
|
|
125
126
|
const [videoCodecForVideoTab, setVideoCodecForVideoTab] = (0, react_1.useState)(() => initialVideoCodecForVideoTab);
|
|
126
127
|
const [userSelectedAudioCodec, setUserSelectedAudioCodec] = (0, react_1.useState)(() => initialAudioCodec);
|
|
@@ -136,6 +137,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
136
137
|
const [disableWebSecurity, setDisableWebSecurity] = (0, react_1.useState)(() => initialDisableWebSecurity);
|
|
137
138
|
const [headless, setHeadless] = (0, react_1.useState)(() => initialHeadless);
|
|
138
139
|
const [ignoreCertificateErrors, setIgnoreCertificateErrors] = (0, react_1.useState)(() => initialIgnoreCertificateErrors);
|
|
140
|
+
const [multiProcessOnLinux, setChromiumMultiProcessOnLinux] = (0, react_1.useState)(() => initialMultiProcessOnLinux);
|
|
139
141
|
const [openGlOption, setOpenGlOption] = (0, react_1.useState)(() => initialGl !== null && initialGl !== void 0 ? initialGl : 'default');
|
|
140
142
|
const [colorSpace, setColorSpace] = (0, react_1.useState)(() => initialColorSpace);
|
|
141
143
|
const chromiumOptions = (0, react_1.useMemo)(() => {
|
|
@@ -146,8 +148,15 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
146
148
|
gl: openGlOption === 'default' ? null : openGlOption,
|
|
147
149
|
// TODO: Make this configurable at some point (not necessary for V4)
|
|
148
150
|
userAgent: null,
|
|
151
|
+
enableMultiProcessOnLinux: multiProcessOnLinux,
|
|
149
152
|
};
|
|
150
|
-
}, [
|
|
153
|
+
}, [
|
|
154
|
+
headless,
|
|
155
|
+
disableWebSecurity,
|
|
156
|
+
ignoreCertificateErrors,
|
|
157
|
+
openGlOption,
|
|
158
|
+
multiProcessOnLinux,
|
|
159
|
+
]);
|
|
151
160
|
const [outName, setOutName] = (0, react_1.useState)(() => initialOutName);
|
|
152
161
|
const [endFrameOrNull, setEndFrame] = (0, react_1.useState)(() => outFrameMark !== null && outFrameMark !== void 0 ? outFrameMark : null);
|
|
153
162
|
const [startFrameOrNull, setStartFrame] = (0, react_1.useState)(() => inFrameMark !== null && inFrameMark !== void 0 ? inFrameMark : null);
|
|
@@ -345,6 +354,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
345
354
|
envVariables: (0, convert_env_variables_1.envVariablesArrayToObject)(envVariables),
|
|
346
355
|
inputProps,
|
|
347
356
|
offthreadVideoCacheSizeInBytes,
|
|
357
|
+
multiProcessOnLinux,
|
|
348
358
|
})
|
|
349
359
|
.then(() => {
|
|
350
360
|
dispatchIfMounted({ type: 'succeed' });
|
|
@@ -368,6 +378,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
368
378
|
envVariables,
|
|
369
379
|
inputProps,
|
|
370
380
|
offthreadVideoCacheSizeInBytes,
|
|
381
|
+
multiProcessOnLinux,
|
|
371
382
|
onClose,
|
|
372
383
|
]);
|
|
373
384
|
const [everyNthFrameSetting, setEveryNthFrameSetting] = (0, react_1.useState)(() => initialEveryNthFrame);
|
|
@@ -413,6 +424,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
413
424
|
inputProps,
|
|
414
425
|
offthreadVideoCacheSizeInBytes,
|
|
415
426
|
colorSpace,
|
|
427
|
+
multiProcessOnLinux,
|
|
416
428
|
})
|
|
417
429
|
.then(() => {
|
|
418
430
|
dispatchIfMounted({ type: 'succeed' });
|
|
@@ -454,6 +466,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
454
466
|
inputProps,
|
|
455
467
|
offthreadVideoCacheSizeInBytes,
|
|
456
468
|
colorSpace,
|
|
469
|
+
multiProcessOnLinux,
|
|
457
470
|
onClose,
|
|
458
471
|
]);
|
|
459
472
|
const onClickSequence = (0, react_1.useCallback)(() => {
|
|
@@ -465,7 +478,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
465
478
|
(0, actions_1.addSequenceRenderJob)({
|
|
466
479
|
compositionId: resolvedComposition.id,
|
|
467
480
|
outName,
|
|
468
|
-
imageFormat:
|
|
481
|
+
imageFormat: sequenceImageFormat,
|
|
469
482
|
scale,
|
|
470
483
|
verbose,
|
|
471
484
|
concurrency,
|
|
@@ -478,6 +491,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
478
491
|
inputProps,
|
|
479
492
|
offthreadVideoCacheSizeInBytes,
|
|
480
493
|
disallowParallelEncoding,
|
|
494
|
+
multiProcessOnLinux,
|
|
481
495
|
})
|
|
482
496
|
.then(() => {
|
|
483
497
|
dispatchIfMounted({ type: 'succeed' });
|
|
@@ -491,7 +505,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
491
505
|
dispatchIfMounted,
|
|
492
506
|
resolvedComposition.id,
|
|
493
507
|
outName,
|
|
494
|
-
|
|
508
|
+
sequenceImageFormat,
|
|
495
509
|
scale,
|
|
496
510
|
verbose,
|
|
497
511
|
concurrency,
|
|
@@ -504,6 +518,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
504
518
|
inputProps,
|
|
505
519
|
offthreadVideoCacheSizeInBytes,
|
|
506
520
|
disallowParallelEncoding,
|
|
521
|
+
multiProcessOnLinux,
|
|
507
522
|
onClose,
|
|
508
523
|
]);
|
|
509
524
|
(0, react_1.useEffect)(() => {
|
|
@@ -540,6 +555,22 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
540
555
|
},
|
|
541
556
|
];
|
|
542
557
|
}
|
|
558
|
+
if (renderMode === 'sequence') {
|
|
559
|
+
return [
|
|
560
|
+
{
|
|
561
|
+
label: 'PNG',
|
|
562
|
+
onClick: () => setSequenceImageFormat('png'),
|
|
563
|
+
key: 'png',
|
|
564
|
+
selected: sequenceImageFormat === 'png',
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
label: 'JPEG',
|
|
568
|
+
onClick: () => setSequenceImageFormat('jpeg'),
|
|
569
|
+
key: 'jpeg',
|
|
570
|
+
selected: sequenceImageFormat === 'jpeg',
|
|
571
|
+
},
|
|
572
|
+
];
|
|
573
|
+
}
|
|
543
574
|
return [
|
|
544
575
|
{
|
|
545
576
|
label: 'PNG',
|
|
@@ -554,7 +585,13 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
554
585
|
selected: videoImageFormat === 'jpeg',
|
|
555
586
|
},
|
|
556
587
|
];
|
|
557
|
-
}, [
|
|
588
|
+
}, [
|
|
589
|
+
renderMode,
|
|
590
|
+
videoImageFormat,
|
|
591
|
+
stillImageFormat,
|
|
592
|
+
setStillFormat,
|
|
593
|
+
sequenceImageFormat,
|
|
594
|
+
]);
|
|
558
595
|
const setRenderMode = (0, react_1.useCallback)((newRenderMode) => {
|
|
559
596
|
setRenderModeState(newRenderMode);
|
|
560
597
|
if (newRenderMode === 'audio') {
|
|
@@ -675,7 +712,7 @@ const RenderModal = ({ initialFrame, initialVideoImageFormat, initialStillImageF
|
|
|
675
712
|
return ((0, jsx_runtime_1.jsxs)("div", { style: outer, children: [(0, jsx_runtime_1.jsx)(ModalHeader_1.NewCompHeader, { title: `Render ${resolvedComposition.id}` }), (0, jsx_runtime_1.jsxs)("div", { style: container, children: [(0, jsx_runtime_1.jsx)(SegmentedControl_1.SegmentedControl, { items: renderTabOptions, needsWrapping: false }), (0, jsx_runtime_1.jsx)("div", { style: flexer }), (0, jsx_runtime_1.jsxs)(Button_1.Button, { autoFocus: true, onClick: trigger, disabled: renderDisabled, style: {
|
|
676
713
|
...buttonStyle,
|
|
677
714
|
backgroundColor: outnameValidation.valid ? colors_1.BLUE : colors_1.BLUE_DISABLED,
|
|
678
|
-
}, children: [state.type === 'idle' ? `Render ${renderMode}` : 'Rendering...', (0, jsx_runtime_1.jsx)(ShortcutHint_1.ShortcutHint, { keyToPress: "\u21B5", cmdOrCtrl: true })] })] }), (0, jsx_runtime_1.jsxs)("div", { style: horizontalLayout, children: [(0, jsx_runtime_1.jsxs)("div", { style: leftSidebar, children: [shownTabs.includes('general') ? ((0, jsx_runtime_1.jsxs)(vertical_1.VerticalTab, { style: horizontalTab, selected: tab === 'general', onClick: () => setTab('general'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(file_1.FileIcon, { style: icon }) }), "General"] })) : null, shownTabs.includes('data') ? ((0, jsx_runtime_1.jsxs)(vertical_1.VerticalTab, { style: horizontalTab, selected: tab === 'data', onClick: () => setTab('data'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(data_1.DataIcon, { style: icon }) }), "Input Props"] })) : null, shownTabs.includes('picture') ? ((0, jsx_runtime_1.jsxs)(vertical_1.VerticalTab, { style: horizontalTab, selected: tab === 'picture', onClick: () => setTab('picture'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(frame_1.PicIcon, { style: icon }) }), "Picture"] })) : null, shownTabs.includes('audio') ? ((0, jsx_runtime_1.jsxs)(vertical_1.VerticalTab, { style: horizontalTab, selected: tab === 'audio', onClick: () => setTab('audio'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(audio_1.AudioIcon, { style: icon }) }), "Audio"] })) : null, shownTabs.includes('gif') ? ((0, jsx_runtime_1.jsxs)(vertical_1.VerticalTab, { style: horizontalTab, selected: tab === 'gif', onClick: () => setTab('gif'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(gif_1.GifIcon, { style: icon }) }), "GIF"] })) : null, shownTabs.includes('advanced') ? ((0, jsx_runtime_1.jsxs)(vertical_1.VerticalTab, { style: horizontalTab, selected: tab === 'advanced', onClick: () => setTab('advanced'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(gear_1.GearIcon, { style: icon }) }), "Other"] })) : null] }), (0, jsx_runtime_1.jsx)("div", { style: optionsPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: tab === 'general' ? ((0, jsx_runtime_1.jsx)(RenderModalBasic_1.RenderModalBasic, { codec: codec, resolvedComposition: resolvedComposition, frame: frame, imageFormatOptions: imageFormatOptions, outName: outName, proResProfile: proResProfile, renderMode: renderMode, setVideoCodec: setCodec, setFrame: setFrame, setOutName: setOutName, setProResProfile: setProResProfile, endFrame: endFrame, setEndFrame: setEndFrame, setStartFrame: setStartFrame, startFrame: startFrame, validationMessage: outnameValidation.valid ? null : outnameValidation.error.message })) : tab === 'picture' ? ((0, jsx_runtime_1.jsx)(RenderModalPicture_1.RenderModalPicture, { renderMode: renderMode, scale: scale, setScale: setScale, pixelFormat: pixelFormat, setPixelFormat: setPixelFormat, imageFormatOptions: imageFormatOptions, crf: crf, setCrf: setCrf, customTargetVideoBitrate: customTargetVideoBitrate, maxCrf: maxCrf, minCrf: minCrf, jpegQuality: jpegQuality, qualityControlType: qualityControlType, setJpegQuality: setJpegQuality, setColorSpace: setColorSpace, colorSpace: colorSpace, setCustomTargetVideoBitrateValue: setCustomTargetVideoBitrateValue, setQualityControl: setQualityControl, videoImageFormat: videoImageFormat, stillImageFormat: stillImageFormat, shouldDisplayQualityControlPicker: supportsBothQualityControls })) : tab === 'audio' ? ((0, jsx_runtime_1.jsx)(RenderModalAudio_1.RenderModalAudio, { muted: muted, renderMode: renderMode, setMuted: setMuted, codec: codec, audioCodec: audioCodec, setAudioCodec: setAudioCodec, enforceAudioTrack: enforceAudioTrack, setEnforceAudioTrackState: setEnforceAudioTrackState, customTargetAudioBitrate: customTargetAudioBitrate, setCustomTargetAudioBitrateValue: setCustomTargetAudioBitrateValue, setShouldHaveCustomTargetAudioBitrate: setShouldHaveCustomTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate: shouldHaveCustomTargetAudioBitrate })) : tab === 'gif' ? ((0, jsx_runtime_1.jsx)(RenderModalGif_1.RenderModalGif, { everyNthFrame: everyNthFrame, limitNumberOfGifLoops: limitNumberOfGifLoops, numberOfGifLoopsSetting: numberOfGifLoopsSetting, setEveryNthFrameSetting: setEveryNthFrameSetting, setLimitNumberOfGifLoops: setLimitNumberOfGifLoops, setNumberOfGifLoopsSetting: setNumberOfGifLoopsSetting })) : tab === 'data' ? ((0, jsx_runtime_1.jsx)(DataEditor_1.DataEditor, { inputProps: inputProps, setInputProps: setInputProps, unresolvedComposition: unresolvedComposition, mayShowSaveButton: false, propsEditType: "input-props", saving: saving, setSaving: setSaving })) : ((0, jsx_runtime_1.jsx)(RenderModalAdvanced_1.RenderModalAdvanced, { x264Preset: x264Preset, setx264Preset: setx264Preset, concurrency: concurrency, maxConcurrency: maxConcurrency, minConcurrency: minConcurrency, renderMode: renderMode, setConcurrency: setConcurrency, setVerboseLogging: setVerboseLogging, verbose: verbose, delayRenderTimeout: delayRenderTimeout, setDelayRenderTimeout: setDelayRenderTimeout, disallowParallelEncoding: disallowParallelEncoding, setDisallowParallelEncoding: setDisallowParallelEncoding, setDisableWebSecurity: setDisableWebSecurity, setIgnoreCertificateErrors: setIgnoreCertificateErrors, setHeadless: setHeadless, headless: headless, ignoreCertificateErrors: ignoreCertificateErrors, disableWebSecurity: disableWebSecurity, openGlOption: openGlOption, setOpenGlOption: setOpenGlOption, setEnvVariables: setEnvVariables, envVariables: envVariables, offthreadVideoCacheSizeInBytes: offthreadVideoCacheSizeInBytes, setOffthreadVideoCacheSizeInBytes: setOffthreadVideoCacheSizeInBytes, codec: codec })) })] })] }));
|
|
715
|
+
}, children: [state.type === 'idle' ? `Render ${renderMode}` : 'Rendering...', (0, jsx_runtime_1.jsx)(ShortcutHint_1.ShortcutHint, { keyToPress: "\u21B5", cmdOrCtrl: true })] })] }), (0, jsx_runtime_1.jsxs)("div", { style: horizontalLayout, children: [(0, jsx_runtime_1.jsxs)("div", { style: leftSidebar, children: [shownTabs.includes('general') ? ((0, jsx_runtime_1.jsxs)(vertical_1.VerticalTab, { style: horizontalTab, selected: tab === 'general', onClick: () => setTab('general'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(file_1.FileIcon, { style: icon }) }), "General"] })) : null, shownTabs.includes('data') ? ((0, jsx_runtime_1.jsxs)(vertical_1.VerticalTab, { style: horizontalTab, selected: tab === 'data', onClick: () => setTab('data'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(data_1.DataIcon, { style: icon }) }), "Input Props"] })) : null, shownTabs.includes('picture') ? ((0, jsx_runtime_1.jsxs)(vertical_1.VerticalTab, { style: horizontalTab, selected: tab === 'picture', onClick: () => setTab('picture'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(frame_1.PicIcon, { style: icon }) }), "Picture"] })) : null, shownTabs.includes('audio') ? ((0, jsx_runtime_1.jsxs)(vertical_1.VerticalTab, { style: horizontalTab, selected: tab === 'audio', onClick: () => setTab('audio'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(audio_1.AudioIcon, { style: icon }) }), "Audio"] })) : null, shownTabs.includes('gif') ? ((0, jsx_runtime_1.jsxs)(vertical_1.VerticalTab, { style: horizontalTab, selected: tab === 'gif', onClick: () => setTab('gif'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(gif_1.GifIcon, { style: icon }) }), "GIF"] })) : null, shownTabs.includes('advanced') ? ((0, jsx_runtime_1.jsxs)(vertical_1.VerticalTab, { style: horizontalTab, selected: tab === 'advanced', onClick: () => setTab('advanced'), children: [(0, jsx_runtime_1.jsx)("div", { style: iconContainer, children: (0, jsx_runtime_1.jsx)(gear_1.GearIcon, { style: icon }) }), "Other"] })) : null] }), (0, jsx_runtime_1.jsx)("div", { style: optionsPanel, className: is_menu_item_1.VERTICAL_SCROLLBAR_CLASSNAME, children: tab === 'general' ? ((0, jsx_runtime_1.jsx)(RenderModalBasic_1.RenderModalBasic, { codec: codec, resolvedComposition: resolvedComposition, frame: frame, imageFormatOptions: imageFormatOptions, outName: outName, proResProfile: proResProfile, renderMode: renderMode, setVideoCodec: setCodec, setFrame: setFrame, setOutName: setOutName, setProResProfile: setProResProfile, endFrame: endFrame, setEndFrame: setEndFrame, setStartFrame: setStartFrame, startFrame: startFrame, validationMessage: outnameValidation.valid ? null : outnameValidation.error.message })) : tab === 'picture' ? ((0, jsx_runtime_1.jsx)(RenderModalPicture_1.RenderModalPicture, { renderMode: renderMode, scale: scale, setScale: setScale, pixelFormat: pixelFormat, setPixelFormat: setPixelFormat, imageFormatOptions: imageFormatOptions, crf: crf, setCrf: setCrf, customTargetVideoBitrate: customTargetVideoBitrate, maxCrf: maxCrf, minCrf: minCrf, jpegQuality: jpegQuality, qualityControlType: qualityControlType, setJpegQuality: setJpegQuality, setColorSpace: setColorSpace, colorSpace: colorSpace, setCustomTargetVideoBitrateValue: setCustomTargetVideoBitrateValue, setQualityControl: setQualityControl, videoImageFormat: videoImageFormat, stillImageFormat: stillImageFormat, shouldDisplayQualityControlPicker: supportsBothQualityControls })) : tab === 'audio' ? ((0, jsx_runtime_1.jsx)(RenderModalAudio_1.RenderModalAudio, { muted: muted, renderMode: renderMode, setMuted: setMuted, codec: codec, audioCodec: audioCodec, setAudioCodec: setAudioCodec, enforceAudioTrack: enforceAudioTrack, setEnforceAudioTrackState: setEnforceAudioTrackState, customTargetAudioBitrate: customTargetAudioBitrate, setCustomTargetAudioBitrateValue: setCustomTargetAudioBitrateValue, setShouldHaveCustomTargetAudioBitrate: setShouldHaveCustomTargetAudioBitrate, shouldHaveCustomTargetAudioBitrate: shouldHaveCustomTargetAudioBitrate })) : tab === 'gif' ? ((0, jsx_runtime_1.jsx)(RenderModalGif_1.RenderModalGif, { everyNthFrame: everyNthFrame, limitNumberOfGifLoops: limitNumberOfGifLoops, numberOfGifLoopsSetting: numberOfGifLoopsSetting, setEveryNthFrameSetting: setEveryNthFrameSetting, setLimitNumberOfGifLoops: setLimitNumberOfGifLoops, setNumberOfGifLoopsSetting: setNumberOfGifLoopsSetting })) : tab === 'data' ? ((0, jsx_runtime_1.jsx)(DataEditor_1.DataEditor, { inputProps: inputProps, setInputProps: setInputProps, unresolvedComposition: unresolvedComposition, mayShowSaveButton: false, propsEditType: "input-props", saving: saving, setSaving: setSaving })) : ((0, jsx_runtime_1.jsx)(RenderModalAdvanced_1.RenderModalAdvanced, { x264Preset: x264Preset, setx264Preset: setx264Preset, concurrency: concurrency, maxConcurrency: maxConcurrency, minConcurrency: minConcurrency, renderMode: renderMode, setConcurrency: setConcurrency, setVerboseLogging: setVerboseLogging, verbose: verbose, delayRenderTimeout: delayRenderTimeout, setDelayRenderTimeout: setDelayRenderTimeout, disallowParallelEncoding: disallowParallelEncoding, setDisallowParallelEncoding: setDisallowParallelEncoding, setDisableWebSecurity: setDisableWebSecurity, setIgnoreCertificateErrors: setIgnoreCertificateErrors, setHeadless: setHeadless, headless: headless, ignoreCertificateErrors: ignoreCertificateErrors, disableWebSecurity: disableWebSecurity, openGlOption: openGlOption, setOpenGlOption: setOpenGlOption, setEnvVariables: setEnvVariables, envVariables: envVariables, offthreadVideoCacheSizeInBytes: offthreadVideoCacheSizeInBytes, setOffthreadVideoCacheSizeInBytes: setOffthreadVideoCacheSizeInBytes, enableMultiProcessOnLinux: multiProcessOnLinux, setChromiumMultiProcessOnLinux: setChromiumMultiProcessOnLinux, codec: codec })) })] })] }));
|
|
679
716
|
};
|
|
680
717
|
const RenderModalWithLoader = (props) => {
|
|
681
718
|
const { setSelectedModal } = (0, react_1.useContext)(modals_1.ModalsContext);
|
|
@@ -29,4 +29,6 @@ export declare const RenderModalAdvanced: React.FC<{
|
|
|
29
29
|
offthreadVideoCacheSizeInBytes: number | null;
|
|
30
30
|
setOffthreadVideoCacheSizeInBytes: React.Dispatch<React.SetStateAction<number | null>>;
|
|
31
31
|
codec: Codec;
|
|
32
|
+
enableMultiProcessOnLinux: boolean;
|
|
33
|
+
setChromiumMultiProcessOnLinux: React.Dispatch<React.SetStateAction<boolean>>;
|
|
32
34
|
}>;
|
|
@@ -17,9 +17,9 @@ const container = {
|
|
|
17
17
|
flex: 1,
|
|
18
18
|
overflowY: 'auto',
|
|
19
19
|
};
|
|
20
|
-
const RenderModalAdvanced = ({ renderMode, maxConcurrency, minConcurrency, setConcurrency, concurrency, setVerboseLogging, verbose, delayRenderTimeout, setDelayRenderTimeout, disallowParallelEncoding, setDisallowParallelEncoding, setDisableWebSecurity, setIgnoreCertificateErrors, setHeadless, headless, ignoreCertificateErrors, disableWebSecurity, openGlOption, setOpenGlOption, setEnvVariables, envVariables, setx264Preset, x264Preset, codec, offthreadVideoCacheSizeInBytes, setOffthreadVideoCacheSizeInBytes, }) => {
|
|
20
|
+
const RenderModalAdvanced = ({ renderMode, maxConcurrency, minConcurrency, setConcurrency, concurrency, setVerboseLogging, verbose, delayRenderTimeout, setDelayRenderTimeout, disallowParallelEncoding, setDisallowParallelEncoding, setDisableWebSecurity, setIgnoreCertificateErrors, setHeadless, headless, ignoreCertificateErrors, disableWebSecurity, openGlOption, setOpenGlOption, setEnvVariables, envVariables, setx264Preset, x264Preset, codec, offthreadVideoCacheSizeInBytes, setOffthreadVideoCacheSizeInBytes, enableMultiProcessOnLinux, setChromiumMultiProcessOnLinux, }) => {
|
|
21
21
|
const extendedOpenGlOptions = (0, react_1.useMemo)(() => {
|
|
22
|
-
return ['angle', 'egl', 'swangle', 'swiftshader', 'default'];
|
|
22
|
+
return ['angle', 'egl', 'swangle', 'swiftshader', 'vulkan', 'default'];
|
|
23
23
|
}, []);
|
|
24
24
|
const onVerboseLoggingChanged = (0, react_1.useCallback)((e) => {
|
|
25
25
|
setVerboseLogging(e.target.checked);
|
|
@@ -38,6 +38,9 @@ const RenderModalAdvanced = ({ renderMode, maxConcurrency, minConcurrency, setCo
|
|
|
38
38
|
const onDisableWebSecurityChanged = (0, react_1.useCallback)((e) => {
|
|
39
39
|
setDisableWebSecurity(e.target.checked);
|
|
40
40
|
}, [setDisableWebSecurity]);
|
|
41
|
+
const onEnableMultiProcessOnLinux = (0, react_1.useCallback)((e) => {
|
|
42
|
+
setChromiumMultiProcessOnLinux(e.target.checked);
|
|
43
|
+
}, [setChromiumMultiProcessOnLinux]);
|
|
41
44
|
const onIgnoreCertificatErrors = (0, react_1.useCallback)((e) => {
|
|
42
45
|
setIgnoreCertificateErrors(e.target.checked);
|
|
43
46
|
}, [setIgnoreCertificateErrors]);
|
|
@@ -93,6 +96,6 @@ const RenderModalAdvanced = ({ renderMode, maxConcurrency, minConcurrency, setCo
|
|
|
93
96
|
, {
|
|
94
97
|
// Also appears in packages/renderer/src/validate-puppeteer-timeout.ts
|
|
95
98
|
min: 7000, max: 900000, name: "delayRender() timeout", onValueChanged: setDelayRenderTimeout, formatter: (w) => `${w}ms`, step: 1000, value: delayRenderTimeout }), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "No parallel encoding" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: disallowParallelEncoding, onChange: onDisallowParallelEncodingChanged, name: "disallow-parallel-encoding" }) })] }), renderMode === 'audio' ? null : ((0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Custom OffthreadVideo cache" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: offthreadVideoCacheSizeInBytes !== null, onChange: toggleCustomOffthreadVideoCacheSizeInBytes, name: "custom-audio-bitrate" }) })] })), renderMode === 'audio' ||
|
|
96
|
-
offthreadVideoCacheSizeInBytes === null ? null : ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: minConcurrency, max: 2000 * 1024 * 1024, step: 1024, name: "OffthreadVideo cache size", formatter: (w) => `${w} bytes`, onValueChanged: changeOffthreadVideoCacheSizeInBytes, value: offthreadVideoCacheSizeInBytes })), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Verbose logging" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: verbose, onChange: onVerboseLoggingChanged, name: "verbose-logging" }) })] }), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Disable web security" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: disableWebSecurity, onChange: onDisableWebSecurityChanged, name: "disable-web-security" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Ignore certificate errors " }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: ignoreCertificateErrors, onChange: onIgnoreCertificatErrors, name: "ignore-certificate-errors" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Headless mode" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: headless, onChange: onHeadless, name: "headless" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "OpenGL render backend" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: openGlOptions, selectedId: openGlOption, title: "OpenGl option" }) })] }), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), (0, jsx_runtime_1.jsx)(RenderModalEnvironmentVariables_1.RenderModalEnvironmentVariables, { envVariables: envVariables, setEnvVariables: setEnvVariables })] }));
|
|
99
|
+
offthreadVideoCacheSizeInBytes === null ? null : ((0, jsx_runtime_1.jsx)(NumberSetting_1.NumberSetting, { min: minConcurrency, max: 2000 * 1024 * 1024, step: 1024, name: "OffthreadVideo cache size", formatter: (w) => `${w} bytes`, onValueChanged: changeOffthreadVideoCacheSizeInBytes, value: offthreadVideoCacheSizeInBytes })), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Verbose logging" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: verbose, onChange: onVerboseLoggingChanged, name: "verbose-logging" }) })] }), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Disable web security" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: disableWebSecurity, onChange: onDisableWebSecurityChanged, name: "disable-web-security" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Ignore certificate errors " }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: ignoreCertificateErrors, onChange: onIgnoreCertificatErrors, name: "ignore-certificate-errors" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Headless mode" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: headless, onChange: onHeadless, name: "headless" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "OpenGL render backend" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(ComboBox_1.Combobox, { values: openGlOptions, selectedId: openGlOption, title: "OpenGl option" }) })] }), (0, jsx_runtime_1.jsxs)("div", { style: layout_1.optionRow, children: [(0, jsx_runtime_1.jsx)("div", { style: layout_1.label, children: "Multi-process Chrome on Linux" }), (0, jsx_runtime_1.jsx)("div", { style: layout_1.rightRow, children: (0, jsx_runtime_1.jsx)(Checkbox_1.Checkbox, { checked: enableMultiProcessOnLinux, onChange: onEnableMultiProcessOnLinux, name: "enable-multi-process-on-linux" }) })] }), (0, jsx_runtime_1.jsx)(RenderModalHr_1.RenderModalHr, {}), (0, jsx_runtime_1.jsx)(RenderModalEnvironmentVariables_1.RenderModalEnvironmentVariables, { envVariables: envVariables, setEnvVariables: setEnvVariables })] }));
|
|
97
100
|
};
|
|
98
101
|
exports.RenderModalAdvanced = RenderModalAdvanced;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { Codec } from '@remotion/renderer';
|
|
2
|
-
export declare const humanReadableCodec: (codec: Codec) => "
|
|
2
|
+
export declare const humanReadableCodec: (codec: Codec) => "AAC" | "MP3" | "GIF" | "H.264" | "H.264 Matroska" | "H.265" | "ProRes" | "WebM VP8" | "WebM VP9" | "Waveform" | undefined;
|
|
@@ -2,7 +2,7 @@ import type { AudioCodec, Codec, ColorSpace, PixelFormat, ProResProfile, StillIm
|
|
|
2
2
|
import type { RenderJob } from '../../../preview-server/render-queue/job';
|
|
3
3
|
import type { RequiredChromiumOptions } from '../../../required-chromium-options';
|
|
4
4
|
import type { EnumPath } from '../RenderModal/SchemaEditor/extract-enum-json-paths';
|
|
5
|
-
export declare const addStillRenderJob: ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, verbose, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, }: {
|
|
5
|
+
export declare const addStillRenderJob: ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, verbose, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, multiProcessOnLinux, }: {
|
|
6
6
|
compositionId: string;
|
|
7
7
|
outName: string;
|
|
8
8
|
imageFormat: StillImageFormat;
|
|
@@ -15,8 +15,9 @@ export declare const addStillRenderJob: ({ compositionId, outName, imageFormat,
|
|
|
15
15
|
envVariables: Record<string, string>;
|
|
16
16
|
inputProps: Record<string, unknown>;
|
|
17
17
|
offthreadVideoCacheSizeInBytes: number | null;
|
|
18
|
+
multiProcessOnLinux: boolean;
|
|
18
19
|
}) => Promise<undefined>;
|
|
19
|
-
export declare const addSequenceRenderJob: ({ compositionId, outName, imageFormat, startFrame, endFrame, scale, verbose, chromiumOptions, delayRenderTimeout, envVariables, inputProps, concurrency, offthreadVideoCacheSizeInBytes, jpegQuality, disallowParallelEncoding, }: {
|
|
20
|
+
export declare const addSequenceRenderJob: ({ compositionId, outName, imageFormat, startFrame, endFrame, scale, verbose, chromiumOptions, delayRenderTimeout, envVariables, inputProps, concurrency, offthreadVideoCacheSizeInBytes, jpegQuality, disallowParallelEncoding, multiProcessOnLinux, }: {
|
|
20
21
|
compositionId: string;
|
|
21
22
|
outName: string;
|
|
22
23
|
imageFormat: VideoImageFormat;
|
|
@@ -32,8 +33,9 @@ export declare const addSequenceRenderJob: ({ compositionId, outName, imageForma
|
|
|
32
33
|
inputProps: Record<string, unknown>;
|
|
33
34
|
offthreadVideoCacheSizeInBytes: number | null;
|
|
34
35
|
disallowParallelEncoding: boolean;
|
|
36
|
+
multiProcessOnLinux: boolean;
|
|
35
37
|
}) => Promise<undefined>;
|
|
36
|
-
export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat, jpegQuality, scale, verbose, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, colorSpace, }: {
|
|
38
|
+
export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat, jpegQuality, scale, verbose, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, colorSpace, multiProcessOnLinux, }: {
|
|
37
39
|
compositionId: string;
|
|
38
40
|
outName: string;
|
|
39
41
|
imageFormat: VideoImageFormat;
|
|
@@ -62,6 +64,7 @@ export declare const addVideoRenderJob: ({ compositionId, outName, imageFormat,
|
|
|
62
64
|
inputProps: Record<string, unknown>;
|
|
63
65
|
offthreadVideoCacheSizeInBytes: number | null;
|
|
64
66
|
colorSpace: ColorSpace;
|
|
67
|
+
multiProcessOnLinux: boolean;
|
|
65
68
|
}) => Promise<undefined>;
|
|
66
69
|
export declare const unsubscribeFromFileExistenceWatcher: ({ file, clientId, }: {
|
|
67
70
|
file: string;
|
|
@@ -26,7 +26,7 @@ const callApi = (endpoint, body, signal) => {
|
|
|
26
26
|
});
|
|
27
27
|
});
|
|
28
28
|
};
|
|
29
|
-
const addStillRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, verbose, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, }) => {
|
|
29
|
+
const addStillRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, frame, scale, verbose, chromiumOptions, delayRenderTimeout, envVariables, inputProps, offthreadVideoCacheSizeInBytes, multiProcessOnLinux, }) => {
|
|
30
30
|
return callApi('/api/render', {
|
|
31
31
|
compositionId,
|
|
32
32
|
type: 'still',
|
|
@@ -45,10 +45,11 @@ const addStillRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, f
|
|
|
45
45
|
indent: undefined,
|
|
46
46
|
}).serializedString,
|
|
47
47
|
offthreadVideoCacheSizeInBytes,
|
|
48
|
+
multiProcessOnLinux,
|
|
48
49
|
});
|
|
49
50
|
};
|
|
50
51
|
exports.addStillRenderJob = addStillRenderJob;
|
|
51
|
-
const addSequenceRenderJob = ({ compositionId, outName, imageFormat, startFrame, endFrame, scale, verbose, chromiumOptions, delayRenderTimeout, envVariables, inputProps, concurrency, offthreadVideoCacheSizeInBytes, jpegQuality, disallowParallelEncoding, }) => {
|
|
52
|
+
const addSequenceRenderJob = ({ compositionId, outName, imageFormat, startFrame, endFrame, scale, verbose, chromiumOptions, delayRenderTimeout, envVariables, inputProps, concurrency, offthreadVideoCacheSizeInBytes, jpegQuality, disallowParallelEncoding, multiProcessOnLinux, }) => {
|
|
52
53
|
return callApi('/api/render', {
|
|
53
54
|
compositionId,
|
|
54
55
|
type: 'sequence',
|
|
@@ -70,10 +71,11 @@ const addSequenceRenderJob = ({ compositionId, outName, imageFormat, startFrame,
|
|
|
70
71
|
}).serializedString,
|
|
71
72
|
offthreadVideoCacheSizeInBytes,
|
|
72
73
|
disallowParallelEncoding,
|
|
74
|
+
multiProcessOnLinux,
|
|
73
75
|
});
|
|
74
76
|
};
|
|
75
77
|
exports.addSequenceRenderJob = addSequenceRenderJob;
|
|
76
|
-
const addVideoRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, scale, verbose, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, colorSpace, }) => {
|
|
78
|
+
const addVideoRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, scale, verbose, codec, concurrency, crf, startFrame, endFrame, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, audioBitrate, videoBitrate, everyNthFrame, numberOfGifLoops, delayRenderTimeout, audioCodec, disallowParallelEncoding, chromiumOptions, envVariables, inputProps, offthreadVideoCacheSizeInBytes, colorSpace, multiProcessOnLinux, }) => {
|
|
77
79
|
return callApi('/api/render', {
|
|
78
80
|
compositionId,
|
|
79
81
|
type: 'video',
|
|
@@ -108,6 +110,7 @@ const addVideoRenderJob = ({ compositionId, outName, imageFormat, jpegQuality, s
|
|
|
108
110
|
}).serializedString,
|
|
109
111
|
offthreadVideoCacheSizeInBytes,
|
|
110
112
|
colorSpace,
|
|
113
|
+
multiProcessOnLinux,
|
|
111
114
|
});
|
|
112
115
|
};
|
|
113
116
|
exports.addVideoRenderJob = addVideoRenderJob;
|
|
@@ -36,6 +36,7 @@ export type RenderModalState = {
|
|
|
36
36
|
initialHeadless: boolean;
|
|
37
37
|
initialOffthreadVideoCacheSizeInBytes: number | null;
|
|
38
38
|
initialColorSpace: ColorSpace;
|
|
39
|
+
initialMultiProcessOnLinux: boolean;
|
|
39
40
|
minConcurrency: number;
|
|
40
41
|
maxConcurrency: number;
|
|
41
42
|
defaultProps: Record<string, unknown>;
|
|
@@ -34,7 +34,7 @@ export declare const getCliOptions: (options: {
|
|
|
34
34
|
videoBitrate: string | null;
|
|
35
35
|
height: number | null;
|
|
36
36
|
width: number | null;
|
|
37
|
-
configFileImageFormat: "
|
|
37
|
+
configFileImageFormat: "none" | "png" | "jpeg" | undefined;
|
|
38
38
|
offthreadVideoCacheSizeInBytes: number | null;
|
|
39
39
|
deleteAfter: ("1-day" | "3-days" | "7-days" | "30-days") | null;
|
|
40
40
|
colorSpace: "default" | "bt709";
|
package/dist/get-cli-options.js
CHANGED
|
@@ -85,6 +85,7 @@ const getCliOptions = async (options) => {
|
|
|
85
85
|
headless: config_1.ConfigInternals.getChromiumHeadlessMode(),
|
|
86
86
|
gl: (_a = config_1.ConfigInternals.getChromiumOpenGlRenderer()) !== null && _a !== void 0 ? _a : renderer_1.RenderInternals.DEFAULT_OPENGL_RENDERER,
|
|
87
87
|
userAgent: config_1.ConfigInternals.getChromiumUserAgent(),
|
|
88
|
+
enableMultiProcessOnLinux: config_1.ConfigInternals.getChromiumMultiProcessOnLinux(),
|
|
88
89
|
};
|
|
89
90
|
const everyNthFrame = config_1.ConfigInternals.getEveryNthFrame();
|
|
90
91
|
const numberOfGifLoops = config_1.ConfigInternals.getNumberOfGifLoops();
|
package/dist/index.d.ts
CHANGED
|
@@ -119,7 +119,7 @@ export declare const CliInternals: {
|
|
|
119
119
|
videoBitrate: string | null;
|
|
120
120
|
height: number | null;
|
|
121
121
|
width: number | null;
|
|
122
|
-
configFileImageFormat: "
|
|
122
|
+
configFileImageFormat: "none" | "png" | "jpeg" | undefined;
|
|
123
123
|
offthreadVideoCacheSizeInBytes: number | null;
|
|
124
124
|
deleteAfter: ("1-day" | "3-days" | "7-days" | "30-days") | null;
|
|
125
125
|
colorSpace: "default" | "bt709";
|
|
@@ -131,7 +131,7 @@ export declare const CliInternals: {
|
|
|
131
131
|
parsedCli: {
|
|
132
132
|
"browser-executable": import("@remotion/renderer").BrowserExecutable;
|
|
133
133
|
"pixel-format": "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
|
|
134
|
-
"image-format": "
|
|
134
|
+
"image-format": "none" | "png" | "jpeg" | "pdf" | "webp";
|
|
135
135
|
"prores-profile": "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy";
|
|
136
136
|
"x264-preset": "medium" | "ultrafast" | "superfast" | "veryfast" | "faster" | "fast" | "slow" | "slower" | "veryslow" | "placebo";
|
|
137
137
|
"bundle-cache": string;
|
|
@@ -175,7 +175,7 @@ export declare const CliInternals: {
|
|
|
175
175
|
runs: number;
|
|
176
176
|
concurrencies: string;
|
|
177
177
|
"enforce-audio-track": boolean;
|
|
178
|
-
gl: "swangle" | "angle" | "egl" | "swiftshader";
|
|
178
|
+
gl: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan";
|
|
179
179
|
"package-manager": string;
|
|
180
180
|
"webpack-poll": number;
|
|
181
181
|
"no-open": boolean;
|
|
@@ -186,6 +186,7 @@ export declare const CliInternals: {
|
|
|
186
186
|
"color-space": "default" | "bt709";
|
|
187
187
|
"delete-after": string | undefined;
|
|
188
188
|
"enable-folder-expiry": boolean | undefined;
|
|
189
|
+
"enable-multiprocess-on-linux": boolean;
|
|
189
190
|
} & {
|
|
190
191
|
_: string[];
|
|
191
192
|
};
|
|
@@ -201,7 +202,7 @@ export declare const CliInternals: {
|
|
|
201
202
|
downloadName: string | null;
|
|
202
203
|
outName: string | null;
|
|
203
204
|
configImageFormat: "png" | "jpeg" | "pdf" | "webp" | null;
|
|
204
|
-
cliFlag: "
|
|
205
|
+
cliFlag: "none" | "png" | "jpeg" | "pdf" | "webp" | null;
|
|
205
206
|
isLambda: boolean;
|
|
206
207
|
fromUi: "png" | "jpeg" | "pdf" | "webp" | null;
|
|
207
208
|
}) => {
|
|
@@ -216,8 +217,8 @@ export declare const CliInternals: {
|
|
|
216
217
|
};
|
|
217
218
|
getVideoImageFormat: ({ codec, uiImageFormat, }: {
|
|
218
219
|
codec: import("@remotion/renderer").CodecOrUndefined;
|
|
219
|
-
uiImageFormat: "
|
|
220
|
-
}) => "
|
|
220
|
+
uiImageFormat: "none" | "png" | "jpeg" | null;
|
|
221
|
+
}) => "none" | "png" | "jpeg";
|
|
221
222
|
printCompositions: (compositions: import("remotion").VideoConfig[]) => void;
|
|
222
223
|
getFinalOutputCodec: ({ cliFlag, configFile, downloadName, outName, uiCodec, }: {
|
|
223
224
|
cliFlag: import("@remotion/renderer").CodecOrUndefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AudioCodec, BrowserExecutable, Codec, OpenGlRenderer, PixelFormat, ProResProfile, StillImageFormat, VideoImageFormat, X264Preset } from '@remotion/renderer';
|
|
2
|
-
import
|
|
2
|
+
import { BrowserSafeApis } from '@remotion/renderer/client';
|
|
3
3
|
type CommandLineOptions = {
|
|
4
4
|
['browser-executable']: BrowserExecutable;
|
|
5
5
|
['pixel-format']: PixelFormat;
|
|
@@ -60,6 +60,7 @@ type CommandLineOptions = {
|
|
|
60
60
|
['user-agent']: string;
|
|
61
61
|
[BrowserSafeApis.options.deleteAfterOption.cliFlag]: string | undefined;
|
|
62
62
|
[BrowserSafeApis.options.folderExpiryOption.cliFlag]: boolean | undefined;
|
|
63
|
+
[BrowserSafeApis.options.enableMultiprocessOnLinuxOption.cliFlag]: boolean;
|
|
63
64
|
};
|
|
64
65
|
export declare const BooleanFlags: string[];
|
|
65
66
|
export declare const parsedCli: CommandLineOptions & {
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.quietFlagProvided = exports.parseCommandLine = exports.parsedCli = exports.BooleanFlags = void 0;
|
|
7
7
|
const renderer_1 = require("@remotion/renderer");
|
|
8
|
+
const client_1 = require("@remotion/renderer/client");
|
|
8
9
|
const minimist_1 = __importDefault(require("minimist"));
|
|
9
10
|
const config_1 = require("./config");
|
|
10
11
|
const log_1 = require("./log");
|
|
@@ -157,6 +158,9 @@ const parseCommandLine = () => {
|
|
|
157
158
|
if (typeof exports.parsedCli['enable-folder-expiry'] !== 'undefined') {
|
|
158
159
|
config_1.Config.setEnableFolderExpiry(exports.parsedCli['enable-folder-expiry']);
|
|
159
160
|
}
|
|
161
|
+
if (typeof exports.parsedCli[client_1.BrowserSafeApis.options.enableMultiprocessOnLinuxOption.cliFlag] !== 'undefined') {
|
|
162
|
+
config_1.Config.setEnableFolderExpiry(exports.parsedCli[client_1.BrowserSafeApis.options.enableMultiprocessOnLinuxOption.cliFlag]);
|
|
163
|
+
}
|
|
160
164
|
};
|
|
161
165
|
exports.parseCommandLine = parseCommandLine;
|
|
162
166
|
const quietFlagProvided = () => exports.parsedCli.quiet || exports.parsedCli.q;
|
|
@@ -11,5 +11,5 @@ type Range = {
|
|
|
11
11
|
type Ranges = Range[] & {
|
|
12
12
|
type?: string;
|
|
13
13
|
};
|
|
14
|
-
export declare function parseRange(size: number, str: string | string[]): -1 |
|
|
14
|
+
export declare function parseRange(size: number, str: string | string[]): -1 | -2 | Ranges;
|
|
15
15
|
export {};
|
|
@@ -75,6 +75,7 @@ export type RenderJob = {
|
|
|
75
75
|
chromiumOptions: RequiredChromiumOptions;
|
|
76
76
|
envVariables: Record<string, string>;
|
|
77
77
|
serializedInputPropsWithCustomSchema: string;
|
|
78
|
+
multiProcessOnLinux: boolean;
|
|
78
79
|
} & RenderJobDynamicFields;
|
|
79
80
|
export type RenderJobWithCleanup = RenderJob & {
|
|
80
81
|
cleanup: (() => void)[];
|
|
@@ -132,6 +133,7 @@ export type AddRenderRequest = {
|
|
|
132
133
|
envVariables: Record<string, string>;
|
|
133
134
|
serializedInputPropsWithCustomSchema: string;
|
|
134
135
|
offthreadVideoCacheSizeInBytes: number | null;
|
|
136
|
+
multiProcessOnLinux: boolean;
|
|
135
137
|
} & AddRenderRequestDynamicFields;
|
|
136
138
|
export type RemoveRenderRequest = {
|
|
137
139
|
jobId: string;
|
|
@@ -51,6 +51,7 @@ const makeRetryPayload = (job) => {
|
|
|
51
51
|
outFrameMark: null,
|
|
52
52
|
initialOffthreadVideoCacheSizeInBytes: job.offthreadVideoCacheSizeInBytes,
|
|
53
53
|
initialColorSpace: defaults.colorSpace,
|
|
54
|
+
initialMultiProcessOnLinux: job.multiProcessOnLinux,
|
|
54
55
|
};
|
|
55
56
|
}
|
|
56
57
|
if (job.type === 'sequence') {
|
|
@@ -95,6 +96,7 @@ const makeRetryPayload = (job) => {
|
|
|
95
96
|
outFrameMark: job.endFrame,
|
|
96
97
|
initialOffthreadVideoCacheSizeInBytes: job.offthreadVideoCacheSizeInBytes,
|
|
97
98
|
initialColorSpace: defaults.colorSpace,
|
|
99
|
+
initialMultiProcessOnLinux: job.multiProcessOnLinux,
|
|
98
100
|
};
|
|
99
101
|
}
|
|
100
102
|
if (job.type === 'video') {
|
|
@@ -139,6 +141,7 @@ const makeRetryPayload = (job) => {
|
|
|
139
141
|
outFrameMark: job.endFrame,
|
|
140
142
|
initialOffthreadVideoCacheSizeInBytes: job.offthreadVideoCacheSizeInBytes,
|
|
141
143
|
initialColorSpace: job.colorSpace,
|
|
144
|
+
initialMultiProcessOnLinux: job.multiProcessOnLinux,
|
|
142
145
|
};
|
|
143
146
|
}
|
|
144
147
|
throw new Error(`Job ${JSON.stringify(job)} Not implemented`);
|
|
@@ -45,6 +45,7 @@ const handleAddRender = ({ input, entryPoint, remotionRoot, }) => {
|
|
|
45
45
|
serializedInputPropsWithCustomSchema: input.serializedInputPropsWithCustomSchema,
|
|
46
46
|
offthreadVideoCacheSizeInBytes: input.offthreadVideoCacheSizeInBytes,
|
|
47
47
|
colorSpace: input.colorSpace,
|
|
48
|
+
multiProcessOnLinux: input.multiProcessOnLinux,
|
|
48
49
|
},
|
|
49
50
|
});
|
|
50
51
|
}
|
|
@@ -74,6 +75,7 @@ const handleAddRender = ({ input, entryPoint, remotionRoot, }) => {
|
|
|
74
75
|
envVariables: input.envVariables,
|
|
75
76
|
serializedInputPropsWithCustomSchema: input.serializedInputPropsWithCustomSchema,
|
|
76
77
|
offthreadVideoCacheSizeInBytes: input.offthreadVideoCacheSizeInBytes,
|
|
78
|
+
multiProcessOnLinux: input.multiProcessOnLinux,
|
|
77
79
|
},
|
|
78
80
|
});
|
|
79
81
|
}
|
|
@@ -99,6 +101,7 @@ const handleAddRender = ({ input, entryPoint, remotionRoot, }) => {
|
|
|
99
101
|
envVariables: input.envVariables,
|
|
100
102
|
serializedInputPropsWithCustomSchema: input.serializedInputPropsWithCustomSchema,
|
|
101
103
|
offthreadVideoCacheSizeInBytes: input.offthreadVideoCacheSizeInBytes,
|
|
104
|
+
multiProcessOnLinux: input.multiProcessOnLinux,
|
|
102
105
|
},
|
|
103
106
|
entryPoint,
|
|
104
107
|
remotionRoot,
|
|
@@ -57,6 +57,7 @@ const handleFallback = async ({ remotionRoot, hash, response, getCurrentInputPro
|
|
|
57
57
|
const colorSpace = config_1.ConfigInternals.getColorSpace();
|
|
58
58
|
const maxConcurrency = renderer_1.RenderInternals.getMaxConcurrency();
|
|
59
59
|
const minConcurrency = renderer_1.RenderInternals.getMinConcurrency();
|
|
60
|
+
const multiProcessOnLinux = config_1.ConfigInternals.getChromiumMultiProcessOnLinux();
|
|
60
61
|
response.setHeader('content-type', 'text/html');
|
|
61
62
|
response.writeHead(200);
|
|
62
63
|
const packageManager = (0, get_package_manager_1.getPackageManager)(remotionRoot, undefined);
|
|
@@ -101,6 +102,7 @@ const handleFallback = async ({ remotionRoot, hash, response, getCurrentInputPro
|
|
|
101
102
|
openGlRenderer,
|
|
102
103
|
offthreadVideoCacheSizeInBytes,
|
|
103
104
|
colorSpace,
|
|
105
|
+
multiProcessOnLinux,
|
|
104
106
|
},
|
|
105
107
|
publicFolderExists: (0, node_fs_1.existsSync)(publicDir) ? publicDir : null,
|
|
106
108
|
}));
|
|
@@ -171,6 +171,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
|
|
|
171
171
|
height: config.height,
|
|
172
172
|
codec,
|
|
173
173
|
scale,
|
|
174
|
+
wantsImageSequence: shouldOutputImageSequence,
|
|
174
175
|
});
|
|
175
176
|
const relativeOutputLocation = (0, get_filename_1.getOutputFilename)({
|
|
176
177
|
imageSequence: shouldOutputImageSequence,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/cli",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.42",
|
|
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/
|
|
39
|
-
"
|
|
40
|
-
"remotion": "4.0.
|
|
41
|
-
"@remotion/
|
|
42
|
-
"@remotion/player": "4.0.
|
|
38
|
+
"@remotion/renderer": "4.0.42",
|
|
39
|
+
"remotion": "4.0.42",
|
|
40
|
+
"@remotion/bundler": "4.0.42",
|
|
41
|
+
"@remotion/media-utils": "4.0.42",
|
|
42
|
+
"@remotion/player": "4.0.42"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"react": ">=16.8.0",
|
|
@@ -65,8 +65,8 @@
|
|
|
65
65
|
"react-dom": "^18.0.0",
|
|
66
66
|
"vitest": "0.31.1",
|
|
67
67
|
"zod": "^3.21.4",
|
|
68
|
-
"@remotion/zod-types": "4.0.
|
|
69
|
-
"@remotion/tailwind": "4.0.
|
|
68
|
+
"@remotion/zod-types": "4.0.42",
|
|
69
|
+
"@remotion/tailwind": "4.0.42"
|
|
70
70
|
},
|
|
71
71
|
"keywords": [
|
|
72
72
|
"remotion",
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setPresetProfile = exports.getPresetProfile = void 0;
|
|
4
|
-
let preset;
|
|
5
|
-
const getPresetProfile = () => {
|
|
6
|
-
return preset;
|
|
7
|
-
};
|
|
8
|
-
exports.getPresetProfile = getPresetProfile;
|
|
9
|
-
const setPresetProfile = (profile) => {
|
|
10
|
-
preset = profile;
|
|
11
|
-
};
|
|
12
|
-
exports.setPresetProfile = setPresetProfile;
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleCommonError = void 0;
|
|
4
|
-
const chalk_1 = require("./chalk");
|
|
5
|
-
const log_1 = require("./log");
|
|
6
|
-
const print_error_1 = require("./print-error");
|
|
7
|
-
const truthy_1 = require("./truthy");
|
|
8
|
-
const handleCommonError = async (err, logLevel) => {
|
|
9
|
-
var _a;
|
|
10
|
-
await (0, print_error_1.printError)(err, logLevel);
|
|
11
|
-
if (err.message.includes('Could not play video with')) {
|
|
12
|
-
log_1.Log.info();
|
|
13
|
-
log_1.Log.info('💡 Get help for this issue at https://remotion.dev/docs/media-playback-error');
|
|
14
|
-
}
|
|
15
|
-
if (err.message.includes('A delayRender()') &&
|
|
16
|
-
err.message.includes('was called but not cleared after')) {
|
|
17
|
-
log_1.Log.info();
|
|
18
|
-
log_1.Log.info('💡 Get help for this issue at https://remotion.dev/docs/timeout');
|
|
19
|
-
}
|
|
20
|
-
if (err.message.includes('Target closed')) {
|
|
21
|
-
log_1.Log.info();
|
|
22
|
-
log_1.Log.info('💡 Get help for this issue at https://remotion.dev/docs/target-closed');
|
|
23
|
-
}
|
|
24
|
-
if (err.message.includes('ENAMETOOLONG')) {
|
|
25
|
-
log_1.Log.info();
|
|
26
|
-
log_1.Log.info('💡 Get help for this issue at https://remotion.dev/docs/enametoolong');
|
|
27
|
-
}
|
|
28
|
-
if (err.message.includes('Error creating WebGL context')) {
|
|
29
|
-
log_1.Log.info();
|
|
30
|
-
log_1.Log.warn('💡 You might need to set the OpenGL renderer to "angle" (or "swangle" if rendering on lambda). Learn why at https://www.remotion.dev/docs/three');
|
|
31
|
-
log_1.Log.warn("💡 Check how it's done at https://www.remotion.dev/docs/chromium-flags#--gl");
|
|
32
|
-
}
|
|
33
|
-
if (err.message.includes('The bucket does not allow ACLs')) {
|
|
34
|
-
log_1.Log.info();
|
|
35
|
-
log_1.Log.info(chalk_1.chalk.green('💡 Fix this issue https://remotion.dev/docs/lambda/troubleshooting/bucket-disallows-acl'));
|
|
36
|
-
}
|
|
37
|
-
if (err.message.includes('Minified React error #306')) {
|
|
38
|
-
const componentName = (_a = err.message.match(/<\w+>/)) === null || _a === void 0 ? void 0 : _a[0];
|
|
39
|
-
log_1.Log.info([
|
|
40
|
-
'💡 This error indicates that the component',
|
|
41
|
-
componentName ? `(${componentName})` : null,
|
|
42
|
-
'you are trying to render is not imported correctly.',
|
|
43
|
-
]
|
|
44
|
-
.filter(truthy_1.truthy)
|
|
45
|
-
.join(' '));
|
|
46
|
-
log_1.Log.info();
|
|
47
|
-
log_1.Log.info(' Check the root file and ensure that the component is not undefined.');
|
|
48
|
-
log_1.Log.info(' Oftentimes, this happens if the component is missing the `export` keyword');
|
|
49
|
-
log_1.Log.info(' or if the component was renamed and the import statement not properly adjusted.');
|
|
50
|
-
}
|
|
51
|
-
if (err.message.includes('GLIBC_')) {
|
|
52
|
-
log_1.Log.info('💡 Remotion requires at least Libc 2.35.');
|
|
53
|
-
log_1.Log.info('💡 Get help for this issue: https://github.com/remotion-dev/remotion/issues/2439');
|
|
54
|
-
}
|
|
55
|
-
if (err.message.includes('EBADF')) {
|
|
56
|
-
log_1.Log.info('💡 This error might be fixed by changing your Node version:');
|
|
57
|
-
log_1.Log.info(' https://github.com/remotion-dev/remotion/issues/2452');
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
exports.handleCommonError = handleCommonError;
|