@remotion/cli 4.1.0-alpha10 → 4.1.0-alpha12

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 (77) hide show
  1. package/dist/codemods/update-default-props.js +5 -0
  2. package/dist/config/image-format.d.ts +1 -1
  3. package/dist/config/index.d.ts +1 -1
  4. package/dist/editor/components/AssetSelector.js +61 -6
  5. package/dist/editor/components/AssetSelectorItem.js +27 -11
  6. package/dist/editor/components/CompositionSelector.js +3 -3
  7. package/dist/editor/components/CopyButton.js +8 -2
  8. package/dist/editor/components/CurrentCompositionSideEffects.js +9 -5
  9. package/dist/editor/components/FullscreenToggle.js +23 -1
  10. package/dist/editor/components/InlineAction.d.ts +1 -0
  11. package/dist/editor/components/InlineAction.js +2 -2
  12. package/dist/editor/components/KeyboardShortcutsExplainer.js +1 -1
  13. package/dist/editor/components/OptionsPanel.js +45 -12
  14. package/dist/editor/components/RenderModal/CliCopyButton.js +2 -1
  15. package/dist/editor/components/RenderModal/MultiRangeSlider.js +4 -7
  16. package/dist/editor/components/RenderModal/RenderModal.js +7 -7
  17. package/dist/editor/components/RenderModal/RenderModalJSONPropsEditor.js +4 -0
  18. package/dist/editor/components/RenderModal/SchemaEditor/SchemaEditor.js +5 -1
  19. package/dist/editor/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.d.ts +17 -0
  20. package/dist/editor/components/RenderModal/SchemaEditor/ZodDiscriminatedUnionEditor.js +83 -0
  21. package/dist/editor/components/RenderModal/SchemaEditor/ZodObjectEditor.d.ts +5 -0
  22. package/dist/editor/components/RenderModal/SchemaEditor/ZodObjectEditor.js +5 -1
  23. package/dist/editor/components/RenderModal/SchemaEditor/ZodOrNullishEditor.js +1 -1
  24. package/dist/editor/components/RenderModal/SchemaEditor/ZodSwitch.js +5 -1
  25. package/dist/editor/components/RenderQueue/RenderQueueOpenInFolder.js +2 -1
  26. package/dist/editor/components/TopPanel.js +4 -8
  27. package/dist/editor/components/UpdateModal/UpdateModal.js +4 -1
  28. package/dist/editor/helpers/copy-text.d.ts +1 -1
  29. package/dist/editor/helpers/copy-text.js +15 -10
  30. package/dist/editor/helpers/document-title.d.ts +4 -0
  31. package/dist/editor/helpers/document-title.js +60 -0
  32. package/dist/editor/helpers/pick-color.js +12 -7
  33. package/dist/editor/helpers/render-modal-sections.d.ts +0 -1
  34. package/dist/editor/icons/clipboard.d.ts +4 -0
  35. package/dist/editor/icons/clipboard.js +6 -0
  36. package/dist/editor/icons/file.d.ts +3 -1
  37. package/dist/editor/icons/file.js +1 -1
  38. package/dist/editor/icons/folder.d.ts +3 -0
  39. package/dist/editor/icons/folder.js +5 -1
  40. package/dist/event-source-events.d.ts +1 -0
  41. package/dist/event-source.js +1 -0
  42. package/dist/get-cli-options.d.ts +1 -1
  43. package/dist/get-input-props.js +2 -1
  44. package/dist/handle-common-errors.js +2 -2
  45. package/dist/index.d.ts +6 -5
  46. package/dist/index.js +1 -1
  47. package/dist/make-on-download.d.ts +12 -0
  48. package/dist/make-on-download.js +40 -0
  49. package/dist/parse-command-line.d.ts +1 -0
  50. package/dist/preview-server/public-folder.js +3 -0
  51. package/dist/preview-server/render-queue/process-still.js +1 -1
  52. package/dist/preview-server/routes.d.ts +0 -1
  53. package/dist/preview-server/routes.js +1 -0
  54. package/dist/progress-bar.js +2 -7
  55. package/dist/render-flows/render.js +17 -25
  56. package/dist/render-flows/still.d.ts +2 -2
  57. package/dist/render-flows/still.js +30 -40
  58. package/dist/still.js +1 -1
  59. package/dist/studio.js +8 -1
  60. package/dist/upgrade.d.ts +1 -1
  61. package/dist/upgrade.js +11 -4
  62. package/package.json +8 -8
  63. package/styles/styles.css +7 -17
  64. package/dist/editor/components/RenderModal/SchemaEditor/input-props-serialization.d.ts +0 -14
  65. package/dist/editor/components/RenderModal/SchemaEditor/input-props-serialization.js +0 -42
  66. package/dist/error-with-stack-frame.d.ts +0 -19
  67. package/dist/error-with-stack-frame.js +0 -81
  68. package/dist/handle-javascript-error.d.ts +0 -20
  69. package/dist/handle-javascript-error.js +0 -81
  70. package/dist/symbolicate-error.d.ts +0 -3
  71. package/dist/symbolicate-error.js +0 -24
  72. package/dist/symbolicate-errors.d.ts +0 -7
  73. package/dist/symbolicate-errors.js +0 -90
  74. package/dist/symbolicate-stacktrace.d.ts +0 -28
  75. package/dist/symbolicate-stacktrace.js +0 -135
  76. package/dist/symbolicateable-error.d.ts +0 -16
  77. package/dist/symbolicateable-error.js +0 -18
@@ -0,0 +1,12 @@
1
+ import type { LogLevel, RenderMediaOnDownload } from '@remotion/renderer';
2
+ import type { DownloadProgress } from './progress-types';
3
+ export declare const makeOnDownload: ({ indent, logLevel, updatesDontOverwrite, downloads, updateRenderProgress, }: {
4
+ indent: boolean;
5
+ logLevel: LogLevel;
6
+ updatesDontOverwrite: boolean;
7
+ downloads: DownloadProgress[];
8
+ updateRenderProgress: (progress: {
9
+ newline: boolean;
10
+ printToConsole: boolean;
11
+ }) => void;
12
+ }) => RenderMediaOnDownload;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeOnDownload = void 0;
4
+ const format_bytes_1 = require("./format-bytes");
5
+ const log_1 = require("./log");
6
+ const makeOnDownload = ({ indent, logLevel, updatesDontOverwrite, downloads, updateRenderProgress, }) => {
7
+ return (src) => {
8
+ const id = Math.random();
9
+ const download = {
10
+ id,
11
+ name: src,
12
+ progress: 0,
13
+ downloaded: 0,
14
+ totalBytes: null,
15
+ };
16
+ const nextDownloadIndex = downloads.length;
17
+ downloads.push(download);
18
+ log_1.Log.verboseAdvanced({ indent, logLevel }, `Starting download [${nextDownloadIndex}]:`, src);
19
+ updateRenderProgress({
20
+ newline: false,
21
+ printToConsole: !updatesDontOverwrite,
22
+ });
23
+ let lastUpdate = Date.now();
24
+ return ({ percent, downloaded, totalSize }) => {
25
+ download.progress = percent;
26
+ download.totalBytes = totalSize;
27
+ download.downloaded = downloaded;
28
+ if (lastUpdate + 1000 > Date.now() && updatesDontOverwrite) {
29
+ return;
30
+ }
31
+ lastUpdate = Date.now();
32
+ log_1.Log.verboseAdvanced({ indent, logLevel }, `Download [${nextDownloadIndex}]:`, percent ? `${(percent * 100).toFixed(1)}%` : (0, format_bytes_1.formatBytes)(downloaded));
33
+ updateRenderProgress({
34
+ newline: false,
35
+ printToConsole: !updatesDontOverwrite,
36
+ });
37
+ };
38
+ };
39
+ };
40
+ exports.makeOnDownload = makeOnDownload;
@@ -11,6 +11,7 @@ type CommandLineOptions = {
11
11
  ['every-nth-frame']: number;
12
12
  ['number-of-gif-loops']: number;
13
13
  ['number-of-shared-audio-tags']: number;
14
+ version: string;
14
15
  codec: Codec;
15
16
  concurrency: number;
16
17
  timeout: number;
@@ -38,12 +38,15 @@ const watchPublicFolder = ({ publicDir, onUpdate, staticHash, }) => {
38
38
  onUpdate,
39
39
  staticHash,
40
40
  });
41
+ onUpdate();
41
42
  watcher.close();
42
43
  }
43
44
  };
44
45
  const watcher = (0, node_fs_1.watch)(parentDir, {}, onDirChange);
45
46
  return;
46
47
  }
48
+ // Known bug: If whole public folder is deleted, this will not be called on macOS.
49
+ // This is not severe, so a wontfix for now.
47
50
  (0, node_fs_1.watch)(publicDir, { recursive: (0, env_supports_fs_recursive_1.envSupportsFsRecursive)() }, () => {
48
51
  (0, exports.fetchFolder)({ publicDir, staticHash });
49
52
  onUpdate();
@@ -37,7 +37,7 @@ const processStill = async ({ job, remotionRoot, entryPoint, onProgress, addClea
37
37
  imageFormatFromUi: job.imageFormat,
38
38
  logLevel: job.verbose ? 'verbose' : 'info',
39
39
  onProgress,
40
- indentOutput: true,
40
+ indent: true,
41
41
  addCleanupCallback,
42
42
  cancelSignal: job.cancelToken.cancelSignal,
43
43
  outputLocationFromUi: job.outName,
@@ -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, }: {
@@ -96,6 +96,7 @@ const handleFallback = async ({ remotionRoot, hash, response, getCurrentInputPro
96
96
  ignoreCertificateErrors,
97
97
  openGlRenderer,
98
98
  },
99
+ publicFolderExists: (0, node_fs_1.existsSync)(publicDir) ? publicDir : null,
99
100
  }));
100
101
  };
101
102
  const handleProjectInfo = async (remotionRoot, _, response) => {
@@ -5,6 +5,7 @@ const renderer_1 = require("@remotion/renderer");
5
5
  const ansi_diff_1 = require("./ansi/ansi-diff");
6
6
  const chalk_1 = require("./chalk");
7
7
  const download_progress_1 = require("./download-progress");
8
+ const format_bytes_1 = require("./format-bytes");
8
9
  const make_progress_bar_1 = require("./make-progress-bar");
9
10
  const truthy_1 = require("./truthy");
10
11
  const createOverwriteableCliOutput = (options) => {
@@ -171,13 +172,7 @@ const getGuiProgressSubtitle = (progress) => {
171
172
  return `Bundling ${Math.round(progress.bundling.progress * 100)}%`;
172
173
  }
173
174
  if (progress.copyingState.doneIn === null) {
174
- const bytes = new Intl.NumberFormat('en', {
175
- notation: 'compact',
176
- style: 'unit',
177
- unit: 'byte',
178
- unitDisplay: 'narrow',
179
- });
180
- return `Copying public dir ${bytes.format(progress.copyingState.bytes)}`;
175
+ return `Copying public dir ${(0, format_bytes_1.formatBytes)(progress.copyingState.bytes)}`;
181
176
  }
182
177
  if (!progress.rendering) {
183
178
  return `Getting compositions`;
@@ -40,6 +40,7 @@ const get_filename_1 = require("../get-filename");
40
40
  const get_final_output_codec_1 = require("../get-final-output-codec");
41
41
  const image_formats_1 = require("../image-formats");
42
42
  const log_1 = require("../log");
43
+ const make_on_download_1 = require("../make-on-download");
43
44
  const parse_command_line_1 = require("../parse-command-line");
44
45
  const progress_bar_1 = require("../progress-bar");
45
46
  const setup_cache_1 = require("../setup-cache");
@@ -83,7 +84,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
83
84
  bytes: 0,
84
85
  doneIn: null,
85
86
  };
86
- const updateRenderProgress = (newline) => {
87
+ const updateRenderProgress = ({ newline, printToConsole, }) => {
87
88
  const aggregateRenderProgress = {
88
89
  rendering: renderingProgress,
89
90
  stitching: shouldOutputImageSequence ? null : stitchingProgress,
@@ -97,7 +98,9 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
97
98
  stitchingStep: steps.indexOf('stitching'),
98
99
  });
99
100
  onProgress({ message, value: progress, ...aggregateRenderProgress });
100
- return renderProgress.update(updatesDontOverwrite ? message : output, newline);
101
+ if (printToConsole) {
102
+ renderProgress.update(updatesDontOverwrite ? message : output, newline);
103
+ }
101
104
  };
102
105
  const { urlOrBundle, cleanup: cleanupBundle } = await (0, setup_cache_1.bundleOnCliOrTakeServeUrl)({
103
106
  fullPath: fullEntryPoint,
@@ -106,7 +109,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
106
109
  onProgress: ({ bundling, copying }) => {
107
110
  bundlingProgress = bundling;
108
111
  copyingState = copying;
109
- updateRenderProgress(false);
112
+ updateRenderProgress({ newline: false, printToConsole: true });
110
113
  },
111
114
  indentOutput: indent,
112
115
  logLevel,
@@ -118,24 +121,13 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
118
121
  quietProgress: updatesDontOverwrite,
119
122
  });
120
123
  addCleanupCallback(() => cleanupBundle());
121
- const onDownload = (src) => {
122
- const id = Math.random();
123
- const download = {
124
- id,
125
- name: src,
126
- progress: 0,
127
- downloaded: 0,
128
- totalBytes: null,
129
- };
130
- downloads.push(download);
131
- updateRenderProgress(false);
132
- return ({ percent, downloaded, totalSize }) => {
133
- download.progress = percent;
134
- download.totalBytes = totalSize;
135
- download.downloaded = downloaded;
136
- updateRenderProgress(false);
137
- };
138
- };
124
+ const onDownload = (0, make_on_download_1.makeOnDownload)({
125
+ downloads,
126
+ indent,
127
+ logLevel,
128
+ updateRenderProgress,
129
+ updatesDontOverwrite,
130
+ });
139
131
  const puppeteerInstance = await browserInstance;
140
132
  addCleanupCallback(() => puppeteerInstance.close(false, logLevel, indent));
141
133
  const actualConcurrency = renderer_1.RenderInternals.getActualConcurrency(concurrency);
@@ -220,7 +212,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
220
212
  serializedInputPropsWithCustomSchema,
221
213
  onFrameUpdate: (rendered) => {
222
214
  renderingProgress.frames = rendered;
223
- updateRenderProgress(false);
215
+ updateRenderProgress({ newline: false, printToConsole: true });
224
216
  },
225
217
  onStart: () => undefined,
226
218
  onDownload,
@@ -251,7 +243,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
251
243
  data: config.props,
252
244
  }).serializedString,
253
245
  });
254
- updateRenderProgress(true);
246
+ updateRenderProgress({ newline: true, printToConsole: true });
255
247
  log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.blue(`▶ ${absoluteOutputFile}`));
256
248
  return;
257
249
  }
@@ -303,7 +295,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
303
295
  update.renderedDoneIn;
304
296
  renderingProgress.frames =
305
297
  update.renderedFrames;
306
- updateRenderProgress(false);
298
+ updateRenderProgress({ newline: false, printToConsole: true });
307
299
  },
308
300
  puppeteerInstance,
309
301
  onDownload,
@@ -323,7 +315,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
323
315
  staticBase: null,
324
316
  }).serializedString,
325
317
  });
326
- updateRenderProgress(true);
318
+ updateRenderProgress({ newline: true, printToConsole: true });
327
319
  log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.blue(`${exists ? '○' : '+'} ${absoluteOutputFile}`));
328
320
  log_1.Log.verboseAdvanced({ indent, logLevel }, `Slowest frames:`);
329
321
  slowestFrames.forEach(({ frame, time }) => {
@@ -1,6 +1,6 @@
1
1
  import type { Browser, BrowserExecutable, CancelSignal, ChromiumOptions, LogLevel, StillImageFormat } from '@remotion/renderer';
2
2
  import type { JobProgressCallback } from '../preview-server/render-queue/job';
3
- export declare const renderStillFlow: ({ remotionRoot, fullEntryPoint, entryPointReason, remainingArgs, browser, browserExecutable, chromiumOptions, envVariables, height, serializedInputPropsWithCustomSchema, overwrite, port, publicDir, puppeteerTimeout, jpegQuality, scale, stillFrame, width, compositionIdFromUi, imageFormatFromUi, logLevel, onProgress, indentOutput, addCleanupCallback, cancelSignal, outputLocationFromUi, }: {
3
+ export declare const renderStillFlow: ({ remotionRoot, fullEntryPoint, entryPointReason, remainingArgs, browser, browserExecutable, chromiumOptions, envVariables, height, serializedInputPropsWithCustomSchema, overwrite, port, publicDir, puppeteerTimeout, jpegQuality, scale, stillFrame, width, compositionIdFromUi, imageFormatFromUi, logLevel, onProgress, indent, addCleanupCallback, cancelSignal, outputLocationFromUi, }: {
4
4
  remotionRoot: string;
5
5
  fullEntryPoint: string;
6
6
  entryPointReason: string;
@@ -23,7 +23,7 @@ export declare const renderStillFlow: ({ remotionRoot, fullEntryPoint, entryPoin
23
23
  imageFormatFromUi: StillImageFormat | null;
24
24
  logLevel: LogLevel;
25
25
  onProgress: JobProgressCallback;
26
- indentOutput: boolean;
26
+ indent: boolean;
27
27
  addCleanupCallback: (cb: () => void) => void;
28
28
  cancelSignal: CancelSignal | null;
29
29
  outputLocationFromUi: string | null;
@@ -16,6 +16,7 @@ const determine_image_format_1 = require("../determine-image-format");
16
16
  const get_cli_options_1 = require("../get-cli-options");
17
17
  const get_composition_with_dimension_override_1 = require("../get-composition-with-dimension-override");
18
18
  const log_1 = require("../log");
19
+ const make_on_download_1 = require("../make-on-download");
19
20
  const parse_command_line_1 = require("../parse-command-line");
20
21
  const progress_bar_1 = require("../progress-bar");
21
22
  const progress_types_1 = require("../progress-types");
@@ -23,36 +24,40 @@ const setup_cache_1 = require("../setup-cache");
23
24
  const should_use_non_overlaying_logger_1 = require("../should-use-non-overlaying-logger");
24
25
  const truthy_1 = require("../truthy");
25
26
  const user_passed_output_location_1 = require("../user-passed-output-location");
26
- const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason, remainingArgs, browser, browserExecutable, chromiumOptions, envVariables, height, serializedInputPropsWithCustomSchema, overwrite, port, publicDir, puppeteerTimeout, jpegQuality, scale, stillFrame, width, compositionIdFromUi, imageFormatFromUi, logLevel, onProgress, indentOutput, addCleanupCallback, cancelSignal, outputLocationFromUi, }) => {
27
+ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason, remainingArgs, browser, browserExecutable, chromiumOptions, envVariables, height, serializedInputPropsWithCustomSchema, overwrite, port, publicDir, puppeteerTimeout, jpegQuality, scale, stillFrame, width, compositionIdFromUi, imageFormatFromUi, logLevel, onProgress, indent, addCleanupCallback, cancelSignal, outputLocationFromUi, }) => {
27
28
  var _a, _b;
28
- const downloads = [];
29
29
  const aggregate = (0, progress_types_1.initialAggregateRenderProgress)();
30
30
  const updatesDontOverwrite = (0, should_use_non_overlaying_logger_1.shouldUseNonOverlayingLogger)({ logLevel });
31
- let renderProgress = null;
31
+ const renderProgress = (0, progress_bar_1.createOverwriteableCliOutput)({
32
+ quiet: (0, parse_command_line_1.quietFlagProvided)(),
33
+ cancelSignal,
34
+ updatesDontOverwrite: (0, should_use_non_overlaying_logger_1.shouldUseNonOverlayingLogger)({ logLevel }),
35
+ indent,
36
+ });
32
37
  const steps = [
33
38
  renderer_1.RenderInternals.isServeUrl(fullEntryPoint) ? null : 'bundling',
34
39
  'rendering',
35
40
  ].filter(truthy_1.truthy);
36
- const updateProgress = (newline) => {
41
+ const updateRenderProgress = ({ newline, printToConsole, }) => {
37
42
  const { output, progress, message } = (0, progress_bar_1.makeRenderingAndStitchingProgress)({
38
43
  prog: aggregate,
39
44
  steps: steps.length,
40
45
  stitchingStep: steps.indexOf('stitching'),
41
46
  });
42
- if (renderProgress) {
47
+ if (printToConsole) {
43
48
  renderProgress.update(updatesDontOverwrite ? message : output, newline);
44
49
  }
45
50
  onProgress({ message, value: progress, ...aggregate });
46
51
  };
47
52
  if (browserExecutable) {
48
- log_1.Log.verboseAdvanced({ indent: indentOutput, logLevel }, 'Browser executable: ', browserExecutable);
53
+ log_1.Log.verboseAdvanced({ indent, logLevel }, 'Browser executable: ', browserExecutable);
49
54
  }
50
55
  const browserInstance = renderer_1.RenderInternals.internalOpenBrowser({
51
56
  browser,
52
57
  browserExecutable,
53
58
  chromiumOptions,
54
59
  forceDeviceScaleFactor: scale,
55
- indent: indentOutput,
60
+ indent,
56
61
  viewport: null,
57
62
  logLevel,
58
63
  });
@@ -64,9 +69,9 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
64
69
  onProgress: ({ copying, bundling }) => {
65
70
  aggregate.bundling = bundling;
66
71
  aggregate.copyingState = copying;
67
- updateProgress(false);
72
+ updateRenderProgress({ newline: false, printToConsole: true });
68
73
  },
69
- indentOutput,
74
+ indentOutput: indent,
70
75
  logLevel,
71
76
  bundlingStep: steps.indexOf('bundling'),
72
77
  onDirectoryCreated: (dir) => {
@@ -78,7 +83,7 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
78
83
  });
79
84
  const server = await renderer_1.RenderInternals.prepareServer({
80
85
  concurrency: 1,
81
- indent: indentOutput,
86
+ indent,
82
87
  port,
83
88
  remotionRoot,
84
89
  logLevel,
@@ -87,7 +92,7 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
87
92
  addCleanupCallback(() => server.closeServer(false));
88
93
  addCleanupCallback(() => cleanupBundle());
89
94
  const puppeteerInstance = await browserInstance;
90
- addCleanupCallback(() => puppeteerInstance.close(false, logLevel, indentOutput));
95
+ addCleanupCallback(() => puppeteerInstance.close(false, logLevel, indent));
91
96
  const { compositionId, config, reason, argsAfterComposition } = await (0, get_composition_with_dimension_override_1.getCompositionWithDimensionOverride)({
92
97
  height,
93
98
  width,
@@ -96,7 +101,7 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
96
101
  browserExecutable,
97
102
  chromiumOptions,
98
103
  envVariables,
99
- indent: indentOutput,
104
+ indent,
100
105
  serializedInputPropsWithCustomSchema,
101
106
  port,
102
107
  puppeteerInstance,
@@ -125,14 +130,8 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
125
130
  (0, node_fs_1.mkdirSync)(node_path_1.default.join(absoluteOutputLocation, '..'), {
126
131
  recursive: true,
127
132
  });
128
- log_1.Log.verboseAdvanced({ indent: indentOutput, logLevel }, chalk_1.chalk.gray(`Entry point = ${fullEntryPoint} (${entryPointReason})`));
129
- log_1.Log.infoAdvanced({ indent: indentOutput, logLevel }, chalk_1.chalk.gray(`Composition = ${compositionId} (${reason}), Format = ${imageFormat} (${source}), Output = ${relativeOutputLocation}`));
130
- renderProgress = (0, progress_bar_1.createOverwriteableCliOutput)({
131
- quiet: (0, parse_command_line_1.quietFlagProvided)(),
132
- cancelSignal,
133
- updatesDontOverwrite: (0, should_use_non_overlaying_logger_1.shouldUseNonOverlayingLogger)({ logLevel }),
134
- indent: indentOutput,
135
- });
133
+ log_1.Log.verboseAdvanced({ indent, logLevel }, chalk_1.chalk.gray(`Entry point = ${fullEntryPoint} (${entryPointReason})`));
134
+ log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.gray(`Composition = ${compositionId} (${reason}), Format = ${imageFormat} (${source}), Output = ${relativeOutputLocation}`));
136
135
  const renderStart = Date.now();
137
136
  aggregate.rendering = {
138
137
  frames: 0,
@@ -141,23 +140,14 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
141
140
  steps,
142
141
  totalFrames: 1,
143
142
  };
144
- updateProgress(false);
145
- const onDownload = (src) => {
146
- const id = Math.random();
147
- const download = {
148
- id,
149
- name: src,
150
- progress: 0,
151
- downloaded: 0,
152
- totalBytes: null,
153
- };
154
- downloads.push(download);
155
- updateProgress(false);
156
- return ({ percent }) => {
157
- download.progress = percent;
158
- updateProgress(false);
159
- };
160
- };
143
+ updateRenderProgress({ newline: false, printToConsole: true });
144
+ const onDownload = (0, make_on_download_1.makeOnDownload)({
145
+ downloads: aggregate.downloads,
146
+ indent,
147
+ logLevel,
148
+ updateRenderProgress,
149
+ updatesDontOverwrite,
150
+ });
161
151
  await renderer_1.RenderInternals.internalRenderStill({
162
152
  composition: config,
163
153
  frame: stillFrame,
@@ -177,7 +167,7 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
177
167
  puppeteerInstance,
178
168
  server: await server,
179
169
  cancelSignal,
180
- indent: indentOutput,
170
+ indent,
181
171
  onBrowserLog: null,
182
172
  logLevel,
183
173
  serializedResolvedPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
@@ -193,7 +183,7 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
193
183
  steps,
194
184
  totalFrames: 1,
195
185
  };
196
- updateProgress(true);
197
- log_1.Log.infoAdvanced({ indent: indentOutput, logLevel }, chalk_1.chalk.blue(`${exists ? '○' : '+'} ${absoluteOutputLocation}`));
186
+ updateRenderProgress({ newline: true, printToConsole: true });
187
+ log_1.Log.infoAdvanced({ indent, logLevel }, chalk_1.chalk.blue(`${exists ? '○' : '+'} ${absoluteOutputLocation}`));
198
188
  };
199
189
  exports.renderStillFlow = renderStillFlow;
package/dist/still.js CHANGED
@@ -54,7 +54,7 @@ const still = async (remotionRoot, args) => {
54
54
  imageFormatFromUi: null,
55
55
  logLevel,
56
56
  onProgress: () => undefined,
57
- indentOutput: false,
57
+ indent: false,
58
58
  addCleanupCallback: (c) => {
59
59
  (0, cleanup_before_quit_1.registerCleanupJob)(c);
60
60
  },
package/dist/studio.js CHANGED
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.studioCommand = void 0;
7
7
  const node_crypto_1 = __importDefault(require("node:crypto"));
8
+ const node_fs_1 = require("node:fs");
8
9
  const node_path_1 = __importDefault(require("node:path"));
9
10
  const better_opn_1 = require("./better-opn");
10
11
  const chalk_1 = require("./chalk");
@@ -92,9 +93,15 @@ const studioCommand = async (remotionRoot, args) => {
92
93
  remotionRoot,
93
94
  onUpdate: () => {
94
95
  (0, live_events_1.waitForLiveEventsListener)().then((listener) => {
96
+ const files = (0, public_folder_1.getFiles)();
95
97
  listener.sendEventToClient({
96
98
  type: 'new-public-folder',
97
- files: (0, public_folder_1.getFiles)(),
99
+ files,
100
+ folderExists: files.length > 0
101
+ ? publicDir
102
+ : (0, node_fs_1.existsSync)(publicDir)
103
+ ? publicDir
104
+ : null,
98
105
  });
99
106
  });
100
107
  },
package/dist/upgrade.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const upgrade: (remotionRoot: string, packageManager: string | undefined) => Promise<void>;
1
+ export declare const upgrade: (remotionRoot: string, packageManager: string | undefined, version: string | undefined) => Promise<void>;
package/dist/upgrade.js CHANGED
@@ -20,7 +20,7 @@ const getUpgradeCommand = ({ manager, packages, version, }) => {
20
20
  };
21
21
  return commands[manager];
22
22
  };
23
- const upgrade = async (remotionRoot, packageManager) => {
23
+ const upgrade = async (remotionRoot, packageManager, version) => {
24
24
  var _a, _b, _c, _d;
25
25
  const packageJsonFilePath = node_path_1.default.join(remotionRoot, 'package.json');
26
26
  const packageJson = require(packageJsonFilePath);
@@ -28,8 +28,15 @@ const upgrade = async (remotionRoot, packageManager) => {
28
28
  const devDependencies = Object.keys((_a = packageJson.devDependencies) !== null && _a !== void 0 ? _a : {});
29
29
  const optionalDependencies = Object.keys((_b = packageJson.optionalDependencies) !== null && _b !== void 0 ? _b : {});
30
30
  const peerDependencies = Object.keys((_c = packageJson.peerDependencies) !== null && _c !== void 0 ? _c : {});
31
- const latestRemotionVersion = await (0, get_latest_remotion_version_1.getLatestRemotionVersion)();
32
- log_1.Log.info('Newest Remotion version is', latestRemotionVersion);
31
+ let targetVersion;
32
+ if (version) {
33
+ targetVersion = version;
34
+ log_1.Log.info('Upgrading to specified version: ' + version);
35
+ }
36
+ else {
37
+ targetVersion = await (0, get_latest_remotion_version_1.getLatestRemotionVersion)();
38
+ log_1.Log.info('Newest Remotion version is', targetVersion);
39
+ }
33
40
  const manager = (0, get_package_manager_1.getPackageManager)(remotionRoot, packageManager);
34
41
  if (manager === 'unknown') {
35
42
  throw new Error(`No lockfile was found in your project (one of ${get_package_manager_1.lockFilePaths
@@ -43,7 +50,7 @@ const upgrade = async (remotionRoot, packageManager) => {
43
50
  const prom = renderer_1.RenderInternals.execa(manager.manager, getUpgradeCommand({
44
51
  manager: manager.manager,
45
52
  packages: toUpgrade,
46
- version: latestRemotionVersion,
53
+ version: targetVersion,
47
54
  }), {
48
55
  stdio: 'inherit',
49
56
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/cli",
3
- "version": "4.1.0-alpha10",
3
+ "version": "4.1.0-alpha12",
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/media-utils": "4.1.0-alpha10",
39
- "@remotion/player": "4.1.0-alpha10",
40
- "@remotion/renderer": "4.1.0-alpha10",
41
- "@remotion/bundler": "4.1.0-alpha10",
42
- "remotion": "4.1.0-alpha10"
38
+ "@remotion/bundler": "4.1.0-alpha12",
39
+ "@remotion/media-utils": "4.1.0-alpha12",
40
+ "remotion": "4.1.0-alpha12",
41
+ "@remotion/renderer": "4.1.0-alpha12",
42
+ "@remotion/player": "4.1.0-alpha12"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "react": ">=16.8.0",
@@ -65,8 +65,8 @@
65
65
  "typescript": "4.9.5",
66
66
  "vitest": "0.31.1",
67
67
  "zod": "^3.21.4",
68
- "@remotion/tailwind": "4.1.0-alpha10",
69
- "@remotion/zod-types": "4.1.0-alpha10"
68
+ "@remotion/zod-types": "4.1.0-alpha12",
69
+ "@remotion/tailwind": "4.1.0-alpha12"
70
70
  },
71
71
  "keywords": [
72
72
  "remotion",
package/styles/styles.css CHANGED
@@ -54,17 +54,18 @@ input[type='color'].__remotion_color_picker::-webkit-color-swatch {
54
54
  position: absolute;
55
55
  height: 0;
56
56
  outline: none;
57
- top: 51%;
58
- width: 100%;
57
+ top: 15.5px;
58
+ width: 221px;
59
+ margin-left: -2px;
59
60
  z-index: 2;
60
61
  }
61
62
 
62
63
  /* For Firefox browsers */
63
64
  .__remotion_thumb::-moz-range-thumb {
64
- border: none;
65
- border-radius: 0;
65
+ border: 1px solid black;
66
+ border-radius: 2px;
66
67
  cursor: pointer;
67
- height: 40px;
68
+ height: 37px;
68
69
  width: 10px;
69
70
  pointer-events: all;
70
71
  border-color: black;
@@ -72,26 +73,15 @@ input[type='color'].__remotion_color_picker::-webkit-color-swatch {
72
73
  position: relative;
73
74
  }
74
75
 
75
- .__remotion_thumb::-moz-range-thumb {
76
- border-width: 1px;
77
- border-style: solid;
78
- }
79
-
80
76
  /* For Chrome browsers */
81
77
  .__remotion_thumb::-webkit-slider-thumb {
82
78
  border: 1px solid black;
83
79
  border-radius: 2px;
84
80
  cursor: pointer;
85
- height: 40px;
81
+ height: 39px;
86
82
  width: 10px;
87
83
  pointer-events: all;
88
84
  border-color: black;
89
85
  background-color: white;
90
86
  position: relative;
91
87
  }
92
-
93
- .__remotion_thumb::-webkit-slider-thumb {
94
- border-width: 1px;
95
- border-style: solid;
96
- border-color: black;
97
- }
@@ -1,14 +0,0 @@
1
- export type SerializedJSONWithCustomFields = {
2
- serializedString: string;
3
- customDateUsed: boolean;
4
- customFileUsed: boolean;
5
- mapUsed: boolean;
6
- setUsed: boolean;
7
- };
8
- export declare const FILE_TOKEN = "remotion-file:";
9
- export declare const serializeJSONWithDate: ({ data, indent, staticBase, }: {
10
- data: unknown;
11
- indent: number | undefined;
12
- staticBase: string;
13
- }) => SerializedJSONWithCustomFields;
14
- export declare const deserializeJSONWithCustomFields: (data: string) => any;
@@ -1,42 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deserializeJSONWithCustomFields = exports.serializeJSONWithDate = exports.FILE_TOKEN = void 0;
4
- const DATE_TOKEN = 'remotion-date:';
5
- exports.FILE_TOKEN = 'remotion-file:';
6
- const serializeJSONWithDate = ({ data, indent, staticBase, }) => {
7
- let customDateUsed = false;
8
- let customFileUsed = false;
9
- let mapUsed = false;
10
- let setUsed = false;
11
- const serializedString = JSON.stringify(data, function (key, value) {
12
- const item = this[key];
13
- if (item instanceof Date) {
14
- customDateUsed = true;
15
- return `${DATE_TOKEN}${item.toISOString()}`;
16
- }
17
- if (item instanceof Map) {
18
- mapUsed = true;
19
- return value;
20
- }
21
- if (item instanceof Set) {
22
- setUsed = true;
23
- return value;
24
- }
25
- if (typeof item === 'string' && item.startsWith(staticBase)) {
26
- customFileUsed = true;
27
- return `${exports.FILE_TOKEN}${item.replace(staticBase + '/', '')}`;
28
- }
29
- return value;
30
- }, indent);
31
- return { serializedString, customDateUsed, customFileUsed, mapUsed, setUsed };
32
- };
33
- exports.serializeJSONWithDate = serializeJSONWithDate;
34
- const deserializeJSONWithCustomFields = (data) => {
35
- return JSON.parse(data, (_, value) => {
36
- if (typeof value === 'string' && value.startsWith(DATE_TOKEN)) {
37
- return new Date(value.replace(DATE_TOKEN, ''));
38
- }
39
- return value;
40
- });
41
- };
42
- exports.deserializeJSONWithCustomFields = deserializeJSONWithCustomFields;
@@ -1,19 +0,0 @@
1
- import type { Page, SymbolicatedStackFrame } from '@remotion/renderer';
2
- export declare class ErrorWithStackFrame extends Error {
3
- symbolicatedStackFrames: SymbolicatedStackFrame[] | null;
4
- frame: number | null;
5
- name: string;
6
- delayRenderCall: SymbolicatedStackFrame[] | null;
7
- constructor({ message, symbolicatedStackFrames, frame, name, delayRenderCall, }: {
8
- message: string;
9
- symbolicatedStackFrames: SymbolicatedStackFrame[] | null;
10
- frame: number | null;
11
- name: string;
12
- delayRenderCall: SymbolicatedStackFrame[] | null;
13
- });
14
- }
15
- export declare const handleJavascriptException: ({ page, onError, frame, }: {
16
- page: Page;
17
- frame: number | null;
18
- onError: (err: Error) => void;
19
- }) => () => void;