@remotion/three 4.0.82 → 4.0.83
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/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/use-offthread-video-texture.d.ts +11 -0
- package/dist/cjs/use-offthread-video-texture.js +86 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.mjs +59 -3
- package/dist/esm/use-offthread-video-texture.d.ts +11 -0
- package/package.json +7 -5
package/dist/cjs/index.d.ts
CHANGED
package/dist/cjs/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useVideoTexture = exports.ThreeCanvas = void 0;
|
|
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; } });
|
|
6
8
|
var use_video_texture_1 = require("./use-video-texture");
|
|
7
9
|
Object.defineProperty(exports, "useVideoTexture", { enumerable: true, get: function () { return use_video_texture_1.useVideoTexture; } });
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type UseOffthreadVideoTextureOptions = {
|
|
2
|
+
src: string;
|
|
3
|
+
playbackRate?: number;
|
|
4
|
+
transparent?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const useInnerVideoTexture: ({ playbackRate, src, transparent, }: {
|
|
7
|
+
playbackRate: number;
|
|
8
|
+
src: string;
|
|
9
|
+
transparent: boolean;
|
|
10
|
+
}) => import("three").Texture | null;
|
|
11
|
+
export declare function useOffthreadVideoTexture({ src, playbackRate, transparent, }: UseOffthreadVideoTextureOptions): import("three").Texture | null;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.useOffthreadVideoTexture = exports.useInnerVideoTexture = void 0;
|
|
27
|
+
const react_1 = require("react");
|
|
28
|
+
const remotion_1 = require("remotion");
|
|
29
|
+
const no_react_1 = require("remotion/no-react");
|
|
30
|
+
const useInnerVideoTexture = ({ playbackRate, src, transparent, }) => {
|
|
31
|
+
const frame = (0, remotion_1.useCurrentFrame)();
|
|
32
|
+
const { fps } = (0, remotion_1.useVideoConfig)();
|
|
33
|
+
const mediaStartsAt = remotion_1.Internals.useMediaStartsAt();
|
|
34
|
+
const currentTime = (0, react_1.useMemo)(() => {
|
|
35
|
+
return (no_react_1.NoReactInternals.getExpectedMediaFrameUncorrected({
|
|
36
|
+
frame,
|
|
37
|
+
playbackRate,
|
|
38
|
+
startFrom: -mediaStartsAt,
|
|
39
|
+
}) / fps);
|
|
40
|
+
}, [frame, playbackRate, mediaStartsAt, fps]);
|
|
41
|
+
const offthreadVideoFrameSrc = (0, react_1.useMemo)(() => {
|
|
42
|
+
return no_react_1.NoReactInternals.getOffthreadVideoSource({
|
|
43
|
+
currentTime,
|
|
44
|
+
src,
|
|
45
|
+
transparent,
|
|
46
|
+
});
|
|
47
|
+
}, [currentTime, src, transparent]);
|
|
48
|
+
const [textLoaderPromise] = (0, react_1.useState)(() => Promise.resolve().then(() => __importStar(require('three/src/loaders/TextureLoader.js'))));
|
|
49
|
+
const [imageTexture, setImageTexture] = (0, react_1.useState)(null);
|
|
50
|
+
const fetchTexture = (0, react_1.useCallback)(() => {
|
|
51
|
+
const imageTextureHandle = (0, remotion_1.delayRender)('fetch offthread video frame');
|
|
52
|
+
let textureLoaded = null;
|
|
53
|
+
textLoaderPromise.then((loader) => {
|
|
54
|
+
new loader.TextureLoader()
|
|
55
|
+
.loadAsync(offthreadVideoFrameSrc)
|
|
56
|
+
.then((texture) => {
|
|
57
|
+
textureLoaded = texture;
|
|
58
|
+
setImageTexture(texture);
|
|
59
|
+
(0, remotion_1.continueRender)(imageTextureHandle);
|
|
60
|
+
})
|
|
61
|
+
.catch((err) => {
|
|
62
|
+
(0, remotion_1.cancelRender)(err);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
return () => {
|
|
66
|
+
textureLoaded === null || textureLoaded === void 0 ? void 0 : textureLoaded.dispose();
|
|
67
|
+
(0, remotion_1.continueRender)(imageTextureHandle);
|
|
68
|
+
};
|
|
69
|
+
}, [offthreadVideoFrameSrc, textLoaderPromise]);
|
|
70
|
+
(0, react_1.useLayoutEffect)(() => {
|
|
71
|
+
fetchTexture();
|
|
72
|
+
}, [offthreadVideoFrameSrc, fetchTexture]);
|
|
73
|
+
return imageTexture;
|
|
74
|
+
};
|
|
75
|
+
exports.useInnerVideoTexture = useInnerVideoTexture;
|
|
76
|
+
function useOffthreadVideoTexture({ src, playbackRate = 1, transparent = false, }) {
|
|
77
|
+
if (!src) {
|
|
78
|
+
throw new Error('src must be provided to useOffthreadVideoTexture');
|
|
79
|
+
}
|
|
80
|
+
const { isRendering } = (0, remotion_1.getRemotionEnvironment)();
|
|
81
|
+
if (!isRendering) {
|
|
82
|
+
throw new Error('useOffthreadVideoTexture() can only be used during rendering. Use getRemotionEnvironment().isRendering to render it conditionally.');
|
|
83
|
+
}
|
|
84
|
+
return (0, exports.useInnerVideoTexture)({ playbackRate, src, transparent });
|
|
85
|
+
}
|
|
86
|
+
exports.useOffthreadVideoTexture = useOffthreadVideoTexture;
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { Canvas, useThree } from '@react-three/fiber';
|
|
3
|
-
import React, { Suspense, useLayoutEffect, useState, useCallback } from 'react';
|
|
4
|
-
import { delayRender, continueRender, Internals, useCurrentFrame } from 'remotion';
|
|
3
|
+
import React, { Suspense, useLayoutEffect, useState, useCallback, useMemo } from 'react';
|
|
4
|
+
import { delayRender, continueRender, Internals, getRemotionEnvironment, useCurrentFrame, useVideoConfig, cancelRender } from 'remotion';
|
|
5
5
|
import { NoReactInternals } from 'remotion/no-react';
|
|
6
6
|
|
|
7
7
|
const Unblocker = () => {
|
|
@@ -55,6 +55,62 @@ const ThreeCanvas = (props) => {
|
|
|
55
55
|
return (jsx(SuspenseLoader, { children: jsxs(Canvas, { style: actualStyle, ...rest, onCreated: remotion_onCreated, children: [jsx(Scale, { width: width, height: height }), jsx(Internals.RemotionContextProvider, { contexts: contexts, children: children })] }) }));
|
|
56
56
|
};
|
|
57
57
|
|
|
58
|
+
const useInnerVideoTexture = ({ playbackRate, src, transparent, }) => {
|
|
59
|
+
const frame = useCurrentFrame();
|
|
60
|
+
const { fps } = useVideoConfig();
|
|
61
|
+
const mediaStartsAt = Internals.useMediaStartsAt();
|
|
62
|
+
const currentTime = useMemo(() => {
|
|
63
|
+
return (NoReactInternals.getExpectedMediaFrameUncorrected({
|
|
64
|
+
frame,
|
|
65
|
+
playbackRate,
|
|
66
|
+
startFrom: -mediaStartsAt,
|
|
67
|
+
}) / fps);
|
|
68
|
+
}, [frame, playbackRate, mediaStartsAt, fps]);
|
|
69
|
+
const offthreadVideoFrameSrc = useMemo(() => {
|
|
70
|
+
return NoReactInternals.getOffthreadVideoSource({
|
|
71
|
+
currentTime,
|
|
72
|
+
src,
|
|
73
|
+
transparent,
|
|
74
|
+
});
|
|
75
|
+
}, [currentTime, src, transparent]);
|
|
76
|
+
const [textLoaderPromise] = useState(() => import('three/src/loaders/TextureLoader.js'));
|
|
77
|
+
const [imageTexture, setImageTexture] = useState(null);
|
|
78
|
+
const fetchTexture = useCallback(() => {
|
|
79
|
+
const imageTextureHandle = delayRender('fetch offthread video frame');
|
|
80
|
+
let textureLoaded = null;
|
|
81
|
+
textLoaderPromise.then((loader) => {
|
|
82
|
+
new loader.TextureLoader()
|
|
83
|
+
.loadAsync(offthreadVideoFrameSrc)
|
|
84
|
+
.then((texture) => {
|
|
85
|
+
textureLoaded = texture;
|
|
86
|
+
setImageTexture(texture);
|
|
87
|
+
continueRender(imageTextureHandle);
|
|
88
|
+
})
|
|
89
|
+
.catch((err) => {
|
|
90
|
+
cancelRender(err);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
return () => {
|
|
94
|
+
textureLoaded === null || textureLoaded === void 0 ? void 0 : textureLoaded.dispose();
|
|
95
|
+
continueRender(imageTextureHandle);
|
|
96
|
+
};
|
|
97
|
+
}, [offthreadVideoFrameSrc, textLoaderPromise]);
|
|
98
|
+
useLayoutEffect(() => {
|
|
99
|
+
fetchTexture();
|
|
100
|
+
}, [offthreadVideoFrameSrc, fetchTexture]);
|
|
101
|
+
return imageTexture;
|
|
102
|
+
};
|
|
103
|
+
function useOffthreadVideoTexture({ src, playbackRate = 1, transparent = false, }) {
|
|
104
|
+
if (!src) {
|
|
105
|
+
throw new Error('src must be provided to useOffthreadVideoTexture');
|
|
106
|
+
}
|
|
107
|
+
const { isRendering } = getRemotionEnvironment();
|
|
108
|
+
if (!isRendering) {
|
|
109
|
+
throw new Error('useOffthreadVideoTexture() can only be used during rendering. Use getRemotionEnvironment().isRendering to render it conditionally.');
|
|
110
|
+
}
|
|
111
|
+
return useInnerVideoTexture({ playbackRate, src, transparent });
|
|
112
|
+
}
|
|
113
|
+
|
|
58
114
|
let warned = false;
|
|
59
115
|
const warnAboutRequestVideoFrameCallback = () => {
|
|
60
116
|
if (warned) {
|
|
@@ -132,4 +188,4 @@ const useVideoTexture = (videoRef) => {
|
|
|
132
188
|
return videoTexture;
|
|
133
189
|
};
|
|
134
190
|
|
|
135
|
-
export { ThreeCanvas, useVideoTexture };
|
|
191
|
+
export { ThreeCanvas, useOffthreadVideoTexture, useVideoTexture };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type UseOffthreadVideoTextureOptions = {
|
|
2
|
+
src: string;
|
|
3
|
+
playbackRate?: number;
|
|
4
|
+
transparent?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const useInnerVideoTexture: ({ playbackRate, src, transparent, }: {
|
|
7
|
+
playbackRate: number;
|
|
8
|
+
src: string;
|
|
9
|
+
transparent: boolean;
|
|
10
|
+
}) => import("three").Texture | null;
|
|
11
|
+
export declare function useOffthreadVideoTexture({ src, playbackRate, transparent, }: UseOffthreadVideoTextureOptions): import("three").Texture | null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/three",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.83",
|
|
4
4
|
"description": "Utility functions for using react-three-fiber with remotion",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"types": "dist/cjs/index.d.ts",
|
|
@@ -16,13 +16,14 @@
|
|
|
16
16
|
"url": "https://github.com/remotion-dev/remotion/issues"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"remotion": "4.0.
|
|
19
|
+
"remotion": "4.0.83"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"@react-three/fiber": ">=8.0.0",
|
|
23
23
|
"react": ">=16.8.0",
|
|
24
24
|
"react-dom": ">=16.8.0",
|
|
25
|
-
"three": ">=0.137.0"
|
|
25
|
+
"three": ">=0.137.0",
|
|
26
|
+
"remotion": "4.0.83"
|
|
26
27
|
},
|
|
27
28
|
"devDependencies": {
|
|
28
29
|
"@jonny/eslint-config": "3.0.276",
|
|
@@ -39,7 +40,8 @@
|
|
|
39
40
|
"react": "18.2.0",
|
|
40
41
|
"react-dom": "18.2.0",
|
|
41
42
|
"rollup": "^2.70.1",
|
|
42
|
-
"three": "0.158.0"
|
|
43
|
+
"three": "0.158.0",
|
|
44
|
+
"remotion": "4.0.83"
|
|
43
45
|
},
|
|
44
46
|
"keywords": [
|
|
45
47
|
"remotion",
|
|
@@ -65,6 +67,6 @@
|
|
|
65
67
|
"formatting": "prettier src --check",
|
|
66
68
|
"lint": "eslint src --ext ts,tsx",
|
|
67
69
|
"watch": "tsc -w",
|
|
68
|
-
"build": "rollup --config rollup.config.js && tsc -d"
|
|
70
|
+
"build": "rollup --failAfterWarnings --config rollup.config.js && tsc -d"
|
|
69
71
|
}
|
|
70
72
|
}
|