@remotion/cli 4.0.302 → 4.0.304

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
@@ -168,6 +168,7 @@ const benchmarkCommand = async (remotionRoot, args, logLevel) => {
168
168
  bufferStateDelayInMilliseconds: null,
169
169
  maxTimelineTracks: null,
170
170
  publicPath,
171
+ audioLatencyHint: null,
171
172
  });
172
173
  (0, cleanup_before_quit_1.registerCleanupJob)(`Deleting bundle`, () => cleanupBundle());
173
174
  const puppeteerInstance = await browserInstance;
package/dist/bundle.js CHANGED
@@ -17,7 +17,7 @@ const parsed_cli_1 = require("./parsed-cli");
17
17
  const setup_cache_1 = require("./setup-cache");
18
18
  const should_use_non_overlaying_logger_1 = require("./should-use-non-overlaying-logger");
19
19
  const yes_or_no_1 = require("./yes-or-no");
20
- const { publicPathOption, publicDirOption, disableGitSourceOption } = client_1.BrowserSafeApis.options;
20
+ const { publicPathOption, publicDirOption, disableGitSourceOption, audioLatencyHintOption, } = client_1.BrowserSafeApis.options;
21
21
  const bundleCommand = async (remotionRoot, args, logLevel) => {
22
22
  const { file, reason } = (0, entry_point_1.findEntryPoint)({
23
23
  args,
@@ -45,6 +45,9 @@ const bundleCommand = async (remotionRoot, args, logLevel) => {
45
45
  const disableGitSource = disableGitSourceOption.getValue({
46
46
  commandLine: parsed_cli_1.parsedCli,
47
47
  }).value;
48
+ const audioLatencyHint = audioLatencyHintOption.getValue({
49
+ commandLine: parsed_cli_1.parsedCli,
50
+ }).value;
48
51
  const outputPath = parsed_cli_1.parsedCli['out-dir']
49
52
  ? path_1.default.resolve(process.cwd(), parsed_cli_1.parsedCli['out-dir'])
50
53
  : path_1.default.join(remotionRoot, 'build');
@@ -89,6 +92,7 @@ const bundleCommand = async (remotionRoot, args, logLevel) => {
89
92
  bufferStateDelayInMilliseconds: null,
90
93
  maxTimelineTracks: null,
91
94
  publicPath,
95
+ audioLatencyHint,
92
96
  });
93
97
  log_1.Log.info({ indent: false, logLevel }, chalk_1.chalk.blue(`${existed ? '○' : '+'} ${output}`));
94
98
  if (!gitignoreFolder) {
@@ -13,7 +13,7 @@ const log_1 = require("./log");
13
13
  const parsed_cli_1 = require("./parsed-cli");
14
14
  const print_compositions_1 = require("./print-compositions");
15
15
  const setup_cache_1 = require("./setup-cache");
16
- const { enableMultiprocessOnLinuxOption, offthreadVideoCacheSizeInBytesOption, offthreadVideoThreadsOption, glOption, headlessOption, delayRenderTimeoutInMillisecondsOption, binariesDirectoryOption, publicPathOption, publicDirOption, chromeModeOption, } = client_1.BrowserSafeApis.options;
16
+ const { enableMultiprocessOnLinuxOption, offthreadVideoCacheSizeInBytesOption, offthreadVideoThreadsOption, glOption, headlessOption, delayRenderTimeoutInMillisecondsOption, binariesDirectoryOption, publicPathOption, publicDirOption, chromeModeOption, audioLatencyHintOption, } = client_1.BrowserSafeApis.options;
17
17
  const listCompositionsCommand = async (remotionRoot, args, logLevel) => {
18
18
  const { file, reason } = (0, entry_point_1.findEntryPoint)({
19
19
  args,
@@ -60,6 +60,9 @@ const listCompositionsCommand = async (remotionRoot, args, logLevel) => {
60
60
  const chromeMode = chromeModeOption.getValue({
61
61
  commandLine: parsed_cli_1.parsedCli,
62
62
  }).value;
63
+ const audioLatencyHint = audioLatencyHintOption.getValue({
64
+ commandLine: parsed_cli_1.parsedCli,
65
+ }).value;
63
66
  const { urlOrBundle: bundled, cleanup: cleanupBundle } = await (0, setup_cache_1.bundleOnCliOrTakeServeUrl)({
64
67
  remotionRoot,
65
68
  fullPath: file,
@@ -78,6 +81,7 @@ const listCompositionsCommand = async (remotionRoot, args, logLevel) => {
78
81
  bufferStateDelayInMilliseconds: null,
79
82
  maxTimelineTracks: null,
80
83
  publicPath,
84
+ audioLatencyHint,
81
85
  });
82
86
  (0, cleanup_before_quit_1.registerCleanupJob)(`Cleanup bundle`, () => cleanupBundle());
83
87
  const compositions = await renderer_1.RenderInternals.internalGetCompositions({
@@ -254,6 +254,12 @@ declare global {
254
254
  * Mutually exclusive with setCrf().
255
255
  */
256
256
  readonly setVideoBitrate: (bitrate: string | null) => void;
257
+ /**
258
+ * Set the audio latency hint that the Studio will
259
+ * use when playing back audio
260
+ * Default: 'interactive'
261
+ */
262
+ readonly setAudioLatencyHint: (audioLatencyHint: AudioContextLatencyCategory | null) => void;
257
263
  /**
258
264
  * Set a maximum bitrate to be passed to FFmpeg.
259
265
  */
@@ -42,7 +42,7 @@ const user_agent_1 = require("./user-agent");
42
42
  const webpack_caching_2 = require("./webpack-caching");
43
43
  const webpack_poll_1 = require("./webpack-poll");
44
44
  const width_1 = require("./width");
45
- const { offthreadVideoCacheSizeInBytesOption, x264Option, audioBitrateOption, videoBitrateOption, scaleOption, crfOption, jpegQualityOption, enforceAudioOption, overwriteOption, chromeModeOption, mutedOption, videoCodecOption, colorSpaceOption, deleteAfterOption, folderExpiryOption, enableMultiprocessOnLinuxOption, glOption, headlessOption, numberOfGifLoopsOption, beepOnFinishOption, encodingMaxRateOption, encodingBufferSizeOption, reproOption, enableLambdaInsights, logLevelOption, delayRenderTimeoutInMillisecondsOption, publicDirOption, binariesDirectoryOption, preferLosslessOption, forSeamlessAacConcatenationOption, audioCodecOption, publicPathOption, hardwareAccelerationOption, } = client_1.BrowserSafeApis.options;
45
+ const { offthreadVideoCacheSizeInBytesOption, x264Option, audioBitrateOption, videoBitrateOption, scaleOption, crfOption, jpegQualityOption, enforceAudioOption, overwriteOption, chromeModeOption, mutedOption, videoCodecOption, colorSpaceOption, deleteAfterOption, folderExpiryOption, enableMultiprocessOnLinuxOption, glOption, headlessOption, numberOfGifLoopsOption, beepOnFinishOption, encodingMaxRateOption, encodingBufferSizeOption, reproOption, enableLambdaInsights, logLevelOption, delayRenderTimeoutInMillisecondsOption, publicDirOption, binariesDirectoryOption, preferLosslessOption, forSeamlessAacConcatenationOption, audioCodecOption, publicPathOption, hardwareAccelerationOption, audioLatencyHintOption, } = client_1.BrowserSafeApis.options;
46
46
  exports.Config = {
47
47
  get Bundling() {
48
48
  throw new Error('The config format has changed. Change `Config.Bundling.*()` calls to `Config.*()` in your config file.');
@@ -116,6 +116,7 @@ exports.Config = {
116
116
  setX264Preset: x264Option.setConfig,
117
117
  setAudioBitrate: audioBitrateOption.setConfig,
118
118
  setVideoBitrate: videoBitrateOption.setConfig,
119
+ setAudioLatencyHint: audioLatencyHintOption.setConfig,
119
120
  setForSeamlessAacConcatenation: forSeamlessAacConcatenationOption.setConfig,
120
121
  overrideHeight: height_1.overrideHeight,
121
122
  overrideWidth: width_1.overrideWidth,
@@ -254,6 +254,23 @@ declare const beepOnFinishOption: {
254
254
  };
255
255
  setConfig: (value: string | null) => void;
256
256
  type: string | null;
257
+ }, audioLatencyHintOption: {
258
+ name: string;
259
+ cliFlag: "audio-latency-hint";
260
+ description: () => import("react/jsx-runtime").JSX.Element;
261
+ ssrName: "audioLatencyHint";
262
+ docLink: string;
263
+ type: AudioContextLatencyCategory;
264
+ getValue: ({ commandLine }: {
265
+ commandLine: Record<string, unknown>;
266
+ }) => {
267
+ value: AudioContextLatencyCategory;
268
+ source: string;
269
+ } | {
270
+ value: null;
271
+ source: string;
272
+ };
273
+ setConfig: (profile: AudioContextLatencyCategory | null) => void;
257
274
  };
258
275
  export type CommandLineOptions = {
259
276
  ['browser-executable']: BrowserExecutable;
@@ -316,6 +333,7 @@ export type CommandLineOptions = {
316
333
  ['browser-args']: string;
317
334
  ['user-agent']: string;
318
335
  ['out-dir']: string;
336
+ [audioLatencyHintOption.cliFlag]: AudioContextLatencyCategory;
319
337
  ipv4: boolean;
320
338
  [deleteAfterOption.cliFlag]: TypeOfOption<typeof deleteAfterOption>;
321
339
  [folderExpiryOption.cliFlag]: TypeOfOption<typeof folderExpiryOption>;
@@ -5,7 +5,7 @@ const client_1 = require("@remotion/renderer/client");
5
5
  const config_1 = require("./config");
6
6
  const log_1 = require("./log");
7
7
  const parsed_cli_1 = require("./parsed-cli");
8
- const { beepOnFinishOption, colorSpaceOption, offthreadVideoCacheSizeInBytesOption, encodingBufferSizeOption, encodingMaxRateOption, deleteAfterOption, folderExpiryOption, enableMultiprocessOnLinuxOption, numberOfGifLoopsOption, x264Option, enforceAudioOption, jpegQualityOption, audioBitrateOption, videoBitrateOption, audioCodecOption, publicPathOption, } = client_1.BrowserSafeApis.options;
8
+ const { beepOnFinishOption, colorSpaceOption, offthreadVideoCacheSizeInBytesOption, encodingBufferSizeOption, encodingMaxRateOption, deleteAfterOption, folderExpiryOption, enableMultiprocessOnLinuxOption, numberOfGifLoopsOption, x264Option, enforceAudioOption, jpegQualityOption, audioBitrateOption, videoBitrateOption, audioCodecOption, publicPathOption, audioLatencyHintOption, } = client_1.BrowserSafeApis.options;
9
9
  const parseCommandLine = () => {
10
10
  if (parsed_cli_1.parsedCli['pixel-format']) {
11
11
  config_1.Config.setPixelFormat(parsed_cli_1.parsedCli['pixel-format']);
@@ -1,7 +1,7 @@
1
1
  import type { AudioCodec, Browser, BrowserExecutable, CancelSignal, ChromeMode, ChromiumOptions, Codec, ColorSpace, Crf, FfmpegOverrideFn, FrameRange, LogLevel, NumberOfGifLoops, PixelFormat, ProResProfile, VideoImageFormat, X264Preset } from '@remotion/renderer';
2
2
  import type { HardwareAccelerationOption } from '@remotion/renderer/client';
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, remainingArgs, compositionIdFromUi, entryPointReason, overwrite, quiet, concurrency, frameRange, everyNthFrame, outputLocationFromUI, jpegQuality, onProgress, addCleanupCallback, cancelSignal, crf, 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, }: {
4
+ export declare const renderVideoFlow: ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, 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, x264Preset, pixelFormat, videoBitrate, encodingMaxRate, encodingBufferSize, numberOfGifLoops, audioCodec, serializedInputPropsWithCustomSchema, disallowParallelEncoding, offthreadVideoCacheSizeInBytes, offthreadVideoThreads, colorSpace, repro, binariesDirectory, forSeamlessAacConcatenation, separateAudioTo, publicPath, metadata, hardwareAcceleration, chromeMode, audioLatencyHint, }: {
5
5
  remotionRoot: string;
6
6
  fullEntryPoint: string;
7
7
  entryPointReason: string;
@@ -58,4 +58,5 @@ export declare const renderVideoFlow: ({ remotionRoot, fullEntryPoint, indent, l
58
58
  metadata: Record<string, string> | null;
59
59
  hardwareAcceleration: HardwareAccelerationOption;
60
60
  chromeMode: ChromeMode;
61
+ audioLatencyHint: AudioContextLatencyCategory | null;
61
62
  }) => Promise<void>;
@@ -61,7 +61,7 @@ const setup_cache_1 = require("../setup-cache");
61
61
  const should_use_non_overlaying_logger_1 = require("../should-use-non-overlaying-logger");
62
62
  const truthy_1 = require("../truthy");
63
63
  const user_passed_output_location_1 = require("../user-passed-output-location");
64
- const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, 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, x264Preset, pixelFormat, videoBitrate, encodingMaxRate, encodingBufferSize, numberOfGifLoops, audioCodec, serializedInputPropsWithCustomSchema, disallowParallelEncoding, offthreadVideoCacheSizeInBytes, offthreadVideoThreads, colorSpace, repro, binariesDirectory, forSeamlessAacConcatenation, separateAudioTo, publicPath, metadata, hardwareAcceleration, chromeMode, }) => {
64
+ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel, browserExecutable, browser, chromiumOptions, scale, shouldOutputImageSequence, publicDir, 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, x264Preset, pixelFormat, videoBitrate, encodingMaxRate, encodingBufferSize, numberOfGifLoops, audioCodec, serializedInputPropsWithCustomSchema, disallowParallelEncoding, offthreadVideoCacheSizeInBytes, offthreadVideoThreads, colorSpace, repro, binariesDirectory, forSeamlessAacConcatenation, separateAudioTo, publicPath, metadata, hardwareAcceleration, chromeMode, audioLatencyHint, }) => {
65
65
  var _a;
66
66
  const isVerbose = renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose');
67
67
  (0, progress_bar_1.printFact)('verbose')({
@@ -156,6 +156,7 @@ const renderVideoFlow = async ({ remotionRoot, fullEntryPoint, indent, logLevel,
156
156
  bufferStateDelayInMilliseconds: null,
157
157
  maxTimelineTracks: null,
158
158
  publicPath,
159
+ audioLatencyHint,
159
160
  });
160
161
  addCleanupCallback(`Cleanup bundle`, () => cleanupBundle());
161
162
  const onDownload = (0, make_on_download_1.makeOnDownload)({
@@ -1,6 +1,6 @@
1
1
  import type { Browser, BrowserExecutable, CancelSignal, ChromeMode, ChromiumOptions, LogLevel, StillImageFormat } from '@remotion/renderer';
2
2
  import type { JobProgressCallback } from '@remotion/studio-server';
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, offthreadVideoCacheSizeInBytes, binariesDirectory, publicPath, chromeMode, offthreadVideoThreads, }: {
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, offthreadVideoCacheSizeInBytes, binariesDirectory, publicPath, chromeMode, offthreadVideoThreads, audioLatencyHint, }: {
4
4
  remotionRoot: string;
5
5
  fullEntryPoint: string;
6
6
  entryPointReason: string;
@@ -32,4 +32,5 @@ export declare const renderStillFlow: ({ remotionRoot, fullEntryPoint, entryPoin
32
32
  binariesDirectory: string | null;
33
33
  publicPath: string | null;
34
34
  chromeMode: ChromeMode;
35
+ audioLatencyHint: AudioContextLatencyCategory | null;
35
36
  }) => Promise<void>;
@@ -27,7 +27,7 @@ const setup_cache_1 = require("../setup-cache");
27
27
  const should_use_non_overlaying_logger_1 = require("../should-use-non-overlaying-logger");
28
28
  const truthy_1 = require("../truthy");
29
29
  const user_passed_output_location_1 = require("../user-passed-output-location");
30
- 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, offthreadVideoCacheSizeInBytes, binariesDirectory, publicPath, chromeMode, offthreadVideoThreads, }) => {
30
+ 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, offthreadVideoCacheSizeInBytes, binariesDirectory, publicPath, chromeMode, offthreadVideoThreads, audioLatencyHint, }) => {
31
31
  var _a, _b;
32
32
  const isVerbose = renderer_1.RenderInternals.isEqualOrBelowLogLevel(logLevel, 'verbose');
33
33
  log_1.Log.verbose({ indent, logLevel }, chalk_1.chalk.gray(`Entry point = ${fullEntryPoint} (${entryPointReason})`));
@@ -99,6 +99,7 @@ const renderStillFlow = async ({ remotionRoot, fullEntryPoint, entryPointReason,
99
99
  bufferStateDelayInMilliseconds: null,
100
100
  maxTimelineTracks: null,
101
101
  publicPath,
102
+ audioLatencyHint,
102
103
  });
103
104
  const server = await renderer_1.RenderInternals.prepareServer({
104
105
  offthreadVideoThreads: offthreadVideoThreads !== null && offthreadVideoThreads !== void 0 ? offthreadVideoThreads : renderer_1.RenderInternals.DEFAULT_RENDER_FRAMES_OFFTHREAD_VIDEO_THREADS,
@@ -53,6 +53,7 @@ const processStill = async ({ job, remotionRoot, entryPoint, onProgress, addClea
53
53
  binariesDirectory: job.binariesDirectory,
54
54
  publicPath: null,
55
55
  chromeMode: job.chromeMode,
56
+ audioLatencyHint: null,
56
57
  });
57
58
  };
58
59
  exports.processStill = processStill;
@@ -79,6 +79,7 @@ const processVideoJob = async ({ job, remotionRoot, entryPoint, onProgress, addC
79
79
  hardwareAcceleration: job.type === 'video' ? job.hardwareAcceleration : 'disable',
80
80
  chromeMode: job.chromeMode,
81
81
  offthreadVideoThreads: job.offthreadVideoThreads,
82
+ audioLatencyHint: null,
82
83
  });
83
84
  };
84
85
  exports.processVideoJob = processVideoJob;
package/dist/render.js CHANGED
@@ -11,7 +11,7 @@ const get_cli_options_1 = require("./get-cli-options");
11
11
  const log_1 = require("./log");
12
12
  const parsed_cli_1 = require("./parsed-cli");
13
13
  const render_1 = require("./render-flows/render");
14
- const { x264Option, audioBitrateOption, offthreadVideoCacheSizeInBytesOption, scaleOption, crfOption, jpegQualityOption, videoBitrateOption, enforceAudioOption, mutedOption, colorSpaceOption, enableMultiprocessOnLinuxOption, glOption, numberOfGifLoopsOption, encodingMaxRateOption, encodingBufferSizeOption, reproOption, delayRenderTimeoutInMillisecondsOption, headlessOption, overwriteOption, binariesDirectoryOption, forSeamlessAacConcatenationOption, separateAudioOption, audioCodecOption, publicPathOption, publicDirOption, metadataOption, hardwareAccelerationOption, chromeModeOption, offthreadVideoThreadsOption, } = client_1.BrowserSafeApis.options;
14
+ const { x264Option, audioBitrateOption, offthreadVideoCacheSizeInBytesOption, scaleOption, crfOption, jpegQualityOption, videoBitrateOption, enforceAudioOption, mutedOption, colorSpaceOption, enableMultiprocessOnLinuxOption, glOption, numberOfGifLoopsOption, encodingMaxRateOption, encodingBufferSizeOption, reproOption, delayRenderTimeoutInMillisecondsOption, headlessOption, overwriteOption, binariesDirectoryOption, forSeamlessAacConcatenationOption, separateAudioOption, audioCodecOption, publicPathOption, publicDirOption, metadataOption, hardwareAccelerationOption, chromeModeOption, offthreadVideoThreadsOption, audioLatencyHintOption, } = client_1.BrowserSafeApis.options;
15
15
  const render = async (remotionRoot, args, logLevel) => {
16
16
  const { file, remainingArgs, reason: entryPointReason, } = (0, entry_point_1.findEntryPoint)({ args, remotionRoot, logLevel, allowDirectory: true });
17
17
  if (!file) {
@@ -105,6 +105,9 @@ const render = async (remotionRoot, args, logLevel) => {
105
105
  const hardwareAcceleration = hardwareAccelerationOption.getValue({
106
106
  commandLine: parsed_cli_1.parsedCli,
107
107
  }).value;
108
+ const audioLatencyHint = audioLatencyHintOption.getValue({
109
+ commandLine: parsed_cli_1.parsedCli,
110
+ }).value;
108
111
  await (0, render_1.renderVideoFlow)({
109
112
  fullEntryPoint,
110
113
  remotionRoot,
@@ -168,6 +171,7 @@ const render = async (remotionRoot, args, logLevel) => {
168
171
  hardwareAcceleration,
169
172
  chromeMode,
170
173
  offthreadVideoThreads,
174
+ audioLatencyHint,
171
175
  });
172
176
  };
173
177
  exports.render = render;
@@ -1,7 +1,7 @@
1
1
  import type { LogLevel } from '@remotion/renderer';
2
2
  import type { BundlingState, CopyingState } from '@remotion/studio-server';
3
3
  import type { GitSource } from '@remotion/studio-shared';
4
- export declare const bundleOnCliOrTakeServeUrl: ({ fullPath, remotionRoot, publicDir, onProgress, indentOutput, logLevel, onDirectoryCreated, quietProgress, quietFlag, outDir, gitSource, bufferStateDelayInMilliseconds, maxTimelineTracks, publicPath, }: {
4
+ export declare const bundleOnCliOrTakeServeUrl: ({ fullPath, remotionRoot, publicDir, onProgress, indentOutput, logLevel, onDirectoryCreated, quietProgress, quietFlag, outDir, gitSource, bufferStateDelayInMilliseconds, maxTimelineTracks, publicPath, audioLatencyHint, }: {
5
5
  fullPath: string;
6
6
  remotionRoot: string;
7
7
  publicDir: string | null;
@@ -19,11 +19,12 @@ export declare const bundleOnCliOrTakeServeUrl: ({ fullPath, remotionRoot, publi
19
19
  bufferStateDelayInMilliseconds: number | null;
20
20
  maxTimelineTracks: number | null;
21
21
  publicPath: string | null;
22
+ audioLatencyHint: AudioContextLatencyCategory | null;
22
23
  }) => Promise<{
23
24
  urlOrBundle: string;
24
25
  cleanup: () => void;
25
26
  }>;
26
- export declare const bundleOnCli: ({ fullPath, remotionRoot, publicDir, onProgressCallback, indent, logLevel, onDirectoryCreated, quietProgress, quietFlag, outDir, gitSource, maxTimelineTracks, bufferStateDelayInMilliseconds, publicPath, }: {
27
+ export declare const bundleOnCli: ({ fullPath, remotionRoot, publicDir, onProgressCallback, indent, logLevel, onDirectoryCreated, quietProgress, quietFlag, outDir, gitSource, maxTimelineTracks, bufferStateDelayInMilliseconds, publicPath, audioLatencyHint, }: {
27
28
  fullPath: string;
28
29
  remotionRoot: string;
29
30
  publicDir: string | null;
@@ -41,4 +42,5 @@ export declare const bundleOnCli: ({ fullPath, remotionRoot, publicDir, onProgre
41
42
  maxTimelineTracks: number | null;
42
43
  bufferStateDelayInMilliseconds: number | null;
43
44
  publicPath: string | null;
45
+ audioLatencyHint: AudioContextLatencyCategory | null;
44
46
  }) => Promise<string>;
@@ -12,7 +12,7 @@ const config_1 = require("./config");
12
12
  const log_1 = require("./log");
13
13
  const progress_bar_1 = require("./progress-bar");
14
14
  const should_use_non_overlaying_logger_1 = require("./should-use-non-overlaying-logger");
15
- const bundleOnCliOrTakeServeUrl = async ({ fullPath, remotionRoot, publicDir, onProgress, indentOutput, logLevel, onDirectoryCreated, quietProgress, quietFlag, outDir, gitSource, bufferStateDelayInMilliseconds, maxTimelineTracks, publicPath, }) => {
15
+ const bundleOnCliOrTakeServeUrl = async ({ fullPath, remotionRoot, publicDir, onProgress, indentOutput, logLevel, onDirectoryCreated, quietProgress, quietFlag, outDir, gitSource, bufferStateDelayInMilliseconds, maxTimelineTracks, publicPath, audioLatencyHint, }) => {
16
16
  const isServeUrl = renderer_1.RenderInternals.isServeUrl(fullPath);
17
17
  const isBundle = (0, fs_1.existsSync)(fullPath) && (0, fs_1.existsSync)(path_1.default.join(fullPath, 'index.html'));
18
18
  if (isServeUrl || isBundle) {
@@ -46,6 +46,7 @@ const bundleOnCliOrTakeServeUrl = async ({ fullPath, remotionRoot, publicDir, on
46
46
  bufferStateDelayInMilliseconds,
47
47
  maxTimelineTracks,
48
48
  publicPath,
49
+ audioLatencyHint,
49
50
  });
50
51
  return {
51
52
  urlOrBundle: bundled,
@@ -53,7 +54,7 @@ const bundleOnCliOrTakeServeUrl = async ({ fullPath, remotionRoot, publicDir, on
53
54
  };
54
55
  };
55
56
  exports.bundleOnCliOrTakeServeUrl = bundleOnCliOrTakeServeUrl;
56
- const bundleOnCli = async ({ fullPath, remotionRoot, publicDir, onProgressCallback, indent, logLevel, onDirectoryCreated, quietProgress, quietFlag, outDir, gitSource, maxTimelineTracks, bufferStateDelayInMilliseconds, publicPath, }) => {
57
+ const bundleOnCli = async ({ fullPath, remotionRoot, publicDir, onProgressCallback, indent, logLevel, onDirectoryCreated, quietProgress, quietFlag, outDir, gitSource, maxTimelineTracks, bufferStateDelayInMilliseconds, publicPath, audioLatencyHint, }) => {
57
58
  var _a;
58
59
  const shouldCache = config_1.ConfigInternals.getWebpackCaching();
59
60
  const symlinkState = {
@@ -150,6 +151,7 @@ const bundleOnCli = async ({ fullPath, remotionRoot, publicDir, onProgressCallba
150
151
  ignoreRegisterRootWarning: false,
151
152
  maxTimelineTracks,
152
153
  bufferStateDelayInMilliseconds,
154
+ audioLatencyHint,
153
155
  });
154
156
  bundlingState = {
155
157
  progress: 1,
package/dist/still.js CHANGED
@@ -11,7 +11,7 @@ const get_cli_options_1 = require("./get-cli-options");
11
11
  const log_1 = require("./log");
12
12
  const parsed_cli_1 = require("./parsed-cli");
13
13
  const still_1 = require("./render-flows/still");
14
- const { offthreadVideoCacheSizeInBytesOption, scaleOption, jpegQualityOption, enableMultiprocessOnLinuxOption, glOption, delayRenderTimeoutInMillisecondsOption, headlessOption, overwriteOption, binariesDirectoryOption, publicPathOption, publicDirOption, chromeModeOption, offthreadVideoThreadsOption, } = client_1.BrowserSafeApis.options;
14
+ const { offthreadVideoCacheSizeInBytesOption, scaleOption, jpegQualityOption, enableMultiprocessOnLinuxOption, glOption, delayRenderTimeoutInMillisecondsOption, headlessOption, overwriteOption, binariesDirectoryOption, publicPathOption, publicDirOption, chromeModeOption, offthreadVideoThreadsOption, audioLatencyHintOption, } = client_1.BrowserSafeApis.options;
15
15
  const still = async (remotionRoot, args, logLevel) => {
16
16
  const { file, remainingArgs, reason: entryPointReason, } = (0, entry_point_1.findEntryPoint)({ args, remotionRoot, logLevel, allowDirectory: true });
17
17
  if (!file) {
@@ -65,6 +65,9 @@ const still = async (remotionRoot, args, logLevel) => {
65
65
  const chromeMode = chromeModeOption.getValue({
66
66
  commandLine: parsed_cli_1.parsedCli,
67
67
  }).value;
68
+ const audioLatencyHint = audioLatencyHintOption.getValue({
69
+ commandLine: parsed_cli_1.parsedCli,
70
+ }).value;
68
71
  const chromiumOptions = {
69
72
  disableWebSecurity,
70
73
  enableMultiProcessOnLinux,
@@ -111,6 +114,7 @@ const still = async (remotionRoot, args, logLevel) => {
111
114
  binariesDirectory,
112
115
  publicPath,
113
116
  chromeMode,
117
+ audioLatencyHint,
114
118
  });
115
119
  };
116
120
  exports.still = still;
package/dist/studio.js CHANGED
@@ -102,6 +102,7 @@ const studioCommand = async (remotionRoot, args, logLevel) => {
102
102
  bufferStateDelayInMilliseconds: config_1.ConfigInternals.getBufferStateDelayInMilliseconds(),
103
103
  binariesDirectory,
104
104
  forceIPv4: parsed_cli_1.parsedCli.ipv4,
105
+ audioLatencyHint: parsed_cli_1.parsedCli['audio-latency-hint'],
105
106
  });
106
107
  // If the server is restarted through the UI, let's do the whole thing again.
107
108
  await (0, exports.studioCommand)(remotionRoot, args, logLevel);
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.302",
6
+ "version": "4.0.304",
7
7
  "description": "Control Remotion features using the `npx remotion` command",
8
8
  "main": "dist/index.js",
9
9
  "sideEffects": false,
@@ -33,14 +33,14 @@
33
33
  "dotenv": "9.0.2",
34
34
  "minimist": "1.2.6",
35
35
  "prompts": "2.4.2",
36
- "@remotion/bundler": "4.0.302",
37
- "@remotion/player": "4.0.302",
38
- "@remotion/media-utils": "4.0.302",
39
- "@remotion/renderer": "4.0.302",
40
- "@remotion/studio-server": "4.0.302",
41
- "@remotion/studio-shared": "4.0.302",
42
- "remotion": "4.0.302",
43
- "@remotion/studio": "4.0.302"
36
+ "@remotion/bundler": "4.0.304",
37
+ "@remotion/media-utils": "4.0.304",
38
+ "@remotion/renderer": "4.0.304",
39
+ "@remotion/player": "4.0.304",
40
+ "@remotion/studio-server": "4.0.304",
41
+ "@remotion/studio-shared": "4.0.304",
42
+ "@remotion/studio": "4.0.304",
43
+ "remotion": "4.0.304"
44
44
  },
45
45
  "peerDependencies": {
46
46
  "react": ">=16.8.0",
@@ -54,11 +54,11 @@
54
54
  "react-dom": "19.0.0",
55
55
  "zod": "3.22.3",
56
56
  "eslint": "9.19.0",
57
- "@remotion/zod-types": "4.0.302",
58
- "@remotion/tailwind-v4": "4.0.302",
59
- "@remotion/enable-scss": "4.0.302",
60
- "@remotion/skia": "4.0.302",
61
- "@remotion/eslint-config-internal": "4.0.302"
57
+ "@remotion/zod-types": "4.0.304",
58
+ "@remotion/tailwind-v4": "4.0.304",
59
+ "@remotion/skia": "4.0.304",
60
+ "@remotion/eslint-config-internal": "4.0.304",
61
+ "@remotion/enable-scss": "4.0.304"
62
62
  },
63
63
  "keywords": [
64
64
  "remotion",