@remotion/renderer 4.0.0-alpha13 → 4.0.0-alpha14

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 (149) hide show
  1. package/dist/assets/download-and-map-assets-to-file.d.ts +6 -4
  2. package/dist/assets/download-and-map-assets-to-file.js +30 -6
  3. package/dist/assets/download-file.d.ts +2 -2
  4. package/dist/assets/download-map.d.ts +3 -3
  5. package/dist/assets/ffmpeg-volume-expression.d.ts +2 -2
  6. package/dist/assets/get-audio-channels.d.ts +1 -0
  7. package/dist/assets/get-audio-channels.js +10 -5
  8. package/dist/assets/get-video-stream-duration.d.ts +9 -0
  9. package/dist/assets/get-video-stream-duration.js +71 -0
  10. package/dist/assets/read-file.js +1 -1
  11. package/dist/assets/types.d.ts +4 -4
  12. package/dist/audio-codec.d.ts +2 -2
  13. package/dist/browser/Browser.d.ts +9 -9
  14. package/dist/browser/Browser.js +26 -32
  15. package/dist/browser/BrowserFetcher.d.ts +1 -1
  16. package/dist/browser/BrowserPage.d.ts +11 -2
  17. package/dist/browser/BrowserPage.js +47 -12
  18. package/dist/browser/BrowserRunner.js +19 -2
  19. package/dist/browser/ConsoleMessage.d.ts +1 -1
  20. package/dist/browser/DOMWorld.js +8 -8
  21. package/dist/browser/EvalTypes.d.ts +7 -7
  22. package/dist/browser/FrameManager.js +11 -11
  23. package/dist/browser/JSHandle.js +14 -14
  24. package/dist/browser/LaunchOptions.d.ts +1 -1
  25. package/dist/browser/Launcher.js +0 -1
  26. package/dist/browser/LifecycleWatcher.d.ts +1 -1
  27. package/dist/browser/NetworkEventManager.d.ts +4 -4
  28. package/dist/browser/NodeWebSocketTransport.js +16 -16
  29. package/dist/browser/Product.d.ts +1 -1
  30. package/dist/browser/Target.d.ts +2 -1
  31. package/dist/browser/Target.js +8 -2
  32. package/dist/browser/devtools-types.d.ts +10 -10
  33. package/dist/browser/mitt/index.d.ts +6 -6
  34. package/dist/browser/revisions.d.ts +1 -1
  35. package/dist/browser/should-log-message.d.ts +24 -0
  36. package/dist/browser/should-log-message.js +72 -0
  37. package/dist/browser-executable.d.ts +1 -1
  38. package/dist/browser-log.d.ts +1 -1
  39. package/dist/browser.d.ts +1 -1
  40. package/dist/calculate-sar-dar-pixels.d.ts +9 -0
  41. package/dist/calculate-sar-dar-pixels.js +19 -0
  42. package/dist/chalk/index.d.ts +4 -4
  43. package/dist/codec-supports-media.d.ts +1 -1
  44. package/dist/codec.d.ts +2 -2
  45. package/dist/combine-videos.d.ts +1 -1
  46. package/dist/compositor/compose.d.ts +11 -2
  47. package/dist/compositor/compose.js +15 -4
  48. package/dist/compositor/compositor.d.ts +1 -1
  49. package/dist/compositor/compositor.js +1 -1
  50. package/dist/compositor/payloads.d.ts +5 -5
  51. package/dist/create-ffmpeg-complex-filter.d.ts +4 -1
  52. package/dist/crf.d.ts +1 -1
  53. package/dist/determine-resize-params.d.ts +1 -0
  54. package/dist/determine-resize-params.js +10 -0
  55. package/dist/determine-vcodec-ffmpeg-flags.d.ts +2 -0
  56. package/dist/determine-vcodec-ffmpeg-flags.js +13 -0
  57. package/dist/ensure-ffmpeg.d.ts +18 -0
  58. package/dist/ensure-ffmpeg.js +58 -0
  59. package/dist/ensure-presentation-timestamp.d.ts +15 -0
  60. package/dist/ensure-presentation-timestamp.js +88 -0
  61. package/dist/error-handling/symbolicate-error.js +4 -2
  62. package/dist/extract-frame-from-video.d.ts +16 -0
  63. package/dist/extract-frame-from-video.js +191 -0
  64. package/dist/ffmpeg-executable.d.ts +1 -0
  65. package/dist/ffmpeg-executable.js +2 -0
  66. package/dist/ffmpeg-flags.d.ts +31 -0
  67. package/dist/ffmpeg-flags.js +245 -0
  68. package/dist/ffmpeg-override.d.ts +1 -1
  69. package/dist/file-extensions.d.ts +1 -1
  70. package/dist/frame-range.d.ts +1 -1
  71. package/dist/frame-to-ffmpeg-timestamp.d.ts +1 -0
  72. package/dist/frame-to-ffmpeg-timestamp.js +8 -0
  73. package/dist/get-browser-instance.d.ts +6 -1
  74. package/dist/get-browser-instance.js +9 -4
  75. package/dist/get-can-extract-frames-fast.d.ts +14 -0
  76. package/dist/get-can-extract-frames-fast.js +71 -0
  77. package/dist/get-compositions.d.ts +18 -11
  78. package/dist/get-compositions.js +66 -49
  79. package/dist/get-frame-of-video-slow.d.ts +17 -0
  80. package/dist/get-frame-of-video-slow.js +72 -0
  81. package/dist/get-frame-padded-index.d.ts +1 -1
  82. package/dist/get-video-info.d.ts +8 -0
  83. package/dist/get-video-info.js +59 -0
  84. package/dist/image-format.d.ts +3 -3
  85. package/dist/index.d.ts +110 -21
  86. package/dist/index.js +25 -13
  87. package/dist/is-beyond-last-frame.d.ts +3 -0
  88. package/dist/is-beyond-last-frame.js +12 -0
  89. package/dist/jpeg-quality.d.ts +1 -0
  90. package/dist/jpeg-quality.js +2 -1
  91. package/dist/last-frame-from-video-cache.d.ts +17 -0
  92. package/dist/last-frame-from-video-cache.js +55 -0
  93. package/dist/legacy-webpack-config.d.ts +9 -0
  94. package/dist/legacy-webpack-config.js +13 -0
  95. package/dist/log-level.d.ts +1 -1
  96. package/dist/logger.d.ts +4 -2
  97. package/dist/logger.js +12 -5
  98. package/dist/make-cancel-signal.d.ts +2 -2
  99. package/dist/merge-audio-track.d.ts +1 -1
  100. package/dist/mime-types.js +1 -1
  101. package/dist/offthread-video-server.d.ts +36 -4
  102. package/dist/offthread-video-server.js +48 -4
  103. package/dist/open-browser.d.ts +19 -10
  104. package/dist/open-browser.js +34 -21
  105. package/dist/options/option.d.ts +1 -1
  106. package/dist/parse-browser-error-stack.d.ts +1 -1
  107. package/dist/perf.d.ts +1 -1
  108. package/dist/pixel-format.d.ts +1 -1
  109. package/dist/prepare-server.d.ts +20 -8
  110. package/dist/prepare-server.js +52 -8
  111. package/dist/preprocess-audio-track.d.ts +2 -2
  112. package/dist/prespawn-ffmpeg.d.ts +1 -1
  113. package/dist/prespawn-ffmpeg.js +7 -7
  114. package/dist/prores-profile.d.ts +1 -1
  115. package/dist/provide-screenshot.d.ts +0 -1
  116. package/dist/puppeteer-screenshot.d.ts +0 -1
  117. package/dist/puppeteer-screenshot.js +1 -2
  118. package/dist/quality.d.ts +1 -0
  119. package/dist/quality.js +21 -0
  120. package/dist/render-frames.d.ts +32 -11
  121. package/dist/render-frames.js +112 -77
  122. package/dist/render-media.d.ts +50 -21
  123. package/dist/render-media.js +249 -197
  124. package/dist/render-still.d.ts +33 -18
  125. package/dist/render-still.js +71 -43
  126. package/dist/replace-browser.d.ts +1 -1
  127. package/dist/screenshot-dom-element.d.ts +0 -1
  128. package/dist/screenshot-task.d.ts +0 -1
  129. package/dist/select-composition.d.ts +19 -11
  130. package/dist/select-composition.js +79 -42
  131. package/dist/serve-static.d.ts +2 -3
  132. package/dist/serve-static.js +2 -4
  133. package/dist/set-props-and-env.d.ts +1 -1
  134. package/dist/stitch-frames-to-video.d.ts +32 -11
  135. package/dist/stitch-frames-to-video.js +121 -99
  136. package/dist/stringify-ffmpeg-filter.d.ts +2 -2
  137. package/dist/symbolicate-stacktrace.d.ts +16 -3
  138. package/dist/symbolicate-stacktrace.js +49 -24
  139. package/dist/take-frame-and-compose.d.ts +0 -1
  140. package/dist/truthy.d.ts +1 -1
  141. package/dist/try-to-extract-frame-of-video-fast.d.ts +12 -0
  142. package/dist/try-to-extract-frame-of-video-fast.js +55 -0
  143. package/dist/types.d.ts +2 -2
  144. package/dist/validate-ffmpeg.d.ts +7 -0
  145. package/dist/validate-ffmpeg.js +77 -0
  146. package/dist/validate-opengl-renderer.d.ts +1 -1
  147. package/dist/warn-about-ffmpeg-version.d.ts +5 -0
  148. package/dist/warn-about-ffmpeg-version.js +37 -0
  149. package/package.json +11 -11
package/dist/index.js CHANGED
@@ -29,7 +29,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.RenderInternals = exports.validateOutputFilename = exports.stitchFramesToVideo = exports.selectComposition = exports.renderStill = exports.renderMedia = exports.renderFrames = exports.openBrowser = exports.makeCancelSignal = exports.validateSelectedPixelFormatAndImageFormatCombination = exports.getCompositions = exports.ErrorWithStackFrame = void 0;
30
30
  const execa_1 = __importDefault(require("execa"));
31
31
  const download_file_1 = require("./assets/download-file");
32
- const download_map_1 = require("./assets/download-map");
33
32
  const audio_codec_1 = require("./audio-codec");
34
33
  const browser_1 = require("./browser");
35
34
  const Browser_1 = require("./browser/Browser");
@@ -50,6 +49,7 @@ const symbolicateable_error_1 = require("./error-handling/symbolicateable-error"
50
49
  const file_extensions_1 = require("./file-extensions");
51
50
  const find_closest_package_json_1 = require("./find-closest-package-json");
52
51
  const frame_range_1 = require("./frame-range");
52
+ const get_compositions_1 = require("./get-compositions");
53
53
  const get_concurrency_1 = require("./get-concurrency");
54
54
  const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range");
55
55
  const get_extension_from_codec_1 = require("./get-extension-from-codec");
@@ -68,6 +68,11 @@ const open_browser_1 = require("./open-browser");
68
68
  const parse_browser_error_stack_1 = require("./parse-browser-error-stack");
69
69
  const perf = __importStar(require("./perf"));
70
70
  const pixel_format_1 = require("./pixel-format");
71
+ const prepare_server_1 = require("./prepare-server");
72
+ const render_frames_1 = require("./render-frames");
73
+ const render_media_1 = require("./render-media");
74
+ const render_still_1 = require("./render-still");
75
+ const select_composition_1 = require("./select-composition");
71
76
  const is_path_inside_1 = require("./serve-handler/is-path-inside");
72
77
  const serve_static_1 = require("./serve-static");
73
78
  const tmp_dir_1 = require("./tmp-dir");
@@ -79,22 +84,22 @@ const validate_videobitrate_1 = require("./validate-videobitrate");
79
84
  const wait_for_symbolication_error_to_be_done_1 = require("./wait-for-symbolication-error-to-be-done");
80
85
  var handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
81
86
  Object.defineProperty(exports, "ErrorWithStackFrame", { enumerable: true, get: function () { return handle_javascript_exception_1.ErrorWithStackFrame; } });
82
- var get_compositions_1 = require("./get-compositions");
83
- Object.defineProperty(exports, "getCompositions", { enumerable: true, get: function () { return get_compositions_1.getCompositions; } });
87
+ var get_compositions_2 = require("./get-compositions");
88
+ Object.defineProperty(exports, "getCompositions", { enumerable: true, get: function () { return get_compositions_2.getCompositions; } });
84
89
  var image_format_2 = require("./image-format");
85
90
  Object.defineProperty(exports, "validateSelectedPixelFormatAndImageFormatCombination", { enumerable: true, get: function () { return image_format_2.validateSelectedPixelFormatAndImageFormatCombination; } });
86
91
  var make_cancel_signal_1 = require("./make-cancel-signal");
87
92
  Object.defineProperty(exports, "makeCancelSignal", { enumerable: true, get: function () { return make_cancel_signal_1.makeCancelSignal; } });
88
93
  var open_browser_2 = require("./open-browser");
89
94
  Object.defineProperty(exports, "openBrowser", { enumerable: true, get: function () { return open_browser_2.openBrowser; } });
90
- var render_frames_1 = require("./render-frames");
91
- Object.defineProperty(exports, "renderFrames", { enumerable: true, get: function () { return render_frames_1.renderFrames; } });
92
- var render_media_1 = require("./render-media");
93
- Object.defineProperty(exports, "renderMedia", { enumerable: true, get: function () { return render_media_1.renderMedia; } });
94
- var render_still_1 = require("./render-still");
95
- Object.defineProperty(exports, "renderStill", { enumerable: true, get: function () { return render_still_1.renderStill; } });
96
- var select_composition_1 = require("./select-composition");
97
- Object.defineProperty(exports, "selectComposition", { enumerable: true, get: function () { return select_composition_1.selectComposition; } });
95
+ var render_frames_2 = require("./render-frames");
96
+ Object.defineProperty(exports, "renderFrames", { enumerable: true, get: function () { return render_frames_2.renderFrames; } });
97
+ var render_media_2 = require("./render-media");
98
+ Object.defineProperty(exports, "renderMedia", { enumerable: true, get: function () { return render_media_2.renderMedia; } });
99
+ var render_still_2 = require("./render-still");
100
+ Object.defineProperty(exports, "renderStill", { enumerable: true, get: function () { return render_still_2.renderStill; } });
101
+ var select_composition_2 = require("./select-composition");
102
+ Object.defineProperty(exports, "selectComposition", { enumerable: true, get: function () { return select_composition_2.selectComposition; } });
98
103
  var stitch_frames_to_video_1 = require("./stitch-frames-to-video");
99
104
  Object.defineProperty(exports, "stitchFramesToVideo", { enumerable: true, get: function () { return stitch_frames_to_video_1.stitchFramesToVideo; } });
100
105
  var validate_output_filename_1 = require("./validate-output-filename");
@@ -142,8 +147,6 @@ exports.RenderInternals = {
142
147
  isEqualOrBelowLogLevel: log_level_1.isEqualOrBelowLogLevel,
143
148
  isValidLogLevel: log_level_1.isValidLogLevel,
144
149
  perf,
145
- makeDownloadMap: download_map_1.makeDownloadMap,
146
- cleanDownloadMap: download_map_1.cleanDownloadMap,
147
150
  convertToPositiveFrameIndex: convert_to_positive_frame_index_1.convertToPositiveFrameIndex,
148
151
  findRemotionRoot: find_closest_package_json_1.findRemotionRoot,
149
152
  validateBitrate: validate_videobitrate_1.validateBitrate,
@@ -163,6 +166,7 @@ exports.RenderInternals = {
163
166
  validVideoImageFormats: image_format_1.validVideoImageFormats,
164
167
  DEFAULT_STILL_IMAGE_FORMAT: image_format_1.DEFAULT_STILL_IMAGE_FORMAT,
165
168
  DEFAULT_VIDEO_IMAGE_FORMAT: image_format_1.DEFAULT_VIDEO_IMAGE_FORMAT,
169
+ DEFAULT_JPEG_QUALITY: jpeg_quality_1.DEFAULT_JPEG_QUALITY,
166
170
  chalk: chalk_1.chalk,
167
171
  Log: logger_1.Log,
168
172
  getLogLevel: logger_1.getLogLevel,
@@ -170,6 +174,14 @@ exports.RenderInternals = {
170
174
  INDENT_TOKEN: logger_1.INDENT_TOKEN,
171
175
  isColorSupported: is_color_supported_1.isColorSupported,
172
176
  HeadlessBrowser: Browser_1.HeadlessBrowser,
177
+ prepareServer: prepare_server_1.prepareServer,
178
+ makeOrReuseServer: prepare_server_1.makeOrReuseServer,
179
+ internalRenderStill: render_still_1.internalRenderStill,
180
+ internalOpenBrowser: open_browser_1.internalOpenBrowser,
181
+ internalSelectComposition: select_composition_1.internalSelectComposition,
182
+ internalGetCompositions: get_compositions_1.internalGetCompositions,
183
+ internalRenderFrames: render_frames_1.internalRenderFrames,
184
+ internalRenderMedia: render_media_1.internalRenderMedia,
173
185
  };
174
186
  // Warn of potential performance issues with Apple Silicon (M1 chip under Rosetta)
175
187
  (0, check_apple_silicon_1.checkNodeVersionAndWarnAboutRosetta)();
@@ -0,0 +1,3 @@
1
+ import type { DownloadMap } from './assets/download-map';
2
+ export declare const isBeyondLastFrame: (downloadMap: DownloadMap, src: string, time: number) => boolean | 0;
3
+ export declare const markAsBeyondLastFrame: (downloadMap: DownloadMap, src: string, time: number) => void;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.markAsBeyondLastFrame = exports.isBeyondLastFrame = void 0;
4
+ const isBeyondLastFrame = (downloadMap, src, time) => {
5
+ return (downloadMap.isBeyondLastFrameMap[src] &&
6
+ time >= downloadMap.isBeyondLastFrameMap[src]);
7
+ };
8
+ exports.isBeyondLastFrame = isBeyondLastFrame;
9
+ const markAsBeyondLastFrame = (downloadMap, src, time) => {
10
+ downloadMap.isBeyondLastFrameMap[src] = time;
11
+ };
12
+ exports.markAsBeyondLastFrame = markAsBeyondLastFrame;
@@ -1 +1,2 @@
1
+ export declare const DEFAULT_JPEG_QUALITY = 80;
1
2
  export declare const validateJpegQuality: (q: number | undefined) => void;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateJpegQuality = void 0;
3
+ exports.validateJpegQuality = exports.DEFAULT_JPEG_QUALITY = void 0;
4
+ exports.DEFAULT_JPEG_QUALITY = 80;
4
5
  const validateJpegQuality = (q) => {
5
6
  if (typeof q !== 'undefined' && typeof q !== 'number') {
6
7
  throw new Error(`JPEG Quality option must be a number or undefined. Got ${typeof q} (${JSON.stringify(q)})`);
@@ -0,0 +1,17 @@
1
+ import type { OffthreadVideoImageFormat } from 'remotion';
2
+ import type { DownloadMap, SpecialVCodecForTransparency } from './assets/download-map';
3
+ import type { FfmpegExecutable } from './ffmpeg-executable';
4
+ export declare type LastFrameOptions = {
5
+ ffmpegExecutable: FfmpegExecutable;
6
+ ffprobeExecutable: FfmpegExecutable;
7
+ offset: number;
8
+ src: string;
9
+ specialVCodecForTransparency: SpecialVCodecForTransparency;
10
+ imageFormat: OffthreadVideoImageFormat;
11
+ needsResize: [number, number] | null;
12
+ downloadMap: DownloadMap;
13
+ remotionRoot: string;
14
+ };
15
+ export declare const setLastFrameInCache: (options: LastFrameOptions, data: Buffer) => void;
16
+ export declare const getLastFrameFromCache: (options: LastFrameOptions) => Buffer | null;
17
+ export declare const clearLastFileCache: (downloadMap: DownloadMap) => void;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ // OffthreadVideo requires sometimes that the last frame of a video gets extracted, however, this can be slow. We allocate a cache for it but that can be garbage collected
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.clearLastFileCache = exports.getLastFrameFromCache = exports.setLastFrameInCache = void 0;
5
+ const MAX_CACHE_SIZE = 50 * 1024 * 1024; // 50MB
6
+ let bufferSize = 0;
7
+ const makeLastFrameCacheKey = (options) => {
8
+ return [
9
+ options.ffmpegExecutable,
10
+ options.offset,
11
+ options.src,
12
+ options.imageFormat,
13
+ options.downloadMap.id,
14
+ ].join('-');
15
+ };
16
+ const setLastFrameInCache = (options, data) => {
17
+ const key = makeLastFrameCacheKey(options);
18
+ if (options.downloadMap.lastFrameMap[key]) {
19
+ bufferSize -= options.downloadMap.lastFrameMap[key].data.byteLength;
20
+ }
21
+ options.downloadMap.lastFrameMap[key] = { data, lastAccessed: Date.now() };
22
+ bufferSize += data.byteLength;
23
+ ensureMaxSize(options.downloadMap);
24
+ };
25
+ exports.setLastFrameInCache = setLastFrameInCache;
26
+ const getLastFrameFromCache = (options) => {
27
+ var _a;
28
+ const key = makeLastFrameCacheKey(options);
29
+ if (!options.downloadMap.lastFrameMap[key]) {
30
+ return null;
31
+ }
32
+ options.downloadMap.lastFrameMap[key].lastAccessed = Date.now();
33
+ return (_a = options.downloadMap.lastFrameMap[key].data) !== null && _a !== void 0 ? _a : null;
34
+ };
35
+ exports.getLastFrameFromCache = getLastFrameFromCache;
36
+ const removedLastFrameFromCache = (key, downloadMap) => {
37
+ if (!downloadMap.lastFrameMap[key]) {
38
+ return;
39
+ }
40
+ bufferSize -= downloadMap.lastFrameMap[key].data.byteLength;
41
+ delete downloadMap.lastFrameMap[key];
42
+ };
43
+ const ensureMaxSize = (downloadMap) => {
44
+ // eslint-disable-next-line no-unmodified-loop-condition
45
+ while (bufferSize > MAX_CACHE_SIZE) {
46
+ const earliest = Object.entries(downloadMap.lastFrameMap).sort((a, b) => {
47
+ return a[1].lastAccessed - b[1].lastAccessed;
48
+ })[0];
49
+ removedLastFrameFromCache(earliest[0], downloadMap);
50
+ }
51
+ };
52
+ const clearLastFileCache = (downloadMap) => {
53
+ downloadMap.lastFrameMap = {};
54
+ };
55
+ exports.clearLastFileCache = clearLastFileCache;
@@ -0,0 +1,9 @@
1
+ export declare type ServeUrlOrWebpackBundle = {
2
+ serveUrl: string;
3
+ } | {
4
+ /**
5
+ * @deprecated Renamed to `serveUrl`
6
+ */
7
+ webpackBundle: string;
8
+ };
9
+ export declare const getServeUrlWithFallback: (serve: ServeUrlOrWebpackBundle) => string;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getServeUrlWithFallback = void 0;
4
+ const getServeUrlWithFallback = (serve) => {
5
+ if ('webpackBundle' in serve) {
6
+ return serve.webpackBundle;
7
+ }
8
+ if ('serveUrl' in serve) {
9
+ return serve.serveUrl;
10
+ }
11
+ throw new Error('You must pass the `serveUrl` parameter');
12
+ };
13
+ exports.getServeUrlWithFallback = getServeUrlWithFallback;
@@ -1,4 +1,4 @@
1
1
  export declare const logLevels: readonly ["verbose", "info", "warn", "error"];
2
- export declare type LogLevel = typeof logLevels[number];
2
+ export type LogLevel = typeof logLevels[number];
3
3
  export declare const isValidLogLevel: (level: string) => boolean;
4
4
  export declare const isEqualOrBelowLogLevel: (currentLevel: LogLevel, level: LogLevel) => boolean;
package/dist/logger.d.ts CHANGED
@@ -1,13 +1,15 @@
1
1
  import type { LogLevel } from './log-level';
2
2
  export declare const INDENT_TOKEN: string;
3
- declare type LogOptions = {
3
+ type LogOptions = {
4
4
  indent: boolean;
5
5
  logLevel: LogLevel;
6
6
  };
7
- declare type VerboseLogOptions = LogOptions & {
7
+ type VerboseLogOptions = LogOptions & {
8
8
  tag?: string;
9
+ secondTag?: string;
9
10
  };
10
11
  export declare const verboseTag: (str: string) => string;
12
+ export declare const secondverboseTag: (str: string) => string;
11
13
  export declare const Log: {
12
14
  verbose: (message?: any, ...optionalParams: any[]) => void;
13
15
  verboseAdvanced: (options: VerboseLogOptions, message?: any, ...optionalParams: any[]) => void;
package/dist/logger.js CHANGED
@@ -1,17 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setLogLevel = exports.getLogLevel = exports.Log = exports.verboseTag = exports.INDENT_TOKEN = void 0;
3
+ exports.setLogLevel = exports.getLogLevel = exports.Log = exports.secondverboseTag = exports.verboseTag = exports.INDENT_TOKEN = void 0;
4
4
  const chalk_1 = require("./chalk");
5
5
  const is_color_supported_1 = require("./chalk/is-color-supported");
6
6
  const log_level_1 = require("./log-level");
7
7
  const truthy_1 = require("./truthy");
8
8
  exports.INDENT_TOKEN = chalk_1.chalk.gray('│');
9
9
  const verboseTag = (str) => {
10
- return is_color_supported_1.isColorSupported
11
- ? chalk_1.chalk.bgBlack(` ${str.toUpperCase()} `)
12
- : `[${str.toUpperCase()}]`;
10
+ return is_color_supported_1.isColorSupported ? chalk_1.chalk.bgBlack(` ${str} `) : `[${str}]`;
13
11
  };
14
12
  exports.verboseTag = verboseTag;
13
+ const secondverboseTag = (str) => {
14
+ return is_color_supported_1.isColorSupported ? chalk_1.chalk.bgWhite(` ${str} `) : `[${str}]`;
15
+ };
16
+ exports.secondverboseTag = secondverboseTag;
15
17
  exports.Log = {
16
18
  verbose: (...args) => {
17
19
  exports.Log.verboseAdvanced({ indent: false, logLevel: (0, exports.getLogLevel)() }, ...args);
@@ -20,7 +22,12 @@ exports.Log = {
20
22
  if ((0, log_level_1.isEqualOrBelowLogLevel)(options.logLevel, 'verbose')) {
21
23
  return console.log(...[
22
24
  options.indent ? exports.INDENT_TOKEN : null,
23
- options.tag ? (0, exports.verboseTag)(options.tag) : null,
25
+ [
26
+ options.tag ? (0, exports.verboseTag)(options.tag) : null,
27
+ options.secondTag ? (0, exports.secondverboseTag)(options.secondTag) : null,
28
+ ]
29
+ .filter(truthy_1.truthy)
30
+ .join(''),
24
31
  ...args.map((a) => chalk_1.chalk.gray(a)),
25
32
  ].filter(truthy_1.truthy));
26
33
  }
@@ -1,5 +1,5 @@
1
- declare type Callback = () => void;
2
- export declare type CancelSignal = (callback: Callback) => void;
1
+ type Callback = () => void;
2
+ export type CancelSignal = (callback: Callback) => void;
3
3
  /**
4
4
  * @description Returns a signal and a cancel function that allows to you cancel a render triggered using renderMedia(), renderStill(), renderFrames() or stitchFramesToVideo().
5
5
  * @see [Documentation](https://www.remotion.dev/docs/renderer/make-cancel-signal)
@@ -1,6 +1,6 @@
1
1
  import type { DownloadMap } from './assets/download-map';
2
2
  import type { PreprocessedAudioTrack } from './preprocess-audio-track';
3
- declare type Options = {
3
+ type Options = {
4
4
  files: PreprocessedAudioTrack[];
5
5
  outName: string;
6
6
  numberOfSeconds: number;
@@ -36,7 +36,7 @@ function populateMaps(exts, _types) {
36
36
  Object.keys(mime_db_1.mimeDb).forEach((type) => {
37
37
  const mime = mime_db_1.mimeDb[type];
38
38
  const _exts = mime.extensions;
39
- if (!_exts || !_exts.length) {
39
+ if (!(_exts === null || _exts === void 0 ? void 0 : _exts.length)) {
40
40
  return;
41
41
  }
42
42
  // mime -> extensions
@@ -1,5 +1,4 @@
1
1
  import type { RequestListener } from 'node:http';
2
- import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
3
2
  import type { DownloadMap } from './assets/download-map';
4
3
  import type { Compositor } from './compositor/compositor';
5
4
  export declare const extractUrlAndSourceFromUrl: (url: string) => {
@@ -7,9 +6,7 @@ export declare const extractUrlAndSourceFromUrl: (url: string) => {
7
6
  time: number;
8
7
  transparent: boolean;
9
8
  };
10
- export declare const startOffthreadVideoServer: ({ onDownload, onError, downloadMap, concurrency, verbose, indent, }: {
11
- onDownload: RenderMediaOnDownload;
12
- onError: (err: Error) => void;
9
+ export declare const startOffthreadVideoServer: ({ downloadMap, concurrency, verbose, indent, }: {
13
10
  downloadMap: DownloadMap;
14
11
  concurrency: number;
15
12
  verbose: boolean;
@@ -18,4 +15,39 @@ export declare const startOffthreadVideoServer: ({ onDownload, onError, download
18
15
  listener: RequestListener;
19
16
  close: () => Promise<void>;
20
17
  compositor: Compositor;
18
+ events: OffthreadVideoServerEmitter;
21
19
  };
20
+ type DownloadEventPayload = {
21
+ src: string;
22
+ };
23
+ type ProgressEventPayload = {
24
+ percent: number | null;
25
+ downloaded: number;
26
+ totalSize: number | null;
27
+ src: string;
28
+ };
29
+ type ErrorEventPayload = {
30
+ error: Error;
31
+ };
32
+ type EventMap = {
33
+ progress: ProgressEventPayload;
34
+ error: ErrorEventPayload;
35
+ download: DownloadEventPayload;
36
+ };
37
+ export type EventTypes = keyof EventMap;
38
+ export type CallbackListener<T extends EventTypes> = (data: {
39
+ detail: EventMap[T];
40
+ }) => void;
41
+ type Listeners = {
42
+ [EventType in EventTypes]: CallbackListener<EventType>[];
43
+ };
44
+ export declare class OffthreadVideoServerEmitter {
45
+ listeners: Listeners;
46
+ addEventListener<Q extends EventTypes>(name: Q, callback: CallbackListener<Q>): () => void;
47
+ removeEventListener<Q extends EventTypes>(name: Q, callback: CallbackListener<Q>): void;
48
+ private dispatchEvent;
49
+ dispatchError(error: Error): void;
50
+ dispatchDownloadProgress(src: string, percent: number | null, downloaded: number, totalSize: number | null): void;
51
+ dispatchDownload(src: string): void;
52
+ }
53
+ export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startOffthreadVideoServer = exports.extractUrlAndSourceFromUrl = void 0;
3
+ exports.OffthreadVideoServerEmitter = exports.startOffthreadVideoServer = exports.extractUrlAndSourceFromUrl = void 0;
4
4
  const node_url_1 = require("node:url");
5
5
  const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
6
6
  const compositor_1 = require("./compositor/compositor");
@@ -27,7 +27,8 @@ const extractUrlAndSourceFromUrl = (url) => {
27
27
  };
28
28
  };
29
29
  exports.extractUrlAndSourceFromUrl = extractUrlAndSourceFromUrl;
30
- const startOffthreadVideoServer = ({ onDownload, onError, downloadMap, concurrency, verbose, indent, }) => {
30
+ const startOffthreadVideoServer = ({ downloadMap, concurrency, verbose, indent, }) => {
31
+ const events = new OffthreadVideoServerEmitter();
31
32
  const compositor = (0, compositor_1.startCompositor)('StartLongRunningProcess', {
32
33
  concurrency,
33
34
  maximum_frame_cache_items: (0, compositor_1.getIdealMaximumFrameCacheItems)(),
@@ -66,7 +67,7 @@ const startOffthreadVideoServer = ({ onDownload, onError, downloadMap, concurren
66
67
  res.end();
67
68
  return;
68
69
  }
69
- (0, download_and_map_assets_to_file_1.downloadAsset)({ src, onDownload, downloadMap })
70
+ (0, download_and_map_assets_to_file_1.downloadAsset)({ src, emitter: events, downloadMap })
70
71
  .then((to) => {
71
72
  return compositor.executeCommand('ExtractFrame', {
72
73
  input: to,
@@ -85,11 +86,54 @@ const startOffthreadVideoServer = ({ onDownload, onError, downloadMap, concurren
85
86
  .catch((err) => {
86
87
  res.writeHead(500);
87
88
  res.end();
88
- onError(err);
89
+ events.dispatchError(err);
89
90
  console.log('Error occurred', err);
90
91
  });
91
92
  },
92
93
  compositor,
94
+ events,
93
95
  };
94
96
  };
95
97
  exports.startOffthreadVideoServer = startOffthreadVideoServer;
98
+ class OffthreadVideoServerEmitter {
99
+ constructor() {
100
+ this.listeners = {
101
+ error: [],
102
+ progress: [],
103
+ download: [],
104
+ };
105
+ }
106
+ addEventListener(name, callback) {
107
+ this.listeners[name].push(callback);
108
+ return () => {
109
+ this.removeEventListener(name, callback);
110
+ };
111
+ }
112
+ removeEventListener(name, callback) {
113
+ this.listeners[name] = this.listeners[name].filter((l) => l !== callback);
114
+ }
115
+ dispatchEvent(dispatchName, context) {
116
+ this.listeners[dispatchName].forEach((callback) => {
117
+ callback({ detail: context });
118
+ });
119
+ }
120
+ dispatchError(error) {
121
+ this.dispatchEvent('error', {
122
+ error,
123
+ });
124
+ }
125
+ dispatchDownloadProgress(src, percent, downloaded, totalSize) {
126
+ this.dispatchEvent('progress', {
127
+ downloaded,
128
+ percent,
129
+ totalSize,
130
+ src,
131
+ });
132
+ }
133
+ dispatchDownload(src) {
134
+ this.dispatchEvent('download', {
135
+ src,
136
+ });
137
+ }
138
+ }
139
+ exports.OffthreadVideoServerEmitter = OffthreadVideoServerEmitter;
@@ -2,8 +2,8 @@ import type { Browser } from './browser';
2
2
  import type { HeadlessBrowser } from './browser/Browser';
3
3
  import type { Viewport } from './browser/PuppeteerViewport';
4
4
  declare const validRenderers: readonly ["swangle", "angle", "egl", "swiftshader"];
5
- declare type OpenGlRenderer = typeof validRenderers[number];
6
- export declare type ChromiumOptions = {
5
+ type OpenGlRenderer = typeof validRenderers[number];
6
+ export type ChromiumOptions = {
7
7
  ignoreCertificateErrors?: boolean;
8
8
  disableWebSecurity?: boolean;
9
9
  gl?: OpenGlRenderer | null;
@@ -11,16 +11,25 @@ export declare type ChromiumOptions = {
11
11
  userAgent?: string | null;
12
12
  };
13
13
  export declare const killAllBrowsers: () => Promise<void>;
14
- /**
15
- * @description Opens a Chrome or Chromium browser instance.
16
- * @see [Documentation](https://www.remotion.dev/docs/renderer/open-browser)
17
- */
18
- export declare const openBrowser: (browser: Browser, options?: {
14
+ type InternalOpenBrowserOptions = {
15
+ shouldDumpIo: boolean;
16
+ browserExecutable: string | null;
17
+ chromiumOptions: ChromiumOptions;
18
+ forceDeviceScaleFactor: number | undefined;
19
+ viewport: Viewport | null;
20
+ indent: boolean;
21
+ browser: Browser;
22
+ };
23
+ export type OpenBrowserOptions = {
19
24
  shouldDumpIo?: boolean;
20
25
  browserExecutable?: string | null;
21
26
  chromiumOptions?: ChromiumOptions;
22
27
  forceDeviceScaleFactor?: number;
23
- viewport?: Viewport;
24
- indent?: boolean;
25
- }) => Promise<HeadlessBrowser>;
28
+ };
29
+ export declare const internalOpenBrowser: ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, shouldDumpIo, viewport, }: InternalOpenBrowserOptions) => Promise<HeadlessBrowser>;
30
+ /**
31
+ * @description Opens a Chrome or Chromium browser instance.
32
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/open-browser)
33
+ */
34
+ export declare const openBrowser: (browser: Browser, options?: OpenBrowserOptions) => Promise<HeadlessBrowser>;
26
35
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.openBrowser = exports.killAllBrowsers = void 0;
3
+ exports.openBrowser = exports.internalOpenBrowser = exports.killAllBrowsers = void 0;
4
4
  const node_1 = require("./browser/node");
5
5
  const get_local_browser_executable_1 = require("./get-local-browser-executable");
6
6
  const get_video_threads_flag_1 = require("./get-video-threads-flag");
@@ -27,23 +27,19 @@ const killAllBrowsers = async () => {
27
27
  }
28
28
  };
29
29
  exports.killAllBrowsers = killAllBrowsers;
30
- /**
31
- * @description Opens a Chrome or Chromium browser instance.
32
- * @see [Documentation](https://www.remotion.dev/docs/renderer/open-browser)
33
- */
34
- const openBrowser = async (browser, options) => {
35
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
30
+ const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, shouldDumpIo, viewport, }) => {
31
+ var _a, _b;
36
32
  if (browser === 'firefox') {
37
33
  throw new TypeError('Firefox supported is not yet turned on. Stay tuned for the future.');
38
34
  }
39
- await (0, get_local_browser_executable_1.ensureLocalBrowser)(browser, (_a = options === null || options === void 0 ? void 0 : options.browserExecutable) !== null && _a !== void 0 ? _a : null);
40
- const executablePath = (0, get_local_browser_executable_1.getLocalBrowserExecutable)(browser, (_b = options === null || options === void 0 ? void 0 : options.browserExecutable) !== null && _b !== void 0 ? _b : null);
41
- const customGlRenderer = getOpenGlRenderer((_d = (_c = options === null || options === void 0 ? void 0 : options.chromiumOptions) === null || _c === void 0 ? void 0 : _c.gl) !== null && _d !== void 0 ? _d : null);
35
+ await (0, get_local_browser_executable_1.ensureLocalBrowser)(browser, browserExecutable);
36
+ const executablePath = (0, get_local_browser_executable_1.getLocalBrowserExecutable)(browser, browserExecutable);
37
+ const customGlRenderer = getOpenGlRenderer((_a = chromiumOptions.gl) !== null && _a !== void 0 ? _a : null);
42
38
  const browserInstance = await node_1.puppeteer.launch({
43
39
  executablePath,
44
40
  product: browser,
45
- dumpio: (_e = options === null || options === void 0 ? void 0 : options.shouldDumpIo) !== null && _e !== void 0 ? _e : false,
46
- indent: (_f = options === null || options === void 0 ? void 0 : options.indent) !== null && _f !== void 0 ? _f : false,
41
+ dumpio: shouldDumpIo,
42
+ indent,
47
43
  args: [
48
44
  'about:blank',
49
45
  '--allow-pre-commit-input',
@@ -76,7 +72,7 @@ const openBrowser = async (browser, options) => {
76
72
  '--enable-blink-features=IdleDetection',
77
73
  '--export-tagged-pdf',
78
74
  '--intensive-wake-up-throttling-policy=0',
79
- ((_h = (_g = options === null || options === void 0 ? void 0 : options.chromiumOptions) === null || _g === void 0 ? void 0 : _g.headless) !== null && _h !== void 0 ? _h : true) ? '--headless' : null,
75
+ ((_b = chromiumOptions.headless) !== null && _b !== void 0 ? _b : true) ? '--headless' : null,
80
76
  '--no-sandbox',
81
77
  '--disable-setuid-sandbox',
82
78
  ...customGlRenderer,
@@ -94,20 +90,20 @@ const openBrowser = async (browser, options) => {
94
90
  '--no-pings',
95
91
  '--font-render-hinting=none',
96
92
  '--no-zygote',
97
- (options === null || options === void 0 ? void 0 : options.forceDeviceScaleFactor)
98
- ? `--force-device-scale-factor=${options.forceDeviceScaleFactor}`
99
- : null,
100
- ((_j = options === null || options === void 0 ? void 0 : options.chromiumOptions) === null || _j === void 0 ? void 0 : _j.ignoreCertificateErrors)
93
+ typeof forceDeviceScaleFactor === 'undefined'
94
+ ? null
95
+ : `--force-device-scale-factor=${forceDeviceScaleFactor}`,
96
+ chromiumOptions.ignoreCertificateErrors
101
97
  ? '--ignore-certificate-errors'
102
98
  : null,
103
- ...(((_k = options === null || options === void 0 ? void 0 : options.chromiumOptions) === null || _k === void 0 ? void 0 : _k.disableWebSecurity)
99
+ ...((chromiumOptions === null || chromiumOptions === void 0 ? void 0 : chromiumOptions.disableWebSecurity)
104
100
  ? ['--disable-web-security']
105
101
  : []),
106
- ((_l = options === null || options === void 0 ? void 0 : options.chromiumOptions) === null || _l === void 0 ? void 0 : _l.userAgent)
107
- ? `--user-agent="${options.chromiumOptions.userAgent}"`
102
+ (chromiumOptions === null || chromiumOptions === void 0 ? void 0 : chromiumOptions.userAgent)
103
+ ? `--user-agent="${chromiumOptions.userAgent}"`
108
104
  : null,
109
105
  ].filter(Boolean),
110
- defaultViewport: (_m = options === null || options === void 0 ? void 0 : options.viewport) !== null && _m !== void 0 ? _m : {
106
+ defaultViewport: viewport !== null && viewport !== void 0 ? viewport : {
111
107
  height: 720,
112
108
  width: 1280,
113
109
  deviceScaleFactor: 1,
@@ -118,4 +114,21 @@ const openBrowser = async (browser, options) => {
118
114
  browserInstances.push(browserInstance);
119
115
  return browserInstance;
120
116
  };
117
+ exports.internalOpenBrowser = internalOpenBrowser;
118
+ /**
119
+ * @description Opens a Chrome or Chromium browser instance.
120
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/open-browser)
121
+ */
122
+ const openBrowser = (browser, options) => {
123
+ const { browserExecutable, chromiumOptions, forceDeviceScaleFactor, shouldDumpIo, } = options !== null && options !== void 0 ? options : {};
124
+ return (0, exports.internalOpenBrowser)({
125
+ browser,
126
+ browserExecutable: browserExecutable !== null && browserExecutable !== void 0 ? browserExecutable : null,
127
+ chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
128
+ forceDeviceScaleFactor,
129
+ indent: false,
130
+ shouldDumpIo: shouldDumpIo !== null && shouldDumpIo !== void 0 ? shouldDumpIo : false,
131
+ viewport: null,
132
+ });
133
+ };
121
134
  exports.openBrowser = openBrowser;
@@ -1,5 +1,5 @@
1
1
  import type React from 'react';
2
- export declare type RemotionOption = {
2
+ export type RemotionOption = {
3
3
  name: string;
4
4
  cliFlag: string;
5
5
  ssrName: string;
@@ -1,4 +1,4 @@
1
- export declare type UnsymbolicatedStackFrame = {
1
+ export type UnsymbolicatedStackFrame = {
2
2
  functionName: string | null;
3
3
  fileName: string;
4
4
  lineNumber: number;
package/dist/perf.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- declare type PerfId = 'activate-target' | 'capture' | 'save' | 'extract-frame' | 'piping';
1
+ type PerfId = 'activate-target' | 'capture' | 'save' | 'extract-frame' | 'piping';
2
2
  export declare const startPerfMeasure: (marker: PerfId) => number;
3
3
  export declare const stopPerfMeasure: (id: number) => void;
4
4
  export declare const getPerf: () => string[];
@@ -1,5 +1,5 @@
1
1
  import type { Codec } from './codec';
2
2
  export declare const validPixelFormats: readonly ["yuv420p", "yuva420p", "yuv422p", "yuv444p", "yuv420p10le", "yuv422p10le", "yuv444p10le", "yuva444p10le"];
3
- export declare type PixelFormat = typeof validPixelFormats[number];
3
+ export type PixelFormat = typeof validPixelFormats[number];
4
4
  export declare const DEFAULT_PIXEL_FORMAT: PixelFormat;
5
5
  export declare const validateSelectedPixelFormatAndCodecCombination: (pixelFormat: PixelFormat | undefined, codec: Codec) => undefined;