@remotion/renderer 4.0.404 → 4.0.406

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 (182) hide show
  1. package/dist/assets/apply-tone-frequency.d.ts +1 -2
  2. package/dist/assets/convert-assets-to-file-urls.d.ts +1 -2
  3. package/dist/assets/download-and-map-assets-to-file.d.ts +2 -3
  4. package/dist/assets/download-and-map-assets-to-file.js +1 -0
  5. package/dist/assets/download-file.d.ts +1 -0
  6. package/dist/assets/download-file.js +17 -1
  7. package/dist/assets/download-map.d.ts +1 -0
  8. package/dist/assets/download-map.js +2 -0
  9. package/dist/assets/get-audio-channels.d.ts +2 -3
  10. package/dist/assets/inline-audio-mixing.d.ts +1 -2
  11. package/dist/browser/Browser.d.ts +5 -5
  12. package/dist/browser/Browser.js +65 -74
  13. package/dist/browser/BrowserFetcher.d.ts +3 -5
  14. package/dist/browser/BrowserFetcher.js +1 -0
  15. package/dist/browser/BrowserPage.d.ts +4 -4
  16. package/dist/browser/BrowserPage.js +223 -218
  17. package/dist/browser/BrowserRunner.d.ts +1 -2
  18. package/dist/browser/Connection.js +99 -112
  19. package/dist/browser/ConsoleMessage.d.ts +1 -1
  20. package/dist/browser/ConsoleMessage.js +9 -16
  21. package/dist/browser/DOMWorld.d.ts +1 -1
  22. package/dist/browser/DOMWorld.js +75 -89
  23. package/dist/browser/Errors.js +2 -4
  24. package/dist/browser/EventEmitter.js +2 -1
  25. package/dist/browser/ExecutionContext.js +117 -120
  26. package/dist/browser/FrameManager.js +249 -244
  27. package/dist/browser/HTTPRequest.js +11 -22
  28. package/dist/browser/HTTPResponse.js +3 -16
  29. package/dist/browser/JSHandle.js +17 -30
  30. package/dist/browser/LifecycleWatcher.js +122 -128
  31. package/dist/browser/NetworkEventManager.js +31 -40
  32. package/dist/browser/NetworkManager.js +210 -203
  33. package/dist/browser/NodeWebSocketTransport.js +3 -0
  34. package/dist/browser/Target.d.ts +1 -1
  35. package/dist/browser/Target.js +32 -39
  36. package/dist/browser/TaskQueue.js +5 -18
  37. package/dist/browser/TimeoutSettings.js +12 -25
  38. package/dist/browser/browser-download-progress-bar.d.ts +1 -2
  39. package/dist/browser/handle-failed-resource.d.ts +1 -2
  40. package/dist/browser/handle-failed-resource.js +4 -3
  41. package/dist/call-ffmpeg.d.ts +4 -5
  42. package/dist/can-concat-seamlessly.d.ts +2 -4
  43. package/dist/can-use-parallel-encoding.d.ts +1 -2
  44. package/dist/check-version-requirements.d.ts +1 -2
  45. package/dist/client.d.ts +181 -181
  46. package/dist/codec-supports-media.d.ts +3 -4
  47. package/dist/collect-assets.d.ts +1 -1
  48. package/dist/combine-audio.d.ts +2 -4
  49. package/dist/combine-chunks.d.ts +1 -2
  50. package/dist/combine-video-streams.d.ts +2 -4
  51. package/dist/compositor/compositor.d.ts +3 -3
  52. package/dist/compositor/compositor.js +51 -32
  53. package/dist/compositor/get-executable-path.d.ts +3 -3
  54. package/dist/compress-audio.d.ts +2 -4
  55. package/dist/create-audio.d.ts +2 -4
  56. package/dist/create-silent-audio.d.ts +1 -2
  57. package/dist/crf.d.ts +4 -6
  58. package/dist/cycle-browser-tabs.d.ts +1 -2
  59. package/dist/ensure-browser.d.ts +44 -1
  60. package/dist/error-handling/handle-javascript-exception.d.ts +1 -1
  61. package/dist/error-handling/handle-javascript-exception.js +7 -1
  62. package/dist/error-handling/symbolicateable-error.d.ts +1 -1
  63. package/dist/error-handling/symbolicateable-error.js +4 -0
  64. package/dist/error-handling.js +1 -1
  65. package/dist/esm/client.mjs +7 -2
  66. package/dist/esm/index.mjs +81 -40
  67. package/dist/extract-audio.d.ts +2 -3
  68. package/dist/ffmpeg-args.d.ts +6 -12
  69. package/dist/get-browser-instance.d.ts +4 -6
  70. package/dist/get-codec-name.d.ts +3 -6
  71. package/dist/get-compositions.d.ts +1 -1
  72. package/dist/get-concurrency.d.ts +1 -1
  73. package/dist/get-extension-from-codec.d.ts +2 -3
  74. package/dist/get-frame-padded-index.d.ts +1 -2
  75. package/dist/get-local-browser-executable.d.ts +2 -4
  76. package/dist/get-prores-profile-name.d.ts +1 -3
  77. package/dist/get-silent-parts.d.ts +4 -5
  78. package/dist/get-video-metadata.d.ts +3 -4
  79. package/dist/get-video-threads-flag.d.ts +1 -2
  80. package/dist/goto-page-or-throw.d.ts +1 -1
  81. package/dist/guess-extension-for-media.d.ts +2 -3
  82. package/dist/image-format.d.ts +2 -3
  83. package/dist/index.d.ts +173 -172
  84. package/dist/index.js +16 -16
  85. package/dist/is-audio-codec.d.ts +1 -2
  86. package/dist/log-level.d.ts +1 -1
  87. package/dist/logger.d.ts +6 -6
  88. package/dist/make-page.d.ts +2 -4
  89. package/dist/memory/from-proc-meminfo.d.ts +1 -2
  90. package/dist/memory/get-available-memory.d.ts +1 -2
  91. package/dist/mime-types.js +2 -1
  92. package/dist/mux-video-and-audio.d.ts +2 -3
  93. package/dist/offthread-video-server.d.ts +1 -2
  94. package/dist/offthread-video-server.js +6 -18
  95. package/dist/open-browser.d.ts +1 -1
  96. package/dist/open-browser.js +6 -5
  97. package/dist/options/api-key.js +3 -1
  98. package/dist/options/audio-bitrate.js +9 -1
  99. package/dist/options/audio-codec.d.ts +10 -13
  100. package/dist/options/beep-on-finish.js +1 -1
  101. package/dist/options/binaries-directory.js +9 -1
  102. package/dist/options/chrome-mode.d.ts +3 -3
  103. package/dist/options/chrome-mode.js +6 -1
  104. package/dist/options/color-space.d.ts +5 -9
  105. package/dist/options/color-space.js +7 -1
  106. package/dist/options/crf.js +1 -1
  107. package/dist/options/cross-site-isolation.js +2 -1
  108. package/dist/options/dark-mode.js +2 -1
  109. package/dist/options/delete-after.js +11 -1
  110. package/dist/options/disallow-parallel-encoding.js +1 -1
  111. package/dist/options/enable-lambda-insights.js +2 -1
  112. package/dist/options/enable-multiprocess-on-linux.js +13 -1
  113. package/dist/options/encoding-buffer-size.js +3 -1
  114. package/dist/options/encoding-max-rate.js +3 -1
  115. package/dist/options/enforce-audio.js +1 -1
  116. package/dist/options/folder-expiry.js +4 -1
  117. package/dist/options/for-seamless-aac-concatenation.js +3 -1
  118. package/dist/options/gl.d.ts +6 -6
  119. package/dist/options/gl.js +28 -2
  120. package/dist/options/hardware-acceleration.d.ts +2 -2
  121. package/dist/options/headless.js +4 -1
  122. package/dist/options/image-sequence-pattern.js +5 -1
  123. package/dist/options/index.d.ts +25 -25
  124. package/dist/options/jpeg-quality.js +1 -1
  125. package/dist/options/latency-hint.js +10 -1
  126. package/dist/options/license-key.js +2 -1
  127. package/dist/options/log-level.d.ts +3 -4
  128. package/dist/options/log-level.js +16 -1
  129. package/dist/options/metadata.js +7 -2
  130. package/dist/options/mute.js +1 -1
  131. package/dist/options/number-of-gif-loops.js +13 -1
  132. package/dist/options/offthreadvideo-cache-size.js +11 -1
  133. package/dist/options/offthreadvideo-threads.js +2 -1
  134. package/dist/options/on-browser-download.js +2 -1
  135. package/dist/options/options-map.d.ts +93 -93
  136. package/dist/options/overwrite.js +5 -1
  137. package/dist/options/prefer-lossless.js +4 -1
  138. package/dist/options/public-dir.js +2 -1
  139. package/dist/options/public-license-key.js +3 -1
  140. package/dist/options/public-path.js +7 -1
  141. package/dist/options/repro.js +1 -1
  142. package/dist/options/scale.js +5 -1
  143. package/dist/options/timeout.js +4 -1
  144. package/dist/options/video-bitrate.js +7 -1
  145. package/dist/options/video-cache-size.js +8 -1
  146. package/dist/options/video-codec.d.ts +6 -6
  147. package/dist/options/video-codec.js +1 -1
  148. package/dist/options/webhook-custom-data.js +1 -1
  149. package/dist/options/x264-preset.d.ts +5 -6
  150. package/dist/options/x264-preset.js +23 -1
  151. package/dist/p-limit.d.ts +1 -1
  152. package/dist/pixel-format.d.ts +2 -3
  153. package/dist/pool.js +2 -0
  154. package/dist/port-config.d.ts +5 -6
  155. package/dist/prespawn-ffmpeg.js +5 -4
  156. package/dist/prestitcher-memory-usage.d.ts +1 -2
  157. package/dist/print-useful-error-message.d.ts +1 -2
  158. package/dist/prores-profile.d.ts +2 -4
  159. package/dist/puppeteer-evaluate.d.ts +2 -2
  160. package/dist/puppeteer-screenshot.d.ts +3 -4
  161. package/dist/pure.d.ts +5 -5
  162. package/dist/render-frame-and-retry-target-close.d.ts +8 -8
  163. package/dist/render-frame-with-option-to-reject.d.ts +4 -6
  164. package/dist/render-frame.d.ts +8 -8
  165. package/dist/render-has-audio.d.ts +2 -3
  166. package/dist/render-media.js +2 -1
  167. package/dist/replace-browser.d.ts +1 -2
  168. package/dist/repro.d.ts +1 -1
  169. package/dist/screenshot-task.d.ts +3 -4
  170. package/dist/seek-to-frame.d.ts +2 -3
  171. package/dist/serve-handler/index.d.ts +1 -1
  172. package/dist/serve-handler/range-parser.d.ts +2 -2
  173. package/dist/serve-static.d.ts +1 -2
  174. package/dist/set-props-and-env.js +3 -1
  175. package/dist/stringify-ffmpeg-filter.d.ts +1 -2
  176. package/dist/take-frame.d.ts +1 -2
  177. package/dist/test-gpu.d.ts +2 -4
  178. package/dist/validate-even-dimensions-with-codec.d.ts +2 -4
  179. package/dist/validate-ffmpeg-override.d.ts +1 -1
  180. package/dist/validate-number-of-gif-loops.d.ts +1 -2
  181. package/dist/validate-output-filename.d.ts +2 -4
  182. package/package.json +16 -14
@@ -1,9 +1,8 @@
1
- import type { Codec } from './codec';
2
1
  type MediaSupport = {
3
2
  video: boolean;
4
3
  audio: boolean;
5
4
  };
6
- export declare const codecSupportsMedia: (codec: Codec) => MediaSupport;
7
- export declare const codecSupportsCrf: (codec: Codec) => boolean;
8
- export declare const codecSupportsVideoBitrate: (codec: Codec) => boolean;
5
+ export declare const codecSupportsMedia: (codec: "aac" | "gif" | "h264" | "h264-mkv" | "h264-ts" | "h265" | "mp3" | "prores" | "vp8" | "vp9" | "wav") => MediaSupport;
6
+ export declare const codecSupportsCrf: (codec: "aac" | "gif" | "h264" | "h264-mkv" | "h264-ts" | "h265" | "mp3" | "prores" | "vp8" | "vp9" | "wav") => boolean;
7
+ export declare const codecSupportsVideoBitrate: (codec: "aac" | "gif" | "h264" | "h264-mkv" | "h264-ts" | "h265" | "mp3" | "prores" | "vp8" | "vp9" | "wav") => boolean;
9
8
  export {};
@@ -4,4 +4,4 @@ export declare const collectAssets: ({ frame, freePage, timeoutInMilliseconds, }
4
4
  frame: number;
5
5
  freePage: Page;
6
6
  timeoutInMilliseconds: number;
7
- }) => Promise<(import("remotion/no-react").AudioOrVideoAsset | ArtifactAsset | import("remotion/no-react").InlineAudioAsset)[]>;
7
+ }) => Promise<(import("remotion/no-react").AudioOrVideoAsset | import("remotion/no-react").InlineAudioAsset | ArtifactAsset)[]>;
@@ -1,6 +1,4 @@
1
- import type { LogLevel } from './log-level';
2
1
  import type { CancelSignal } from './make-cancel-signal';
3
- import type { AudioCodec } from './options/audio-codec';
4
2
  export declare const durationOf1Frame: number;
5
3
  export declare const getClosestAlignedTime: (targetTime: number) => number;
6
4
  export declare const createCombinedAudio: ({ seamless, filelistDir, files, indent, logLevel, audioBitrate, resolvedAudioCodec, output, chunkDurationInSeconds, addRemotionMetadata, binariesDirectory, fps, cancelSignal, onProgress, }: {
@@ -8,9 +6,9 @@ export declare const createCombinedAudio: ({ seamless, filelistDir, files, inden
8
6
  filelistDir: string;
9
7
  files: string[];
10
8
  indent: boolean;
11
- logLevel: LogLevel;
9
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
12
10
  audioBitrate: string | null;
13
- resolvedAudioCodec: AudioCodec;
11
+ resolvedAudioCodec: "aac" | "mp3" | "opus" | "pcm-16";
14
12
  output: string;
15
13
  chunkDurationInSeconds: number;
16
14
  addRemotionMetadata: boolean;
@@ -30,9 +30,8 @@ type OptionalCombineChunksOptions = {
30
30
  frameRange: FrameRange | null;
31
31
  everyNthFrame: number;
32
32
  };
33
- type AllCombineChunksOptions = MandatoryCombineChunksOptions & OptionalCombineChunksOptions;
34
33
  export type CombineChunksOptions = MandatoryCombineChunksOptions & Partial<OptionalCombineChunksOptions>;
35
- export declare const internalCombineChunks: ({ outputLocation: output, onProgress, codec, fps, numberOfGifLoops, audioBitrate, indent, logLevel, binariesDirectory, cancelSignal, metadata, audioFiles, videoFiles, framesPerChunk, audioCodec, preferLossless, everyNthFrame, frameRange, compositionDurationInFrames, }: AllCombineChunksOptions & {
34
+ export declare const internalCombineChunks: ({ outputLocation: output, onProgress, codec, fps, numberOfGifLoops, audioBitrate, indent, logLevel, binariesDirectory, cancelSignal, metadata, audioFiles, videoFiles, framesPerChunk, audioCodec, preferLossless, everyNthFrame, frameRange, compositionDurationInFrames, }: MandatoryCombineChunksOptions & OptionalCombineChunksOptions & {
36
35
  indent: boolean;
37
36
  }) => Promise<void>;
38
37
  export declare const combineChunks: (options: CombineChunksOptions) => Promise<void>;
@@ -1,14 +1,12 @@
1
- import type { Codec } from './codec';
2
- import type { LogLevel } from './log-level';
3
1
  import type { CancelSignal } from './make-cancel-signal';
4
2
  export declare const combineVideoStreams: ({ fps, codec, filelistDir, numberOfGifLoops, output, indent, logLevel, onProgress, files, addRemotionMetadata, binariesDirectory, cancelSignal, }: {
5
3
  fps: number;
6
- codec: Codec;
4
+ codec: "aac" | "gif" | "h264" | "h264-mkv" | "h264-ts" | "h265" | "mp3" | "prores" | "vp8" | "vp9" | "wav";
7
5
  filelistDir: string;
8
6
  numberOfGifLoops: number | null;
9
7
  output: string;
10
8
  indent: boolean;
11
- logLevel: LogLevel;
9
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
12
10
  onProgress: (p: number) => void;
13
11
  files: string[];
14
12
  addRemotionMetadata: boolean;
@@ -1,6 +1,6 @@
1
- import type { LogLevel } from '../log-level';
2
1
  import type { CompositorCommand } from './payloads';
3
2
  export type Compositor = {
3
+ shutDownOrKill: () => Promise<void>;
4
4
  finishCommands: () => Promise<void>;
5
5
  executeCommand: <T extends keyof CompositorCommand>(type: T, payload: CompositorCommand[T]) => Promise<Uint8Array>;
6
6
  waitForDone: () => Promise<void>;
@@ -8,7 +8,7 @@ export type Compositor = {
8
8
  };
9
9
  export declare const startLongRunningCompositor: ({ maximumFrameCacheItemsInBytes, logLevel, indent, binariesDirectory, extraThreads, }: {
10
10
  maximumFrameCacheItemsInBytes: number | null;
11
- logLevel: LogLevel;
11
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
12
12
  indent: boolean;
13
13
  binariesDirectory: string | null;
14
14
  extraThreads: number;
@@ -16,7 +16,7 @@ export declare const startLongRunningCompositor: ({ maximumFrameCacheItemsInByte
16
16
  export declare const startCompositor: <T extends keyof CompositorCommand>({ type, payload, logLevel, indent, binariesDirectory, }: {
17
17
  type: T;
18
18
  payload: CompositorCommand[T];
19
- logLevel: LogLevel;
19
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
20
20
  indent: boolean;
21
21
  binariesDirectory: string | null;
22
22
  }) => Compositor;
@@ -107,42 +107,61 @@ const startCompositor = ({ type, payload, logLevel, indent, binariesDirectory =
107
107
  clear();
108
108
  stderrChunks = [];
109
109
  });
110
- return {
111
- waitForDone: () => {
112
- return new Promise((res, rej) => {
113
- if (runningStatus.type === 'quit-without-error') {
114
- rej(new Error(`Compositor quit${runningStatus.signal
115
- ? ` with signal ${runningStatus.signal}`
116
- : ''}`));
117
- return;
118
- }
119
- if (runningStatus.type === 'quit-with-error') {
120
- rej(new Error(`Compositor quit${runningStatus.signal
121
- ? ` with signal ${runningStatus.signal}`
122
- : ''}: ${runningStatus.error}`));
110
+ const waitForDone = () => {
111
+ return new Promise((res, rej) => {
112
+ if (runningStatus.type === 'quit-without-error') {
113
+ rej(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ''}`));
114
+ return;
115
+ }
116
+ if (runningStatus.type === 'quit-with-error') {
117
+ rej(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ''}: ${runningStatus.error}`));
118
+ return;
119
+ }
120
+ resolve = res;
121
+ reject = rej;
122
+ });
123
+ };
124
+ const finishCommands = async () => {
125
+ // Prevent this function from throwing an error if instead a rejected promise should be returned
126
+ await Promise.resolve();
127
+ if (runningStatus.type === 'quit-with-error') {
128
+ return Promise.reject(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ''}: ${runningStatus.error}`));
129
+ }
130
+ if (runningStatus.type === 'quit-without-error') {
131
+ return Promise.reject(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ''}`));
132
+ }
133
+ return new Promise((res, rej) => {
134
+ child.stdin.write('EOF\n', (e) => {
135
+ if (e) {
136
+ rej(e);
123
137
  return;
124
138
  }
125
- resolve = res;
126
- reject = rej;
139
+ res();
127
140
  });
128
- },
129
- finishCommands: () => {
130
- if (runningStatus.type === 'quit-with-error') {
131
- return Promise.reject(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ''}: ${runningStatus.error}`));
132
- }
133
- if (runningStatus.type === 'quit-without-error') {
134
- return Promise.reject(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ''}`));
135
- }
136
- return new Promise((res, rej) => {
137
- child.stdin.write('EOF\n', (e) => {
138
- if (e) {
139
- rej(e);
140
- return;
141
- }
142
- res();
143
- });
141
+ });
142
+ };
143
+ const shutDownOrKill = () => {
144
+ const shutDownCase = async () => {
145
+ await finishCommands();
146
+ await waitForDone();
147
+ };
148
+ let timeout = null;
149
+ const killCase = async () => {
150
+ await new Promise((res) => {
151
+ timeout = setTimeout(res, 5000);
144
152
  });
145
- },
153
+ child.kill('SIGKILL');
154
+ };
155
+ return Promise.race([shutDownCase(), killCase()]).finally(() => {
156
+ if (timeout !== null) {
157
+ clearTimeout(timeout);
158
+ }
159
+ });
160
+ };
161
+ return {
162
+ shutDownOrKill,
163
+ waitForDone,
164
+ finishCommands,
146
165
  executeCommand: (command, params) => {
147
166
  return new Promise((_resolve, _reject) => {
148
167
  if (runningStatus.type === 'quit-without-error') {
@@ -1,12 +1,12 @@
1
1
  import type { LogLevel } from '../log-level';
2
- export declare function isMusl({ indent, logLevel, }: {
2
+ export declare function isMusl({ indent, logLevel }: {
3
3
  indent: boolean;
4
4
  logLevel: LogLevel;
5
5
  }): boolean;
6
6
  export declare const getExecutablePath: ({ indent, logLevel, type, binariesDirectory, }: {
7
7
  type: "compositor" | "ffmpeg" | "ffprobe";
8
8
  indent: boolean;
9
- logLevel: LogLevel;
9
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
10
10
  binariesDirectory: string | null;
11
11
  }) => string;
12
- export declare const getExecutableDir: (indent: boolean, logLevel: LogLevel) => string;
12
+ export declare const getExecutableDir: (indent: boolean, logLevel: "error" | "info" | "trace" | "verbose" | "warn") => string;
@@ -1,11 +1,9 @@
1
- import type { LogLevel } from './log-level';
2
1
  import type { CancelSignal } from './make-cancel-signal';
3
- import type { AudioCodec } from './options/audio-codec';
4
2
  export declare const compressAudio: ({ audioCodec, outName, binariesDirectory, indent, logLevel, audioBitrate, cancelSignal, inName, onProgress, chunkLengthInSeconds, fps, }: {
5
- audioCodec: AudioCodec;
3
+ audioCodec: "aac" | "mp3" | "opus" | "pcm-16";
6
4
  outName: string;
7
5
  indent: boolean;
8
- logLevel: LogLevel;
6
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
9
7
  binariesDirectory: string | null;
10
8
  audioBitrate: string | null;
11
9
  cancelSignal: CancelSignal | undefined;
@@ -1,8 +1,6 @@
1
1
  import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
2
2
  import type { DownloadMap } from './assets/download-map';
3
- import type { LogLevel } from './log-level';
4
3
  import type { CancelSignal } from './make-cancel-signal';
5
- import type { AudioCodec } from './options/audio-codec';
6
4
  import type { FrameAndAssets } from './render-frames';
7
5
  export type SeamlessAudioInfo = {
8
6
  chunkLengthInSeconds: number;
@@ -13,14 +11,14 @@ export declare const createAudio: ({ assets, onDownload, fps, logLevel, onProgre
13
11
  assets: FrameAndAssets[];
14
12
  onDownload: RenderMediaOnDownload | undefined;
15
13
  fps: number;
16
- logLevel: LogLevel;
14
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
17
15
  onProgress: (progress: number) => void;
18
16
  downloadMap: DownloadMap;
19
17
  remotionRoot: string;
20
18
  indent: boolean;
21
19
  binariesDirectory: string | null;
22
20
  audioBitrate: string | null;
23
- audioCodec: AudioCodec;
21
+ audioCodec: "aac" | "mp3" | "opus" | "pcm-16";
24
22
  cancelSignal: CancelSignal | undefined;
25
23
  chunkLengthInSeconds: number;
26
24
  trimLeftOffset: number;
@@ -1,10 +1,9 @@
1
- import type { LogLevel } from './log-level';
2
1
  import type { CancelSignal } from './make-cancel-signal';
3
2
  export declare const createSilentAudio: ({ outName, indent, logLevel, binariesDirectory, cancelSignal, chunkLengthInSeconds, }: {
4
3
  chunkLengthInSeconds: number;
5
4
  outName: string;
6
5
  indent: boolean;
7
- logLevel: LogLevel;
6
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
8
7
  binariesDirectory: string | null;
9
8
  cancelSignal: CancelSignal | undefined;
10
9
  }) => Promise<void>;
package/dist/crf.d.ts CHANGED
@@ -1,13 +1,11 @@
1
- import type { HardwareAccelerationOption } from './client';
2
- import type { Codec } from './codec';
3
1
  export type Crf = number | undefined;
4
- export declare const getDefaultCrfForCodec: (codec: Codec) => number | null;
5
- export declare const getValidCrfRanges: (codec: Codec) => [number, number];
2
+ export declare const getDefaultCrfForCodec: (codec: "aac" | "gif" | "h264" | "h264-mkv" | "h264-ts" | "h265" | "mp3" | "prores" | "vp8" | "vp9" | "wav") => number | null;
3
+ export declare const getValidCrfRanges: (codec: "aac" | "gif" | "h264" | "h264-mkv" | "h264-ts" | "h265" | "mp3" | "prores" | "vp8" | "vp9" | "wav") => [number, number];
6
4
  export declare const validateQualitySettings: ({ codec, crf, videoBitrate, encodingMaxRate, encodingBufferSize, hardwareAcceleration, }: {
7
5
  crf: unknown;
8
- codec: Codec;
6
+ codec: "aac" | "gif" | "h264" | "h264-mkv" | "h264-ts" | "h265" | "mp3" | "prores" | "vp8" | "vp9" | "wav";
9
7
  videoBitrate: string | null;
10
8
  encodingMaxRate: string | null;
11
9
  encodingBufferSize: string | null;
12
- hardwareAcceleration: HardwareAccelerationOption;
10
+ hardwareAcceleration: "disable" | "if-possible" | "required";
13
11
  }) => string[];
@@ -1,9 +1,8 @@
1
- import type { LogLevel } from './log-level';
2
1
  import type { BrowserReplacer } from './replace-browser';
3
2
  export declare const cycleBrowserTabs: ({ puppeteerInstance, concurrency, logLevel, indent, }: {
4
3
  puppeteerInstance: BrowserReplacer;
5
4
  concurrency: number;
6
- logLevel: LogLevel;
5
+ logLevel: "error" | "info" | "trace" | "verbose" | "warn";
7
6
  indent: boolean;
8
7
  }) => {
9
8
  stopCycling: () => void;
@@ -20,5 +20,48 @@ export type EnsureBrowserOptions = Partial<{
20
20
  browserExecutable: BrowserExecutable;
21
21
  } & ToOptions<typeof BrowserSafeApis.optionsMap.ensureBrowser>>;
22
22
  export declare const internalEnsureBrowser: (options: InternalEnsureBrowserOptions) => Promise<BrowserStatus>;
23
- export declare const ensureBrowser: (options?: EnsureBrowserOptions) => Promise<BrowserStatus>;
23
+ export declare const ensureBrowser: (options?: Partial<{
24
+ browserExecutable: BrowserExecutable;
25
+ } & ToOptions<{
26
+ readonly logLevel: {
27
+ cliFlag: "log";
28
+ name: string;
29
+ ssrName: string;
30
+ description: () => import("react/jsx-runtime").JSX.Element;
31
+ docLink: string;
32
+ getValue: ({ commandLine }: {
33
+ commandLine: Record<string, unknown>;
34
+ }) => {
35
+ value: "error" | "info" | "trace" | "verbose" | "warn";
36
+ source: string;
37
+ };
38
+ setConfig: (newLogLevel: "error" | "info" | "trace" | "verbose" | "warn") => void;
39
+ type: "error" | "info" | "trace" | "verbose" | "warn";
40
+ };
41
+ readonly onBrowserDownload: {
42
+ name: string;
43
+ cliFlag: "on-browser-download";
44
+ description: () => import("react/jsx-runtime").JSX.Element;
45
+ ssrName: "onBrowserDownload";
46
+ docLink: string;
47
+ type: import(".").OnBrowserDownload;
48
+ getValue: () => never;
49
+ setConfig: () => never;
50
+ };
51
+ readonly chromeMode: {
52
+ cliFlag: "chrome-mode";
53
+ name: string;
54
+ ssrName: string;
55
+ description: () => import("react/jsx-runtime").JSX.Element;
56
+ docLink: string;
57
+ getValue: ({ commandLine }: {
58
+ commandLine: Record<string, unknown>;
59
+ }) => {
60
+ value: "chrome-for-testing" | "headless-shell";
61
+ source: string;
62
+ };
63
+ setConfig: (newChromeMode: "chrome-for-testing" | "headless-shell") => void;
64
+ type: "chrome-for-testing" | "headless-shell";
65
+ };
66
+ }>> | undefined) => Promise<BrowserStatus>;
24
67
  export {};
@@ -6,7 +6,7 @@ export declare class ErrorWithStackFrame extends Error {
6
6
  chunk: number | null;
7
7
  name: string;
8
8
  delayRenderCall: SymbolicatedStackFrame[] | null;
9
- constructor({ message, symbolicatedStackFrames, frame, name, delayRenderCall, stack, chunk, }: {
9
+ constructor({ message, symbolicatedStackFrames, frame, name, delayRenderCall, stack, chunk }: {
10
10
  message: string;
11
11
  symbolicatedStackFrames: SymbolicatedStackFrame[] | null;
12
12
  frame: number | null;
@@ -4,6 +4,11 @@ exports.handleJavascriptException = exports.ErrorWithStackFrame = void 0;
4
4
  const no_react_1 = require("remotion/no-react");
5
5
  const symbolicateable_error_1 = require("./symbolicateable-error");
6
6
  class ErrorWithStackFrame extends Error {
7
+ symbolicatedStackFrames;
8
+ frame;
9
+ chunk;
10
+ name;
11
+ delayRenderCall;
7
12
  constructor({ message, symbolicatedStackFrames, frame, name, delayRenderCall, stack, chunk, }) {
8
13
  super(message);
9
14
  this.symbolicatedStackFrames = symbolicatedStackFrames;
@@ -17,7 +22,8 @@ class ErrorWithStackFrame extends Error {
17
22
  }
18
23
  exports.ErrorWithStackFrame = ErrorWithStackFrame;
19
24
  const cleanUpErrorMessage = (exception) => {
20
- var _a, _b, _c, _d;
25
+ var _a, _b, _c;
26
+ var _d;
21
27
  let errorMessage = (_a = exception.exceptionDetails.exception) === null || _a === void 0 ? void 0 : _a.description;
22
28
  if (!errorMessage) {
23
29
  return null;
@@ -7,7 +7,7 @@ export declare class SymbolicateableError extends Error {
7
7
  delayRenderCall: UnsymbolicatedStackFrame[] | null;
8
8
  frame: number | null;
9
9
  chunk: number | null;
10
- constructor({ message, stack, stackFrame, frame, name, chunk, }: {
10
+ constructor({ message, stack, stackFrame, frame, name, chunk }: {
11
11
  message: string;
12
12
  stack: string | undefined;
13
13
  frame: number | null;
@@ -6,6 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.SymbolicateableError = void 0;
7
7
  const delay_render_embedded_stack_1 = require("../delay-render-embedded-stack");
8
8
  class SymbolicateableError extends Error {
9
+ stackFrame;
10
+ delayRenderCall;
11
+ frame;
12
+ chunk;
9
13
  constructor({ message, stack, stackFrame, frame, name, chunk, }) {
10
14
  super(message);
11
15
  this.stack = stack;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.wrapWithErrorHandling = void 0;
4
- var wrap_with_error_handling_1 = require("./wrap-with-error-handling");
4
+ const wrap_with_error_handling_1 = require("./wrap-with-error-handling");
5
5
  Object.defineProperty(exports, "wrapWithErrorHandling", { enumerable: true, get: function () { return wrap_with_error_handling_1.wrapWithErrorHandling; } });
@@ -2529,11 +2529,16 @@ var scaleOption = {
2529
2529
  cliFlag: cliFlag42,
2530
2530
  description: () => /* @__PURE__ */ jsxs31(Fragment38, {
2531
2531
  children: [
2532
- "Scales the output by a factor. For example, a 1280x720px frame will become a 1920x1080px frame with a scale factor of ",
2532
+ "Scales the output dimensions by a factor. For example, a 1280x720px frame will become a 1920x1080px frame with a scale factor of ",
2533
2533
  /* @__PURE__ */ jsx38("code", {
2534
2534
  children: "1.5"
2535
2535
  }),
2536
- ". Vector elements like fonts and HTML markups will be rendered with extra details."
2536
+ ". See ",
2537
+ /* @__PURE__ */ jsx38("a", {
2538
+ href: "https://www.remotion.dev/docs/scaling",
2539
+ children: "Scaling"
2540
+ }),
2541
+ " for more details."
2537
2542
  ]
2538
2543
  }),
2539
2544
  ssrName: "scale",
@@ -542,8 +542,14 @@ var tryToObtainBody = async (file) => {
542
542
  };
543
543
 
544
544
  // src/assets/download-file.ts
545
+ var CANCELLED_ERROR = "cancelled";
545
546
  var incorrectContentLengthToken = "Download finished with";
546
- var downloadFileWithoutRetries = ({ onProgress, url, to: toFn }) => {
547
+ var downloadFileWithoutRetries = ({
548
+ onProgress,
549
+ url,
550
+ to: toFn,
551
+ abortSignal
552
+ }) => {
547
553
  return new Promise((resolve, reject) => {
548
554
  let rejected = false;
549
555
  let resolved = false;
@@ -578,11 +584,20 @@ var downloadFileWithoutRetries = ({ onProgress, url, to: toFn }) => {
578
584
  let closeConnection = () => {
579
585
  return;
580
586
  };
587
+ const onAbort = () => {
588
+ rejectAndFlag(new Error(CANCELLED_ERROR));
589
+ closeConnection();
590
+ };
591
+ abortSignal.addEventListener("abort", onAbort);
581
592
  readFile(url).then(({ response, request }) => {
582
593
  closeConnection = () => {
583
594
  request.destroy();
584
595
  response.destroy();
585
596
  };
597
+ if (abortSignal.aborted) {
598
+ onAbort();
599
+ return;
600
+ }
586
601
  const contentDisposition = response.headers["content-disposition"] ?? null;
587
602
  const contentType = response.headers["content-type"] ?? null;
588
603
  const to = toFn(contentDisposition, contentType);
@@ -634,6 +649,8 @@ var downloadFileWithoutRetries = ({ onProgress, url, to: toFn }) => {
634
649
  });
635
650
  }).catch((err) => {
636
651
  rejectAndFlag(err);
652
+ }).finally(() => {
653
+ abortSignal.removeEventListener("abort", onAbort);
637
654
  });
638
655
  });
639
656
  };
@@ -643,6 +660,9 @@ var downloadFile = async (options, retries = 2, attempt = 1) => {
643
660
  return res;
644
661
  } catch (err) {
645
662
  const { message } = err;
663
+ if (message === CANCELLED_ERROR) {
664
+ throw err;
665
+ }
646
666
  if (message === "aborted" || message.includes("ECONNRESET") || message.includes(incorrectContentLengthToken) || message.includes("503") || message.includes("502") || message.includes("504") || message.includes("500")) {
647
667
  if (retries === 0) {
648
668
  throw err;
@@ -4855,7 +4875,8 @@ var downloadBrowser = async ({
4855
4875
  });
4856
4876
  },
4857
4877
  indent,
4858
- logLevel
4878
+ logLevel,
4879
+ abortSignal: new AbortController().signal
4859
4880
  });
4860
4881
  await extractZip(archivePath, { dir: outputPath });
4861
4882
  const chromePath = path8.join(outputPath, "chrome-linux", "chrome");
@@ -14541,7 +14562,8 @@ var downloadAsset = async ({
14541
14562
  contentType
14542
14563
  }),
14543
14564
  indent,
14544
- logLevel
14565
+ logLevel,
14566
+ abortSignal: downloadMap.cleanupController.signal
14545
14567
  });
14546
14568
  notifyAssetIsDownloaded({ src, downloadMap, downloadDir, to });
14547
14569
  if (shouldAnalyzeAudioImmediately) {
@@ -14801,39 +14823,61 @@ ${parsed.backtrace}`));
14801
14823
  clear();
14802
14824
  stderrChunks = [];
14803
14825
  });
14804
- return {
14805
- waitForDone: () => {
14806
- return new Promise((res, rej) => {
14807
- if (runningStatus.type === "quit-without-error") {
14808
- rej(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ""}`));
14809
- return;
14810
- }
14811
- if (runningStatus.type === "quit-with-error") {
14812
- rej(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ""}: ${runningStatus.error}`));
14813
- return;
14814
- }
14815
- resolve2 = res;
14816
- reject = rej;
14817
- });
14818
- },
14819
- finishCommands: () => {
14820
- if (runningStatus.type === "quit-with-error") {
14821
- return Promise.reject(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ""}: ${runningStatus.error}`));
14822
- }
14826
+ const waitForDone = () => {
14827
+ return new Promise((res, rej) => {
14823
14828
  if (runningStatus.type === "quit-without-error") {
14824
- return Promise.reject(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ""}`));
14829
+ rej(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ""}`));
14830
+ return;
14825
14831
  }
14826
- return new Promise((res, rej) => {
14827
- child.stdin.write(`EOF
14832
+ if (runningStatus.type === "quit-with-error") {
14833
+ rej(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ""}: ${runningStatus.error}`));
14834
+ return;
14835
+ }
14836
+ resolve2 = res;
14837
+ reject = rej;
14838
+ });
14839
+ };
14840
+ const finishCommands = async () => {
14841
+ await Promise.resolve();
14842
+ if (runningStatus.type === "quit-with-error") {
14843
+ return Promise.reject(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ""}: ${runningStatus.error}`));
14844
+ }
14845
+ if (runningStatus.type === "quit-without-error") {
14846
+ return Promise.reject(new Error(`Compositor quit${runningStatus.signal ? ` with signal ${runningStatus.signal}` : ""}`));
14847
+ }
14848
+ return new Promise((res, rej) => {
14849
+ child.stdin.write(`EOF
14828
14850
  `, (e) => {
14829
- if (e) {
14830
- rej(e);
14831
- return;
14832
- }
14833
- res();
14834
- });
14851
+ if (e) {
14852
+ rej(e);
14853
+ return;
14854
+ }
14855
+ res();
14835
14856
  });
14836
- },
14857
+ });
14858
+ };
14859
+ const shutDownOrKill = () => {
14860
+ const shutDownCase = async () => {
14861
+ await finishCommands();
14862
+ await waitForDone();
14863
+ };
14864
+ let timeout = null;
14865
+ const killCase = async () => {
14866
+ await new Promise((res) => {
14867
+ timeout = setTimeout(res, 5000);
14868
+ });
14869
+ child.kill("SIGKILL");
14870
+ };
14871
+ return Promise.race([shutDownCase(), killCase()]).finally(() => {
14872
+ if (timeout !== null) {
14873
+ clearTimeout(timeout);
14874
+ }
14875
+ });
14876
+ };
14877
+ return {
14878
+ shutDownOrKill,
14879
+ waitForDone,
14880
+ finishCommands,
14837
14881
  executeCommand: (command, params) => {
14838
14882
  return new Promise((_resolve, _reject) => {
14839
14883
  if (runningStatus.type === "quit-without-error") {
@@ -14941,13 +14985,8 @@ var startOffthreadVideoServer = ({
14941
14985
  binariesDirectory
14942
14986
  });
14943
14987
  return {
14944
- close: async () => {
14945
- try {
14946
- await compositor.finishCommands();
14947
- return compositor.waitForDone();
14948
- } catch (err) {
14949
- return Promise.reject(err);
14950
- }
14988
+ close: () => {
14989
+ return compositor.shutDownOrKill();
14951
14990
  },
14952
14991
  listener: (req, response) => {
14953
14992
  if (!req.url) {
@@ -15320,13 +15359,15 @@ var makeDownloadMap = () => {
15320
15359
  isPreventedFromCleanup: () => {
15321
15360
  return prevented;
15322
15361
  },
15323
- inlineAudioMixing: makeInlineAudioMixing(dir)
15362
+ inlineAudioMixing: makeInlineAudioMixing(dir),
15363
+ cleanupController: new AbortController
15324
15364
  };
15325
15365
  };
15326
15366
  var cleanDownloadMap = (downloadMap) => {
15327
15367
  if (downloadMap.isPreventedFromCleanup()) {
15328
15368
  return;
15329
15369
  }
15370
+ downloadMap.cleanupController.abort();
15330
15371
  deleteDirectory(downloadMap.downloadDir);
15331
15372
  deleteDirectory(downloadMap.complexFilter);
15332
15373
  deleteDirectory(downloadMap.compositingDir);
@@ -1,7 +1,6 @@
1
- import type { LogLevel } from './log-level';
2
1
  export declare const extractAudio: (options: {
3
2
  videoSource: string;
4
3
  audioOutput: string;
5
- logLevel?: LogLevel;
6
- binariesDirectory?: string | null;
4
+ logLevel?: "error" | "info" | "trace" | "verbose" | "warn" | undefined;
5
+ binariesDirectory?: string | null | undefined;
7
6
  }) => Promise<void>;