@remotion/cli 4.1.0-alpha3 → 4.1.0-alpha5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/benchmark.js +3 -5
  2. package/dist/chalk/index.d.ts +2 -1
  3. package/dist/compositions.js +3 -3
  4. package/dist/config/image-format.d.ts +1 -1
  5. package/dist/config/index.d.ts +25 -1
  6. package/dist/config/index.js +19 -1
  7. package/dist/editor/components/NewComposition/InputDragger.js +13 -1
  8. package/dist/editor/components/NewComposition/RemInput.d.ts +1 -1
  9. package/dist/editor/components/RenderModal/RenderModalBasic.d.ts +1 -1
  10. package/dist/editor/components/RenderModal/SchemaEditor/local-state.js +9 -3
  11. package/dist/editor/helpers/colors.d.ts +1 -1
  12. package/dist/editor/helpers/render-modal-sections.d.ts +0 -1
  13. package/dist/get-cli-options.d.ts +1 -1
  14. package/dist/get-composition-id.d.ts +5 -5
  15. package/dist/get-composition-id.js +8 -4
  16. package/dist/get-composition-with-dimension-override.d.ts +5 -5
  17. package/dist/get-composition-with-dimension-override.js +2 -2
  18. package/dist/handle-common-errors.js +4 -0
  19. package/dist/index.d.ts +10 -10
  20. package/dist/log.d.ts +0 -1
  21. package/dist/preview-server/dev-middleware/setup-hooks.js +1 -1
  22. package/dist/preview-server/routes.d.ts +0 -1
  23. package/dist/progress-bar.js +2 -5
  24. package/dist/render-flows/render.js +12 -14
  25. package/dist/render-flows/still.js +8 -8
  26. package/dist/setup-cache.js +1 -1
  27. package/package.json +8 -8
  28. package/dist/editor/components/RenderModal/RenderModalData.d.ts +0 -20
  29. package/dist/editor/components/RenderModal/RenderModalData.js +0 -288
  30. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEmptyStateGraphic.d.ts +0 -2
  31. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEmptyStateGraphic.js +0 -15
  32. package/dist/preview.d.ts +0 -1
  33. package/dist/preview.js +0 -138
  34. package/dist/select-composition.d.ts +0 -8
  35. package/dist/select-composition.js +0 -51
package/dist/benchmark.js CHANGED
@@ -103,11 +103,11 @@ const benchmarkCommand = async (remotionRoot, args) => {
103
103
  const browserInstance = renderer_1.RenderInternals.internalOpenBrowser({
104
104
  browser,
105
105
  browserExecutable,
106
- shouldDumpIo: renderer_1.RenderInternals.isEqualOrBelowLogLevel(config_1.ConfigInternals.Logging.getLogLevel(), 'verbose'),
107
106
  chromiumOptions,
108
107
  forceDeviceScaleFactor: scale,
109
108
  indent: false,
110
109
  viewport: null,
110
+ logLevel,
111
111
  });
112
112
  const { urlOrBundle: bundleLocation, cleanup: cleanupBundle } = await (0, setup_cache_1.bundleOnCliOrTakeServeUrl)({
113
113
  fullPath: fullEntryPoint,
@@ -125,7 +125,6 @@ const benchmarkCommand = async (remotionRoot, args) => {
125
125
  });
126
126
  (0, cleanup_before_quit_1.registerCleanupJob)(() => cleanupBundle());
127
127
  const puppeteerInstance = await browserInstance;
128
- const verbose = renderer_1.RenderInternals.isEqualOrBelowLogLevel(config_1.ConfigInternals.Logging.getLogLevel(), 'verbose');
129
128
  const comps = await renderer_1.RenderInternals.internalGetCompositions({
130
129
  serveUrlOrWebpackUrl: bundleLocation,
131
130
  inputProps,
@@ -139,7 +138,7 @@ const benchmarkCommand = async (remotionRoot, args) => {
139
138
  onBrowserLog: null,
140
139
  // Intentionally disabling server to not cache results
141
140
  server: undefined,
142
- verbose,
141
+ logLevel,
143
142
  });
144
143
  const ids = (remainingArgs[0]
145
144
  ? remainingArgs[0]
@@ -197,14 +196,13 @@ const benchmarkCommand = async (remotionRoot, args) => {
197
196
  pixelFormat,
198
197
  proResProfile,
199
198
  jpegQuality,
200
- dumpBrowserLogs: verbose,
201
199
  chromiumOptions,
202
200
  timeoutInMilliseconds: config_1.ConfigInternals.getCurrentPuppeteerTimeout(),
203
201
  scale: configFileScale,
204
202
  port,
205
203
  numberOfGifLoops,
206
204
  everyNthFrame,
207
- verbose,
205
+ logLevel,
208
206
  muted,
209
207
  enforceAudioTrack,
210
208
  browserExecutable,
@@ -1,5 +1,5 @@
1
1
  export declare const chalk: {
2
- enabled: boolean;
2
+ enabled: () => boolean;
3
3
  visible: boolean;
4
4
  styles: Record<string, {
5
5
  codes: [number, number];
@@ -23,6 +23,7 @@ export declare const chalk: {
23
23
  yellow: (str: string) => string;
24
24
  blue: (str: string) => string;
25
25
  magenta: (str: string) => string;
26
+ cyan: (str: string) => string;
26
27
  white: (str: string) => string;
27
28
  gray: (str: string) => string;
28
29
  bgBlack: (str: string) => string;
@@ -17,7 +17,7 @@ const listCompositionsCommand = async (remotionRoot, args) => {
17
17
  log_1.Log.error('See https://www.remotion.dev/docs/register-root for more information.');
18
18
  process.exit(1);
19
19
  }
20
- const verbose = renderer_1.RenderInternals.isEqualOrBelowLogLevel(config_1.ConfigInternals.Logging.getLogLevel(), 'verbose');
20
+ const logLevel = config_1.ConfigInternals.Logging.getLogLevel();
21
21
  log_1.Log.verbose('Entry point:', file, 'reason:', reason);
22
22
  const { browserExecutable, chromiumOptions, envVariables, inputProps, puppeteerTimeout, port, publicDir, } = await (0, get_cli_options_1.getCliOptions)({
23
23
  isLambda: false,
@@ -30,7 +30,7 @@ const listCompositionsCommand = async (remotionRoot, args) => {
30
30
  publicDir,
31
31
  onProgress: () => undefined,
32
32
  indentOutput: false,
33
- logLevel: config_1.ConfigInternals.Logging.getLogLevel(),
33
+ logLevel,
34
34
  bundlingStep: 0,
35
35
  steps: 1,
36
36
  onDirectoryCreated: (dir) => {
@@ -50,7 +50,7 @@ const listCompositionsCommand = async (remotionRoot, args) => {
50
50
  indent: false,
51
51
  onBrowserLog: null,
52
52
  puppeteerInstance: undefined,
53
- verbose,
53
+ logLevel,
54
54
  server: undefined,
55
55
  });
56
56
  (0, print_compositions_1.printCompositions)(compositions);
@@ -2,4 +2,4 @@ import type { StillImageFormat, VideoImageFormat } from '@remotion/renderer';
2
2
  export declare const setStillImageFormat: (format: StillImageFormat) => void;
3
3
  export declare const setVideoImageFormat: (format: VideoImageFormat) => void;
4
4
  export declare const getUserPreferredStillImageFormat: () => "png" | "jpeg" | "pdf" | "webp" | undefined;
5
- export declare const getUserPreferredVideoImageFormat: () => "png" | "jpeg" | "none" | undefined;
5
+ export declare const getUserPreferredVideoImageFormat: () => "none" | "png" | "jpeg" | undefined;
@@ -245,6 +245,30 @@ type FlatConfig = RemotionConfigObject & RemotionBundlingOptions & {
245
245
  * See the Encoding guide in the docs for defaults and available options.
246
246
  */
247
247
  setAudioCodec: (codec: 'pcm-16' | 'aac' | 'mp3' | 'opus') => void;
248
+ /**
249
+ * @deprecated 'The config format has changed. Change `Config.Bundling.*()` calls to `Config.*()` in your config file.'
250
+ */
251
+ Bundling: void;
252
+ /**
253
+ * @deprecated 'The config format has changed. Change `Config.Preview.*()` calls to `Config.*()` in your config file.'
254
+ */
255
+ Preview: void;
256
+ /**
257
+ * @deprecated 'The config format has changed. Change `Config.Log.*()` calls to `Config.*()` in your config file.'
258
+ */
259
+ Log: void;
260
+ /**
261
+ * @deprecated 'The config format has changed. Change `Config.Puppeteer.*()` calls to `Config.*()` in your config file.'
262
+ */
263
+ Puppeteer: void;
264
+ /**
265
+ * @deprecated 'The config format has changed. Change `Config.Rendering.*()` calls to `Config.*()` in your config file.'
266
+ */
267
+ Rendering: void;
268
+ /**
269
+ * @deprecated 'The config format has changed. Change `Config.Output.*()` calls to `Config.*()` in your config file.'
270
+ */
271
+ Output: void;
248
272
  };
249
273
  export declare const Config: FlatConfig;
250
274
  export type { Concurrency, WebpackConfiguration, WebpackOverrideFn };
@@ -273,7 +297,7 @@ export declare const ConfigInternals: {
273
297
  getShouldOutputImageSequence: (frameRange: FrameRange | null) => boolean;
274
298
  getDotEnvLocation: () => string | null;
275
299
  getUserPreferredStillImageFormat: () => "png" | "jpeg" | "pdf" | "webp" | undefined;
276
- getUserPreferredVideoImageFormat: () => "png" | "jpeg" | "none" | undefined;
300
+ getUserPreferredVideoImageFormat: () => "none" | "png" | "jpeg" | undefined;
277
301
  getWebpackOverrideFn: () => WebpackOverrideFn;
278
302
  getWebpackCaching: () => boolean;
279
303
  getOutputLocation: () => string | null;
@@ -83,6 +83,24 @@ const webpack_caching_2 = require("./webpack-caching");
83
83
  const webpack_poll_1 = require("./webpack-poll");
84
84
  const width_1 = require("./width");
85
85
  exports.Config = {
86
+ get Bundling() {
87
+ throw new Error('The config format has changed. Change `Config.Bundling.*()` calls to `Config.*()` in your config file.');
88
+ },
89
+ get Rendering() {
90
+ throw new Error('The config format has changed. Change `Config.Rendering.*()` calls to `Config.*()` in your config file.');
91
+ },
92
+ get Output() {
93
+ throw new Error('The config format has changed. Change `Config.Output.*()` calls to `Config.*()` in your config file.');
94
+ },
95
+ get Log() {
96
+ throw new Error('The config format has changed. Change `Config.Log.*()` calls to `Config.*()` in your config file.');
97
+ },
98
+ get Preview() {
99
+ throw new Error('The config format has changed. Change `Config.Preview.*()` calls to `Config.*()` in your config file.');
100
+ },
101
+ get Puppeteer() {
102
+ throw new Error('The config format has changed. Change `Config.Puppeteer.*()` calls to `Config.*()` in your config file.');
103
+ },
86
104
  setMaxTimelineTracks: max_timeline_tracks_2.setMaxTimelineTracks,
87
105
  setKeyboardShortcutsEnabled: keyboard_shortcuts_1.setKeyboardShortcutsEnabled,
88
106
  setNumberOfSharedAudioTags: number_of_shared_audio_tags_1.setNumberOfSharedAudioTags,
@@ -108,7 +126,7 @@ exports.Config = {
108
126
  throw new Error('setQuality() has been renamed - use setJpegQuality() instead.');
109
127
  },
110
128
  setImageFormat: () => {
111
- throw new Error('setImageFormat() has been renamed - use setVideoImageFormat() or setStillImageFormat() instead.');
129
+ throw new Error('Config.setImageFormat() has been renamed - use Config.setVideoImageFormat() instead (default "jpeg"). For rendering stills, use Config.setStillImageFormat() (default "png")');
112
130
  },
113
131
  setJpegQuality: jpeg_quality_2.setJpegQuality,
114
132
  setStillImageFormat: image_format_1.setStillImageFormat,
@@ -9,6 +9,9 @@ const noop_1 = require("../../helpers/noop");
9
9
  const input_dragger_click_lock_1 = require("../../state/input-dragger-click-lock");
10
10
  const z_index_1 = require("../../state/z-index");
11
11
  const RemInput_1 = require("./RemInput");
12
+ const isInt = (num) => {
13
+ return num % 1 === 0;
14
+ };
12
15
  const InputDragger = ({ onValueChange, min: _min, max: _max, step: _step, value, onTextChange, formatter = (q) => String(q), status, rightAlign, ...props }) => {
13
16
  const [inputFallback, setInputFallback] = (0, react_1.useState)(false);
14
17
  const fallbackRef = (0, react_1.useRef)(null);
@@ -99,8 +102,17 @@ const InputDragger = ({ onValueChange, min: _min, max: _max, step: _step, value,
99
102
  (_a = fallbackRef.current) === null || _a === void 0 ? void 0 : _a.select();
100
103
  }
101
104
  }, [inputFallback]);
105
+ const deriveStep = (0, react_1.useMemo)(() => {
106
+ if (_step !== undefined) {
107
+ return _step;
108
+ }
109
+ if (typeof _min === 'number' && isInt(_min)) {
110
+ return 1;
111
+ }
112
+ return 0.0001;
113
+ }, [_min, _step]);
102
114
  if (inputFallback) {
103
- return ((0, jsx_runtime_1.jsx)(z_index_1.HigherZIndex, { onEscape: onEscape, onOutsideClick: noop_1.noop, children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { ref: fallbackRef, autoFocus: true, onKeyPress: onKeyPress, onBlur: onBlur, min: _min, step: _step, defaultValue: value, status: status, pattern: '[0-9]*[.]?[0-9]*', rightAlign: rightAlign, ...props }) }));
115
+ return ((0, jsx_runtime_1.jsx)(z_index_1.HigherZIndex, { onEscape: onEscape, onOutsideClick: noop_1.noop, children: (0, jsx_runtime_1.jsx)(RemInput_1.RemotionInput, { ref: fallbackRef, autoFocus: true, onKeyPress: onKeyPress, onBlur: onBlur, min: _min, max: _max, step: deriveStep, defaultValue: value, status: status, pattern: '[0-9]*[.]?[0-9]*', rightAlign: rightAlign, ...props }) }));
104
116
  }
105
117
  return ((0, jsx_runtime_1.jsx)("button", { type: "button", style: style, onClick: onClick, onPointerDown: onPointerDown, children: (0, jsx_runtime_1.jsx)("span", { style: span, children: formatter(value) }) }));
106
118
  };
@@ -12,6 +12,6 @@ export declare const getInputBorderColor: ({ status, isFocused, isHovered, }: {
12
12
  status: 'error' | 'warning' | 'ok';
13
13
  isFocused: boolean;
14
14
  isHovered: boolean;
15
- }) => "hsla(0, 0%, 100%, 0.15)" | "rgba(0, 0, 0, 0.6)" | "rgba(255, 255, 255, 0.05)" | "#ff3232" | "#f1c40f";
15
+ }) => "hsla(0, 0%, 100%, 0.15)" | "rgba(255, 255, 255, 0.05)" | "rgba(0, 0, 0, 0.6)" | "#ff3232" | "#f1c40f";
16
16
  export declare const RemotionInput: React.ForwardRefExoticComponent<Pick<Props, "key" | keyof React.InputHTMLAttributes<HTMLInputElement> | "status" | "rightAlign"> & React.RefAttributes<HTMLInputElement>>;
17
17
  export {};
@@ -14,7 +14,7 @@ export declare const RenderModalBasic: React.FC<{
14
14
  setProResProfile: React.Dispatch<React.SetStateAction<ProResProfile>>;
15
15
  frame: number;
16
16
  setFrame: React.Dispatch<React.SetStateAction<number>>;
17
- resolvedComposition: TCompMetadata<AnyZodObject, Record<string, unknown> | undefined>;
17
+ resolvedComposition: TCompMetadata<AnyZodObject, Record<string, unknown>>;
18
18
  setOutName: (value: React.SetStateAction<string>) => void;
19
19
  setEndFrame: React.Dispatch<React.SetStateAction<number | null>>;
20
20
  startFrame: number;
@@ -11,16 +11,22 @@ const useLocalState = ({ value, schema, setValue, defaultValue, }) => {
11
11
  const parentRevision = (0, react_1.useContext)(RevisionContext).childResetRevision;
12
12
  const [resetRevision, setResetRevision] = (0, react_1.useState)(0);
13
13
  const [localValue, setLocalValue] = (0, react_1.useState)(() => {
14
- return {};
14
+ return {
15
+ [parentRevision]: {
16
+ value,
17
+ keyStabilityRevision: 0,
18
+ zodValidation: schema.safeParse(value),
19
+ },
20
+ };
15
21
  });
16
22
  const currentLocalValue = (0, react_1.useMemo)(() => {
17
23
  var _a;
18
24
  return ((_a = localValue[parentRevision]) !== null && _a !== void 0 ? _a : {
19
25
  value: defaultValue,
20
26
  keyStabilityRevision: 0,
21
- zodValidation: schema.safeParse(value),
27
+ zodValidation: schema.safeParse(defaultValue),
22
28
  });
23
- }, [defaultValue, localValue, parentRevision, schema, value]);
29
+ }, [defaultValue, localValue, parentRevision, schema]);
24
30
  const stateRef = (0, react_1.useRef)(currentLocalValue);
25
31
  stateRef.current = currentLocalValue;
26
32
  const onChange = (0, react_1.useCallback)(
@@ -16,4 +16,4 @@ export declare const BLUE_DISABLED = "#284f73";
16
16
  export declare const getBackgroundFromHoverState: ({ selected, hovered, }: {
17
17
  selected: boolean;
18
18
  hovered: boolean;
19
- }) => "transparent" | "hsla(0, 0%, 100%, 0.15)" | "hsla(0, 0%, 100%, 0.25)" | "rgba(255, 255, 255, 0.06)";
19
+ }) => "transparent" | "hsla(0, 0%, 100%, 0.15)" | "rgba(255, 255, 255, 0.06)" | "hsla(0, 0%, 100%, 0.25)";
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { Codec } from '@remotion/renderer';
3
2
  import type { RenderType } from '../components/RenderModal/RenderModalAdvanced';
4
3
  type Section = 'general' | 'picture' | 'advanced' | 'data' | 'gif' | 'audio';
@@ -33,5 +33,5 @@ export declare const getCliOptions: (options: {
33
33
  videoBitrate: string | null;
34
34
  height: number | null;
35
35
  width: number | null;
36
- configFileImageFormat: "png" | "jpeg" | "none" | undefined;
36
+ configFileImageFormat: "none" | "png" | "jpeg" | undefined;
37
37
  }>;
@@ -1,6 +1,6 @@
1
- import type { BrowserExecutable, ChromiumOptions, HeadlessBrowser, RemotionServer } from '@remotion/renderer';
2
- import type { AnyCompMetadata } from 'remotion';
3
- export declare const getCompositionId: ({ args, compositionIdFromUi, inputProps, puppeteerInstance, envVariables, timeoutInMilliseconds, chromiumOptions, port, browserExecutable, serveUrlOrWebpackUrl, verbose, indent, server, }: {
1
+ import type { BrowserExecutable, ChromiumOptions, HeadlessBrowser, LogLevel, RemotionServer } from '@remotion/renderer';
2
+ import type { VideoConfig } from 'remotion';
3
+ export declare const getCompositionId: ({ args, compositionIdFromUi, inputProps, puppeteerInstance, envVariables, timeoutInMilliseconds, chromiumOptions, port, browserExecutable, serveUrlOrWebpackUrl, logLevel, indent, server, }: {
4
4
  args: string[];
5
5
  compositionIdFromUi: string | null;
6
6
  inputProps: Record<string, unknown>;
@@ -11,12 +11,12 @@ export declare const getCompositionId: ({ args, compositionIdFromUi, inputProps,
11
11
  port: number | null;
12
12
  browserExecutable: BrowserExecutable;
13
13
  serveUrlOrWebpackUrl: string;
14
- verbose: boolean;
14
+ logLevel: LogLevel;
15
15
  indent: boolean;
16
16
  server: RemotionServer;
17
17
  }) => Promise<{
18
18
  compositionId: string;
19
19
  reason: string;
20
- config: AnyCompMetadata;
20
+ config: VideoConfig;
21
21
  argsAfterComposition: string[];
22
22
  }>;
@@ -4,6 +4,7 @@ exports.getCompositionId = void 0;
4
4
  const renderer_1 = require("@remotion/renderer");
5
5
  const log_1 = require("./log");
6
6
  const show_compositions_picker_1 = require("./show-compositions-picker");
7
+ const format_bytes_1 = require("./format-bytes");
7
8
  const getCompName = ({ cliArgs, compositionIdFromUi, }) => {
8
9
  if (compositionIdFromUi) {
9
10
  return {
@@ -15,13 +16,13 @@ const getCompName = ({ cliArgs, compositionIdFromUi, }) => {
15
16
  const [compName, ...remainingArgs] = cliArgs;
16
17
  return { compName, remainingArgs, reason: 'Passed as argument' };
17
18
  };
18
- const getCompositionId = async ({ args, compositionIdFromUi, inputProps, puppeteerInstance, envVariables, timeoutInMilliseconds, chromiumOptions, port, browserExecutable, serveUrlOrWebpackUrl, verbose, indent, server, }) => {
19
+ const getCompositionId = async ({ args, compositionIdFromUi, inputProps, puppeteerInstance, envVariables, timeoutInMilliseconds, chromiumOptions, port, browserExecutable, serveUrlOrWebpackUrl, logLevel, indent, server, }) => {
19
20
  const { compName, remainingArgs, reason: compReason, } = getCompName({
20
21
  cliArgs: args,
21
22
  compositionIdFromUi,
22
23
  });
23
24
  if (compName) {
24
- const config = await renderer_1.RenderInternals.internalSelectComposition({
25
+ const { metadata: config, propsSize } = await renderer_1.RenderInternals.internalSelectComposition({
25
26
  id: compName,
26
27
  inputProps,
27
28
  puppeteerInstance,
@@ -31,11 +32,14 @@ const getCompositionId = async ({ args, compositionIdFromUi, inputProps, puppete
31
32
  browserExecutable,
32
33
  chromiumOptions,
33
34
  port,
34
- verbose,
35
+ logLevel,
35
36
  server,
36
37
  indent,
37
38
  onBrowserLog: null,
38
39
  });
40
+ if (propsSize > 10000000) {
41
+ log_1.Log.warn(`The props of your composition are large (${(0, format_bytes_1.formatBytes)(propsSize)}). This may cause slowdown.`);
42
+ }
39
43
  if (!config) {
40
44
  throw new Error(`Cannot find composition with ID "${compName}"`);
41
45
  }
@@ -55,7 +59,7 @@ const getCompositionId = async ({ args, compositionIdFromUi, inputProps, puppete
55
59
  chromiumOptions,
56
60
  port,
57
61
  browserExecutable,
58
- verbose,
62
+ logLevel,
59
63
  indent,
60
64
  server,
61
65
  serveUrlOrWebpackUrl,
@@ -1,6 +1,6 @@
1
- import type { BrowserExecutable, ChromiumOptions, HeadlessBrowser, RemotionServer } from '@remotion/renderer';
2
- import type { AnyCompMetadata } from 'remotion';
3
- export declare const getCompositionWithDimensionOverride: ({ height, width, args, compositionIdFromUi, chromiumOptions, envVariables, port, puppeteerInstance, timeoutInMilliseconds, browserExecutable, serveUrlOrWebpackUrl, indent, inputProps, verbose, server, }: {
1
+ import type { BrowserExecutable, ChromiumOptions, HeadlessBrowser, LogLevel, RemotionServer } from '@remotion/renderer';
2
+ import type { VideoConfig } from 'remotion';
3
+ export declare const getCompositionWithDimensionOverride: ({ height, width, args, compositionIdFromUi, chromiumOptions, envVariables, port, puppeteerInstance, timeoutInMilliseconds, browserExecutable, serveUrlOrWebpackUrl, indent, inputProps, logLevel, server, }: {
4
4
  height: number | null;
5
5
  width: number | null;
6
6
  args: string[];
@@ -13,12 +13,12 @@ export declare const getCompositionWithDimensionOverride: ({ height, width, args
13
13
  browserExecutable: BrowserExecutable | null;
14
14
  serveUrlOrWebpackUrl: string;
15
15
  indent: boolean;
16
- verbose: boolean;
16
+ logLevel: LogLevel;
17
17
  inputProps: Record<string, unknown>;
18
18
  server: RemotionServer;
19
19
  }) => Promise<{
20
20
  compositionId: string;
21
21
  reason: string;
22
- config: AnyCompMetadata;
22
+ config: VideoConfig;
23
23
  argsAfterComposition: string[];
24
24
  }>;
@@ -2,13 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getCompositionWithDimensionOverride = void 0;
4
4
  const get_composition_id_1 = require("./get-composition-id");
5
- const getCompositionWithDimensionOverride = async ({ height, width, args, compositionIdFromUi, chromiumOptions, envVariables, port, puppeteerInstance, timeoutInMilliseconds, browserExecutable, serveUrlOrWebpackUrl, indent, inputProps, verbose, server, }) => {
5
+ const getCompositionWithDimensionOverride = async ({ height, width, args, compositionIdFromUi, chromiumOptions, envVariables, port, puppeteerInstance, timeoutInMilliseconds, browserExecutable, serveUrlOrWebpackUrl, indent, inputProps, logLevel, server, }) => {
6
6
  const returnValue = await (0, get_composition_id_1.getCompositionId)({
7
7
  args,
8
8
  compositionIdFromUi,
9
9
  indent,
10
10
  serveUrlOrWebpackUrl,
11
- verbose,
11
+ logLevel,
12
12
  browserExecutable,
13
13
  chromiumOptions,
14
14
  envVariables,
@@ -48,5 +48,9 @@ const handleCommonError = async (err, logLevel) => {
48
48
  log_1.Log.info(' Oftentimes, this happens if the component is missing the `export` keyword');
49
49
  log_1.Log.info(' or if the component was renamed and the import statement not properly adjusted.');
50
50
  }
51
+ if (err.message.includes('GLIBC_')) {
52
+ log_1.Log.info('💡 Remotion requires at least Libc 2.34.');
53
+ log_1.Log.info('💡 Get help for this issue: https://github.com/remotion-dev/remotion/issues/2439');
54
+ }
51
55
  };
52
56
  exports.handleCommonError = handleCommonError;
package/dist/index.d.ts CHANGED
@@ -9,7 +9,7 @@ export declare const CliInternals: {
9
9
  indent: boolean;
10
10
  }) => import("./progress-bar").OverwriteableCliOutput;
11
11
  chalk: {
12
- enabled: boolean;
12
+ enabled: () => boolean;
13
13
  visible: boolean;
14
14
  styles: Record<string, {
15
15
  codes: [number, number];
@@ -33,6 +33,7 @@ export declare const CliInternals: {
33
33
  yellow: (str: string) => string;
34
34
  blue: (str: string) => string;
35
35
  magenta: (str: string) => string;
36
+ cyan: (str: string) => string;
36
37
  white: (str: string) => string;
37
38
  gray: (str: string) => string;
38
39
  bgBlack: (str: string) => string;
@@ -65,7 +66,6 @@ export declare const CliInternals: {
65
66
  logLevel: "verbose" | "info" | "warn" | "error";
66
67
  } & {
67
68
  tag?: string | undefined;
68
- secondTag?: string | undefined;
69
69
  }, message?: any, ...optionalParams: any[]) => void;
70
70
  info: (message?: any, ...optionalParams: any[]) => void;
71
71
  infoAdvanced: (options: {
@@ -112,7 +112,7 @@ export declare const CliInternals: {
112
112
  videoBitrate: string | null;
113
113
  height: number | null;
114
114
  width: number | null;
115
- configFileImageFormat: "png" | "jpeg" | "none" | undefined;
115
+ configFileImageFormat: "none" | "png" | "jpeg" | undefined;
116
116
  }>;
117
117
  loadConfig: (remotionRoot: string) => Promise<string | null>;
118
118
  initializeCli: (remotionRoot: string) => Promise<void>;
@@ -121,7 +121,7 @@ export declare const CliInternals: {
121
121
  parsedCli: {
122
122
  "browser-executable": import("@remotion/renderer").BrowserExecutable;
123
123
  "pixel-format": "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
124
- "image-format": "png" | "jpeg" | "pdf" | "webp" | "none";
124
+ "image-format": "none" | "png" | "jpeg" | "pdf" | "webp";
125
125
  "prores-profile": "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy";
126
126
  "bundle-cache": string;
127
127
  "env-file": string;
@@ -185,7 +185,7 @@ export declare const CliInternals: {
185
185
  downloadName: string | null;
186
186
  outName: string | null;
187
187
  configImageFormat: "png" | "jpeg" | "pdf" | "webp" | null;
188
- cliFlag: "png" | "jpeg" | "pdf" | "webp" | "none" | null;
188
+ cliFlag: "none" | "png" | "jpeg" | "pdf" | "webp" | null;
189
189
  isLambda: boolean;
190
190
  fromUi: "png" | "jpeg" | "pdf" | "webp" | null;
191
191
  }) => {
@@ -200,8 +200,8 @@ export declare const CliInternals: {
200
200
  };
201
201
  getVideoImageFormat: ({ codec, uiImageFormat, }: {
202
202
  codec: import("@remotion/renderer").CodecOrUndefined;
203
- uiImageFormat: "png" | "jpeg" | "none" | null;
204
- }) => "png" | "jpeg" | "none";
203
+ uiImageFormat: "none" | "png" | "jpeg" | null;
204
+ }) => "none" | "png" | "jpeg";
205
205
  printCompositions: (compositions: import("remotion").AnyCompMetadata[]) => void;
206
206
  getFinalOutputCodec: ({ cliFlag, configFile, downloadName, outName, uiCodec, }: {
207
207
  cliFlag: import("@remotion/renderer").CodecOrUndefined;
@@ -217,7 +217,7 @@ export declare const CliInternals: {
217
217
  shouldUseNonOverlayingLogger: ({ logLevel, }: {
218
218
  logLevel: "verbose" | "info" | "warn" | "error";
219
219
  }) => boolean;
220
- getCompositionWithDimensionOverride: ({ height, width, args, compositionIdFromUi, chromiumOptions, envVariables, port, puppeteerInstance, timeoutInMilliseconds, browserExecutable, serveUrlOrWebpackUrl, indent, inputProps, verbose, server, }: {
220
+ getCompositionWithDimensionOverride: ({ height, width, args, compositionIdFromUi, chromiumOptions, envVariables, port, puppeteerInstance, timeoutInMilliseconds, browserExecutable, serveUrlOrWebpackUrl, indent, inputProps, logLevel, server, }: {
221
221
  height: number | null;
222
222
  width: number | null;
223
223
  args: string[];
@@ -230,13 +230,13 @@ export declare const CliInternals: {
230
230
  browserExecutable: import("@remotion/renderer").BrowserExecutable;
231
231
  serveUrlOrWebpackUrl: string;
232
232
  indent: boolean;
233
- verbose: boolean;
233
+ logLevel: "verbose" | "info" | "warn" | "error";
234
234
  inputProps: Record<string, unknown>;
235
235
  server: import("@remotion/renderer").RemotionServer;
236
236
  }) => Promise<{
237
237
  compositionId: string;
238
238
  reason: string;
239
- config: import("remotion").AnyCompMetadata;
239
+ config: import("remotion").VideoConfig;
240
240
  argsAfterComposition: string[];
241
241
  }>;
242
242
  };
package/dist/log.d.ts CHANGED
@@ -5,7 +5,6 @@ export declare const Log: {
5
5
  logLevel: "verbose" | "info" | "warn" | "error";
6
6
  } & {
7
7
  tag?: string | undefined;
8
- secondTag?: string | undefined;
9
8
  }, message?: any, ...optionalParams: any[]) => void;
10
9
  info: (message?: any, ...optionalParams: any[]) => void;
11
10
  infoAdvanced: (options: {
@@ -23,7 +23,7 @@ function setupHooks(context) {
23
23
  logger.log('Compilation finished');
24
24
  const statsOptions = {
25
25
  preset: 'errors-warnings',
26
- colors: renderer_1.RenderInternals.isColorSupported,
26
+ colors: renderer_1.RenderInternals.isColorSupported(),
27
27
  };
28
28
  const printedStats = stats.toString(statsOptions);
29
29
  const lines = printedStats
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import type { IncomingMessage, ServerResponse } from 'node:http';
3
2
  import type { LiveEventsServer } from './live-events';
4
3
  export declare const handleRoutes: ({ hash, hashPrefix, request, response, liveEventsServer, getCurrentInputProps, getEnvVariables, remotionRoot, entryPoint, publicDir, }: {
@@ -24,7 +24,7 @@ const createOverwriteableCliOutput = (options) => {
24
24
  .map((l) => {
25
25
  return `${renderer_1.RenderInternals.INDENT_TOKEN} ${l}`;
26
26
  })
27
- .join('\n'));
27
+ .join('\n') + '\n');
28
28
  }
29
29
  else {
30
30
  process.stdout.write(up + '\n');
@@ -171,16 +171,13 @@ const getGuiProgressSubtitle = (progress) => {
171
171
  return `Bundling ${Math.round(progress.bundling.progress * 100)}%`;
172
172
  }
173
173
  if (progress.copyingState.doneIn === null) {
174
- if (progress.copyingState.bytes < 100000000) {
175
- return 'Bundling 100%';
176
- }
177
174
  const bytes = new Intl.NumberFormat('en', {
178
175
  notation: 'compact',
179
176
  style: 'unit',
180
177
  unit: 'byte',
181
178
  unitDisplay: 'narrow',
182
179
  });
183
- return `Copying ${bytes.format(progress.copyingState.bytes)}`;
180
+ return `Copying public dir ${bytes.format(progress.copyingState.bytes)}`;
184
181
  }
185
182
  if (!progress.rendering) {
186
183
  return `Getting compositions`;
@@ -48,15 +48,17 @@ const user_passed_output_location_1 = require("../user-passed-output-location");
48
48
  const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, inputProps, envVariables, puppeteerTimeout, port, height, width, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, outputLocationFromUI, jpegQuality, onProgress, addCleanupCallback, cancelSignal, crf, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, pixelFormat, videoBitrate, numberOfGifLoops, audioCodec, disallowParallelEncoding, }) => {
49
49
  var _a;
50
50
  const downloads = [];
51
- log_1.Log.verboseAdvanced({ indent, logLevel }, 'Browser executable: ', browserExecutable);
51
+ if (browserExecutable) {
52
+ log_1.Log.verboseAdvanced({ indent, logLevel }, 'Browser executable: ', browserExecutable);
53
+ }
52
54
  const browserInstance = renderer_1.RenderInternals.internalOpenBrowser({
53
55
  browser,
54
56
  browserExecutable,
55
- shouldDumpIo: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
56
57
  chromiumOptions,
57
58
  forceDeviceScaleFactor: scale,
58
59
  indent,
59
60
  viewport: null,
61
+ logLevel,
60
62
  });
61
63
  const updatesDontOverwrite = (0, should_use_non_overlaying_logger_1.shouldUseNonOverlayingLogger)({ logLevel });
62
64
  const renderProgress = (0, progress_bar_1.createOverwriteableCliOutput)({
@@ -134,14 +136,14 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
134
136
  };
135
137
  };
136
138
  const puppeteerInstance = await browserInstance;
137
- addCleanupCallback(() => puppeteerInstance.close(false));
139
+ addCleanupCallback(() => puppeteerInstance.close(false, logLevel, indent));
138
140
  const actualConcurrency = renderer_1.RenderInternals.getActualConcurrency(concurrency);
139
141
  const server = renderer_1.RenderInternals.prepareServer({
140
142
  concurrency: actualConcurrency,
141
143
  indent,
142
144
  port,
143
145
  remotionRoot,
144
- verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
146
+ logLevel,
145
147
  webpackConfigOrServeUrl: urlOrBundle,
146
148
  });
147
149
  addCleanupCallback(() => server.then((s) => s.closeServer(false)));
@@ -159,7 +161,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
159
161
  puppeteerInstance,
160
162
  serveUrlOrWebpackUrl: urlOrBundle,
161
163
  timeoutInMilliseconds: puppeteerTimeout,
162
- verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
164
+ logLevel,
163
165
  server: await server,
164
166
  });
165
167
  const { codec, reason: codecReason } = (0, get_final_output_codec_1.getFinalOutputCodec)({
@@ -212,7 +214,6 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
212
214
  ? absoluteOutputFile
213
215
  : await node_fs_1.default.promises.mkdtemp(node_path_1.default.join(node_os_1.default.tmpdir(), 'react-motion-render'));
214
216
  log_1.Log.verboseAdvanced({ indent, logLevel }, 'Output dir', outputDir);
215
- const verbose = renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose');
216
217
  await renderer_1.RenderInternals.internalRenderFrames({
217
218
  imageFormat,
218
219
  inputProps,
@@ -225,7 +226,6 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
225
226
  cancelSignal: cancelSignal !== null && cancelSignal !== void 0 ? cancelSignal : undefined,
226
227
  outputDir,
227
228
  webpackBundleOrServeUrl: urlOrBundle,
228
- dumpBrowserLogs: verbose,
229
229
  everyNthFrame,
230
230
  envVariables,
231
231
  frameRange,
@@ -243,7 +243,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
243
243
  muted,
244
244
  onBrowserLog: null,
245
245
  onFrameBuffer: null,
246
- verbose,
246
+ logLevel,
247
247
  });
248
248
  updateRenderProgress(true);
249
249
  log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.blue(`▶ ${absoluteOutputFile}`));
@@ -271,14 +271,13 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
271
271
  pixelFormat,
272
272
  proResProfile,
273
273
  jpegQuality: jpegQuality !== null && jpegQuality !== void 0 ? jpegQuality : renderer_1.RenderInternals.DEFAULT_JPEG_QUALITY,
274
- dumpBrowserLogs: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
275
274
  chromiumOptions,
276
275
  timeoutInMilliseconds: config_1.ConfigInternals.getCurrentPuppeteerTimeout(),
277
276
  scale,
278
277
  port,
279
278
  numberOfGifLoops,
280
279
  everyNthFrame,
281
- verbose: renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose'),
280
+ logLevel,
282
281
  muted,
283
282
  enforceAudioTrack,
284
283
  browserExecutable,
@@ -313,13 +312,12 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
313
312
  onBrowserLog: null,
314
313
  onStart: () => undefined,
315
314
  });
316
- log_1.Log.verboseAdvanced({ indent, logLevel });
315
+ updateRenderProgress(true);
316
+ log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.blue(`${exists ? '○' : '+'} ${absoluteOutputFile}`));
317
317
  log_1.Log.verboseAdvanced({ indent, logLevel }, `Slowest frames:`);
318
318
  slowestFrames.forEach(({ frame, time }) => {
319
- log_1.Log.verboseAdvanced({ indent, logLevel }, `Frame ${frame} (${time.toFixed(3)}ms)`);
319
+ log_1.Log.verboseAdvanced({ indent, logLevel }, ` Frame ${frame} (${time.toFixed(3)}ms)`);
320
320
  });
321
- updateRenderProgress(true);
322
- log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.blue(`${exists ? '○' : '+'} ${absoluteOutputFile}`));
323
321
  for (const line of renderer_1.RenderInternals.perf.getPerf()) {
324
322
  log_1.Log.verboseAdvanced({ indent, logLevel }, line);
325
323
  }