@remotion/cli 4.0.500 → 4.0.502

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/benchmark.js CHANGED
@@ -104,11 +104,14 @@ const benchmarkCommand = async (remotionRoot, args, logLevel) => {
104
104
  process.exit(1);
105
105
  }
106
106
  const fullEntryPoint = (0, convert_entry_point_to_serve_url_1.convertEntryPointToServeUrl)(file);
107
- const { inputProps, envVariables, frameRange: defaultFrameRange, ffmpegOverride, } = (0, get_cli_options_1.getCliOptions)({
107
+ const { inputProps, envVariables, frameRange: defaultFrameRange, selectedFrames, ffmpegOverride, } = (0, get_cli_options_1.getCliOptions)({
108
108
  isStill: false,
109
109
  logLevel,
110
110
  indent: false,
111
111
  });
112
+ if (selectedFrames !== null) {
113
+ throw new Error('Comma-separated frame selections are only supported by the `render` command.');
114
+ }
112
115
  const unparsedConcurrency = concurrencyOption.getValue({
113
116
  commandLine: parsed_cli_1.parsedCli,
114
117
  }).value;
@@ -66,10 +66,14 @@ declare global {
66
66
  */
67
67
  readonly setAllowHtmlInCanvasEnabled: (enabled: boolean) => void;
68
68
  /**
69
- * Enable experimental Rspack bundler instead of Webpack.
69
+ * Enable the Rspack bundler instead of Webpack.
70
70
  * @param enabled Boolean whether to enable the Rspack bundler
71
71
  * @default false
72
72
  */
73
+ readonly setRspack: (enabled: boolean) => void;
74
+ /**
75
+ * @deprecated Use `setRspack()` instead: https://www.remotion.dev/docs/config#setrspack
76
+ */
73
77
  readonly setExperimentalRspackEnabled: (enabled: boolean) => void;
74
78
  /**
75
79
  * Set number of shared audio tags. https://www.remotion.dev/docs/player/autoplay#using-the-numberofsharedaudiotags-prop
@@ -45,6 +45,7 @@ exports.Config = {
45
45
  setKeyboardShortcutsEnabled: keyboardShortcutsOption.setConfig,
46
46
  setInteractivityEnabled: interactivityOption.setConfig,
47
47
  setAllowHtmlInCanvasEnabled,
48
+ setRspack: rspackOption.setConfig,
48
49
  setExperimentalRspackEnabled: rspackOption.setConfig,
49
50
  setNumberOfSharedAudioTags: numberOfSharedAudioTagsOption.setConfig,
50
51
  setWebpackPollingInMilliseconds: webpackPollOption.setConfig,
@@ -1,13 +1,15 @@
1
+ import type { FfmpegOverrideFn, FrameRange } from '@remotion/renderer';
1
2
  export declare const getAndValidateAbsoluteOutputFile: (relativeOutputLocation: string, overwrite: boolean, logLevel: "error" | "info" | "trace" | "verbose" | "warn") => string;
2
3
  export declare const getCliOptions: (options: {
3
4
  isStill: boolean;
4
5
  logLevel: "error" | "info" | "trace" | "verbose" | "warn";
5
6
  indent: boolean;
6
7
  }) => {
7
- frameRange: import("@remotion/renderer").FrameRange | null;
8
+ frameRange: FrameRange | null;
9
+ selectedFrames: number[] | null;
8
10
  shouldOutputImageSequence: boolean;
9
11
  inputProps: Record<string, unknown>;
10
12
  envVariables: Record<string, string>;
11
13
  stillFrame: number;
12
- ffmpegOverride: import("@remotion/renderer").FfmpegOverrideFn;
14
+ ffmpegOverride: FfmpegOverrideFn;
13
15
  };
@@ -13,15 +13,21 @@ const get_input_props_1 = require("./get-input-props");
13
13
  const log_1 = require("./log");
14
14
  const parsed_cli_1 = require("./parsed-cli");
15
15
  const getAndValidateFrameRange = (logLevel, indent) => {
16
- const frameRange = client_1.BrowserSafeApis.options.framesOption.getValue({
16
+ const frameSelection = client_1.BrowserSafeApis.options.framesOption.getValue({
17
17
  commandLine: parsed_cli_1.parsedCli,
18
18
  }).value;
19
+ const selectedFrames = typeof frameSelection === 'object' &&
20
+ frameSelection !== null &&
21
+ !Array.isArray(frameSelection)
22
+ ? frameSelection.frames
23
+ : null;
24
+ const frameRange = selectedFrames === null ? frameSelection : null;
19
25
  if (typeof frameRange === 'number') {
20
26
  log_1.Log.warn({ logLevel, indent }, 'Selected a single frame. Assuming you want to output an image.');
21
27
  log_1.Log.warn({ logLevel, indent }, `If you want to render a video, pass a range: '--frames=${frameRange}-${frameRange}'.`);
22
28
  log_1.Log.warn({ indent, logLevel }, "To dismiss this message, add the '--sequence' flag explicitly.");
23
29
  }
24
- return frameRange;
30
+ return { frameRange, selectedFrames };
25
31
  };
26
32
  const getAndValidateAbsoluteOutputFile = (relativeOutputLocation, overwrite, logLevel) => {
27
33
  const absoluteOutputFile = node_path_1.default.resolve(process.cwd(), relativeOutputLocation);
@@ -34,15 +40,18 @@ const getAndValidateAbsoluteOutputFile = (relativeOutputLocation, overwrite, log
34
40
  exports.getAndValidateAbsoluteOutputFile = getAndValidateAbsoluteOutputFile;
35
41
  const getCliOptions = (options) => {
36
42
  var _a;
37
- const frameRange = getAndValidateFrameRange(options.logLevel, false);
43
+ const { frameRange, selectedFrames } = getAndValidateFrameRange(options.logLevel, false);
38
44
  const imageSequence = client_1.BrowserSafeApis.options.imageSequenceOption.getValue({
39
45
  commandLine: parsed_cli_1.parsedCli,
40
46
  }).value;
41
47
  const shouldOutputImageSequence = options.isStill
42
48
  ? true
43
- : imageSequence || typeof frameRange === 'number';
49
+ : imageSequence ||
50
+ typeof frameRange === 'number' ||
51
+ selectedFrames !== null;
44
52
  return {
45
53
  frameRange,
54
+ selectedFrames,
46
55
  shouldOutputImageSequence,
47
56
  inputProps: (0, get_input_props_1.getInputProps)(null, options.logLevel),
48
57
  envVariables: (0, get_env_1.getEnvironmentVariables)(null, options.logLevel, options.indent),
package/dist/index.d.ts CHANGED
@@ -82,6 +82,7 @@ export declare const CliInternals: {
82
82
  indent: boolean;
83
83
  }) => {
84
84
  frameRange: import("@remotion/renderer").FrameRange | null;
85
+ selectedFrames: number[] | null;
85
86
  shouldOutputImageSequence: boolean;
86
87
  inputProps: Record<string, unknown>;
87
88
  envVariables: Record<string, string>;
@@ -73,6 +73,7 @@ exports.listOfRemotionPackages = [
73
73
  '@remotion/serverless-client',
74
74
  '@remotion/skills',
75
75
  '@remotion/skills-evals',
76
+ '@remotion/studio-codemods',
76
77
  '@remotion/studio-server',
77
78
  '@remotion/studio-shared',
78
79
  '@remotion/studio',
@@ -97,7 +98,7 @@ exports.listOfRemotionPackages = [
97
98
  '@remotion/remotion-media',
98
99
  '@remotion/web-renderer',
99
100
  '@remotion/design',
100
- '@remotion/drag-and-drop',
101
+ '@remotion/studio-protocol',
101
102
  '@remotion/light-leaks',
102
103
  '@remotion/rough-notation',
103
104
  '@remotion/starburst',
@@ -6,6 +6,9 @@ const config_1 = require("./config");
6
6
  const parsed_cli_1 = require("./parsed-cli");
7
7
  const { licenseKeyOption } = client_1.BrowserSafeApis.options;
8
8
  const parseCommandLine = () => {
9
+ if (parsed_cli_1.parsedCli['experimental-rspack'] !== undefined) {
10
+ throw new Error('The --experimental-rspack flag has been removed. Use --rspack from now on.');
11
+ }
9
12
  if (parsed_cli_1.parsedCli.png) {
10
13
  throw new Error('The --png flag has been removed. Use --sequence --image-format=png from now on.');
11
14
  }
@@ -983,14 +983,14 @@ declare const benchmarkConcurrenciesOption: {
983
983
  description: () => import("react/jsx-runtime").JSX.Element;
984
984
  ssrName: "frameRange";
985
985
  docLink: string;
986
- type: import("@remotion/renderer").FrameRange | null;
986
+ type: import("@remotion/renderer").FrameSelection;
987
987
  getValue: ({ commandLine }: {
988
988
  commandLine: Record<string, unknown>;
989
989
  }) => {
990
990
  source: string;
991
- value: import("@remotion/renderer").FrameRange | null;
991
+ value: import("@remotion/renderer").FrameSelection;
992
992
  };
993
- setConfig: (value: import("@remotion/renderer").FrameRange | null) => void;
993
+ setConfig: (value: import("@remotion/renderer").FrameSelection) => void;
994
994
  id: "frames";
995
995
  }, isProductionOption: {
996
996
  name: string;
@@ -1131,6 +1131,21 @@ declare const benchmarkConcurrenciesOption: {
1131
1131
  };
1132
1132
  setConfig: (value: number | null) => void;
1133
1133
  id: "preview-sample-rate";
1134
+ }, rspackOption: {
1135
+ name: string;
1136
+ cliFlag: "rspack";
1137
+ description: () => import("react/jsx-runtime").JSX.Element;
1138
+ ssrName: null;
1139
+ docLink: null;
1140
+ type: boolean;
1141
+ getValue: ({ commandLine }: {
1142
+ commandLine: Record<string, unknown>;
1143
+ }) => {
1144
+ value: boolean;
1145
+ source: string;
1146
+ };
1147
+ setConfig(value: boolean): void;
1148
+ id: "rspack";
1134
1149
  };
1135
1150
  export type CommandLineOptions = {
1136
1151
  [browserExecutableOption.cliFlag]: TypeOfOption<typeof browserExecutableOption>;
@@ -1210,6 +1225,8 @@ export type CommandLineOptions = {
1210
1225
  [forceNewStudioOption.cliFlag]: TypeOfOption<typeof forceNewStudioOption> | null;
1211
1226
  [sampleRateOption.cliFlag]: TypeOfOption<typeof sampleRateOption>;
1212
1227
  [previewSampleRateOption.cliFlag]: TypeOfOption<typeof previewSampleRateOption>;
1228
+ [rspackOption.cliFlag]: TypeOfOption<typeof rspackOption> | null;
1229
+ 'experimental-rspack'?: unknown;
1213
1230
  [isProductionOption.cliFlag]: TypeOfOption<typeof isProductionOption> | null;
1214
1231
  };
1215
1232
  export declare const BooleanFlags: string[];
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.quietFlagProvided = exports.parsedCli = exports.BooleanFlags = void 0;
7
7
  const client_1 = require("@remotion/renderer/client");
8
8
  const minimist_1 = __importDefault(require("minimist"));
9
- const { benchmarkConcurrenciesOption, beepOnFinishOption, colorSpaceOption, concurrencyOption, disallowParallelEncodingOption, offthreadVideoCacheSizeInBytesOption, encodingBufferSizeOption, encodingMaxRateOption, deleteAfterOption, folderExpiryOption, enableMultiprocessOnLinuxOption, numberOfGifLoopsOption, x264Option, enforceAudioOption, jpegQualityOption, audioBitrateOption, videoBitrateOption, audioCodecOption, publicPathOption, audioLatencyHintOption, darkModeOption, publicLicenseKeyOption, forceNewStudioOption, numberOfSharedAudioTagsOption, ipv4Option, pixelFormatOption, browserExecutableOption, everyNthFrameOption, proResProfileOption, userAgentOption, disableWebSecurityOption, ignoreCertificateErrorsOption, overrideHeightOption, overrideWidthOption, overrideFpsOption, overrideDurationOption, outDirOption, packageManagerOption, webpackPollOption, keyboardShortcutsOption, interactivityOption, imageSequencePatternOption, scaleOption, overwriteOption, crfOption, logLevelOption, videoCodecOption, stillFrameOption, imageSequenceOption, versionFlagOption, bundleCacheOption, envFileOption, glOption, gopSizeOption, runsOption, reproOption, mutedOption, headlessOption, disableGitSourceOption, delayRenderTimeoutInMillisecondsOption, framesOption, forSeamlessAacConcatenationOption, isProductionOption, noOpenOption, portOption, propsOption, configOption, browserOption, sampleRateOption, previewSampleRateOption, } = client_1.BrowserSafeApis.options;
9
+ const { benchmarkConcurrenciesOption, beepOnFinishOption, colorSpaceOption, concurrencyOption, disallowParallelEncodingOption, offthreadVideoCacheSizeInBytesOption, encodingBufferSizeOption, encodingMaxRateOption, deleteAfterOption, folderExpiryOption, enableMultiprocessOnLinuxOption, numberOfGifLoopsOption, x264Option, enforceAudioOption, jpegQualityOption, audioBitrateOption, videoBitrateOption, audioCodecOption, publicPathOption, audioLatencyHintOption, darkModeOption, publicLicenseKeyOption, forceNewStudioOption, numberOfSharedAudioTagsOption, ipv4Option, pixelFormatOption, browserExecutableOption, everyNthFrameOption, proResProfileOption, userAgentOption, disableWebSecurityOption, ignoreCertificateErrorsOption, overrideHeightOption, overrideWidthOption, overrideFpsOption, overrideDurationOption, outDirOption, packageManagerOption, webpackPollOption, keyboardShortcutsOption, interactivityOption, imageSequencePatternOption, scaleOption, overwriteOption, crfOption, logLevelOption, videoCodecOption, stillFrameOption, imageSequenceOption, versionFlagOption, bundleCacheOption, envFileOption, glOption, gopSizeOption, runsOption, reproOption, mutedOption, headlessOption, disableGitSourceOption, delayRenderTimeoutInMillisecondsOption, framesOption, forSeamlessAacConcatenationOption, isProductionOption, noOpenOption, portOption, propsOption, configOption, browserOption, sampleRateOption, previewSampleRateOption, rspackOption, } = client_1.BrowserSafeApis.options;
10
10
  exports.BooleanFlags = [
11
11
  overwriteOption.cliFlag,
12
12
  imageSequenceOption.cliFlag,
@@ -30,6 +30,7 @@ exports.BooleanFlags = [
30
30
  isProductionOption.cliFlag,
31
31
  forceNewStudioOption.cliFlag,
32
32
  bundleCacheOption.cliFlag,
33
+ rspackOption.cliFlag,
33
34
  ];
34
35
  exports.parsedCli = (0, minimist_1.default)(process.argv.slice(2), {
35
36
  boolean: exports.BooleanFlags,
@@ -50,6 +51,7 @@ exports.parsedCli = (0, minimist_1.default)(process.argv.slice(2), {
50
51
  [isProductionOption.cliFlag]: null,
51
52
  [forceNewStudioOption.cliFlag]: null,
52
53
  [mutedOption.cliFlag]: null,
54
+ [rspackOption.cliFlag]: null,
53
55
  },
54
56
  });
55
57
  const quietFlagProvided = () => exports.parsedCli.quiet || exports.parsedCli.q;
@@ -1,7 +1,7 @@
1
1
  import type { BundlerOverrideFn, RspackOverrideFn, WebpackOverrideFn } from '@remotion/bundler';
2
2
  import type { BrowserExecutable, CancelSignal, ChromiumOptions, Crf, FfmpegOverrideFn, FrameRange, NumberOfGifLoops } from '@remotion/renderer';
3
3
  import type { JobProgressCallback } from '@remotion/studio-server';
4
- export declare const renderVideoFlow: ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, envVariables, puppeteerTimeout, port, height, width, fps, durationInFrames, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, outputLocationFromUI, jpegQuality, onProgress, addCleanupCallback, cancelSignal, crf, gopSize, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, videoBitrate, encodingMaxRate, encodingBufferSize, numberOfGifLoops, audioCodec, serializedInputPropsWithCustomSchema, disallowParallelEncoding, offthreadVideoCacheSizeInBytes, offthreadVideoThreads, colorSpace, repro, binariesDirectory, forSeamlessAacConcatenation, separateAudioTo, publicPath, metadata, hardwareAcceleration, chromeMode, audioLatencyHint, imageSequencePattern, mediaCacheSizeInBytes, rspack, askAIEnabled, keyboardShortcutsEnabled, shouldCache, sampleRate, bundlerOverride, rspackOverride, webpackOverride, }: {
4
+ export declare const renderVideoFlow: ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, envVariables, puppeteerTimeout, port, height, width, fps, durationInFrames, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, selectedFrames, everyNthFrame, outputLocationFromUI, jpegQuality, onProgress, addCleanupCallback, cancelSignal, crf, gopSize, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, videoBitrate, encodingMaxRate, encodingBufferSize, numberOfGifLoops, audioCodec, serializedInputPropsWithCustomSchema, disallowParallelEncoding, offthreadVideoCacheSizeInBytes, offthreadVideoThreads, colorSpace, repro, binariesDirectory, forSeamlessAacConcatenation, separateAudioTo, publicPath, metadata, hardwareAcceleration, chromeMode, audioLatencyHint, imageSequencePattern, mediaCacheSizeInBytes, rspack, askAIEnabled, keyboardShortcutsEnabled, shouldCache, sampleRate, bundlerOverride, rspackOverride, webpackOverride, }: {
5
5
  remotionRoot: string;
6
6
  fullEntryPoint: string;
7
7
  entryPointReason: string;
@@ -28,6 +28,7 @@ export declare const renderVideoFlow: ({ remotionRoot, fullEntryPoint, indent, l
28
28
  quiet: boolean;
29
29
  concurrency: string | number | null;
30
30
  frameRange: FrameRange | null;
31
+ selectedFrames: number[] | null;
31
32
  everyNthFrame: number;
32
33
  jpegQuality: number | undefined;
33
34
  onProgress: JobProgressCallback;
@@ -61,7 +61,7 @@ const should_use_non_overlaying_logger_1 = require("../should-use-non-overlaying
61
61
  const truthy_1 = require("../truthy");
62
62
  const user_passed_output_location_1 = require("../user-passed-output-location");
63
63
  const add_log_to_aggregate_progress_1 = require("./add-log-to-aggregate-progress");
64
- const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, envVariables, puppeteerTimeout, port, height, width, fps, durationInFrames, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, outputLocationFromUI, jpegQuality, onProgress, addCleanupCallback, cancelSignal, crf, gopSize, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, videoBitrate, encodingMaxRate, encodingBufferSize, numberOfGifLoops, audioCodec, serializedInputPropsWithCustomSchema, disallowParallelEncoding, offthreadVideoCacheSizeInBytes, offthreadVideoThreads, colorSpace, repro, binariesDirectory, forSeamlessAacConcatenation, separateAudioTo, publicPath, metadata, hardwareAcceleration, chromeMode, audioLatencyHint, imageSequencePattern, mediaCacheSizeInBytes, rspack, askAIEnabled, keyboardShortcutsEnabled, shouldCache, sampleRate, bundlerOverride, rspackOverride, webpackOverride, }) => {
64
+ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, envVariables, puppeteerTimeout, port, height, width, fps, durationInFrames, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, selectedFrames, everyNthFrame, outputLocationFromUI, jpegQuality, onProgress, addCleanupCallback, cancelSignal, crf, gopSize, uiCodec, uiImageFormat, ffmpegOverride, audioBitrate, muted, enforceAudioTrack, proResProfile, x264Preset, pixelFormat, videoBitrate, encodingMaxRate, encodingBufferSize, numberOfGifLoops, audioCodec, serializedInputPropsWithCustomSchema, disallowParallelEncoding, offthreadVideoCacheSizeInBytes, offthreadVideoThreads, colorSpace, repro, binariesDirectory, forSeamlessAacConcatenation, separateAudioTo, publicPath, metadata, hardwareAcceleration, chromeMode, audioLatencyHint, imageSequencePattern, mediaCacheSizeInBytes, rspack, askAIEnabled, keyboardShortcutsEnabled, shouldCache, sampleRate, bundlerOverride, rspackOverride, webpackOverride, }) => {
65
65
  var _a;
66
66
  renderer_1.RenderInternals.validateConcurrency({
67
67
  value: concurrency,
@@ -326,8 +326,12 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
326
326
  const audioExists = absoluteSeparateAudioTo
327
327
  ? (0, node_fs_1.existsSync)(absoluteSeparateAudioTo)
328
328
  : false;
329
- const realFrameRange = renderer_1.RenderInternals.getRealFrameRange(config.durationInFrames, frameRange);
330
- const totalFrames = renderer_1.RenderInternals.getFramesToRender(realFrameRange, everyNthFrame);
329
+ const totalFrames = selectedFrames
330
+ ? renderer_1.RenderInternals.validateSelectedFrames({
331
+ frames: selectedFrames,
332
+ durationInFrames: config.durationInFrames,
333
+ })
334
+ : renderer_1.RenderInternals.getFramesToRender(renderer_1.RenderInternals.getRealFrameRanges(config.durationInFrames, frameRange), everyNthFrame);
331
335
  renderingProgress = {
332
336
  frames: 0,
333
337
  totalFrames: totalFrames.length,
@@ -392,6 +396,8 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
392
396
  everyNthFrame,
393
397
  envVariables,
394
398
  frameRange,
399
+ frames: selectedFrames,
400
+ outputFramesInSequence: false,
395
401
  concurrency: resolvedConcurrency,
396
402
  puppeteerInstance,
397
403
  jpegQuality: jpegQuality !== null && jpegQuality !== void 0 ? jpegQuality : renderer_1.RenderInternals.DEFAULT_JPEG_QUALITY,
@@ -59,6 +59,7 @@ const processVideoJob = async ({ job, remotionRoot, entryPoint, onProgress, addC
59
59
  concurrency: job.concurrency,
60
60
  everyNthFrame: job.type === 'video' ? job.everyNthFrame : 1,
61
61
  frameRange: [job.startFrame, job.endFrame],
62
+ selectedFrames: null,
62
63
  quiet: false,
63
64
  shouldOutputImageSequence: job.type === 'sequence',
64
65
  addCleanupCallback,
package/dist/render.js CHANGED
@@ -25,7 +25,7 @@ const render = async (remotionRoot, args, logLevel) => {
25
25
  log_1.Log.error({ indent: false, logLevel }, '--frame flag was passed to the `render` command. This flag only works with the `still` command. Did you mean `--frames`? See reference: https://www.remotion.dev/docs/cli/');
26
26
  process.exit(1);
27
27
  }
28
- const { frameRange, shouldOutputImageSequence, inputProps, envVariables, ffmpegOverride, } = (0, get_cli_options_1.getCliOptions)({
28
+ const { frameRange, selectedFrames, shouldOutputImageSequence, inputProps, envVariables, ffmpegOverride, } = (0, get_cli_options_1.getCliOptions)({
29
29
  isStill: false,
30
30
  logLevel,
31
31
  indent: false,
@@ -49,6 +49,9 @@ const render = async (remotionRoot, args, logLevel) => {
49
49
  const everyNthFrame = everyNthFrameOption.getValue({
50
50
  commandLine: parsed_cli_1.parsedCli,
51
51
  }).value;
52
+ if (selectedFrames !== null && everyNthFrame !== 1) {
53
+ throw new Error('Comma-separated `--frames` cannot be combined with `--every-nth-frame`.');
54
+ }
52
55
  const userAgent = userAgentOption.getValue({ commandLine: parsed_cli_1.parsedCli }).value;
53
56
  const disableWebSecurity = disableWebSecurityOption.getValue({
54
57
  commandLine: parsed_cli_1.parsedCli,
@@ -188,6 +191,7 @@ const render = async (remotionRoot, args, logLevel) => {
188
191
  concurrency,
189
192
  everyNthFrame,
190
193
  frameRange,
194
+ selectedFrames,
191
195
  jpegQuality,
192
196
  onProgress: () => undefined,
193
197
  addCleanupCallback: (label, c) => {
package/dist/skills.js CHANGED
@@ -28,7 +28,7 @@ const skillsCommand = (args, logLevel) => {
28
28
  const fullArgs = [
29
29
  '-y',
30
30
  '--loglevel=error',
31
- 'skills@1.2.0',
31
+ 'skills@1.5.20',
32
32
  subcommand,
33
33
  'remotion-dev/skills',
34
34
  ...restArgs,
package/dist/studio.js CHANGED
@@ -101,9 +101,7 @@ const studioCommand = async (remotionRoot, args, logLevel) => {
101
101
  const bundlerOverride = config_1.ConfigInternals.getBundlerOverrideFn();
102
102
  const rspackOverride = config_1.ConfigInternals.getRspackOverrideFn();
103
103
  const webpackOverride = config_1.ConfigInternals.getWebpackOverrideFn();
104
- if (useRspack) {
105
- log_1.Log.warn({ indent: false, logLevel }, 'Enabling experimental Rspack bundler.');
106
- }
104
+ log_1.Log.verbose({ indent: false, logLevel }, `Using ${useRspack ? 'Rspack' : 'Webpack'} bundler.`);
107
105
  const getStudioRuntimeConfig = () => ({
108
106
  maxTimelineTracks: config_1.ConfigInternals.getMaxTimelineTracks(),
109
107
  askAIEnabled: askAIOption.getValue({
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/cli"
4
4
  },
5
5
  "name": "@remotion/cli",
6
- "version": "4.0.500",
6
+ "version": "4.0.502",
7
7
  "description": "Control Remotion features using the `npx remotion` command",
8
8
  "main": "dist/index.js",
9
9
  "bin": {
@@ -36,17 +36,17 @@
36
36
  "author": "Jonny Burger <jonny@remotion.dev>",
37
37
  "license": "SEE LICENSE IN LICENSE.md",
38
38
  "dependencies": {
39
- "@remotion/bundler": "4.0.500",
40
- "@remotion/media-utils": "4.0.500",
41
- "@remotion/player": "4.0.500",
42
- "@remotion/renderer": "4.0.500",
43
- "@remotion/studio-shared": "4.0.500",
44
- "@remotion/studio-server": "4.0.500",
45
- "@remotion/studio": "4.0.500",
39
+ "@remotion/bundler": "4.0.502",
40
+ "@remotion/media-utils": "4.0.502",
41
+ "@remotion/player": "4.0.502",
42
+ "@remotion/renderer": "4.0.502",
43
+ "@remotion/studio-shared": "4.0.502",
44
+ "@remotion/studio-server": "4.0.502",
45
+ "@remotion/studio": "4.0.502",
46
46
  "dotenv": "17.3.1",
47
47
  "minimist": "1.2.6",
48
48
  "prompts": "2.4.2",
49
- "remotion": "4.0.500"
49
+ "remotion": "4.0.502"
50
50
  },
51
51
  "peerDependencies": {
52
52
  "react": ">=16.8.0",
@@ -57,14 +57,14 @@
57
57
  "@types/prompts": "2.4.9",
58
58
  "@types/prettier": "2.7.2",
59
59
  "@types/node": "20.12.14",
60
- "@remotion/zod-types": "4.0.500",
61
- "@remotion/tailwind-v4": "4.0.500",
62
- "@remotion/enable-scss": "4.0.500",
63
- "@remotion/skia": "4.0.500",
60
+ "@remotion/zod-types": "4.0.502",
61
+ "@remotion/tailwind-v4": "4.0.502",
62
+ "@remotion/enable-scss": "4.0.502",
63
+ "@remotion/skia": "4.0.502",
64
64
  "react": "19.2.3",
65
65
  "react-dom": "19.2.3",
66
66
  "zod": "4.4.3",
67
- "@remotion/eslint-config-internal": "4.0.500",
67
+ "@remotion/eslint-config-internal": "4.0.502",
68
68
  "eslint": "9.19.0",
69
69
  "@typescript/native-preview": "7.0.0-dev.20260217.1"
70
70
  },