@remotion/three 4.0.386 → 4.0.387

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.
@@ -1,3 +1,21 @@
1
1
  export { ThreeCanvas, ThreeCanvasProps } from './ThreeCanvas';
2
- export { UseOffthreadVideoTextureOptions, useOffthreadVideoTexture, } from './use-offthread-video-texture';
3
- export { UseVideoTextureOptions, useVideoTexture } from './use-video-texture';
2
+ /**
3
+ * @deprecated useOffthreadVideoTexture has been deprecated.
4
+ * Use the approach documented at https://remotion.dev/docs/videos/as-threejs-texture instead.
5
+ */
6
+ export type { UseOffthreadVideoTextureOptions } from './use-offthread-video-texture';
7
+ /**
8
+ * @deprecated useOffthreadVideoTexture has been deprecated.
9
+ * Use the approach documented at https://remotion.dev/docs/videos/as-threejs-texture instead.
10
+ */
11
+ export declare const useOffthreadVideoTexture: () => never;
12
+ /**
13
+ * @deprecated useVideoTexture has been deprecated.
14
+ * Use the approach documented at https://remotion.dev/docs/videos/as-threejs-texture instead.
15
+ */
16
+ export type { UseVideoTextureOptions } from './use-video-texture';
17
+ /**
18
+ * @deprecated useVideoTexture has been deprecated.
19
+ * Use the approach documented at https://remotion.dev/docs/videos/as-threejs-texture for alternatives.
20
+ */
21
+ export declare const useVideoTexture: () => never;
package/dist/cjs/index.js CHANGED
@@ -3,7 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useVideoTexture = exports.useOffthreadVideoTexture = exports.ThreeCanvas = void 0;
4
4
  var ThreeCanvas_1 = require("./ThreeCanvas");
5
5
  Object.defineProperty(exports, "ThreeCanvas", { enumerable: true, get: function () { return ThreeCanvas_1.ThreeCanvas; } });
6
- var use_offthread_video_texture_1 = require("./use-offthread-video-texture");
7
- Object.defineProperty(exports, "useOffthreadVideoTexture", { enumerable: true, get: function () { return use_offthread_video_texture_1.useOffthreadVideoTexture; } });
8
- var use_video_texture_1 = require("./use-video-texture");
9
- Object.defineProperty(exports, "useVideoTexture", { enumerable: true, get: function () { return use_video_texture_1.useVideoTexture; } });
6
+ /**
7
+ * @deprecated useOffthreadVideoTexture has been deprecated.
8
+ * Use the approach documented at https://remotion.dev/docs/videos/as-threejs-texture instead.
9
+ */
10
+ const useOffthreadVideoTexture = () => {
11
+ throw new Error('useOffthreadVideoTexture has been deprecated. Please see https://remotion.dev/docs/videos/as-threejs-texture for alternatives.');
12
+ };
13
+ exports.useOffthreadVideoTexture = useOffthreadVideoTexture;
14
+ /**
15
+ * @deprecated useVideoTexture has been deprecated.
16
+ * Use the approach documented at https://remotion.dev/docs/videos/as-threejs-texture for alternatives.
17
+ */
18
+ const useVideoTexture = () => {
19
+ throw new Error('useVideoTexture has been deprecated. Please see https://remotion.dev/docs/videos/as-threejs-texture for alternatives.');
20
+ };
21
+ exports.useVideoTexture = useVideoTexture;
@@ -59,7 +59,7 @@ const useInnerVideoTexture = ({ playbackRate, src, transparent, toneMapped, dela
59
59
  }, [toneMapped, currentTime, src, transparent]);
60
60
  const [textLoaderPromise] = (0, react_1.useState)(() => Promise.resolve().then(() => __importStar(require('three/src/loaders/TextureLoader.js'))));
61
61
  const [imageTexture, setImageTexture] = (0, react_1.useState)(null);
62
- const { delayRender, continueRender } = (0, remotion_1.useDelayRender)();
62
+ const { delayRender, continueRender, cancelRender } = (0, remotion_1.useDelayRender)();
63
63
  const fetchTexture = (0, react_1.useCallback)(() => {
64
64
  const imageTextureHandle = delayRender('fetch offthread video frame', {
65
65
  retries: delayRenderRetries !== null && delayRenderRetries !== void 0 ? delayRenderRetries : undefined,
@@ -79,7 +79,7 @@ const useInnerVideoTexture = ({ playbackRate, src, transparent, toneMapped, dela
79
79
  continueRender(imageTextureHandle);
80
80
  })
81
81
  .catch((err) => {
82
- (0, remotion_1.cancelRender)(err);
82
+ cancelRender(err);
83
83
  });
84
84
  });
85
85
  return () => {
@@ -94,6 +94,7 @@ const useInnerVideoTexture = ({ playbackRate, src, transparent, toneMapped, dela
94
94
  delayRenderTimeoutInMilliseconds,
95
95
  continueRender,
96
96
  delayRender,
97
+ cancelRender,
97
98
  ]);
98
99
  (0, react_1.useLayoutEffect)(() => {
99
100
  const cleanup = fetchTexture();
@@ -113,7 +114,10 @@ function useOffthreadVideoTexture({ src, playbackRate = 1, transparent = false,
113
114
  throw new Error('src must be provided to useOffthreadVideoTexture');
114
115
  }
115
116
  const env = (0, remotion_1.useRemotionEnvironment)();
116
- const { isRendering } = env;
117
+ const { isRendering, isClientSideRendering } = env;
118
+ if (isClientSideRendering) {
119
+ throw new Error('useOffthreadVideoTexture() cannot be used in client-side rendering.');
120
+ }
117
121
  if (!isRendering) {
118
122
  throw new Error('useOffthreadVideoTexture() can only be used during rendering. Use useRemotionEnvironment().isRendering to render it conditionally.');
119
123
  }
@@ -50,13 +50,18 @@ const warnAboutRequestVideoFrameCallback = () => {
50
50
  * @see [Documentation](https://www.remotion.dev/docs/use-video-texture)
51
51
  */
52
52
  const useVideoTexture = (videoRef) => {
53
- const { delayRender, continueRender } = (0, remotion_1.useDelayRender)();
53
+ const { delayRender, continueRender, cancelRender } = (0, remotion_1.useDelayRender)();
54
54
  const [loaded] = (0, react_1.useState)(() => {
55
55
  if (typeof document === 'undefined') {
56
56
  return 0;
57
57
  }
58
58
  return delayRender(`Waiting for texture in useVideoTexture() to be loaded`);
59
59
  });
60
+ const environment = (0, remotion_1.useRemotionEnvironment)();
61
+ const { isClientSideRendering } = environment;
62
+ if (isClientSideRendering) {
63
+ throw new Error('useVideoTexture() cannot be used in client side rendering.');
64
+ }
60
65
  const [videoTexture, setVideoTexture] = (0, react_1.useState)(null);
61
66
  const [vidText] = (0, react_1.useState)(() => Promise.resolve().then(() => __importStar(require('three/src/textures/VideoTexture.js'))));
62
67
  const frame = (0, remotion_1.useCurrentFrame)();
@@ -73,9 +78,9 @@ const useVideoTexture = (videoRef) => {
73
78
  continueRender(loaded);
74
79
  })
75
80
  .catch((err) => {
76
- (0, remotion_1.cancelRender)(err);
81
+ cancelRender(err);
77
82
  });
78
- }, [loaded, vidText, videoRef, continueRender]);
83
+ }, [loaded, vidText, videoRef, continueRender, cancelRender]);
79
84
  react_1.default.useLayoutEffect(() => {
80
85
  if (!videoRef.current) {
81
86
  return;
@@ -1,27 +1,3 @@
1
- var __create = Object.create;
2
- var __getProtoOf = Object.getPrototypeOf;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __toESM = (mod, isNodeMode, target) => {
7
- target = mod != null ? __create(__getProtoOf(mod)) : {};
8
- const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
9
- for (let key of __getOwnPropNames(mod))
10
- if (!__hasOwnProp.call(to, key))
11
- __defProp(to, key, {
12
- get: () => mod[key],
13
- enumerable: true
14
- });
15
- return to;
16
- };
17
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
18
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
19
- }) : x)(function(x) {
20
- if (typeof require !== "undefined")
21
- return require.apply(this, arguments);
22
- throw Error('Dynamic require of "' + x + '" is not supported');
23
- });
24
-
25
1
  // src/ThreeCanvas.tsx
26
2
  import { Canvas, useThree } from "@react-three/fiber";
27
3
  import { useCallback, useEffect, useLayoutEffect as useLayoutEffect2, useState } from "react";
@@ -122,181 +98,13 @@ var ThreeCanvas = (props) => {
122
98
  })
123
99
  });
124
100
  };
125
- // src/use-offthread-video-texture.ts
126
- import { useCallback as useCallback2, useLayoutEffect as useLayoutEffect3, useMemo, useState as useState2 } from "react";
127
- import {
128
- Internals as Internals2,
129
- cancelRender,
130
- useCurrentFrame as useCurrentFrame2,
131
- useDelayRender as useDelayRender3,
132
- useRemotionEnvironment as useRemotionEnvironment2,
133
- useVideoConfig
134
- } from "remotion";
135
- import { NoReactInternals as NoReactInternals2 } from "remotion/no-react";
136
- var useInnerVideoTexture = ({
137
- playbackRate,
138
- src,
139
- transparent,
140
- toneMapped,
141
- delayRenderRetries,
142
- delayRenderTimeoutInMilliseconds
143
- }) => {
144
- const frame = useCurrentFrame2();
145
- const { fps } = useVideoConfig();
146
- const mediaStartsAt = Internals2.useMediaStartsAt();
147
- const currentTime = useMemo(() => {
148
- return NoReactInternals2.getExpectedMediaFrameUncorrected({
149
- frame,
150
- playbackRate,
151
- startFrom: -mediaStartsAt
152
- }) / fps;
153
- }, [frame, playbackRate, mediaStartsAt, fps]);
154
- const offthreadVideoFrameSrc = useMemo(() => {
155
- return NoReactInternals2.getOffthreadVideoSource({
156
- currentTime,
157
- src,
158
- transparent,
159
- toneMapped
160
- });
161
- }, [toneMapped, currentTime, src, transparent]);
162
- const [textLoaderPromise] = useState2(() => import("three/src/loaders/TextureLoader.js"));
163
- const [imageTexture, setImageTexture] = useState2(null);
164
- const { delayRender, continueRender } = useDelayRender3();
165
- const fetchTexture = useCallback2(() => {
166
- const imageTextureHandle = delayRender("fetch offthread video frame", {
167
- retries: delayRenderRetries ?? undefined,
168
- timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
169
- });
170
- let textureLoaded = null;
171
- let cleanedUp = false;
172
- textLoaderPromise.then((loader) => {
173
- new loader.TextureLoader().loadAsync(offthreadVideoFrameSrc).then((texture) => {
174
- textureLoaded = texture;
175
- if (cleanedUp) {
176
- return;
177
- }
178
- setImageTexture(texture);
179
- continueRender(imageTextureHandle);
180
- }).catch((err) => {
181
- cancelRender(err);
182
- });
183
- });
184
- return () => {
185
- cleanedUp = true;
186
- textureLoaded?.dispose();
187
- continueRender(imageTextureHandle);
188
- };
189
- }, [
190
- offthreadVideoFrameSrc,
191
- textLoaderPromise,
192
- delayRenderRetries,
193
- delayRenderTimeoutInMilliseconds,
194
- continueRender,
195
- delayRender
196
- ]);
197
- useLayoutEffect3(() => {
198
- const cleanup = fetchTexture();
199
- return () => {
200
- cleanup();
201
- };
202
- }, [offthreadVideoFrameSrc, fetchTexture]);
203
- return imageTexture;
204
- };
205
- function useOffthreadVideoTexture({
206
- src,
207
- playbackRate = 1,
208
- transparent = false,
209
- toneMapped = true,
210
- delayRenderRetries,
211
- delayRenderTimeoutInMilliseconds
212
- }) {
213
- if (!src) {
214
- throw new Error("src must be provided to useOffthreadVideoTexture");
215
- }
216
- const env = useRemotionEnvironment2();
217
- const { isRendering } = env;
218
- if (!isRendering) {
219
- throw new Error("useOffthreadVideoTexture() can only be used during rendering. Use useRemotionEnvironment().isRendering to render it conditionally.");
220
- }
221
- return useInnerVideoTexture({
222
- playbackRate,
223
- src,
224
- transparent,
225
- toneMapped,
226
- delayRenderRetries,
227
- delayRenderTimeoutInMilliseconds
228
- });
229
- }
230
- // src/use-video-texture.ts
231
- import React3, { useCallback as useCallback3, useEffect as useEffect2, useState as useState3 } from "react";
232
- import { cancelRender as cancelRender2, useCurrentFrame as useCurrentFrame3, useDelayRender as useDelayRender4 } from "remotion";
233
- var warned = false;
234
- var warnAboutRequestVideoFrameCallback = () => {
235
- if (warned) {
236
- return false;
237
- }
238
- warned = true;
239
- console.warn("Browser does not support requestVideoFrameCallback. Cannot display video.");
101
+
102
+ // src/index.ts
103
+ var useOffthreadVideoTexture = () => {
104
+ throw new Error("useOffthreadVideoTexture has been deprecated. Please see https://remotion.dev/docs/videos/as-threejs-texture for alternatives.");
240
105
  };
241
- var useVideoTexture = (videoRef) => {
242
- const { delayRender, continueRender } = useDelayRender4();
243
- const [loaded] = useState3(() => {
244
- if (typeof document === "undefined") {
245
- return 0;
246
- }
247
- return delayRender(`Waiting for texture in useVideoTexture() to be loaded`);
248
- });
249
- const [videoTexture, setVideoTexture] = useState3(null);
250
- const [vidText] = useState3(() => import("three/src/textures/VideoTexture.js"));
251
- const frame = useCurrentFrame3();
252
- const onReady = useCallback3(() => {
253
- vidText.then(({ VideoTexture }) => {
254
- if (!videoRef.current) {
255
- throw new Error("Video not ready");
256
- }
257
- const vt = new VideoTexture(videoRef.current);
258
- videoRef.current.width = videoRef.current.videoWidth;
259
- videoRef.current.height = videoRef.current.videoHeight;
260
- setVideoTexture(vt);
261
- continueRender(loaded);
262
- }).catch((err) => {
263
- cancelRender2(err);
264
- });
265
- }, [loaded, vidText, videoRef, continueRender]);
266
- React3.useLayoutEffect(() => {
267
- if (!videoRef.current) {
268
- return;
269
- }
270
- if (videoRef.current.readyState >= 2) {
271
- onReady();
272
- return;
273
- }
274
- videoRef.current.addEventListener("loadeddata", () => {
275
- onReady();
276
- }, { once: true });
277
- }, [loaded, onReady, videoRef]);
278
- React3.useEffect(() => {
279
- const { current } = videoRef;
280
- if (!current) {
281
- return;
282
- }
283
- if (!current.requestVideoFrameCallback) {
284
- warnAboutRequestVideoFrameCallback();
285
- return;
286
- }
287
- const ready = () => {};
288
- current.requestVideoFrameCallback(ready);
289
- }, [frame, loaded, videoRef]);
290
- useEffect2(() => {
291
- return () => {
292
- continueRender(loaded);
293
- };
294
- }, [loaded, continueRender]);
295
- if (typeof HTMLVideoElement === "undefined" || !HTMLVideoElement.prototype.requestVideoFrameCallback) {
296
- continueRender(loaded);
297
- return null;
298
- }
299
- return videoTexture;
106
+ var useVideoTexture = () => {
107
+ throw new Error("useVideoTexture has been deprecated. Please see https://remotion.dev/docs/videos/as-threejs-texture for alternatives.");
300
108
  };
301
109
  export {
302
110
  useVideoTexture,
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "url": "https://github.com/remotion-dev/remotion/tree/main/packages/three"
4
4
  },
5
5
  "name": "@remotion/three",
6
- "version": "4.0.386",
6
+ "version": "4.0.387",
7
7
  "description": "Include React Three Fiber components in a Remotion video",
8
8
  "main": "dist/cjs/index.js",
9
9
  "types": "dist/cjs/index.d.ts",
@@ -21,25 +21,25 @@
21
21
  "url": "https://github.com/remotion-dev/remotion/issues"
22
22
  },
23
23
  "dependencies": {
24
- "remotion": "4.0.386"
24
+ "remotion": "4.0.387"
25
25
  },
26
26
  "peerDependencies": {
27
27
  "@react-three/fiber": ">=8.0.0",
28
28
  "react": ">=16.8.0",
29
29
  "react-dom": ">=16.8.0",
30
30
  "three": ">=0.137.0",
31
- "remotion": "4.0.386"
31
+ "remotion": "4.0.387"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@react-three/fiber": "9.2.0",
35
35
  "@types/react-reconciler": "0.32.0",
36
36
  "@types/three": "0.170.0",
37
37
  "@types/web": "0.0.166",
38
- "react": "19.2.1",
39
- "react-dom": "19.2.1",
40
- "remotion": "4.0.386",
38
+ "react": "19.2.3",
39
+ "react-dom": "19.2.3",
40
+ "remotion": "4.0.387",
41
41
  "three": "0.178.0",
42
- "@remotion/eslint-config-internal": "4.0.386",
42
+ "@remotion/eslint-config-internal": "4.0.387",
43
43
  "eslint": "9.19.0"
44
44
  },
45
45
  "keywords": [