@remotion/renderer 4.0.0-alpha13 → 4.0.0-alpha16

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 (103) 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/read-file.js +1 -1
  9. package/dist/assets/types.d.ts +4 -4
  10. package/dist/audio-codec.d.ts +2 -2
  11. package/dist/browser/Browser.d.ts +9 -9
  12. package/dist/browser/Browser.js +26 -32
  13. package/dist/browser/BrowserFetcher.d.ts +1 -1
  14. package/dist/browser/BrowserPage.d.ts +11 -2
  15. package/dist/browser/BrowserPage.js +47 -12
  16. package/dist/browser/BrowserRunner.js +19 -2
  17. package/dist/browser/ConsoleMessage.d.ts +1 -1
  18. package/dist/browser/DOMWorld.js +8 -8
  19. package/dist/browser/EvalTypes.d.ts +7 -7
  20. package/dist/browser/FrameManager.js +11 -11
  21. package/dist/browser/JSHandle.js +14 -14
  22. package/dist/browser/LaunchOptions.d.ts +1 -1
  23. package/dist/browser/Launcher.js +0 -1
  24. package/dist/browser/LifecycleWatcher.d.ts +1 -1
  25. package/dist/browser/NetworkEventManager.d.ts +4 -4
  26. package/dist/browser/NodeWebSocketTransport.js +16 -16
  27. package/dist/browser/Product.d.ts +1 -1
  28. package/dist/browser/Target.d.ts +2 -1
  29. package/dist/browser/Target.js +8 -2
  30. package/dist/browser/devtools-types.d.ts +10 -10
  31. package/dist/browser/mitt/index.d.ts +6 -6
  32. package/dist/browser/revisions.d.ts +1 -1
  33. package/dist/browser/should-log-message.d.ts +24 -0
  34. package/dist/browser/should-log-message.js +72 -0
  35. package/dist/browser-executable.d.ts +1 -1
  36. package/dist/browser-log.d.ts +1 -1
  37. package/dist/browser.d.ts +1 -1
  38. package/dist/chalk/index.d.ts +4 -4
  39. package/dist/codec-supports-media.d.ts +1 -1
  40. package/dist/codec.d.ts +2 -2
  41. package/dist/combine-videos.d.ts +1 -1
  42. package/dist/compositor/compose.d.ts +11 -2
  43. package/dist/compositor/compose.js +15 -4
  44. package/dist/compositor/compositor.d.ts +1 -1
  45. package/dist/compositor/compositor.js +19 -7
  46. package/dist/compositor/payloads.d.ts +5 -5
  47. package/dist/crf.d.ts +1 -1
  48. package/dist/error-handling/symbolicate-error.js +4 -2
  49. package/dist/ffmpeg-override.d.ts +1 -1
  50. package/dist/file-extensions.d.ts +1 -1
  51. package/dist/frame-range.d.ts +1 -1
  52. package/dist/get-browser-instance.d.ts +6 -1
  53. package/dist/get-browser-instance.js +9 -4
  54. package/dist/get-compositions.d.ts +18 -11
  55. package/dist/get-compositions.js +66 -49
  56. package/dist/get-frame-padded-index.d.ts +1 -1
  57. package/dist/image-format.d.ts +3 -3
  58. package/dist/index.d.ts +106 -16
  59. package/dist/index.js +25 -13
  60. package/dist/jpeg-quality.d.ts +1 -0
  61. package/dist/jpeg-quality.js +2 -1
  62. package/dist/log-level.d.ts +1 -1
  63. package/dist/logger.d.ts +5 -3
  64. package/dist/logger.js +12 -5
  65. package/dist/make-cancel-signal.d.ts +2 -2
  66. package/dist/merge-audio-track.d.ts +1 -1
  67. package/dist/mime-types.js +1 -1
  68. package/dist/offthread-video-server.d.ts +36 -4
  69. package/dist/offthread-video-server.js +48 -4
  70. package/dist/open-browser.d.ts +19 -10
  71. package/dist/open-browser.js +34 -21
  72. package/dist/options/option.d.ts +1 -1
  73. package/dist/parse-browser-error-stack.d.ts +1 -1
  74. package/dist/perf.d.ts +1 -1
  75. package/dist/pixel-format.d.ts +1 -1
  76. package/dist/prepare-server.d.ts +20 -8
  77. package/dist/prepare-server.js +52 -8
  78. package/dist/preprocess-audio-track.d.ts +2 -2
  79. package/dist/prespawn-ffmpeg.d.ts +1 -1
  80. package/dist/prespawn-ffmpeg.js +7 -7
  81. package/dist/prores-profile.d.ts +1 -1
  82. package/dist/puppeteer-screenshot.js +1 -2
  83. package/dist/render-frames.d.ts +32 -11
  84. package/dist/render-frames.js +112 -77
  85. package/dist/render-media.d.ts +50 -21
  86. package/dist/render-media.js +249 -197
  87. package/dist/render-still.d.ts +33 -18
  88. package/dist/render-still.js +71 -43
  89. package/dist/replace-browser.d.ts +1 -1
  90. package/dist/select-composition.d.ts +19 -11
  91. package/dist/select-composition.js +79 -42
  92. package/dist/serve-static.d.ts +2 -3
  93. package/dist/serve-static.js +2 -4
  94. package/dist/set-props-and-env.d.ts +1 -1
  95. package/dist/stitch-frames-to-video.d.ts +32 -10
  96. package/dist/stitch-frames-to-video.js +121 -99
  97. package/dist/stringify-ffmpeg-filter.d.ts +2 -2
  98. package/dist/symbolicate-stacktrace.d.ts +16 -3
  99. package/dist/symbolicate-stacktrace.js +49 -24
  100. package/dist/truthy.d.ts +1 -1
  101. package/dist/types.d.ts +2 -2
  102. package/dist/validate-opengl-renderer.d.ts +1 -1
  103. package/package.json +11 -11
package/dist/index.d.ts CHANGED
@@ -5,7 +5,6 @@ import { SymbolicateableError } from './error-handling/symbolicateable-error';
5
5
  import { mimeContentType, mimeLookup } from './mime-types';
6
6
  import * as perf from './perf';
7
7
  export type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
8
- export type { DownloadMap } from './assets/download-map';
9
8
  export { AudioCodec } from './audio-codec';
10
9
  export { Browser } from './browser';
11
10
  export { BrowserExecutable } from './browser-executable';
@@ -17,7 +16,7 @@ export { ErrorWithStackFrame } from './error-handling/handle-javascript-exceptio
17
16
  export type { FfmpegOverrideFn } from './ffmpeg-override';
18
17
  export { FileExtension } from './file-extensions';
19
18
  export { FrameRange } from './frame-range';
20
- export { getCompositions } from './get-compositions';
19
+ export { getCompositions, GetCompositionsOptions } from './get-compositions';
21
20
  export { ImageFormat, StillImageFormat, validateSelectedPixelFormatAndImageFormatCombination, VideoImageFormat, } from './image-format';
22
21
  export type { LogLevel } from './log-level';
23
22
  export { CancelSignal, makeCancelSignal } from './make-cancel-signal';
@@ -25,12 +24,13 @@ export { openBrowser } from './open-browser';
25
24
  export type { ChromiumOptions } from './open-browser';
26
25
  export { RemotionOption } from './options/option';
27
26
  export { PixelFormat } from './pixel-format';
27
+ export { RemotionServer } from './prepare-server';
28
28
  export { ProResProfile } from './prores-profile';
29
- export { renderFrames } from './render-frames';
30
- export { renderMedia, RenderMediaOnProgress, RenderMediaOptions, SlowFrame, StitchingState, } from './render-media';
29
+ export { renderFrames, RenderFramesOptions } from './render-frames';
30
+ export { InternalRenderMediaOptions, renderMedia, RenderMediaOnProgress, RenderMediaOptions, SlowFrame, StitchingState, } from './render-media';
31
31
  export { renderStill, RenderStillOptions } from './render-still';
32
- export { selectComposition } from './select-composition';
33
- export { StitcherOptions, stitchFramesToVideo } from './stitch-frames-to-video';
32
+ export { selectComposition, SelectCompositionOptions, } from './select-composition';
33
+ export { stitchFramesToVideo, StitchFramesToVideoOptions, } from './stitch-frames-to-video';
34
34
  export { SymbolicatedStackFrame } from './symbolicate-stacktrace';
35
35
  export { OnStartData, RenderFramesOutput } from './types';
36
36
  export { OpenGlRenderer } from './validate-opengl-renderer';
@@ -40,8 +40,6 @@ export declare const RenderInternals: {
40
40
  getActualConcurrency: (userPreference: string | number | null) => number;
41
41
  serveStatic: (path: string | null, options: {
42
42
  port: number | null;
43
- onDownload: import("./assets/download-and-map-assets-to-file").RenderMediaOnDownload;
44
- onError: (err: Error) => void;
45
43
  downloadMap: import("./assets/download-map").DownloadMap;
46
44
  remotionRoot: string;
47
45
  concurrency: number;
@@ -51,6 +49,7 @@ export declare const RenderInternals: {
51
49
  port: number;
52
50
  close: () => Promise<void>;
53
51
  compositor: import("./compositor/compositor").Compositor;
52
+ events: import("./offthread-video-server").OffthreadVideoServerEmitter;
54
53
  }>;
55
54
  validateEvenDimensionsWithCodec: ({ width, height, codec, scale, }: {
56
55
  width: number;
@@ -124,11 +123,9 @@ export declare const RenderInternals: {
124
123
  DEFAULT_CODEC: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif";
125
124
  isAudioCodec: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif" | undefined) => boolean;
126
125
  logLevels: readonly ["verbose", "info", "warn", "error"];
127
- isEqualOrBelowLogLevel: (currentLevel: "error" | "verbose" | "info" | "warn", level: "error" | "verbose" | "info" | "warn") => boolean;
126
+ isEqualOrBelowLogLevel: (currentLevel: "verbose" | "error" | "info" | "warn", level: "verbose" | "error" | "info" | "warn") => boolean;
128
127
  isValidLogLevel: (level: string) => boolean;
129
128
  perf: typeof perf;
130
- makeDownloadMap: () => import("./assets/download-map").DownloadMap;
131
- cleanDownloadMap: (downloadMap: import("./assets/download-map").DownloadMap) => void;
132
129
  convertToPositiveFrameIndex: ({ frame, durationInFrames, }: {
133
130
  frame: number;
134
131
  durationInFrames: number;
@@ -305,6 +302,7 @@ export declare const RenderInternals: {
305
302
  validVideoImageFormats: readonly ["png", "jpeg", "none"];
306
303
  DEFAULT_STILL_IMAGE_FORMAT: "jpeg" | "png" | "webp" | "pdf";
307
304
  DEFAULT_VIDEO_IMAGE_FORMAT: "jpeg" | "png" | "none";
305
+ DEFAULT_JPEG_QUALITY: number;
308
306
  chalk: {
309
307
  enabled: boolean;
310
308
  visible: boolean;
@@ -358,25 +356,117 @@ export declare const RenderInternals: {
358
356
  verbose: (message?: any, ...optionalParams: any[]) => void;
359
357
  verboseAdvanced: (options: {
360
358
  indent: boolean;
361
- logLevel: "error" | "verbose" | "info" | "warn";
359
+ logLevel: "verbose" | "error" | "info" | "warn";
362
360
  } & {
363
361
  tag?: string | undefined;
362
+ secondTag?: string | undefined;
364
363
  }, message?: any, ...optionalParams: any[]) => void;
365
364
  info: (message?: any, ...optionalParams: any[]) => void;
366
365
  infoAdvanced: (options: {
367
366
  indent: boolean;
368
- logLevel: "error" | "verbose" | "info" | "warn";
367
+ logLevel: "verbose" | "error" | "info" | "warn";
369
368
  }, message?: any, ...optionalParams: any[]) => void;
370
369
  warn: (message?: any, ...optionalParams: any[]) => void;
371
370
  warnAdvanced: (options: {
372
371
  indent: boolean;
373
- logLevel: "error" | "verbose" | "info" | "warn";
372
+ logLevel: "verbose" | "error" | "info" | "warn";
374
373
  }, message?: any, ...optionalParams: any[]) => void;
375
374
  error: (message?: any, ...optionalParams: any[]) => void;
376
375
  };
377
- getLogLevel: () => "error" | "verbose" | "info" | "warn";
378
- setLogLevel: (newLogLevel: "error" | "verbose" | "info" | "warn") => void;
376
+ getLogLevel: () => "verbose" | "error" | "info" | "warn";
377
+ setLogLevel: (newLogLevel: "verbose" | "error" | "info" | "warn") => void;
379
378
  INDENT_TOKEN: string;
380
379
  isColorSupported: boolean;
381
380
  HeadlessBrowser: typeof HeadlessBrowser;
381
+ prepareServer: ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency, verbose, indent, }: {
382
+ webpackConfigOrServeUrl: string;
383
+ port: number | null;
384
+ remotionRoot: string;
385
+ concurrency: number;
386
+ verbose: boolean;
387
+ indent: boolean;
388
+ }) => Promise<import("./prepare-server").RemotionServer>;
389
+ makeOrReuseServer: (server: import("./prepare-server").RemotionServer | undefined, config: {
390
+ webpackConfigOrServeUrl: string;
391
+ port: number | null;
392
+ remotionRoot: string;
393
+ concurrency: number;
394
+ verbose: boolean;
395
+ indent: boolean;
396
+ }, { onDownload, onError, }: {
397
+ onError: (err: Error) => void;
398
+ onDownload: import("./assets/download-and-map-assets-to-file").RenderMediaOnDownload | null;
399
+ }) => Promise<{
400
+ server: import("./prepare-server").RemotionServer;
401
+ cleanupServer: (force: boolean) => Promise<unknown>;
402
+ }>;
403
+ internalRenderStill: (options: {
404
+ composition: import("remotion").AnySmallCompMetadata;
405
+ output: string | null;
406
+ frame: number;
407
+ inputProps: Record<string, unknown>;
408
+ imageFormat: "jpeg" | "png" | "webp" | "pdf";
409
+ jpegQuality: number;
410
+ puppeteerInstance: HeadlessBrowser | null;
411
+ dumpBrowserLogs: boolean;
412
+ envVariables: Record<string, string>;
413
+ overwrite: boolean;
414
+ browserExecutable: import("./browser-executable").BrowserExecutable;
415
+ onBrowserLog: ((log: import("./browser-log").BrowserLog) => void) | null;
416
+ timeoutInMilliseconds: number;
417
+ chromiumOptions: import("./open-browser").ChromiumOptions;
418
+ scale: number;
419
+ onDownload: import("./assets/download-and-map-assets-to-file").RenderMediaOnDownload | null;
420
+ cancelSignal: import("./make-cancel-signal").CancelSignal | null;
421
+ indent: boolean;
422
+ server: import("./prepare-server").RemotionServer | undefined;
423
+ verbose: boolean;
424
+ serveUrl: string;
425
+ port: number | null;
426
+ }) => Promise<{
427
+ buffer: Buffer | null;
428
+ }>;
429
+ internalOpenBrowser: ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, shouldDumpIo, viewport, }: {
430
+ shouldDumpIo: boolean;
431
+ browserExecutable: string | null;
432
+ chromiumOptions: import("./open-browser").ChromiumOptions;
433
+ forceDeviceScaleFactor: number | undefined;
434
+ viewport: import("./browser/PuppeteerViewport").Viewport | null;
435
+ indent: boolean;
436
+ browser: import("./browser").Browser;
437
+ }) => Promise<HeadlessBrowser>;
438
+ internalSelectComposition: (options: {
439
+ inputProps: Record<string, unknown>;
440
+ envVariables: Record<string, string>;
441
+ puppeteerInstance: HeadlessBrowser | undefined;
442
+ onBrowserLog: ((log: import("./browser-log").BrowserLog) => void) | null;
443
+ browserExecutable: import("./browser-executable").BrowserExecutable;
444
+ timeoutInMilliseconds: number;
445
+ chromiumOptions: import("./open-browser").ChromiumOptions;
446
+ port: number | null;
447
+ indent: boolean;
448
+ server: import("./prepare-server").RemotionServer | undefined;
449
+ verbose: boolean;
450
+ serveUrl: string;
451
+ id: string;
452
+ }) => Promise<import("remotion").AnyCompMetadata>;
453
+ internalGetCompositions: ({ browserExecutable, chromiumOptions, envVariables, indent, inputProps, onBrowserLog, port, puppeteerInstance, serveUrlOrWebpackUrl, server, timeoutInMilliseconds, verbose, }: {
454
+ inputProps: Record<string, unknown>;
455
+ envVariables: Record<string, string>;
456
+ puppeteerInstance: HeadlessBrowser | undefined;
457
+ onBrowserLog: ((log: import("./browser-log").BrowserLog) => void) | null;
458
+ browserExecutable: import("./browser-executable").BrowserExecutable;
459
+ timeoutInMilliseconds: number;
460
+ chromiumOptions: import("./open-browser").ChromiumOptions;
461
+ port: number | null;
462
+ server: import("./prepare-server").RemotionServer | undefined;
463
+ indent: boolean;
464
+ verbose: boolean;
465
+ serveUrlOrWebpackUrl: string;
466
+ }) => Promise<import("remotion").AnyCompMetadata[]>;
467
+ internalRenderFrames: ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency, dumpBrowserLogs, envVariables, everyNthFrame, frameRange, imageFormat, indent, inputProps, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, onFrameUpdate, onStart, outputDir, port, puppeteerInstance, scale, server, timeoutInMilliseconds, verbose, webpackBundleOrServeUrl, }: import("./render-frames").InternalRenderFramesOptions) => Promise<import("./types").RenderFramesOutput>;
468
+ internalRenderMedia: ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, verbose, }: import("./render-media").InternalRenderMediaOptions) => Promise<{
469
+ buffer: Buffer | null;
470
+ slowestFrames: import("./render-media").SlowFrame[];
471
+ }>;
382
472
  };
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)();
@@ -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)})`);
@@ -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;
@@ -17,6 +19,6 @@ export declare const Log: {
17
19
  warnAdvanced: (options: LogOptions, message?: any, ...optionalParams: any[]) => void;
18
20
  error: (message?: any, ...optionalParams: any[]) => void;
19
21
  };
20
- export declare const getLogLevel: () => "error" | "verbose" | "info" | "warn";
22
+ export declare const getLogLevel: () => "verbose" | "error" | "info" | "warn";
21
23
  export declare const setLogLevel: (newLogLevel: LogLevel) => void;
22
24
  export {};
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 {};