@remotion/renderer 4.0.537 → 4.0.539

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 (297) hide show
  1. package/dist/aac-priming.d.ts +2 -1
  2. package/dist/assets/apply-tone-frequency.d.ts +2 -1
  3. package/dist/assets/apply-tone-frequency.js +8 -1
  4. package/dist/assets/calculate-asset-positions.js +2 -0
  5. package/dist/assets/convert-assets-to-file-urls.d.ts +2 -1
  6. package/dist/assets/download-and-map-assets-to-file.d.ts +3 -2
  7. package/dist/assets/get-audio-channels.d.ts +3 -2
  8. package/dist/assets/inline-audio-mixing.d.ts +2 -1
  9. package/dist/assets/read-file.js +1 -2
  10. package/dist/assets/types.d.ts +2 -1
  11. package/dist/browser/Browser.d.ts +5 -5
  12. package/dist/browser/Browser.js +74 -65
  13. package/dist/browser/BrowserFetcher.d.ts +7 -5
  14. package/dist/browser/BrowserPage.d.ts +4 -4
  15. package/dist/browser/BrowserPage.js +222 -226
  16. package/dist/browser/BrowserRunner.d.ts +2 -1
  17. package/dist/browser/Connection.js +109 -96
  18. package/dist/browser/ConsoleMessage.d.ts +1 -1
  19. package/dist/browser/ConsoleMessage.js +16 -9
  20. package/dist/browser/DOMWorld.d.ts +1 -1
  21. package/dist/browser/DOMWorld.js +91 -77
  22. package/dist/browser/Errors.js +4 -2
  23. package/dist/browser/EventEmitter.js +1 -2
  24. package/dist/browser/ExecutionContext.js +120 -117
  25. package/dist/browser/FrameManager.js +244 -249
  26. package/dist/browser/HTTPRequest.js +22 -11
  27. package/dist/browser/HTTPResponse.js +16 -3
  28. package/dist/browser/JSHandle.js +30 -17
  29. package/dist/browser/LifecycleWatcher.js +128 -122
  30. package/dist/browser/NetworkEventManager.js +40 -31
  31. package/dist/browser/NetworkManager.js +203 -210
  32. package/dist/browser/NodeWebSocketTransport.js +0 -3
  33. package/dist/browser/Target.d.ts +1 -1
  34. package/dist/browser/Target.js +39 -32
  35. package/dist/browser/TaskQueue.js +18 -5
  36. package/dist/browser/TimeoutSettings.js +25 -12
  37. package/dist/browser/browser-download-progress-bar.d.ts +2 -1
  38. package/dist/browser/get-chrome-download-url.d.ts +3 -2
  39. package/dist/browser/handle-failed-resource.d.ts +2 -1
  40. package/dist/call-ffmpeg.d.ts +7 -6
  41. package/dist/can-concat-seamlessly.d.ts +4 -2
  42. package/dist/can-use-parallel-encoding.d.ts +2 -1
  43. package/dist/check-version-requirements.d.ts +2 -1
  44. package/dist/client.d.ts +302 -280
  45. package/dist/client.js +2 -2
  46. package/dist/codec-supports-media.d.ts +4 -3
  47. package/dist/codec.d.ts +1 -1
  48. package/dist/collect-assets.d.ts +1 -1
  49. package/dist/combine-audio.d.ts +4 -2
  50. package/dist/combine-chunks.d.ts +2 -1
  51. package/dist/combine-video-streams.d.ts +4 -2
  52. package/dist/compositor/compositor.d.ts +4 -3
  53. package/dist/compositor/get-executable-path.d.ts +4 -4
  54. package/dist/compress-audio.d.ts +4 -2
  55. package/dist/create-audio.d.ts +4 -2
  56. package/dist/create-silent-audio.d.ts +2 -1
  57. package/dist/crf.d.ts +6 -4
  58. package/dist/cycle-browser-tabs.d.ts +2 -1
  59. package/dist/ensure-browser.d.ts +1 -52
  60. package/dist/error-handling/handle-javascript-exception.d.ts +1 -1
  61. package/dist/error-handling/handle-javascript-exception.js +0 -5
  62. package/dist/error-handling/symbolicateable-error.d.ts +1 -1
  63. package/dist/error-handling/symbolicateable-error.js +0 -4
  64. package/dist/error-handling.js +1 -1
  65. package/dist/esm/client.mjs +329 -242
  66. package/dist/esm/index.mjs +129 -110
  67. package/dist/extract-audio.d.ts +3 -2
  68. package/dist/ffmpeg-args.d.ts +12 -6
  69. package/dist/finalize-fast-start.d.ts +2 -1
  70. package/dist/get-browser-instance.d.ts +6 -4
  71. package/dist/get-codec-name.d.ts +6 -3
  72. package/dist/get-compositions.d.ts +2 -1
  73. package/dist/get-concurrency.d.ts +1 -1
  74. package/dist/get-concurrency.js +1 -1
  75. package/dist/get-duration-from-frame-range.d.ts +1 -1
  76. package/dist/get-extension-from-codec.d.ts +2 -1
  77. package/dist/get-frame-padded-index.d.ts +2 -1
  78. package/dist/get-local-browser-executable.d.ts +4 -2
  79. package/dist/get-port.d.ts +1 -1
  80. package/dist/get-prores-profile-name.d.ts +3 -1
  81. package/dist/get-silent-parts.d.ts +5 -4
  82. package/dist/get-video-metadata.d.ts +4 -3
  83. package/dist/get-video-threads-flag.d.ts +2 -1
  84. package/dist/goto-page-or-throw.d.ts +1 -1
  85. package/dist/guess-extension-for-media.d.ts +2 -1
  86. package/dist/image-format.d.ts +6 -5
  87. package/dist/index.d.ts +213 -440
  88. package/dist/index.js +18 -18
  89. package/dist/is-audio-codec.d.ts +2 -1
  90. package/dist/log-level.d.ts +2 -2
  91. package/dist/logger.d.ts +6 -6
  92. package/dist/make-page.d.ts +5 -3
  93. package/dist/memory/from-macos-sysctl.d.ts +2 -1
  94. package/dist/memory/from-proc-meminfo.d.ts +2 -1
  95. package/dist/memory/get-available-memory.d.ts +2 -1
  96. package/dist/merge-audio-track.d.ts +1 -1
  97. package/dist/merge-audio-track.js +24 -23
  98. package/dist/merge-inline-audio-tracks.d.ts +2 -1
  99. package/dist/mux-video-and-audio.d.ts +5 -3
  100. package/dist/offthread-video-server.d.ts +2 -1
  101. package/dist/offthread-video-server.js +6 -4
  102. package/dist/open-browser.d.ts +2 -2
  103. package/dist/options/allow-html-in-canvas.js +1 -2
  104. package/dist/options/api-key.d.ts +1 -1
  105. package/dist/options/api-key.js +1 -3
  106. package/dist/options/ask-ai.js +1 -1
  107. package/dist/options/audio-bitrate.js +1 -9
  108. package/dist/options/audio-codec.d.ts +23 -20
  109. package/dist/options/beep-on-finish.js +1 -1
  110. package/dist/options/benchmark-concurrencies.js +1 -2
  111. package/dist/options/binaries-directory.d.ts +1 -1
  112. package/dist/options/binaries-directory.js +1 -9
  113. package/dist/options/browser-executable.d.ts +1 -1
  114. package/dist/options/browser-executable.js +1 -1
  115. package/dist/options/browser.js +1 -2
  116. package/dist/options/bundle-cache.js +1 -2
  117. package/dist/options/canvas-tabs.js +1 -1
  118. package/dist/options/chrome-mode.d.ts +4 -4
  119. package/dist/options/chrome-mode.js +1 -6
  120. package/dist/options/color-space.d.ts +9 -5
  121. package/dist/options/color-space.js +1 -8
  122. package/dist/options/concurrency.d.ts +1 -1
  123. package/dist/options/concurrency.js +1 -5
  124. package/dist/options/config.js +1 -1
  125. package/dist/options/crf.js +1 -1
  126. package/dist/options/cross-site-isolation.js +1 -2
  127. package/dist/options/dark-mode.js +1 -2
  128. package/dist/options/default-coding-agent.d.ts +2 -2
  129. package/dist/options/default-coding-agent.js +1 -2
  130. package/dist/options/default-editor.d.ts +4 -4
  131. package/dist/options/default-editor.js +1 -3
  132. package/dist/options/default-premount-in-seconds.js +1 -1
  133. package/dist/options/delete-after.d.ts +1 -1
  134. package/dist/options/delete-after.js +1 -11
  135. package/dist/options/disable-shared-memory-capture.js +1 -3
  136. package/dist/options/disable-web-security.d.ts +1 -1
  137. package/dist/options/disable-web-security.js +1 -1
  138. package/dist/options/disallow-parallel-encoding.js +1 -1
  139. package/dist/options/enable-cancellation.js +1 -2
  140. package/dist/options/enable-lambda-insights.js +1 -2
  141. package/dist/options/enable-multiprocess-on-linux.js +1 -13
  142. package/dist/options/encoding-buffer-size.d.ts +4 -2
  143. package/dist/options/encoding-buffer-size.js +1 -3
  144. package/dist/options/encoding-max-rate.d.ts +1 -1
  145. package/dist/options/encoding-max-rate.js +1 -3
  146. package/dist/options/enforce-audio.js +1 -15
  147. package/dist/options/env-file.js +1 -3
  148. package/dist/options/every-nth-frame.d.ts +1 -1
  149. package/dist/options/every-nth-frame.js +1 -6
  150. package/dist/options/experimental-client-side-rendering.d.ts +16 -0
  151. package/dist/options/experimental-client-side-rendering.js +30 -0
  152. package/dist/options/experimental-keep-audio-context-alive.js +1 -3
  153. package/dist/options/folder-expiry.d.ts +1 -1
  154. package/dist/options/folder-expiry.js +1 -4
  155. package/dist/options/for-seamless-aac-concatenation.js +1 -3
  156. package/dist/options/force-new-studio.js +1 -1
  157. package/dist/options/frames.d.ts +1 -1
  158. package/dist/options/frames.js +1 -4
  159. package/dist/options/gl.d.ts +6 -6
  160. package/dist/options/gl.js +3 -28
  161. package/dist/options/gop-size.js +1 -3
  162. package/dist/options/hardware-acceleration.d.ts +3 -3
  163. package/dist/options/headless.js +1 -1
  164. package/dist/options/ignore-certificate-errors.d.ts +1 -1
  165. package/dist/options/ignore-certificate-errors.js +1 -1
  166. package/dist/options/image-sequence-pattern.js +1 -5
  167. package/dist/options/image-sequence.js +1 -1
  168. package/dist/options/index.d.ts +91 -72
  169. package/dist/options/index.js +2 -0
  170. package/dist/options/interactivity.js +1 -1
  171. package/dist/options/ipv4.js +1 -1
  172. package/dist/options/is-production.d.ts +1 -1
  173. package/dist/options/is-production.js +1 -4
  174. package/dist/options/jpeg-quality.d.ts +1 -1
  175. package/dist/options/jpeg-quality.js +1 -4
  176. package/dist/options/keyboard-shortcuts.js +1 -1
  177. package/dist/options/latency-hint.d.ts +1 -1
  178. package/dist/options/latency-hint.js +1 -10
  179. package/dist/options/license-key.d.ts +1 -1
  180. package/dist/options/license-key.js +1 -2
  181. package/dist/options/log-level.d.ts +4 -3
  182. package/dist/options/log-level.js +1 -16
  183. package/dist/options/metadata.js +2 -7
  184. package/dist/options/mute.js +1 -1
  185. package/dist/options/no-open.js +1 -1
  186. package/dist/options/number-of-gif-loops.d.ts +1 -1
  187. package/dist/options/number-of-gif-loops.js +1 -13
  188. package/dist/options/number-of-shared-audio-tags.js +1 -1
  189. package/dist/options/offthreadvideo-cache-size.d.ts +1 -1
  190. package/dist/options/offthreadvideo-cache-size.js +1 -11
  191. package/dist/options/offthreadvideo-threads.d.ts +1 -1
  192. package/dist/options/offthreadvideo-threads.js +1 -2
  193. package/dist/options/on-browser-download.d.ts +1 -1
  194. package/dist/options/on-browser-download.js +1 -2
  195. package/dist/options/options-map.d.ts +180 -180
  196. package/dist/options/out-dir.d.ts +1 -1
  197. package/dist/options/out-dir.js +1 -4
  198. package/dist/options/override-duration.js +1 -1
  199. package/dist/options/override-fps.js +1 -1
  200. package/dist/options/override-height.js +1 -1
  201. package/dist/options/override-width.js +1 -1
  202. package/dist/options/overwrite.js +1 -5
  203. package/dist/options/package-manager.d.ts +1 -1
  204. package/dist/options/package-manager.js +1 -12
  205. package/dist/options/pixel-format.d.ts +6 -5
  206. package/dist/options/pixel-format.js +1 -2
  207. package/dist/options/port.js +1 -1
  208. package/dist/options/prefer-lossless.d.ts +1 -1
  209. package/dist/options/prefer-lossless.js +1 -4
  210. package/dist/options/preserve-pitch-on-playback.d.ts +19 -0
  211. package/dist/options/preserve-pitch-on-playback.js +36 -0
  212. package/dist/options/preview-sample-rate.js +1 -3
  213. package/dist/options/props.js +1 -5
  214. package/dist/options/prores-profile.d.ts +2 -2
  215. package/dist/options/prores-profile.js +1 -5
  216. package/dist/options/public-dir.d.ts +1 -1
  217. package/dist/options/public-dir.js +1 -2
  218. package/dist/options/public-license-key.d.ts +1 -1
  219. package/dist/options/public-license-key.js +1 -3
  220. package/dist/options/public-path.d.ts +1 -1
  221. package/dist/options/public-path.js +1 -5
  222. package/dist/options/repro.d.ts +3 -1
  223. package/dist/options/repro.js +1 -1
  224. package/dist/options/rspack.js +1 -1
  225. package/dist/options/runs.js +1 -3
  226. package/dist/options/sample-rate.d.ts +2 -2
  227. package/dist/options/sample-rate.js +1 -2
  228. package/dist/options/scale.js +1 -5
  229. package/dist/options/sequence-activity-limit.js +1 -4
  230. package/dist/options/show-layer-frame-numbers.js +1 -3
  231. package/dist/options/show-premounting.js +1 -2
  232. package/dist/options/skip-skills.js +1 -1
  233. package/dist/options/still-frame.d.ts +1 -1
  234. package/dist/options/still-frame.js +1 -3
  235. package/dist/options/still-image-format.d.ts +3 -2
  236. package/dist/options/still-image-format.js +1 -2
  237. package/dist/options/timeout.d.ts +1 -1
  238. package/dist/options/timeout.js +1 -4
  239. package/dist/options/user-agent.d.ts +1 -1
  240. package/dist/options/user-agent.js +1 -1
  241. package/dist/options/version-flag.js +1 -1
  242. package/dist/options/video-bitrate.js +1 -7
  243. package/dist/options/video-cache-size.d.ts +1 -1
  244. package/dist/options/video-cache-size.js +1 -7
  245. package/dist/options/video-codec.d.ts +9 -7
  246. package/dist/options/video-codec.js +1 -1
  247. package/dist/options/video-image-format.d.ts +6 -5
  248. package/dist/options/video-image-format.js +1 -6
  249. package/dist/options/webhook-custom-data.d.ts +1 -1
  250. package/dist/options/webhook-custom-data.js +1 -1
  251. package/dist/options/webpack-poll.js +1 -1
  252. package/dist/options/x264-preset.d.ts +8 -7
  253. package/dist/options/x264-preset.js +1 -23
  254. package/dist/p-limit.d.ts +1 -1
  255. package/dist/pixel-format.d.ts +4 -3
  256. package/dist/pool.js +0 -2
  257. package/dist/port-config.d.ts +6 -5
  258. package/dist/prespawn-ffmpeg.d.ts +1 -1
  259. package/dist/prestitcher-memory-usage.d.ts +13 -0
  260. package/dist/prestitcher-memory-usage.js +33 -0
  261. package/dist/print-useful-error-message.d.ts +2 -1
  262. package/dist/probe-encoder.d.ts +8 -5
  263. package/dist/probe-shared-memory-capture.d.ts +4 -2
  264. package/dist/prores-profile.d.ts +4 -2
  265. package/dist/puppeteer-evaluate.d.ts +2 -2
  266. package/dist/puppeteer-screenshot.d.ts +4 -3
  267. package/dist/pure.d.ts +12 -15
  268. package/dist/remotion-shared-memory.d.ts +1 -1
  269. package/dist/remotion-shared-memory.js +199 -187
  270. package/dist/render-frame-and-retry-target-close.d.ts +10 -10
  271. package/dist/render-frame-with-option-to-reject.d.ts +7 -5
  272. package/dist/render-frame-with-option-to-reject.js +1 -5
  273. package/dist/render-frame.d.ts +8 -6
  274. package/dist/render-frames.d.ts +1 -40
  275. package/dist/render-has-audio.d.ts +3 -2
  276. package/dist/render-partitions.d.ts +7 -0
  277. package/dist/render-partitions.js +50 -0
  278. package/dist/replace-browser.d.ts +2 -1
  279. package/dist/repro.d.ts +1 -1
  280. package/dist/screenshot-task.d.ts +4 -3
  281. package/dist/seek-to-frame.d.ts +3 -2
  282. package/dist/select-composition.d.ts +1 -20
  283. package/dist/serve-handler/index.d.ts +1 -1
  284. package/dist/serve-handler/range-parser.d.ts +2 -2
  285. package/dist/serve-handler/range-parser.js +1 -1
  286. package/dist/serve-static.d.ts +2 -1
  287. package/dist/serve-static.js +4 -1
  288. package/dist/set-props-and-env.js +2 -6
  289. package/dist/stringify-ffmpeg-filter.d.ts +2 -1
  290. package/dist/stringify-ffmpeg-filter.js +20 -2
  291. package/dist/take-frame.d.ts +1 -1
  292. package/dist/test-gpu.d.ts +4 -2
  293. package/dist/validate-even-dimensions-with-codec.d.ts +4 -2
  294. package/dist/validate-ffmpeg-override.d.ts +1 -1
  295. package/dist/validate-number-of-gif-loops.d.ts +2 -1
  296. package/dist/validate-output-filename.d.ts +4 -2
  297. package/package.json +16 -16
@@ -106,44 +106,5 @@ export type RenderFramesOptions = Prettify<{
106
106
  serveUrl: string;
107
107
  } & Partial<ToOptions<typeof optionsMap.renderFrames>>>;
108
108
  export declare const internalRenderFrames: (args_0: InternalRenderFramesOptions) => Promise<RenderFramesOutput>;
109
- export declare const renderFrames: (options: {
110
- readonly mediaCacheSizeInBytes?: number | null | undefined;
111
- readonly forSeamlessAacConcatenation?: boolean | undefined;
112
- readonly offthreadVideoCacheSizeInBytes?: number | null | undefined;
113
- readonly offthreadVideoThreads?: number | null | undefined;
114
- readonly jpegQuality?: number | undefined;
115
- readonly logLevel?: "error" | "info" | "trace" | "verbose" | "warn" | undefined;
116
- readonly binariesDirectory?: string | null | undefined;
117
- readonly onBrowserDownload?: import(".").OnBrowserDownload | undefined;
118
- readonly chromeMode?: "chrome-for-testing" | "headless-shell" | undefined;
119
- readonly imageSequencePattern?: string | null | undefined;
120
- readonly sampleRate?: number | undefined;
121
- onStart: (data: OnStartData) => void;
122
- onFrameUpdate: (framesRendered: number, frameIndex: number, timeToRenderInMilliseconds: number) => void;
123
- outputDir: string | null;
124
- inputProps: Record<string, unknown>;
125
- envVariables?: Record<string, string> | undefined;
126
- imageFormat?: "jpeg" | "none" | "png" | undefined;
127
- quality?: undefined;
128
- frameRange?: FrameRange | null | undefined;
129
- frames?: number[] | undefined;
130
- everyNthFrame?: number | undefined;
131
- dumpBrowserLogs?: boolean | undefined;
132
- verbose?: boolean | undefined;
133
- puppeteerInstance?: HeadlessBrowser | undefined;
134
- browserExecutable?: BrowserExecutable | undefined;
135
- onBrowserLog?: ((log: BrowserLog) => void) | undefined;
136
- onFrameBuffer?: ((buffer: Buffer, frame: number) => void | Promise<void>) | undefined;
137
- onDownload?: RenderMediaOnDownload | undefined;
138
- timeoutInMilliseconds?: number | undefined;
139
- chromiumOptions?: ChromiumOptions | undefined;
140
- scale?: number | undefined;
141
- port?: number | null | undefined;
142
- cancelSignal?: CancelSignal | undefined;
143
- composition: VideoConfig;
144
- muted?: boolean | undefined;
145
- concurrency?: string | number | null | undefined;
146
- onArtifact?: OnArtifact | null | undefined;
147
- serveUrl: string;
148
- }) => Promise<RenderFramesOutput>;
109
+ export declare const renderFrames: (options: RenderFramesOptions) => Promise<RenderFramesOutput>;
149
110
  export {};
@@ -1,7 +1,8 @@
1
1
  import type { RenderAssetInfo } from './assets/download-map';
2
+ import type { Codec } from './codec';
2
3
  export declare const getShouldRenderAudio: ({ codec, assetsInfo, enforceAudioTrack, muted, }: {
3
- codec: "aac" | "av1" | "gif" | "h264" | "h264-mkv" | "h264-ts" | "h265" | "mp3" | "prores" | "vp8" | "vp9" | "wav";
4
+ codec: Codec;
4
5
  assetsInfo: RenderAssetInfo | null;
5
6
  enforceAudioTrack: boolean;
6
7
  muted: boolean;
7
- }) => "maybe" | "no" | "yes";
8
+ }) => 'yes' | 'maybe' | 'no';
@@ -0,0 +1,7 @@
1
+ export declare const renderPartitions: ({ frames, concurrency, }: {
2
+ frames: number[];
3
+ concurrency: number;
4
+ }) => {
5
+ partitions: number[][];
6
+ getNextFrame: (pageIndex: number) => number;
7
+ };
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderPartitions = void 0;
4
+ const renderPartitions = ({ frames, concurrency, }) => {
5
+ const partitions = [];
6
+ let start = 0;
7
+ for (let i = 0; i < concurrency; i++) {
8
+ const end = start + Math.ceil((frames.length - start) / (concurrency - i));
9
+ partitions.push(frames.slice(start, end));
10
+ start = end;
11
+ }
12
+ return {
13
+ partitions,
14
+ getNextFrame: (pageIndex) => {
15
+ if (partitions[pageIndex].length === 0) {
16
+ const partitionLengths = partitions.map((p) => p.length);
17
+ if (partitionLengths.every((p) => p === 0)) {
18
+ throw new Error('No more frames to render');
19
+ }
20
+ let longestRemainingPartitionIndex = -1;
21
+ for (let i = 0; i < partitions.length; i++) {
22
+ if (longestRemainingPartitionIndex === -1) {
23
+ longestRemainingPartitionIndex = i;
24
+ continue;
25
+ }
26
+ if (partitions[i].length >
27
+ partitions[longestRemainingPartitionIndex].length) {
28
+ longestRemainingPartitionIndex = i;
29
+ }
30
+ }
31
+ if (longestRemainingPartitionIndex === -1) {
32
+ throw new Error('No more frames to render');
33
+ }
34
+ // Round up - let's say only one frame is left to render, we should take this one
35
+ const slicePoint = Math.ceil(partitions[longestRemainingPartitionIndex].length / 2) -
36
+ // but don't forget it's zero indexed :)
37
+ 1;
38
+ partitions[pageIndex] =
39
+ partitions[longestRemainingPartitionIndex].slice(slicePoint);
40
+ partitions[longestRemainingPartitionIndex] = partitions[longestRemainingPartitionIndex].slice(0, slicePoint);
41
+ }
42
+ const value = partitions[pageIndex].shift();
43
+ if (value === undefined) {
44
+ throw new Error('No more frames to render');
45
+ }
46
+ return value;
47
+ },
48
+ };
49
+ };
50
+ exports.renderPartitions = renderPartitions;
@@ -1,6 +1,7 @@
1
1
  import type { HeadlessBrowser } from './browser/Browser';
2
+ import type { LogLevel } from './log-level';
2
3
  export type BrowserReplacer = {
3
4
  getBrowser: () => HeadlessBrowser;
4
5
  replaceBrowser: (make: () => Promise<HeadlessBrowser>, makeNewPages: () => Promise<void>) => Promise<HeadlessBrowser>;
5
6
  };
6
- export declare const handleBrowserCrash: (instance: HeadlessBrowser, logLevel: "error" | "info" | "trace" | "verbose" | "warn", indent: boolean) => BrowserReplacer;
7
+ export declare const handleBrowserCrash: (instance: HeadlessBrowser, logLevel: LogLevel, indent: boolean) => BrowserReplacer;
package/dist/repro.d.ts CHANGED
@@ -13,7 +13,7 @@ type ReproWriter = {
13
13
  }) => Promise<void>;
14
14
  };
15
15
  export declare const getReproWriter: () => ReproWriter;
16
- export declare const writeInRepro: (level: string, message?: any, ...optionalParams: any[]) => void;
16
+ export declare const writeInRepro: (level: string, ...args: Parameters<typeof console.log>) => void;
17
17
  export declare const enableRepro: ({ serveUrl, compositionName, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, }: {
18
18
  serveUrl: string;
19
19
  compositionName: string;
@@ -1,10 +1,11 @@
1
1
  import type { Page } from './browser/BrowserPage';
2
+ import type { StillImageFormat } from './image-format';
2
3
  import type { CapturedFrame, RemotionSharedMemoryCapture } from './remotion-shared-memory';
3
4
  export declare const screenshotTask: ({ format, height, omitBackground, page, width, path, jpegQuality, scale, remotionSharedMemory, }: {
4
5
  page: Page;
5
- format: "jpeg" | "pdf" | "png" | "webp";
6
- path?: string | undefined;
7
- jpegQuality?: number | undefined;
6
+ format: StillImageFormat;
7
+ path?: string;
8
+ jpegQuality?: number;
8
9
  omitBackground: boolean;
9
10
  width: number;
10
11
  height: number;
@@ -1,17 +1,18 @@
1
1
  import type { Page } from './browser/BrowserPage';
2
+ import type { LogLevel } from './log-level';
2
3
  export declare const waitForReady: ({ page, timeoutInMilliseconds, frame, indent, logLevel, }: {
3
4
  page: Page;
4
5
  timeoutInMilliseconds: number;
5
6
  frame: number | null;
6
7
  indent: boolean;
7
- logLevel: "error" | "info" | "trace" | "verbose" | "warn";
8
+ logLevel: LogLevel;
8
9
  }) => Promise<unknown>;
9
10
  export declare const seekToFrame: ({ frame, page, composition, timeoutInMilliseconds, logLevel, indent, attempt, }: {
10
11
  frame: number;
11
12
  composition: string;
12
13
  page: Page;
13
14
  timeoutInMilliseconds: number;
14
- logLevel: "error" | "info" | "trace" | "verbose" | "warn";
15
+ logLevel: LogLevel;
15
16
  indent: boolean;
16
17
  attempt: number;
17
18
  }) => Promise<void>;
@@ -44,24 +44,5 @@ type InternalReturnType = {
44
44
  };
45
45
  export declare const internalSelectCompositionRaw: (options: InternalSelectCompositionsConfig) => Promise<InternalReturnType>;
46
46
  export declare const internalSelectComposition: (options: InternalSelectCompositionsConfig) => Promise<InternalReturnType>;
47
- export declare const selectComposition: (options: {
48
- readonly mediaCacheSizeInBytes?: number | null | undefined;
49
- readonly offthreadVideoCacheSizeInBytes?: number | null | undefined;
50
- readonly offthreadVideoThreads?: number | null | undefined;
51
- readonly logLevel?: "error" | "info" | "trace" | "verbose" | "warn" | undefined;
52
- readonly timeoutInMilliseconds?: number | undefined;
53
- readonly binariesDirectory?: string | null | undefined;
54
- readonly onBrowserDownload?: import(".").OnBrowserDownload | undefined;
55
- readonly chromeMode?: "chrome-for-testing" | "headless-shell" | undefined;
56
- inputProps?: Record<string, unknown> | undefined;
57
- envVariables?: Record<string, string> | undefined;
58
- puppeteerInstance?: HeadlessBrowser | undefined;
59
- onBrowserLog?: ((log: BrowserLog) => void) | undefined;
60
- browserExecutable?: BrowserExecutable | undefined;
61
- chromiumOptions?: ChromiumOptions | undefined;
62
- port?: number | null | undefined;
63
- verbose?: boolean | undefined;
64
- serveUrl: string;
65
- id: string;
66
- }) => Promise<VideoConfig>;
47
+ export declare const selectComposition: (options: SelectCompositionOptions) => Promise<VideoConfig>;
67
48
  export {};
@@ -1,4 +1,4 @@
1
1
  import type { IncomingMessage, ServerResponse } from 'node:http';
2
- export declare const serveHandler: (request: IncomingMessage, response: ServerResponse<IncomingMessage>, config: {
2
+ export declare const serveHandler: (request: IncomingMessage, response: ServerResponse, config: {
3
3
  public: string;
4
4
  }) => Promise<void>;
@@ -4,10 +4,10 @@
4
4
  * Copyright(c) 2015-2016 Douglas Christopher Wilson
5
5
  * MIT Licensed
6
6
  */
7
- export declare const rangeParser: (size: number, str: string) => -2 | -1 | {
7
+ export declare const rangeParser: (size: number, str: string) => {
8
8
  type: string;
9
9
  ranges: {
10
10
  start: number;
11
11
  end: number;
12
12
  }[];
13
- };
13
+ } | -1 | -2;
@@ -27,7 +27,7 @@ const rangeParser = (size, str) => {
27
27
  let end = parseInt(range[1], 10);
28
28
  // -nnn
29
29
  if (isNaN(start)) {
30
- start = size - end;
30
+ start = Math.max(size - end, 0);
31
31
  end = size - 1;
32
32
  // nnn-
33
33
  }
@@ -1,11 +1,12 @@
1
1
  import type { DownloadMap } from './assets/download-map';
2
2
  import type { Compositor } from './compositor/compositor';
3
+ import type { LogLevel } from './log-level';
3
4
  export declare const serveStatic: (path: string | null, options: {
4
5
  port: number | null;
5
6
  downloadMap: DownloadMap;
6
7
  remotionRoot: string;
7
8
  offthreadVideoThreads: number;
8
- logLevel: "error" | "info" | "trace" | "verbose" | "warn";
9
+ logLevel: LogLevel;
9
10
  indent: boolean;
10
11
  offthreadVideoCacheSizeInBytes: number | null;
11
12
  binariesDirectory: string | null;
@@ -7,6 +7,7 @@ exports.serveStatic = void 0;
7
7
  const node_http_1 = __importDefault(require("node:http"));
8
8
  const get_port_1 = require("./get-port");
9
9
  const offthread_video_server_1 = require("./offthread-video-server");
10
+ const port_config_1 = require("./port-config");
10
11
  const serve_handler_1 = require("./serve-handler");
11
12
  const serveStatic = async (path, options) => {
12
13
  const { listener: offthreadRequest, close: closeCompositor, compositor, } = (0, offthread_video_server_1.startOffthreadVideoServer)({
@@ -55,6 +56,8 @@ const serveStatic = async (path, options) => {
55
56
  const maxTries = 10;
56
57
  // Rendering only needs local access, unlike the Studio server.
57
58
  const host = '127.0.0.1';
59
+ // URLs use localhost, which can resolve to another supported address family.
60
+ const { hostsToTry } = (0, port_config_1.getPortConfig)(options.forceIPv4);
58
61
  for (let i = 0; i < maxTries; i++) {
59
62
  let unlock = () => { };
60
63
  try {
@@ -64,7 +67,7 @@ const serveStatic = async (path, options) => {
64
67
  desiredPort: (_a = options === null || options === void 0 ? void 0 : options.port) !== null && _a !== void 0 ? _a : undefined,
65
68
  from: 3000,
66
69
  to: 3100,
67
- hostsToTry: [host],
70
+ hostsToTry,
68
71
  })
69
72
  .then(({ port, unlockPort }) => {
70
73
  unlock = unlockPort;
@@ -16,9 +16,7 @@ const innerSetPropsAndEnv = async ({ serializedInputPropsWithCustomSchema, envVa
16
16
  page.setDefaultTimeout(actualTimeout);
17
17
  page.setDefaultNavigationTimeout(actualTimeout);
18
18
  const urlToVisit = (0, normalize_serve_url_1.normalizeServeUrl)(serveUrl);
19
- await page.evaluateOnNewDocument((timeout, mainTab, cacheSizeInBytes, initMemoryAvailable, sRate
20
- // eslint-disable-next-line max-params
21
- ) => {
19
+ await page.evaluateOnNewDocument((timeout, mainTab, cacheSizeInBytes, initMemoryAvailable, sRate) => {
22
20
  window.remotion_puppeteerTimeout = timeout;
23
21
  window.remotion_isMainTab = mainTab;
24
22
  window.remotion_mediaCacheSizeInBytes = cacheSizeInBytes;
@@ -43,9 +41,7 @@ const innerSetPropsAndEnv = async ({ serializedInputPropsWithCustomSchema, envVa
43
41
  if (darkMode) {
44
42
  await page.setAutoDarkModeOverride();
45
43
  }
46
- await page.evaluateOnNewDocument((input, key, port, audEnabled, vidEnabled, level
47
- // eslint-disable-next-line max-params
48
- ) => {
44
+ await page.evaluateOnNewDocument((input, key, port, audEnabled, vidEnabled, level) => {
49
45
  window.remotion_inputProps = input;
50
46
  window.remotion_initialFrame = key;
51
47
  window.remotion_attempt = 1;
@@ -1,4 +1,5 @@
1
1
  import type { AssetVolume, MediaAsset } from './assets/types';
2
+ import type { LogLevel } from './log-level';
2
3
  export type FilterWithoutPaddingApplied = ProcessedTrack & {
3
4
  filter: string | null;
4
5
  actualTrimLeft: number;
@@ -18,7 +19,7 @@ export declare const stringifyFfmpegFilter: ({ channels, volume, fps, assetDurat
18
19
  trimRightOffset: number;
19
20
  asset: MediaAsset;
20
21
  indent: boolean;
21
- logLevel: "error" | "info" | "trace" | "verbose" | "warn";
22
+ logLevel: LogLevel;
22
23
  presentationTimeOffsetInSeconds: number;
23
24
  sampleRate: number;
24
25
  }) => FilterWithoutPaddingApplied | null;
@@ -24,7 +24,20 @@ const stringifyTrim = (trim) => {
24
24
  }
25
25
  return asString;
26
26
  };
27
- const trimAndSetTempo = ({ assetDuration, asset, trimLeftOffset, trimRightOffset, fps, indent, logLevel, }) => {
27
+ // When `preservePitch` is disabled, the speed change must not go through
28
+ // `atempo` (which keeps the pitch). Changing the sample rate and then
29
+ // resampling back to the target rate speeds up or slows down playback
30
+ // while letting the pitch shift along with it (tape / chipmunk effect).
31
+ const calculateSpeedChangeFilter = ({ playbackRate, preservePitch, sampleRate, }) => {
32
+ if (playbackRate === 1) {
33
+ return null;
34
+ }
35
+ if (preservePitch) {
36
+ return (0, calculate_atempo_1.calculateATempo)(playbackRate);
37
+ }
38
+ return `asetrate=${sampleRate}*${playbackRate},aresample=${sampleRate}`;
39
+ };
40
+ const trimAndSetTempo = ({ assetDuration, asset, trimLeftOffset, trimRightOffset, fps, indent, logLevel, sampleRate, }) => {
28
41
  // We need to apply the tempo filter first
29
42
  // because the atempo filter is not frame-perfect.
30
43
  // It creates a small offset and the offset needs to be the same for all audio tracks, before processing it further.
@@ -54,7 +67,11 @@ const trimAndSetTempo = ({ assetDuration, asset, trimLeftOffset, trimRightOffset
54
67
  }
55
68
  return {
56
69
  filter: [
57
- (0, calculate_atempo_1.calculateATempo)(asset.playbackRate),
70
+ calculateSpeedChangeFilter({
71
+ playbackRate: asset.playbackRate,
72
+ preservePitch: asset.preservePitch,
73
+ sampleRate,
74
+ }),
58
75
  `atrim=${stringifyTrim(trimLeft)}:${stringifyTrim(trimRightOrAssetDuration)}`,
59
76
  ],
60
77
  actualTrimLeft: trimLeft,
@@ -94,6 +111,7 @@ const stringifyFfmpegFilter = ({ channels, volume, fps, assetDuration, chunkLeng
94
111
  fps,
95
112
  indent,
96
113
  logLevel,
114
+ sampleRate,
97
115
  });
98
116
  const volumeFilter = (0, ffmpeg_volume_expression_1.ffmpegVolumeExpression)({
99
117
  volume,
@@ -14,7 +14,7 @@ type TakeFrameOptions = {
14
14
  remotionSharedMemory: RemotionSharedMemoryCapture | null;
15
15
  };
16
16
  type TakeFrameResult<T extends RemotionSharedMemoryCapture | null> = T extends null ? Buffer | null : CapturedFrame | null;
17
- export declare const takeFrame: <T extends RemotionSharedMemoryCapture | null>({ freePage, imageFormat, jpegQuality, width, height, output, scale, wantsBuffer, timeoutInMilliseconds, remotionSharedMemory, }: Omit<TakeFrameOptions, "remotionSharedMemory"> & {
17
+ export declare const takeFrame: <T extends RemotionSharedMemoryCapture | null>({ freePage, imageFormat, jpegQuality, width, height, output, scale, wantsBuffer, timeoutInMilliseconds, remotionSharedMemory, }: Omit<TakeFrameOptions, 'remotionSharedMemory'> & {
18
18
  remotionSharedMemory: T;
19
19
  }) => Promise<TakeFrameResult<T>>;
20
20
  export {};
@@ -1,6 +1,8 @@
1
1
  import type { BrowserExecutable } from './browser-executable';
2
2
  import type { OnLog } from './browser/BrowserPage';
3
+ import type { LogLevel } from './log-level';
3
4
  import type { ChromiumOptions } from './open-browser';
5
+ import type { ChromeMode } from './options/chrome-mode';
4
6
  import type { OnBrowserDownload } from './options/on-browser-download';
5
7
  type Item = {
6
8
  feature: string;
@@ -9,11 +11,11 @@ type Item = {
9
11
  export declare const getChromiumGpuInformation: ({ browserExecutable, indent, logLevel, chromiumOptions, timeoutInMilliseconds, onBrowserDownload, chromeMode, onLog, }: {
10
12
  browserExecutable: BrowserExecutable;
11
13
  indent: boolean;
12
- logLevel: "error" | "info" | "trace" | "verbose" | "warn";
14
+ logLevel: LogLevel;
13
15
  chromiumOptions: ChromiumOptions;
14
16
  timeoutInMilliseconds: number;
15
17
  onBrowserDownload: OnBrowserDownload;
16
- chromeMode: "chrome-for-testing" | "headless-shell";
18
+ chromeMode: ChromeMode;
17
19
  onLog: OnLog;
18
20
  }) => Promise<Item[]>;
19
21
  export {};
@@ -1,11 +1,13 @@
1
+ import type { Codec } from './codec';
2
+ import type { LogLevel } from './log-level';
1
3
  export declare const validateEvenDimensionsWithCodec: ({ width, height, codec, scale, wantsImageSequence, indent, logLevel, }: {
2
4
  width: number;
3
5
  height: number;
4
6
  scale: number;
5
- codec: "aac" | "av1" | "gif" | "h264" | "h264-mkv" | "h264-ts" | "h265" | "mp3" | "prores" | "vp8" | "vp9" | "wav";
7
+ codec: Codec;
6
8
  wantsImageSequence: boolean;
7
9
  indent: boolean;
8
- logLevel: "error" | "info" | "trace" | "verbose" | "warn";
10
+ logLevel: LogLevel;
9
11
  }) => {
10
12
  actualWidth: number;
11
13
  actualHeight: number;
@@ -1,2 +1,2 @@
1
1
  import type { FfmpegOverrideFn } from './ffmpeg-override';
2
- export declare const validateFfmpegOverride: (ffmpegArgsHook?: FfmpegOverrideFn | undefined) => void;
2
+ export declare const validateFfmpegOverride: (ffmpegArgsHook?: FfmpegOverrideFn) => void;
@@ -1 +1,2 @@
1
- export declare const validateNumberOfGifLoops: (numberOfGifLoops: unknown, codec: "aac" | "av1" | "gif" | "h264" | "h264-mkv" | "h264-ts" | "h265" | "mp3" | "prores" | "vp8" | "vp9" | "wav") => void;
1
+ import type { Codec } from './codec';
2
+ export declare const validateNumberOfGifLoops: (numberOfGifLoops: unknown, codec: Codec) => void;
@@ -1,6 +1,8 @@
1
- export declare const validateOutputFilename: <T extends "aac" | "av1" | "gif" | "h264" | "h264-mkv" | "h264-ts" | "h265" | "mp3" | "prores" | "vp8" | "vp9" | "wav">({ codec, audioCodecSetting, extension, preferLossless, separateAudioTo, }: {
1
+ import type { Codec } from './codec';
2
+ import type { AudioCodec } from './options/audio-codec';
3
+ export declare const validateOutputFilename: <T extends Codec>({ codec, audioCodecSetting, extension, preferLossless, separateAudioTo, }: {
2
4
  codec: T;
3
- audioCodecSetting: "aac" | "mp3" | "opus" | "pcm-16" | null;
5
+ audioCodecSetting: AudioCodec | null;
4
6
  extension: string | null;
5
7
  preferLossless: boolean;
6
8
  separateAudioTo: string | null;
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/renderer"
4
4
  },
5
5
  "name": "@remotion/renderer",
6
- "version": "4.0.537",
6
+ "version": "4.0.539",
7
7
  "description": "Render Remotion videos using Node.js or Bun",
8
8
  "main": "dist/index.js",
9
9
  "types": "dist/index.d.ts",
@@ -12,8 +12,8 @@
12
12
  "format": "oxfmt src",
13
13
  "lint": "eslint src",
14
14
  "test": "bun test src",
15
- "watch": "tsgo -w",
16
- "make": "tsgo -d && bun --env-file=../.env.bundle bundle.ts"
15
+ "watch": "tsc -w",
16
+ "make": "tsc -d && bun --env-file=../.env.bundle bundle.ts"
17
17
  },
18
18
  "author": "Jonny Burger <jonny@remotion.dev>",
19
19
  "license": "SEE LICENSE IN LICENSE.md",
@@ -22,11 +22,11 @@
22
22
  },
23
23
  "dependencies": {
24
24
  "execa": "5.1.1",
25
- "remotion": "4.0.537",
26
- "@remotion/streaming": "4.0.537",
25
+ "remotion": "4.0.539",
26
+ "@remotion/streaming": "4.0.539",
27
27
  "source-map": "0.8.0",
28
28
  "ws": "8.21.0",
29
- "@remotion/licensing": "4.0.537"
29
+ "@remotion/licensing": "4.0.539"
30
30
  },
31
31
  "peerDependencies": {
32
32
  "react": ">=16.8.0",
@@ -38,23 +38,23 @@
38
38
  "@happy-dom/global-registrator": "14.5.1",
39
39
  "react": "19.2.3",
40
40
  "react-dom": "19.2.3",
41
- "@typescript/native-preview": "7.0.0-dev.20260217.1",
41
+ "typescript": "7.1.0-beta",
42
42
  "@types/ws": "8.5.10",
43
- "@remotion/example-videos": "4.0.537",
44
- "@remotion/eslint-config-internal": "4.0.537",
43
+ "@remotion/example-videos": "4.0.539",
44
+ "@remotion/eslint-config-internal": "4.0.539",
45
45
  "eslint": "9.19.0",
46
46
  "@types/node": "20.12.14",
47
47
  "@types/pngjs": "6.0.5",
48
48
  "pngjs": "7.0.0"
49
49
  },
50
50
  "optionalDependencies": {
51
- "@remotion/compositor-darwin-arm64": "4.0.537",
52
- "@remotion/compositor-darwin-x64": "4.0.537",
53
- "@remotion/compositor-linux-arm64-gnu": "4.0.537",
54
- "@remotion/compositor-linux-arm64-musl": "4.0.537",
55
- "@remotion/compositor-linux-x64-gnu": "4.0.537",
56
- "@remotion/compositor-linux-x64-musl": "4.0.537",
57
- "@remotion/compositor-win32-x64-msvc": "4.0.537"
51
+ "@remotion/compositor-darwin-arm64": "4.0.539",
52
+ "@remotion/compositor-darwin-x64": "4.0.539",
53
+ "@remotion/compositor-linux-arm64-gnu": "4.0.539",
54
+ "@remotion/compositor-linux-arm64-musl": "4.0.539",
55
+ "@remotion/compositor-linux-x64-gnu": "4.0.539",
56
+ "@remotion/compositor-linux-x64-musl": "4.0.539",
57
+ "@remotion/compositor-win32-x64-msvc": "4.0.539"
58
58
  },
59
59
  "keywords": [
60
60
  "remotion",