@remotion/media 4.0.454 → 4.0.455

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.
@@ -86,7 +86,7 @@ export declare const drawPreviewOverlay: ({ context, audioTime, audioContextStat
86
86
  frame: import("mediabunny").WrappedCanvas;
87
87
  };
88
88
  } | null;
89
- drawFrame: (frame: import("mediabunny").WrappedCanvas) => void;
89
+ drawFrame: (frame: import("mediabunny").WrappedCanvas) => Promise<void>;
90
90
  getFramesRendered: () => number;
91
91
  } | null;
92
92
  playbackRate: number;
@@ -765,6 +765,21 @@ var getDurationOrCompute = async (input) => {
765
765
  }) ?? input.computeDuration(undefined, { skipLiveWait: true });
766
766
  };
767
767
 
768
+ // src/helpers/resolve-audio-track.ts
769
+ var resolveAudioTrack = async ({
770
+ videoTrack,
771
+ audioTracks,
772
+ audioStreamIndex
773
+ }) => {
774
+ if (audioStreamIndex !== null) {
775
+ return audioTracks[audioStreamIndex] ?? null;
776
+ }
777
+ if (videoTrack) {
778
+ return await videoTrack.getPrimaryPairableAudioTrack() ?? null;
779
+ }
780
+ return audioTracks[0] ?? null;
781
+ };
782
+
768
783
  // src/is-type-of-error.ts
769
784
  function isNetworkError(error) {
770
785
  if (error.message.includes("Failed to fetch") || error.message.includes("Load failed") || error.message.includes("NetworkError when attempting to fetch resource")) {
@@ -1020,6 +1035,7 @@ var createVideoIterator = async (timeToSeek, cache) => {
1020
1035
  };
1021
1036
 
1022
1037
  // src/video-iterator-manager.ts
1038
+ var { runEffectChain } = Internals3;
1023
1039
  var videoIteratorManager = async ({
1024
1040
  delayPlaybackHandleIfNotPremounting,
1025
1041
  canvas,
@@ -1030,7 +1046,10 @@ var videoIteratorManager = async ({
1030
1046
  videoTrack,
1031
1047
  getLoopSegmentMediaEndTimestamp,
1032
1048
  getStartTime,
1033
- getIsLooping
1049
+ getIsLooping,
1050
+ getEffects,
1051
+ getEffectChainState,
1052
+ getCurrentFrame
1034
1053
  }) => {
1035
1054
  let videoIteratorsCreated = 0;
1036
1055
  let videoFrameIterator = null;
@@ -1050,10 +1069,24 @@ var videoIteratorManager = async ({
1050
1069
  alpha: true
1051
1070
  });
1052
1071
  const prewarmedVideoIteratorCache = makePrewarmedVideoIteratorCache(canvasSink);
1053
- const drawFrame = (frame) => {
1072
+ const drawFrame = async (frame) => {
1054
1073
  if (context && canvas) {
1055
- context.clearRect(0, 0, canvas.width, canvas.height);
1056
- context.drawImage(frame.canvas, 0, 0);
1074
+ const effects = getEffects();
1075
+ const chainState = getEffectChainState(canvas.width, canvas.height);
1076
+ if (effects.length > 0 && chainState && canvas instanceof HTMLCanvasElement) {
1077
+ await runEffectChain({
1078
+ state: chainState,
1079
+ source: frame.canvas,
1080
+ effects,
1081
+ output: canvas,
1082
+ frame: getCurrentFrame(),
1083
+ width: canvas.width,
1084
+ height: canvas.height
1085
+ });
1086
+ } else {
1087
+ context.clearRect(0, 0, canvas.width, canvas.height);
1088
+ context.drawImage(frame.canvas, 0, 0);
1089
+ }
1057
1090
  }
1058
1091
  framesRendered++;
1059
1092
  drawDebugOverlay();
@@ -1084,7 +1117,7 @@ var videoIteratorManager = async ({
1084
1117
  if (!iterator.initialFrame) {
1085
1118
  return;
1086
1119
  }
1087
- drawFrame(iterator.initialFrame);
1120
+ await drawFrame(iterator.initialFrame);
1088
1121
  } catch (_catch) {
1089
1122
  var _err = _catch, _hasErr = 1;
1090
1123
  } finally {
@@ -1104,7 +1137,7 @@ var videoIteratorManager = async ({
1104
1137
  }
1105
1138
  const videoSatisfyResult = videoFrameIterator.tryToSatisfySeek(newTime);
1106
1139
  if (videoSatisfyResult.type === "satisfied") {
1107
- drawFrame(videoSatisfyResult.frame);
1140
+ await drawFrame(videoSatisfyResult.frame);
1108
1141
  return;
1109
1142
  }
1110
1143
  if (nonce.isStale()) {
@@ -1158,6 +1191,9 @@ class MediaPlayer {
1158
1191
  debugOverlay = false;
1159
1192
  nonceManager;
1160
1193
  onVideoFrameCallback = null;
1194
+ getEffects;
1195
+ getEffectChainState;
1196
+ getCurrentFrame;
1161
1197
  initializationPromise = null;
1162
1198
  bufferState;
1163
1199
  isPremounting;
@@ -1184,7 +1220,10 @@ class MediaPlayer {
1184
1220
  playing,
1185
1221
  sequenceOffset,
1186
1222
  credentials,
1187
- tagType
1223
+ tagType,
1224
+ getEffects,
1225
+ getEffectChainState,
1226
+ getCurrentFrame
1188
1227
  }) {
1189
1228
  this.canvas = canvas ?? null;
1190
1229
  this.src = src;
@@ -1213,6 +1252,9 @@ class MediaPlayer {
1213
1252
  formats: ALL_FORMATS
1214
1253
  });
1215
1254
  this.tagType = tagType;
1255
+ this.getEffects = getEffects;
1256
+ this.getEffectChainState = getEffectChainState;
1257
+ this.getCurrentFrame = getCurrentFrame;
1216
1258
  if (canvas) {
1217
1259
  const context = canvas.getContext("2d", {
1218
1260
  alpha: true,
@@ -1288,7 +1330,11 @@ class MediaPlayer {
1288
1330
  return { type: "disposed" };
1289
1331
  }
1290
1332
  this.totalDuration = durationInSeconds;
1291
- const audioTrack = await (this.audioStreamIndex === null ? videoTrack?.getPrimaryPairableAudioTrack() : audioTracks[this.audioStreamIndex] ?? null);
1333
+ const audioTrack = await resolveAudioTrack({
1334
+ videoTrack,
1335
+ audioTracks,
1336
+ audioStreamIndex: this.audioStreamIndex
1337
+ });
1292
1338
  if (!videoTrack && !audioTrack) {
1293
1339
  return { type: "no-tracks" };
1294
1340
  }
@@ -1316,7 +1362,10 @@ class MediaPlayer {
1316
1362
  drawDebugOverlay: this.drawDebugOverlay,
1317
1363
  getLoopSegmentMediaEndTimestamp: () => this.getLoopSegmentMediaEndTimestamp(),
1318
1364
  getStartTime: () => this.getStartTime(),
1319
- getIsLooping: () => this.loop
1365
+ getIsLooping: () => this.loop,
1366
+ getEffects: this.getEffects,
1367
+ getEffectChainState: this.getEffectChainState,
1368
+ getCurrentFrame: this.getCurrentFrame
1320
1369
  });
1321
1370
  }
1322
1371
  const startTime = this.getTrimmedTime(startTimeUnresolved);
@@ -1877,7 +1926,8 @@ var useMediaInTimeline = ({
1877
1926
  loopDisplay,
1878
1927
  trimBefore,
1879
1928
  trimAfter,
1880
- controls
1929
+ controls,
1930
+ _experimentalEffects
1881
1931
  }) => {
1882
1932
  const parentSequence = useContext2(Internals7.SequenceContext);
1883
1933
  const startsAt = Internals7.useMediaStartsAt();
@@ -1930,7 +1980,8 @@ var useMediaInTimeline = ({
1930
1980
  stack,
1931
1981
  premountDisplay,
1932
1982
  postmountDisplay,
1933
- controls: controls ?? null
1983
+ controls: controls ?? null,
1984
+ effects: _experimentalEffects
1934
1985
  });
1935
1986
  return () => {
1936
1987
  unregisterSequence(mediaId);
@@ -1957,7 +2008,8 @@ var useMediaInTimeline = ({
1957
2008
  startsAt,
1958
2009
  unregisterSequence,
1959
2010
  volumes,
1960
- trimBefore
2011
+ trimBefore,
2012
+ _experimentalEffects
1961
2013
  ]);
1962
2014
  return {
1963
2015
  id: mediaId
@@ -2042,6 +2094,9 @@ var AudioForPreviewAssertedShowing = ({
2042
2094
  trimAfter,
2043
2095
  trimBefore
2044
2096
  });
2097
+ const effects = useMemo2(() => {
2098
+ return [];
2099
+ }, []);
2045
2100
  useMediaInTimeline({
2046
2101
  volume,
2047
2102
  mediaVolume,
@@ -2056,7 +2111,8 @@ var AudioForPreviewAssertedShowing = ({
2056
2111
  loopDisplay,
2057
2112
  trimAfter,
2058
2113
  trimBefore,
2059
- controls
2114
+ controls,
2115
+ _experimentalEffects: effects
2060
2116
  });
2061
2117
  const bufferingContext = useContext3(Internals8.BufferingContextReact);
2062
2118
  if (!bufferingContext) {
@@ -2138,7 +2194,10 @@ var AudioForPreviewAssertedShowing = ({
2138
2194
  playing: initialPlaying.current,
2139
2195
  sequenceOffset: initialSequenceOffset.current,
2140
2196
  credentials,
2141
- tagType: "audio"
2197
+ tagType: "audio",
2198
+ getEffects: () => [],
2199
+ getEffectChainState: () => null,
2200
+ getCurrentFrame: () => 0
2142
2201
  });
2143
2202
  mediaPlayerRef.current = player;
2144
2203
  player.initialize(currentTimeRef.current, initialMuted.current).then((result) => {
@@ -3555,8 +3614,15 @@ var getSinks = async (src, credentials) => {
3555
3614
  if (format === "network-error") {
3556
3615
  return "network-error";
3557
3616
  }
3558
- const videoTrack = await input.getPrimaryVideoTrack();
3559
- const audioTrack = videoTrack === null ? (await input.getAudioTracks())[index ?? 0] : await (index === null ? videoTrack?.getPrimaryPairableAudioTrack() : (await input.getAudioTracks())[index] ?? null);
3617
+ const [videoTrack, audioTracks] = await Promise.all([
3618
+ input.getPrimaryVideoTrack(),
3619
+ input.getAudioTracks()
3620
+ ]);
3621
+ const audioTrack = await resolveAudioTrack({
3622
+ videoTrack,
3623
+ audioTracks,
3624
+ audioStreamIndex: index
3625
+ });
3560
3626
  if (!audioTrack) {
3561
3627
  return "no-audio-track";
3562
3628
  }
@@ -4533,7 +4599,9 @@ var {
4533
4599
  warnAboutTooHighVolume: warnAboutTooHighVolume2,
4534
4600
  usePreload: usePreload2,
4535
4601
  SequenceContext: SequenceContext2,
4536
- SequenceVisibilityToggleContext
4602
+ SequenceVisibilityToggleContext,
4603
+ useEffectChainState,
4604
+ useMemoizedEffects
4537
4605
  } = Internals19;
4538
4606
  var VideoForPreviewAssertedShowing = ({
4539
4607
  src: unpreloadedSrc,
@@ -4560,7 +4628,8 @@ var VideoForPreviewAssertedShowing = ({
4560
4628
  credentials,
4561
4629
  controls,
4562
4630
  objectFit: objectFitProp,
4563
- _experimentalInitiallyDrawCachedFrame
4631
+ _experimentalInitiallyDrawCachedFrame,
4632
+ _experimentalEffects
4564
4633
  }) => {
4565
4634
  const src = usePreload2(unpreloadedSrc);
4566
4635
  const canvasRef = useRef2(null);
@@ -4591,6 +4660,14 @@ var VideoForPreviewAssertedShowing = ({
4591
4660
  throw new Error("No video config found");
4592
4661
  }
4593
4662
  warnAboutTooHighVolume2(userPreferredVolume);
4663
+ const effectChainState = useEffectChainState();
4664
+ const experimentalEffectsRef = useRef2(_experimentalEffects);
4665
+ experimentalEffectsRef.current = _experimentalEffects;
4666
+ const memoizedEffects = useMemoizedEffects(_experimentalEffects.flat());
4667
+ const effectChainStateRef = useRef2(effectChainState);
4668
+ effectChainStateRef.current = effectChainState;
4669
+ const frameRef = useRef2(frame);
4670
+ frameRef.current = frame;
4594
4671
  const parentSequence = useContext5(SequenceContext2);
4595
4672
  const isPremounting = Boolean(parentSequence?.premounting);
4596
4673
  const isPostmounting = Boolean(parentSequence?.postmounting);
@@ -4616,7 +4693,8 @@ var VideoForPreviewAssertedShowing = ({
4616
4693
  mediaVolume,
4617
4694
  trimAfter,
4618
4695
  trimBefore,
4619
- controls
4696
+ controls,
4697
+ _experimentalEffects: memoizedEffects
4620
4698
  });
4621
4699
  const isSequenceHidden = hidden[timelineId] ?? false;
4622
4700
  const currentTime = frame / videoConfig.fps;
@@ -4718,7 +4796,10 @@ var VideoForPreviewAssertedShowing = ({
4718
4796
  playing: initialPlaying.current,
4719
4797
  sequenceOffset: initialSequenceOffset.current,
4720
4798
  credentials,
4721
- tagType: "video"
4799
+ tagType: "video",
4800
+ getEffects: () => experimentalEffectsRef.current,
4801
+ getEffectChainState: (width, height) => effectChainStateRef.current?.get(width, height),
4802
+ getCurrentFrame: () => frameRef.current
4722
4803
  });
4723
4804
  mediaPlayerRef.current = player;
4724
4805
  player.initialize(currentTimeRef.current, initialMuted.current).then((result) => {
@@ -5314,7 +5395,8 @@ var InnerVideo = ({
5314
5395
  credentials,
5315
5396
  controls,
5316
5397
  objectFit,
5317
- _experimentalInitiallyDrawCachedFrame
5398
+ _experimentalInitiallyDrawCachedFrame,
5399
+ _experimentalEffects
5318
5400
  }) => {
5319
5401
  const environment = useRemotionEnvironment4();
5320
5402
  if (typeof src !== "string") {
@@ -5386,6 +5468,7 @@ var InnerVideo = ({
5386
5468
  credentials,
5387
5469
  controls,
5388
5470
  objectFit,
5471
+ _experimentalEffects,
5389
5472
  _experimentalInitiallyDrawCachedFrame
5390
5473
  });
5391
5474
  };
@@ -5418,6 +5501,7 @@ var VideoInner = ({
5418
5501
  controls,
5419
5502
  objectFit,
5420
5503
  _experimentalInitiallyDrawCachedFrame,
5504
+ _experimentalEffects,
5421
5505
  from,
5422
5506
  durationInFrames
5423
5507
  }) => {
@@ -5455,7 +5539,8 @@ var VideoInner = ({
5455
5539
  credentials,
5456
5540
  controls,
5457
5541
  objectFit: objectFit ?? "contain",
5458
- _experimentalInitiallyDrawCachedFrame: _experimentalInitiallyDrawCachedFrame ?? false
5542
+ _experimentalInitiallyDrawCachedFrame: _experimentalInitiallyDrawCachedFrame ?? false,
5543
+ _experimentalEffects: _experimentalEffects ?? []
5459
5544
  })
5460
5545
  });
5461
5546
  };
@@ -0,0 +1,6 @@
1
+ import type { InputAudioTrack, InputVideoTrack } from 'mediabunny';
2
+ export declare const resolveAudioTrack: ({ videoTrack, audioTracks, audioStreamIndex, }: {
3
+ videoTrack: InputVideoTrack | null;
4
+ audioTracks: InputAudioTrack[];
5
+ audioStreamIndex: number | null;
6
+ }) => Promise<InputAudioTrack | null>;
package/dist/index.d.ts CHANGED
@@ -39,6 +39,7 @@ export declare const experimental_Video: import("react").ComponentType<{
39
39
  credentials: RequestCredentials | undefined;
40
40
  objectFit: import(".").VideoObjectFit;
41
41
  _experimentalInitiallyDrawCachedFrame: boolean;
42
+ _experimentalEffects: import("remotion").EffectsProp;
42
43
  }> & {
43
44
  from?: number | undefined;
44
45
  durationInFrames?: number | undefined;
@@ -1,4 +1,6 @@
1
1
  import type { LogLevel, useBufferState } from 'remotion';
2
+ import type { EffectChainState } from 'remotion';
3
+ import type { EffectsProp } from 'remotion';
2
4
  import { type AudioIteratorManager } from './audio-iterator-manager';
3
5
  import type { SharedAudioContextForMediaPlayer } from './shared-audio-context-for-media-player';
4
6
  import type { VideoIteratorManager } from './video-iterator-manager';
@@ -39,12 +41,15 @@ export declare class MediaPlayer {
39
41
  private debugOverlay;
40
42
  private nonceManager;
41
43
  private onVideoFrameCallback;
44
+ private getEffects;
45
+ private getEffectChainState;
46
+ private getCurrentFrame;
42
47
  private initializationPromise;
43
48
  private bufferState;
44
49
  private isPremounting;
45
50
  private isPostmounting;
46
51
  private seekPromiseChain;
47
- constructor({ canvas, src, logLevel, sharedAudioContext, loop, trimBefore, trimAfter, playbackRate, globalPlaybackRate, audioStreamIndex, fps, debugOverlay, bufferState, isPremounting, isPostmounting, durationInFrames, onVideoFrameCallback, playing, sequenceOffset, credentials, tagType }: {
52
+ constructor({ canvas, src, logLevel, sharedAudioContext, loop, trimBefore, trimAfter, playbackRate, globalPlaybackRate, audioStreamIndex, fps, debugOverlay, bufferState, isPremounting, isPostmounting, durationInFrames, onVideoFrameCallback, playing, sequenceOffset, credentials, tagType, getEffects, getEffectChainState, getCurrentFrame }: {
48
53
  canvas: HTMLCanvasElement | OffscreenCanvas | null;
49
54
  src: string;
50
55
  logLevel: LogLevel;
@@ -66,6 +71,9 @@ export declare class MediaPlayer {
66
71
  sequenceOffset: number;
67
72
  credentials: RequestCredentials | undefined;
68
73
  tagType: 'audio' | 'video';
74
+ getEffects: () => EffectsProp;
75
+ getEffectChainState: (width: number, height: number) => EffectChainState | null;
76
+ getCurrentFrame: () => number;
69
77
  });
70
78
  private input;
71
79
  private isDisposalError;
@@ -1,6 +1,6 @@
1
- import type { LoopDisplay, SequenceControls } from 'remotion';
1
+ import type { EffectDefinitionAndStack, LoopDisplay, SequenceControls } from 'remotion';
2
2
  import { type VolumeProp } from 'remotion';
3
- export declare const useMediaInTimeline: ({ volume, mediaVolume, src, mediaType, playbackRate, displayName, stack, showInTimeline, premountDisplay, postmountDisplay, loopDisplay, trimBefore, trimAfter, controls, }: {
3
+ export declare const useMediaInTimeline: ({ volume, mediaVolume, src, mediaType, playbackRate, displayName, stack, showInTimeline, premountDisplay, postmountDisplay, loopDisplay, trimBefore, trimAfter, controls, _experimentalEffects, }: {
4
4
  volume: VolumeProp | undefined;
5
5
  mediaVolume: number;
6
6
  src: string | undefined;
@@ -15,6 +15,7 @@ export declare const useMediaInTimeline: ({ volume, mediaVolume, src, mediaType,
15
15
  trimBefore: number | undefined;
16
16
  trimAfter: number | undefined;
17
17
  controls: SequenceControls | undefined;
18
+ _experimentalEffects: EffectDefinitionAndStack<unknown>[];
18
19
  }) => {
19
20
  id: string;
20
21
  };
@@ -1,4 +1,5 @@
1
1
  import type { LogLevel, LoopVolumeCurveBehavior, OnVideoFrame, VolumeProp } from 'remotion';
2
+ import type { EffectsProp } from 'remotion';
2
3
  import type { MediaOnError } from '../on-error';
3
4
  export type MediaErrorEvent = {
4
5
  error: Error;
@@ -51,6 +52,7 @@ type OptionalVideoProps = {
51
52
  credentials: RequestCredentials | undefined;
52
53
  objectFit: VideoObjectFit;
53
54
  _experimentalInitiallyDrawCachedFrame: boolean;
55
+ _experimentalEffects: EffectsProp;
54
56
  };
55
57
  export type InnerVideoProps = MandatoryVideoProps & OuterVideoProps & OptionalVideoProps;
56
58
  export type VideoProps = MandatoryVideoProps & Partial<OuterVideoProps> & Partial<OptionalVideoProps> & {
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { LogLevel, LoopVolumeCurveBehavior, SequenceControls, VolumeProp } from 'remotion';
2
+ import type { EffectsProp, LogLevel, LoopVolumeCurveBehavior, SequenceControls, VolumeProp } from 'remotion';
3
3
  import { type MediaOnError } from '../on-error';
4
4
  import type { FallbackOffthreadVideoProps, VideoObjectFit } from './props';
5
5
  type VideoForPreviewProps = {
@@ -27,6 +27,7 @@ type VideoForPreviewProps = {
27
27
  readonly credentials: RequestCredentials | undefined;
28
28
  readonly objectFit: VideoObjectFit;
29
29
  readonly _experimentalInitiallyDrawCachedFrame: boolean;
30
+ readonly _experimentalEffects: EffectsProp;
30
31
  };
31
32
  export declare const VideoForPreview: React.FC<VideoForPreviewProps & {
32
33
  readonly controls: SequenceControls | undefined;
@@ -31,6 +31,7 @@ export declare const Video: React.ComponentType<{
31
31
  credentials: RequestCredentials | undefined;
32
32
  objectFit: import("./props").VideoObjectFit;
33
33
  _experimentalInitiallyDrawCachedFrame: boolean;
34
+ _experimentalEffects: import("remotion").EffectsProp;
34
35
  }> & {
35
36
  from?: number | undefined;
36
37
  durationInFrames?: number | undefined;
@@ -1,7 +1,8 @@
1
1
  import type { InputVideoTrack, WrappedCanvas } from 'mediabunny';
2
+ import type { EffectChainState, EffectsProp } from 'remotion';
2
3
  import type { DelayPlaybackIfNotPremounting } from './delay-playback-if-not-premounting';
3
4
  import type { Nonce } from './nonce-manager';
4
- export declare const videoIteratorManager: ({ delayPlaybackHandleIfNotPremounting, canvas, context, drawDebugOverlay, logLevel, getOnVideoFrameCallback, videoTrack, getLoopSegmentMediaEndTimestamp, getStartTime, getIsLooping, }: {
5
+ export declare const videoIteratorManager: ({ delayPlaybackHandleIfNotPremounting, canvas, context, drawDebugOverlay, logLevel, getOnVideoFrameCallback, videoTrack, getLoopSegmentMediaEndTimestamp, getStartTime, getIsLooping, getEffects, getEffectChainState, getCurrentFrame, }: {
5
6
  videoTrack: InputVideoTrack;
6
7
  delayPlaybackHandleIfNotPremounting: () => DelayPlaybackIfNotPremounting;
7
8
  context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D | null;
@@ -12,6 +13,9 @@ export declare const videoIteratorManager: ({ delayPlaybackHandleIfNotPremountin
12
13
  getLoopSegmentMediaEndTimestamp: () => number;
13
14
  getStartTime: () => number;
14
15
  getIsLooping: () => boolean;
16
+ getEffects: () => EffectsProp;
17
+ getEffectChainState: (width: number, height: number) => EffectChainState | null;
18
+ getCurrentFrame: () => number;
15
19
  }) => Promise<{
16
20
  startVideoIterator: (timeToSeek: number, nonce: Nonce) => Promise<void>;
17
21
  getVideoIteratorsCreated: () => number;
@@ -32,7 +36,7 @@ export declare const videoIteratorManager: ({ delayPlaybackHandleIfNotPremountin
32
36
  frame: WrappedCanvas;
33
37
  };
34
38
  } | null;
35
- drawFrame: (frame: WrappedCanvas) => void;
39
+ drawFrame: (frame: WrappedCanvas) => Promise<void>;
36
40
  getFramesRendered: () => number;
37
41
  }>;
38
42
  export type VideoIteratorManager = Awaited<ReturnType<typeof videoIteratorManager>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/media",
3
- "version": "4.0.454",
3
+ "version": "4.0.455",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "module": "dist/esm/index.mjs",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "mediabunny": "1.42.0",
26
- "remotion": "4.0.454",
26
+ "remotion": "4.0.455",
27
27
  "zod": "4.3.6"
28
28
  },
29
29
  "peerDependencies": {
@@ -31,7 +31,7 @@
31
31
  "react-dom": ">=16.8.0"
32
32
  },
33
33
  "devDependencies": {
34
- "@remotion/eslint-config-internal": "4.0.454",
34
+ "@remotion/eslint-config-internal": "4.0.455",
35
35
  "@vitest/browser-webdriverio": "4.0.9",
36
36
  "eslint": "9.19.0",
37
37
  "react": "19.2.3",