@remotion/renderer 4.0.180 → 4.0.182

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Cargo.lock CHANGED
@@ -8,12 +8,6 @@ version = "1.0.2"
8
8
  source = "registry+https://github.com/rust-lang/crates.io-index"
9
9
  checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
10
10
 
11
- [[package]]
12
- name = "adler32"
13
- version = "1.2.0"
14
- source = "registry+https://github.com/rust-lang/crates.io-index"
15
- checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
16
-
17
11
  [[package]]
18
12
  name = "arboard"
19
13
  version = "3.2.0"
@@ -22,7 +16,7 @@ checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854"
22
16
  dependencies = [
23
17
  "clipboard-win",
24
18
  "core-graphics",
25
- "image 0.24.7",
19
+ "image",
26
20
  "log",
27
21
  "objc",
28
22
  "objc-foundation",
@@ -60,6 +54,12 @@ dependencies = [
60
54
  "syn 1.0.109",
61
55
  ]
62
56
 
57
+ [[package]]
58
+ name = "bit_field"
59
+ version = "0.10.2"
60
+ source = "registry+https://github.com/rust-lang/crates.io-index"
61
+ checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
62
+
63
63
  [[package]]
64
64
  name = "bitflags"
65
65
  version = "1.3.2"
@@ -222,14 +222,10 @@ dependencies = [
222
222
  ]
223
223
 
224
224
  [[package]]
225
- name = "deflate"
226
- version = "0.8.6"
225
+ name = "crunchy"
226
+ version = "0.2.2"
227
227
  source = "registry+https://github.com/rust-lang/crates.io-index"
228
- checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
229
- dependencies = [
230
- "adler32",
231
- "byteorder",
232
- ]
228
+ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
233
229
 
234
230
  [[package]]
235
231
  name = "either"
@@ -247,6 +243,22 @@ dependencies = [
247
243
  "str-buf",
248
244
  ]
249
245
 
246
+ [[package]]
247
+ name = "exr"
248
+ version = "1.72.0"
249
+ source = "registry+https://github.com/rust-lang/crates.io-index"
250
+ checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4"
251
+ dependencies = [
252
+ "bit_field",
253
+ "flume",
254
+ "half",
255
+ "lebe",
256
+ "miniz_oxide 0.7.3",
257
+ "rayon-core",
258
+ "smallvec",
259
+ "zune-inflate",
260
+ ]
261
+
250
262
  [[package]]
251
263
  name = "fdeflate"
252
264
  version = "0.3.4"
@@ -259,7 +271,7 @@ dependencies = [
259
271
  [[package]]
260
272
  name = "ffmpeg-next"
261
273
  version = "6.0.0"
262
- source = "git+https://github.com/remotion-dev/rust-ffmpeg?rev=675dd103871633dd0ad8a3a2ca7f12e9a42edec1#675dd103871633dd0ad8a3a2ca7f12e9a42edec1"
274
+ source = "git+https://github.com/remotion-dev/rust-ffmpeg?rev=4027d3764d54c6c71ab72ff076764ae7abe91428#4027d3764d54c6c71ab72ff076764ae7abe91428"
263
275
  dependencies = [
264
276
  "bitflags",
265
277
  "ffmpeg-sys-next",
@@ -303,6 +315,15 @@ dependencies = [
303
315
  "miniz_oxide 0.6.2",
304
316
  ]
305
317
 
318
+ [[package]]
319
+ name = "flume"
320
+ version = "0.11.0"
321
+ source = "registry+https://github.com/rust-lang/crates.io-index"
322
+ checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
323
+ dependencies = [
324
+ "spin",
325
+ ]
326
+
306
327
  [[package]]
307
328
  name = "foreign-types"
308
329
  version = "0.3.2"
@@ -330,9 +351,9 @@ dependencies = [
330
351
 
331
352
  [[package]]
332
353
  name = "gif"
333
- version = "0.11.4"
354
+ version = "0.12.0"
334
355
  source = "registry+https://github.com/rust-lang/crates.io-index"
335
- checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06"
356
+ checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
336
357
  dependencies = [
337
358
  "color_quant",
338
359
  "weezl",
@@ -345,31 +366,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
345
366
  checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
346
367
 
347
368
  [[package]]
348
- name = "hermit-abi"
349
- version = "0.2.6"
369
+ name = "half"
370
+ version = "2.4.1"
350
371
  source = "registry+https://github.com/rust-lang/crates.io-index"
351
- checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
372
+ checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888"
352
373
  dependencies = [
353
- "libc",
374
+ "cfg-if",
375
+ "crunchy",
354
376
  ]
355
377
 
356
378
  [[package]]
357
- name = "image"
358
- version = "0.23.14"
379
+ name = "hermit-abi"
380
+ version = "0.2.6"
359
381
  source = "registry+https://github.com/rust-lang/crates.io-index"
360
- checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1"
382
+ checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
361
383
  dependencies = [
362
- "bytemuck",
363
- "byteorder",
364
- "color_quant",
365
- "gif",
366
- "jpeg-decoder 0.1.22",
367
- "num-iter",
368
- "num-rational 0.3.2",
369
- "num-traits",
370
- "png 0.16.8",
371
- "scoped_threadpool",
372
- "tiff 0.6.1",
384
+ "libc",
373
385
  ]
374
386
 
375
387
  [[package]]
@@ -381,10 +393,14 @@ dependencies = [
381
393
  "bytemuck",
382
394
  "byteorder",
383
395
  "color_quant",
384
- "num-rational 0.4.1",
396
+ "exr",
397
+ "gif",
398
+ "jpeg-decoder",
399
+ "num-rational",
385
400
  "num-traits",
386
- "png 0.17.13",
387
- "tiff 0.9.0",
401
+ "png",
402
+ "qoi",
403
+ "tiff",
388
404
  ]
389
405
 
390
406
  [[package]]
@@ -393,15 +409,6 @@ version = "1.0.6"
393
409
  source = "registry+https://github.com/rust-lang/crates.io-index"
394
410
  checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
395
411
 
396
- [[package]]
397
- name = "jpeg-decoder"
398
- version = "0.1.22"
399
- source = "registry+https://github.com/rust-lang/crates.io-index"
400
- checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
401
- dependencies = [
402
- "rayon",
403
- ]
404
-
405
412
  [[package]]
406
413
  name = "jpeg-decoder"
407
414
  version = "0.3.0"
@@ -429,6 +436,12 @@ version = "1.3.0"
429
436
  source = "registry+https://github.com/rust-lang/crates.io-index"
430
437
  checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
431
438
 
439
+ [[package]]
440
+ name = "lebe"
441
+ version = "0.5.2"
442
+ source = "registry+https://github.com/rust-lang/crates.io-index"
443
+ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
444
+
432
445
  [[package]]
433
446
  name = "libc"
434
447
  version = "0.2.153"
@@ -500,25 +513,6 @@ version = "0.2.1"
500
513
  source = "registry+https://github.com/rust-lang/crates.io-index"
501
514
  checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
502
515
 
503
- [[package]]
504
- name = "miniz_oxide"
505
- version = "0.3.7"
506
- source = "registry+https://github.com/rust-lang/crates.io-index"
507
- checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
508
- dependencies = [
509
- "adler32",
510
- ]
511
-
512
- [[package]]
513
- name = "miniz_oxide"
514
- version = "0.4.4"
515
- source = "registry+https://github.com/rust-lang/crates.io-index"
516
- checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
517
- dependencies = [
518
- "adler",
519
- "autocfg",
520
- ]
521
-
522
516
  [[package]]
523
517
  name = "miniz_oxide"
524
518
  version = "0.6.2"
@@ -545,7 +539,7 @@ source = "git+https://github.com/jonnyburger/mp4-rust?rev=92ba375738cc2f05a4d754
545
539
  dependencies = [
546
540
  "byteorder",
547
541
  "bytes",
548
- "num-rational 0.4.1",
542
+ "num-rational",
549
543
  "serde",
550
544
  "serde_json",
551
545
  "thiserror",
@@ -603,28 +597,6 @@ dependencies = [
603
597
  "num-traits",
604
598
  ]
605
599
 
606
- [[package]]
607
- name = "num-iter"
608
- version = "0.1.43"
609
- source = "registry+https://github.com/rust-lang/crates.io-index"
610
- checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
611
- dependencies = [
612
- "autocfg",
613
- "num-integer",
614
- "num-traits",
615
- ]
616
-
617
- [[package]]
618
- name = "num-rational"
619
- version = "0.3.2"
620
- source = "registry+https://github.com/rust-lang/crates.io-index"
621
- checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
622
- dependencies = [
623
- "autocfg",
624
- "num-integer",
625
- "num-traits",
626
- ]
627
-
628
600
  [[package]]
629
601
  name = "num-rational"
630
602
  version = "0.4.1"
@@ -727,18 +699,6 @@ version = "0.3.26"
727
699
  source = "registry+https://github.com/rust-lang/crates.io-index"
728
700
  checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
729
701
 
730
- [[package]]
731
- name = "png"
732
- version = "0.16.8"
733
- source = "registry+https://github.com/rust-lang/crates.io-index"
734
- checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
735
- dependencies = [
736
- "bitflags",
737
- "crc32fast",
738
- "deflate",
739
- "miniz_oxide 0.3.7",
740
- ]
741
-
742
702
  [[package]]
743
703
  name = "png"
744
704
  version = "0.17.13"
@@ -761,6 +721,15 @@ dependencies = [
761
721
  "unicode-ident",
762
722
  ]
763
723
 
724
+ [[package]]
725
+ name = "qoi"
726
+ version = "0.4.1"
727
+ source = "registry+https://github.com/rust-lang/crates.io-index"
728
+ checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
729
+ dependencies = [
730
+ "bytemuck",
731
+ ]
732
+
764
733
  [[package]]
765
734
  name = "quote"
766
735
  version = "1.0.26"
@@ -829,12 +798,12 @@ version = "0.1.0"
829
798
  dependencies = [
830
799
  "arboard",
831
800
  "ffmpeg-next",
832
- "image 0.23.14",
833
- "jpeg-decoder 0.3.0",
801
+ "image",
802
+ "jpeg-decoder",
834
803
  "jpeg-encoder",
835
804
  "lazy_static",
836
805
  "mp4",
837
- "png 0.17.13",
806
+ "png",
838
807
  "rayon",
839
808
  "serde",
840
809
  "serde_json",
@@ -853,12 +822,6 @@ version = "1.0.13"
853
822
  source = "registry+https://github.com/rust-lang/crates.io-index"
854
823
  checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
855
824
 
856
- [[package]]
857
- name = "scoped_threadpool"
858
- version = "0.1.9"
859
- source = "registry+https://github.com/rust-lang/crates.io-index"
860
- checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8"
861
-
862
825
  [[package]]
863
826
  name = "scopeguard"
864
827
  version = "1.1.0"
@@ -914,6 +877,15 @@ version = "1.11.0"
914
877
  source = "registry+https://github.com/rust-lang/crates.io-index"
915
878
  checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
916
879
 
880
+ [[package]]
881
+ name = "spin"
882
+ version = "0.9.8"
883
+ source = "registry+https://github.com/rust-lang/crates.io-index"
884
+ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
885
+ dependencies = [
886
+ "lock_api",
887
+ ]
888
+
917
889
  [[package]]
918
890
  name = "str-buf"
919
891
  version = "1.0.6"
@@ -988,17 +960,6 @@ dependencies = [
988
960
  "syn 2.0.13",
989
961
  ]
990
962
 
991
- [[package]]
992
- name = "tiff"
993
- version = "0.6.1"
994
- source = "registry+https://github.com/rust-lang/crates.io-index"
995
- checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437"
996
- dependencies = [
997
- "jpeg-decoder 0.1.22",
998
- "miniz_oxide 0.4.4",
999
- "weezl",
1000
- ]
1001
-
1002
963
  [[package]]
1003
964
  name = "tiff"
1004
965
  version = "0.9.0"
@@ -1006,7 +967,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1006
967
  checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211"
1007
968
  dependencies = [
1008
969
  "flate2",
1009
- "jpeg-decoder 0.3.0",
970
+ "jpeg-decoder",
1010
971
  "weezl",
1011
972
  ]
1012
973
 
@@ -1231,3 +1192,12 @@ checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
1231
1192
  dependencies = [
1232
1193
  "libc",
1233
1194
  ]
1195
+
1196
+ [[package]]
1197
+ name = "zune-inflate"
1198
+ version = "0.2.54"
1199
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1200
+ checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
1201
+ dependencies = [
1202
+ "simd-adler32",
1203
+ ]
package/Cargo.toml CHANGED
@@ -15,11 +15,11 @@ jpeg-decoder = "0.3"
15
15
  jpeg-encoder = "0.5.1"
16
16
  lazy_static = "1.4"
17
17
  rayon = "1.7.0"
18
- image = "0.23.7"
18
+ image = "0.24.7"
19
19
  arboard = "3.2.0"
20
20
  sysinfo = "0.30.7"
21
21
  mp4 = {git = "https://github.com/jonnyburger/mp4-rust", rev = "92ba375738cc2f05a4d754e1f968cf2e97d06641"}
22
- ffmpeg-next = {git = "https://github.com/remotion-dev/rust-ffmpeg", rev ="675dd103871633dd0ad8a3a2ca7f12e9a42edec1"}
22
+ ffmpeg-next = {git = "https://github.com/remotion-dev/rust-ffmpeg", rev ="4027d3764d54c6c71ab72ff076764ae7abe91428"}
23
23
 
24
24
  [[bin]]
25
25
  name = "remotion"
package/dist/client.d.ts CHANGED
@@ -467,19 +467,19 @@ export declare const BrowserSafeApis: {
467
467
  cliFlag: "gl";
468
468
  docLink: string;
469
469
  name: string;
470
- type: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
470
+ type: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
471
471
  ssrName: string;
472
472
  description: () => import("react/jsx-runtime").JSX.Element;
473
473
  getValue: ({ commandLine }: {
474
474
  commandLine: Record<string, unknown>;
475
475
  }) => {
476
- value: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
476
+ value: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
477
477
  source: string;
478
478
  } | {
479
479
  value: null;
480
480
  source: string;
481
481
  };
482
- setConfig: (value: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null) => void;
482
+ setConfig: (value: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null) => void;
483
483
  };
484
484
  enableLambdaInsights: {
485
485
  name: string;
@@ -788,6 +788,21 @@ export declare const BrowserSafeApis: {
788
788
  ssrName: string;
789
789
  type: boolean;
790
790
  };
791
+ disableGitSourceOption: {
792
+ cliFlag: string;
793
+ description: () => string;
794
+ docLink: string;
795
+ getValue: ({ commandLine }: {
796
+ commandLine: Record<string, unknown>;
797
+ }) => {
798
+ source: string;
799
+ value: boolean;
800
+ };
801
+ name: string;
802
+ setConfig: () => never;
803
+ ssrName: string;
804
+ type: boolean;
805
+ };
791
806
  };
792
807
  validColorSpaces: readonly ["default", "bt709", "bt2020-ncl"];
793
808
  optionsMap: {
@@ -2248,6 +2263,23 @@ export declare const BrowserSafeApis: {
2248
2263
  type: boolean;
2249
2264
  };
2250
2265
  };
2266
+ readonly deploySiteCloudRun: {
2267
+ readonly logLevel: {
2268
+ cliFlag: "log";
2269
+ name: string;
2270
+ ssrName: string;
2271
+ description: () => import("react/jsx-runtime").JSX.Element;
2272
+ docLink: string;
2273
+ getValue: ({ commandLine }: {
2274
+ commandLine: Record<string, unknown>;
2275
+ }) => {
2276
+ value: "verbose" | "info" | "warn" | "error";
2277
+ source: string;
2278
+ };
2279
+ setConfig: (newLogLevel: "verbose" | "info" | "warn" | "error") => void;
2280
+ type: "verbose" | "info" | "warn" | "error";
2281
+ };
2282
+ };
2251
2283
  };
2252
2284
  codecSupportsCrf: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif") => boolean;
2253
2285
  codecSupportsVideoBitrate: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "h264-ts" | "gif") => boolean;
@@ -34,8 +34,6 @@ const combineVideoStreams = async ({ fps, codec, filelistDir, numberOfGifLoops,
34
34
  encoder,
35
35
  codec === 'h265' ? '-tag:v' : null,
36
36
  codec === 'h265' ? 'hvc1' : null,
37
- codec === 'h264' ? '-movflags' : null,
38
- codec === 'h264' ? 'faststart' : null,
39
37
  addRemotionMetadata ? `-metadata` : null,
40
38
  addRemotionMetadata ? `comment=Made with Remotion ${version_1.VERSION}` : null,
41
39
  '-y',
@@ -12,6 +12,19 @@ const logger_1 = require("./logger");
12
12
  const mux_video_and_audio_1 = require("./mux-video-and-audio");
13
13
  const audio_codec_1 = require("./options/audio-codec");
14
14
  const truthy_1 = require("./truthy");
15
+ const codecSupportsFastStart = {
16
+ 'h264-mkv': false,
17
+ 'h264-ts': false,
18
+ h264: true,
19
+ h265: true,
20
+ aac: false,
21
+ gif: false,
22
+ mp3: false,
23
+ prores: false,
24
+ vp8: false,
25
+ vp9: false,
26
+ wav: false,
27
+ };
15
28
  const combineChunks = async ({ files, filelistDir, output, onProgress, numberOfFrames, codec, fps, numberOfGifLoops, resolvedAudioCodec, audioBitrate, indent, logLevel, chunkDurationInSeconds, binariesDirectory, cancelSignal, seamlessAudio, seamlessVideo, muted, }) => {
16
29
  const shouldCreateAudio = resolvedAudioCodec !== null && !muted;
17
30
  const shouldCreateVideo = !(0, audio_codec_1.isAudioCodec)(codec);
@@ -100,6 +113,7 @@ const combineChunks = async ({ files, filelistDir, output, onProgress, numberOfF
100
113
  binariesDirectory,
101
114
  fps,
102
115
  cancelSignal,
116
+ addFaststart: codecSupportsFastStart[codec],
103
117
  });
104
118
  onProgress(numberOfFrames);
105
119
  (0, node_fs_1.rmSync)(filelistDir, { recursive: true });
@@ -111,7 +111,6 @@ const internalGetCompositionsRaw = async ({ browserExecutable, chromiumOptions,
111
111
  forceIPv4: false,
112
112
  }, {
113
113
  onDownload: () => undefined,
114
- onError,
115
114
  })
116
115
  .then(({ server: { serveUrl, offthreadPort, sourceMap }, cleanupServer }) => {
117
116
  page.setBrowserSourceMapGetter(sourceMap);
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getVideoMetadata = void 0;
4
+ const node_path_1 = require("node:path");
4
5
  const compositor_1 = require("./compositor/compositor");
5
6
  const getVideoMetadata = async (videoSource, options) => {
6
7
  var _a, _b;
@@ -11,7 +12,7 @@ const getVideoMetadata = async (videoSource, options) => {
11
12
  binariesDirectory: (_b = options === null || options === void 0 ? void 0 : options.binariesDirectory) !== null && _b !== void 0 ? _b : null,
12
13
  });
13
14
  const metadataResponse = await compositor.executeCommand('GetVideoMetadata', {
14
- src: videoSource,
15
+ src: (0, node_path_1.resolve)(process.cwd(), videoSource),
15
16
  });
16
17
  await compositor.finishCommands();
17
18
  await compositor.waitForDone();
package/dist/index.d.ts CHANGED
@@ -141,8 +141,8 @@ export declare const RenderInternals: {
141
141
  validPixelFormats: readonly ["yuv420p", "yuva420p", "yuv422p", "yuv444p", "yuv420p10le", "yuv422p10le", "yuv444p10le", "yuva444p10le"];
142
142
  DEFAULT_BROWSER: "chrome";
143
143
  validateFrameRange: (frameRange: import("./frame-range").FrameRange | null) => void;
144
- DEFAULT_OPENGL_RENDERER: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
145
- validateOpenGlRenderer: (option: unknown) => "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
144
+ DEFAULT_OPENGL_RENDERER: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
145
+ validateOpenGlRenderer: (option: unknown) => "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
146
146
  validCodecs: readonly ["h264", "h265", "vp8", "vp9", "mp3", "aac", "wav", "prores", "h264-mkv", "h264-ts", "gif"];
147
147
  DEFAULT_PIXEL_FORMAT: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
148
148
  validateJpegQuality: (q: unknown) => void;
@@ -354,8 +354,8 @@ export declare const RenderInternals: {
354
354
  }) => execa.ExecaChildProcess<string>;
355
355
  validStillImageFormats: readonly ["png", "jpeg", "pdf", "webp"];
356
356
  validVideoImageFormats: readonly ["png", "jpeg", "none"];
357
- DEFAULT_STILL_IMAGE_FORMAT: "jpeg" | "png" | "webp" | "pdf";
358
- DEFAULT_VIDEO_IMAGE_FORMAT: "jpeg" | "png" | "none";
357
+ DEFAULT_STILL_IMAGE_FORMAT: "png" | "jpeg" | "pdf" | "webp";
358
+ DEFAULT_VIDEO_IMAGE_FORMAT: "png" | "jpeg" | "none";
359
359
  DEFAULT_JPEG_QUALITY: number;
360
360
  chalk: {
361
361
  enabled: () => boolean;
@@ -441,8 +441,7 @@ export declare const RenderInternals: {
441
441
  offthreadVideoCacheSizeInBytes: number | null;
442
442
  binariesDirectory: string | null;
443
443
  forceIPv4: boolean;
444
- }, { onDownload, onError, }: {
445
- onError: (err: Error) => void;
444
+ }, { onDownload, }: {
446
445
  onDownload: import("./assets/download-and-map-assets-to-file").RenderMediaOnDownload | null;
447
446
  }) => Promise<{
448
447
  server: import("./prepare-server").RemotionServer;
@@ -454,7 +453,7 @@ export declare const RenderInternals: {
454
453
  frame: number;
455
454
  serializedInputPropsWithCustomSchema: string;
456
455
  serializedResolvedPropsWithCustomSchema: string;
457
- imageFormat: "jpeg" | "png" | "webp" | "pdf";
456
+ imageFormat: "png" | "jpeg" | "pdf" | "webp";
458
457
  jpegQuality: number;
459
458
  puppeteerInstance: HeadlessBrowser | null;
460
459
  envVariables: Record<string, string>;
@@ -755,7 +754,7 @@ export declare const RenderInternals: {
755
754
  onFrameUpdate: ((framesRendered: number, frameIndex: number, timeToRenderInMilliseconds: number) => void) | null;
756
755
  outputDir: string | null;
757
756
  envVariables: Record<string, string>;
758
- imageFormat: "jpeg" | "png" | "none";
757
+ imageFormat: "png" | "jpeg" | "none";
759
758
  jpegQuality: number;
760
759
  frameRange: import("./frame-range").FrameRange | null;
761
760
  everyNthFrame: number;
@@ -1,6 +1,6 @@
1
1
  import type { LogLevel } from './log-level';
2
2
  import type { CancelSignal } from './make-cancel-signal';
3
- export declare const muxVideoAndAudio: ({ videoOutput, audioOutput, output, indent, logLevel, onProgress, binariesDirectory, fps, cancelSignal, }: {
3
+ export declare const muxVideoAndAudio: ({ videoOutput, audioOutput, output, indent, logLevel, onProgress, binariesDirectory, fps, cancelSignal, addFaststart, }: {
4
4
  videoOutput: string | null;
5
5
  audioOutput: string | null;
6
6
  output: string;
@@ -10,4 +10,5 @@ export declare const muxVideoAndAudio: ({ videoOutput, audioOutput, output, inde
10
10
  fps: number;
11
11
  onProgress: (p: number) => void;
12
12
  cancelSignal: CancelSignal | undefined;
13
+ addFaststart: boolean;
13
14
  }) => Promise<void>;
@@ -6,7 +6,7 @@ const call_ffmpeg_1 = require("./call-ffmpeg");
6
6
  const logger_1 = require("./logger");
7
7
  const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
8
8
  const truthy_1 = require("./truthy");
9
- const muxVideoAndAudio = async ({ videoOutput, audioOutput, output, indent, logLevel, onProgress, binariesDirectory, fps, cancelSignal, }) => {
9
+ const muxVideoAndAudio = async ({ videoOutput, audioOutput, output, indent, logLevel, onProgress, binariesDirectory, fps, cancelSignal, addFaststart, }) => {
10
10
  var _a;
11
11
  const startTime = Date.now();
12
12
  logger_1.Log.verbose({ indent, logLevel }, 'Muxing video and audio together');
@@ -20,6 +20,8 @@ const muxVideoAndAudio = async ({ videoOutput, audioOutput, output, indent, logL
20
20
  videoOutput ? 'copy' : null,
21
21
  audioOutput ? '-c:a' : null,
22
22
  audioOutput ? 'copy' : null,
23
+ addFaststart ? '-movflags' : null,
24
+ addFaststart ? 'faststart' : null,
23
25
  `-metadata`,
24
26
  `comment=Made with Remotion ${version_1.VERSION}`,
25
27
  '-y',
@@ -30,12 +30,8 @@ type ProgressEventPayload = {
30
30
  totalSize: number | null;
31
31
  src: string;
32
32
  };
33
- type ErrorEventPayload = {
34
- error: Error;
35
- };
36
33
  type EventMap = {
37
34
  progress: ProgressEventPayload;
38
- error: ErrorEventPayload;
39
35
  download: DownloadEventPayload;
40
36
  };
41
37
  export type EventTypes = keyof EventMap;
@@ -50,7 +46,6 @@ export declare class OffthreadVideoServerEmitter {
50
46
  addEventListener<Q extends EventTypes>(name: Q, callback: CallbackListener<Q>): () => void;
51
47
  removeEventListener<Q extends EventTypes>(name: Q, callback: CallbackListener<Q>): void;
52
48
  private dispatchEvent;
53
- dispatchError(error: Error): void;
54
49
  dispatchDownloadProgress(src: string, percent: number | null, downloaded: number, totalSize: number | null): void;
55
50
  dispatchDownload(src: string): void;
56
51
  }
@@ -166,13 +166,9 @@ const startOffthreadVideoServer = ({ downloadMap, concurrency, logLevel, indent,
166
166
  .catch((err) => {
167
167
  if (!response.headersSent) {
168
168
  response.writeHead(500);
169
+ response.write(JSON.stringify({ error: err.stack }));
169
170
  }
170
171
  response.end();
171
- // Any errors occurred due to the render being aborted don't need to be logged.
172
- if (err.message !== REQUEST_CLOSED_TOKEN &&
173
- !err.message.includes('EPIPE')) {
174
- downloadMap.emitter.dispatchError(err);
175
- }
176
172
  });
177
173
  },
178
174
  compositor,
@@ -182,7 +178,6 @@ exports.startOffthreadVideoServer = startOffthreadVideoServer;
182
178
  class OffthreadVideoServerEmitter {
183
179
  constructor() {
184
180
  this.listeners = {
185
- error: [],
186
181
  progress: [],
187
182
  download: [],
188
183
  };
@@ -201,11 +196,6 @@ class OffthreadVideoServerEmitter {
201
196
  callback({ detail: context });
202
197
  });
203
198
  }
204
- dispatchError(error) {
205
- this.dispatchEvent('error', {
206
- error,
207
- });
208
- }
209
199
  dispatchDownloadProgress(src, percent, downloaded, totalSize) {
210
200
  this.dispatchEvent('progress', {
211
201
  downloaded,
@@ -0,0 +1,15 @@
1
+ export declare const disableGitSourceOption: {
2
+ cliFlag: string;
3
+ description: () => string;
4
+ docLink: string;
5
+ getValue: ({ commandLine }: {
6
+ commandLine: Record<string, unknown>;
7
+ }) => {
8
+ source: string;
9
+ value: boolean;
10
+ };
11
+ name: string;
12
+ setConfig: () => never;
13
+ ssrName: string;
14
+ type: boolean;
15
+ };
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.disableGitSourceOption = void 0;
4
+ const DEFAULT = false;
5
+ const cliFlag = 'disable-git-source';
6
+ exports.disableGitSourceOption = {
7
+ cliFlag,
8
+ description: () => `Disables the Git Source being connected to the Remotion Studio. Clicking on stack traces and certain menu items will be disabled.`,
9
+ docLink: 'https://remotion.dev/docs/bundle',
10
+ getValue: ({ commandLine }) => {
11
+ if (commandLine[cliFlag]) {
12
+ return {
13
+ source: 'cli',
14
+ value: commandLine[cliFlag],
15
+ };
16
+ }
17
+ return {
18
+ source: 'default',
19
+ value: DEFAULT,
20
+ };
21
+ },
22
+ name: 'Disable Git source',
23
+ setConfig: () => {
24
+ throw new Error('Not implemented');
25
+ },
26
+ ssrName: 'disableGitSource',
27
+ type: false,
28
+ };
@@ -1,19 +1,19 @@
1
1
  export declare const validOpenGlRenderers: readonly ["swangle", "angle", "egl", "swiftshader", "vulkan", "angle-egl"];
2
2
  export type OpenGlRenderer = (typeof validOpenGlRenderers)[number];
3
3
  export declare const DEFAULT_OPENGL_RENDERER: OpenGlRenderer | null;
4
- export declare const getChromiumOpenGlRenderer: () => "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
4
+ export declare const getChromiumOpenGlRenderer: () => "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
5
5
  export declare const setChromiumOpenGlRenderer: (renderer: OpenGlRenderer) => void;
6
6
  export declare const glOption: {
7
7
  cliFlag: "gl";
8
8
  docLink: string;
9
9
  name: string;
10
- type: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
10
+ type: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
11
11
  ssrName: string;
12
12
  description: () => import("react/jsx-runtime").JSX.Element;
13
13
  getValue: ({ commandLine }: {
14
14
  commandLine: Record<string, unknown>;
15
15
  }) => {
16
- value: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
16
+ value: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
17
17
  source: string;
18
18
  } | {
19
19
  value: null;
@@ -245,19 +245,19 @@ export declare const allOptions: {
245
245
  cliFlag: "gl";
246
246
  docLink: string;
247
247
  name: string;
248
- type: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
248
+ type: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
249
249
  ssrName: string;
250
250
  description: () => import("react/jsx-runtime").JSX.Element;
251
251
  getValue: ({ commandLine }: {
252
252
  commandLine: Record<string, unknown>;
253
253
  }) => {
254
- value: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
254
+ value: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
255
255
  source: string;
256
256
  } | {
257
257
  value: null;
258
258
  source: string;
259
259
  };
260
- setConfig: (value: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null) => void;
260
+ setConfig: (value: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null) => void;
261
261
  };
262
262
  enableLambdaInsights: {
263
263
  name: string;
@@ -566,6 +566,21 @@ export declare const allOptions: {
566
566
  ssrName: string;
567
567
  type: boolean;
568
568
  };
569
+ disableGitSourceOption: {
570
+ cliFlag: string;
571
+ description: () => string;
572
+ docLink: string;
573
+ getValue: ({ commandLine }: {
574
+ commandLine: Record<string, unknown>;
575
+ }) => {
576
+ source: string;
577
+ value: boolean;
578
+ };
579
+ name: string;
580
+ setConfig: () => never;
581
+ ssrName: string;
582
+ type: boolean;
583
+ };
569
584
  };
570
585
  export type AvailableOptions = keyof typeof allOptions;
571
586
  export type TypeOfOption<Type> = Type extends AnyRemotionOption<infer X> ? X : never;
@@ -8,6 +8,7 @@ const binaries_directory_1 = require("./binaries-directory");
8
8
  const color_space_1 = require("./color-space");
9
9
  const crf_1 = require("./crf");
10
10
  const delete_after_1 = require("./delete-after");
11
+ const disable_git_source_1 = require("./disable-git-source");
11
12
  const enable_lambda_insights_1 = require("./enable-lambda-insights");
12
13
  const enable_multiprocess_on_linux_1 = require("./enable-multiprocess-on-linux");
13
14
  const encoding_buffer_size_1 = require("./encoding-buffer-size");
@@ -72,4 +73,5 @@ exports.allOptions = {
72
73
  publicDirOption: public_dir_1.publicDirOption,
73
74
  onBrowserDownloadOption: on_browser_download_1.onBrowserDownloadOption,
74
75
  throwIfSiteExistsOption: throw_if_site_exists_1.throwIfSiteExistsOption,
76
+ disableGitSourceOption: disable_git_source_1.disableGitSourceOption,
75
77
  };
@@ -1456,4 +1456,21 @@ export declare const optionsMap: {
1456
1456
  type: boolean;
1457
1457
  };
1458
1458
  };
1459
+ readonly deploySiteCloudRun: {
1460
+ readonly logLevel: {
1461
+ cliFlag: "log";
1462
+ name: string;
1463
+ ssrName: string;
1464
+ description: () => import("react/jsx-runtime").JSX.Element;
1465
+ docLink: string;
1466
+ getValue: ({ commandLine }: {
1467
+ commandLine: Record<string, unknown>;
1468
+ }) => {
1469
+ value: "verbose" | "info" | "warn" | "error";
1470
+ source: string;
1471
+ };
1472
+ setConfig: (newLogLevel: "verbose" | "info" | "warn" | "error") => void;
1473
+ type: "verbose" | "info" | "warn" | "error";
1474
+ };
1475
+ };
1459
1476
  };
@@ -143,4 +143,7 @@ exports.optionsMap = {
143
143
  logLevel: log_level_1.logLevelOption,
144
144
  throwIfSiteExists: throw_if_site_exists_1.throwIfSiteExistsOption,
145
145
  },
146
+ deploySiteCloudRun: {
147
+ logLevel: log_level_1.logLevelOption,
148
+ },
146
149
  };
@@ -23,8 +23,7 @@ type PrepareServerOptions = {
23
23
  forceIPv4: boolean;
24
24
  };
25
25
  export declare const prepareServer: ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency, logLevel, indent, offthreadVideoCacheSizeInBytes, binariesDirectory, forceIPv4, }: PrepareServerOptions) => Promise<RemotionServer>;
26
- export declare const makeOrReuseServer: (server: RemotionServer | undefined, config: PrepareServerOptions, { onDownload, onError, }: {
27
- onError: (err: Error) => void;
26
+ export declare const makeOrReuseServer: (server: RemotionServer | undefined, config: PrepareServerOptions, { onDownload, }: {
28
27
  onDownload: RenderMediaOnDownload | null;
29
28
  }) => Promise<{
30
29
  server: RemotionServer;
@@ -97,31 +97,23 @@ const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, conc
97
97
  });
98
98
  };
99
99
  exports.prepareServer = prepareServer;
100
- const makeOrReuseServer = async (server, config, { onDownload, onError, }) => {
100
+ const makeOrReuseServer = async (server, config, { onDownload, }) => {
101
101
  if (server) {
102
102
  const cleanupOnDownload = (0, download_and_map_assets_to_file_1.attachDownloadListenerToEmitter)(server.downloadMap, onDownload);
103
- const cleanupError = server.downloadMap.emitter.addEventListener('error', ({ detail: { error } }) => {
104
- onError(error);
105
- });
106
103
  return {
107
104
  server,
108
105
  cleanupServer: () => {
109
106
  cleanupOnDownload();
110
- cleanupError();
111
107
  return Promise.resolve();
112
108
  },
113
109
  };
114
110
  }
115
111
  const newServer = await (0, exports.prepareServer)(config);
116
112
  const cleanupOnDownloadNew = (0, download_and_map_assets_to_file_1.attachDownloadListenerToEmitter)(newServer.downloadMap, onDownload);
117
- const cleanupErrorNew = newServer.downloadMap.emitter.addEventListener('error', ({ detail: { error } }) => {
118
- onError(error);
119
- });
120
113
  return {
121
114
  server: newServer,
122
115
  cleanupServer: (force) => {
123
116
  cleanupOnDownloadNew();
124
- cleanupErrorNew();
125
117
  return Promise.all([newServer.closeServer(force)]);
126
118
  },
127
119
  };
@@ -461,7 +461,6 @@ const internalRenderFramesRaw = ({ browserExecutable, cancelSignal, chromiumOpti
461
461
  forceIPv4: false,
462
462
  }, {
463
463
  onDownload,
464
- onError,
465
464
  }),
466
465
  browserInstance,
467
466
  ]).then(([{ server: openedServer, cleanupServer }, pInstance]) => {
@@ -515,7 +514,7 @@ const internalRenderFramesRaw = ({ browserExecutable, cancelSignal, chromiumOpti
515
514
  ])
516
515
  .then((res) => {
517
516
  server === null || server === void 0 ? void 0 : server.compositor.executeCommand('CloseAllVideos', {}).then(() => {
518
- logger_1.Log.verbose({ indent, logLevel }, 'Freed memory from compositor');
517
+ logger_1.Log.verbose({ indent, logLevel, tag: 'compositor' }, 'Freed memory from compositor');
519
518
  }).catch((err) => {
520
519
  logger_1.Log.verbose({ indent, logLevel }, 'Could not close compositor', err);
521
520
  });
@@ -283,7 +283,6 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition, s
283
283
  forceIPv4: false,
284
284
  }, {
285
285
  onDownload,
286
- onError: (err) => reject(err),
287
286
  });
288
287
  })
289
288
  .then(({ server, cleanupServer }) => {
@@ -232,7 +232,6 @@ const internalRenderStillRaw = (options) => {
232
232
  forceIPv4: false,
233
233
  }, {
234
234
  onDownload: options.onDownload,
235
- onError,
236
235
  })
237
236
  .then(({ server, cleanupServer }) => {
238
237
  cleanup.push(() => cleanupServer(false));
@@ -126,7 +126,6 @@ const internalSelectCompositionRaw = async (options) => {
126
126
  forceIPv4: false,
127
127
  }, {
128
128
  onDownload: () => undefined,
129
- onError,
130
129
  })
131
130
  .then(({ server: { serveUrl, offthreadPort, sourceMap }, cleanupServer }) => {
132
131
  page.setBrowserSourceMapGetter(sourceMap);
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.180",
6
+ "version": "4.0.182",
7
7
  "description": "Render Remotion videos using Node.js or Bun",
8
8
  "main": "dist/index.js",
9
9
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "extract-zip": "2.0.1",
19
19
  "source-map": "^0.8.0-beta.0",
20
20
  "ws": "8.17.1",
21
- "remotion": "4.0.180"
21
+ "remotion": "4.0.182"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": ">=16.8.0",
@@ -31,16 +31,16 @@
31
31
  "react": "18.3.1",
32
32
  "react-dom": "18.3.1",
33
33
  "@types/ws": "8.5.10",
34
- "@remotion/streaming": "4.0.180"
34
+ "@remotion/streaming": "4.0.182"
35
35
  },
36
36
  "optionalDependencies": {
37
- "@remotion/compositor-darwin-arm64": "4.0.180",
38
- "@remotion/compositor-linux-arm64-gnu": "4.0.180",
39
- "@remotion/compositor-darwin-x64": "4.0.180",
40
- "@remotion/compositor-linux-x64-gnu": "4.0.180",
41
- "@remotion/compositor-win32-x64-msvc": "4.0.180",
42
- "@remotion/compositor-linux-arm64-musl": "4.0.180",
43
- "@remotion/compositor-linux-x64-musl": "4.0.180"
37
+ "@remotion/compositor-darwin-arm64": "4.0.182",
38
+ "@remotion/compositor-linux-arm64-gnu": "4.0.182",
39
+ "@remotion/compositor-darwin-x64": "4.0.182",
40
+ "@remotion/compositor-linux-arm64-musl": "4.0.182",
41
+ "@remotion/compositor-linux-x64-gnu": "4.0.182",
42
+ "@remotion/compositor-linux-x64-musl": "4.0.182",
43
+ "@remotion/compositor-win32-x64-msvc": "4.0.182"
44
44
  },
45
45
  "keywords": [
46
46
  "remotion",