@revideo/create 0.5.11-beta.1104 → 0.10.0
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/examples/avatar-with-background/package.json +7 -14
- package/examples/avatar-with-background/src/{scenes/example.tsx → project.tsx} +19 -3
- package/examples/avatar-with-background/src/render.ts +4 -3
- package/examples/avatar-with-background/tsconfig.json +2 -1
- package/examples/default/package.json +6 -6
- package/examples/default/src/project.tsx +2 -2
- package/examples/github-stars-celebration/package.json +7 -11
- package/examples/github-stars-celebration/src/{scenes/example.tsx → project.tsx} +24 -4
- package/examples/github-stars-celebration/src/render.ts +1 -1
- package/examples/github-stars-celebration/tsconfig.json +2 -1
- package/examples/marketing-templates/marketing-template/README.md +19 -0
- package/examples/marketing-templates/marketing-template/package.json +7 -11
- package/examples/marketing-templates/marketing-template/src/{scenes/example.tsx → project.tsx} +23 -3
- package/examples/marketing-templates/marketing-template/src/render.ts +1 -1
- package/examples/marketing-templates/marketing-template/tsconfig.json +2 -1
- package/examples/marketing-templates/multiple-videos-in-one/README.md +19 -0
- package/examples/marketing-templates/multiple-videos-in-one/package.json +7 -11
- package/examples/marketing-templates/multiple-videos-in-one/src/{scenes/example.tsx → project.tsx} +21 -3
- package/examples/marketing-templates/multiple-videos-in-one/src/render.ts +1 -1
- package/examples/marketing-templates/multiple-videos-in-one/tsconfig.json +2 -1
- package/examples/minimal-drag-drop/README.md +14 -18
- package/examples/minimal-drag-drop/{next/app → app}/page.tsx +51 -39
- package/examples/minimal-drag-drop/{next/next-env.d.ts → next-env.d.ts} +1 -1
- package/examples/minimal-drag-drop/{next/package.json → package.json} +9 -4
- package/examples/minimal-drag-drop/revideo/project.tsx +54 -0
- package/examples/parallelized-aws-lambda/Dockerfile +0 -2
- package/examples/parallelized-aws-lambda/README.md +331 -100
- package/examples/parallelized-aws-lambda/revideo-project/package.json +9 -11
- package/examples/parallelized-aws-lambda/revideo-project/src/lambda.ts +2 -3
- package/examples/parallelized-aws-lambda/revideo-project/src/{scenes/example.tsx → project.tsx} +9 -5
- package/examples/parallelized-aws-lambda/revideo-project/src/render.ts +1 -1
- package/examples/parallelized-aws-lambda/revideo-project/tsconfig.json +1 -0
- package/examples/rive-explanation-video/README.md +0 -3
- package/examples/rive-explanation-video/package.json +8 -12
- package/examples/rive-explanation-video/src/project.tsx +234 -0
- package/examples/rive-explanation-video/src/render.ts +1 -1
- package/examples/rive-explanation-video/tsconfig.json +2 -1
- package/examples/saas-template/package.json +39 -39
- package/examples/stitching-videos/README.md +15 -3
- package/examples/stitching-videos/package.json +7 -10
- package/examples/stitching-videos/src/{scenes/example.tsx → project.tsx} +36 -3
- package/examples/stitching-videos/src/render.ts +4 -16
- package/examples/stitching-videos/tsconfig.json +2 -1
- package/examples/three-js-example/package.json +10 -13
- package/examples/three-js-example/src/project.tsx +105 -0
- package/examples/three-js-example/src/render.ts +1 -1
- package/examples/three-js-example/tsconfig.json +2 -1
- package/examples/youtube-shorts/README.md +14 -60
- package/examples/youtube-shorts/package.json +8 -12
- package/examples/youtube-shorts/src/{scenes/example.tsx → project.tsx} +20 -3
- package/examples/youtube-shorts/src/render.ts +11 -8
- package/examples/youtube-shorts/src/utils.ts +1 -1
- package/examples/youtube-shorts/tsconfig.json +2 -1
- package/index.js +2 -26
- package/package.json +9 -9
- package/examples/avatar-with-background/src/project.meta +0 -31
- package/examples/avatar-with-background/src/project.ts +0 -6
- package/examples/avatar-with-background/src/revideo.d.ts +0 -1
- package/examples/avatar-with-background/src/scenes/example.meta +0 -5
- package/examples/avatar-with-background/vite.config.ts +0 -8
- package/examples/github-stars-celebration/src/project.meta +0 -28
- package/examples/github-stars-celebration/src/project.ts +0 -8
- package/examples/github-stars-celebration/src/revideo.d.ts +0 -1
- package/examples/github-stars-celebration/src/scenes/example.meta +0 -5
- package/examples/github-stars-celebration/vite.config.ts +0 -8
- package/examples/google-cloud-run-parallelized/README.md +0 -127
- package/examples/google-cloud-run-parallelized/render-orchestrator/Dockerfile +0 -56
- package/examples/google-cloud-run-parallelized/render-orchestrator/package.json +0 -22
- package/examples/google-cloud-run-parallelized/render-orchestrator/src/index.ts +0 -72
- package/examples/google-cloud-run-parallelized/render-orchestrator/src/revideo.d.ts +0 -1
- package/examples/google-cloud-run-parallelized/render-orchestrator/tsconfig.json +0 -10
- package/examples/google-cloud-run-parallelized/render-worker/.gcloudignore +0 -17
- package/examples/google-cloud-run-parallelized/render-worker/.puppeteerrc.cjs +0 -9
- package/examples/google-cloud-run-parallelized/render-worker/package.json +0 -30
- package/examples/google-cloud-run-parallelized/render-worker/src/index.ts +0 -45
- package/examples/google-cloud-run-parallelized/render-worker/src/project.meta +0 -31
- package/examples/google-cloud-run-parallelized/render-worker/src/project.ts +0 -6
- package/examples/google-cloud-run-parallelized/render-worker/src/render.ts +0 -14
- package/examples/google-cloud-run-parallelized/render-worker/src/revideo.d.ts +0 -1
- package/examples/google-cloud-run-parallelized/render-worker/src/scenes/example.tsx +0 -30
- package/examples/google-cloud-run-parallelized/render-worker/tsconfig.json +0 -13
- package/examples/google-cloud-run-parallelized/render-worker/vite.config.ts +0 -9
- package/examples/marketing-templates/marketing-template/src/globals.css +0 -0
- package/examples/marketing-templates/marketing-template/src/project.meta +0 -28
- package/examples/marketing-templates/marketing-template/src/project.ts +0 -9
- package/examples/marketing-templates/marketing-template/src/revideo.d.ts +0 -1
- package/examples/marketing-templates/marketing-template/src/scenes/example.meta +0 -5
- package/examples/marketing-templates/marketing-template/vite.config.ts +0 -9
- package/examples/marketing-templates/multiple-videos-in-one/src/project.meta +0 -28
- package/examples/marketing-templates/multiple-videos-in-one/src/project.ts +0 -9
- package/examples/marketing-templates/multiple-videos-in-one/src/revideo.d.ts +0 -1
- package/examples/marketing-templates/multiple-videos-in-one/src/scenes/example.meta +0 -5
- package/examples/marketing-templates/multiple-videos-in-one/vite.config.ts +0 -9
- package/examples/minimal-drag-drop/next/package-lock.json +0 -5577
- package/examples/minimal-drag-drop/next/public/favicon.ico +0 -0
- package/examples/minimal-drag-drop/next/public/next.svg +0 -1
- package/examples/minimal-drag-drop/next/public/vercel.svg +0 -1
- package/examples/minimal-drag-drop/revideo/package-lock.json +0 -3771
- package/examples/minimal-drag-drop/revideo/package.json +0 -24
- package/examples/minimal-drag-drop/revideo/src/project.meta +0 -28
- package/examples/minimal-drag-drop/revideo/src/project.ts +0 -9
- package/examples/minimal-drag-drop/revideo/src/render.ts +0 -15
- package/examples/minimal-drag-drop/revideo/src/revideo.d.ts +0 -1
- package/examples/minimal-drag-drop/revideo/src/scenes/example.meta +0 -5
- package/examples/minimal-drag-drop/revideo/src/scenes/example.tsx +0 -44
- package/examples/minimal-drag-drop/revideo/tsconfig.json +0 -9
- package/examples/minimal-drag-drop/revideo/vite.config.ts +0 -6
- package/examples/parallelized-aws-lambda/revideo-project/.puppeteerrc.cjs +0 -9
- package/examples/parallelized-aws-lambda/revideo-project/src/project.meta +0 -28
- package/examples/parallelized-aws-lambda/revideo-project/src/project.ts +0 -7
- package/examples/parallelized-aws-lambda/revideo-project/src/revideo.d.ts +0 -1
- package/examples/parallelized-aws-lambda/revideo-project/src/scenes/example.meta +0 -5
- package/examples/parallelized-aws-lambda/revideo-project/vite.config.ts +0 -9
- package/examples/reddit-post-video/README.md +0 -84
- package/examples/reddit-post-video/package-lock.json +0 -2941
- package/examples/reddit-post-video/package.json +0 -27
- package/examples/reddit-post-video/src/global.css +0 -1
- package/examples/reddit-post-video/src/metadata.json +0 -576
- package/examples/reddit-post-video/src/project.meta +0 -31
- package/examples/reddit-post-video/src/project.ts +0 -9
- package/examples/reddit-post-video/src/render.ts +0 -157
- package/examples/reddit-post-video/src/revideo.d.ts +0 -1
- package/examples/reddit-post-video/src/scenes/example.meta +0 -5
- package/examples/reddit-post-video/src/scenes/example.tsx +0 -74
- package/examples/reddit-post-video/tsconfig.json +0 -9
- package/examples/reddit-post-video/vite.config.ts +0 -6
- package/examples/rive-explanation-video/src/project.meta +0 -31
- package/examples/rive-explanation-video/src/project.ts +0 -8
- package/examples/rive-explanation-video/src/revideo.d.ts +0 -1
- package/examples/rive-explanation-video/src/scenes/example.meta +0 -5
- package/examples/rive-explanation-video/src/scenes/example.tsx +0 -218
- package/examples/rive-explanation-video/vite.config.ts +0 -8
- package/examples/stitching-videos/src/project.meta +0 -28
- package/examples/stitching-videos/src/project.ts +0 -20
- package/examples/stitching-videos/src/revideo.d.ts +0 -1
- package/examples/stitching-videos/vite.config.ts +0 -8
- package/examples/three-js-example/README.md +0 -8
- package/examples/three-js-example/src/project.meta +0 -31
- package/examples/three-js-example/src/project.ts +0 -8
- package/examples/three-js-example/src/revideo.d.ts +0 -1
- package/examples/three-js-example/src/scenes/basic3D.meta +0 -5
- package/examples/three-js-example/src/scenes/basic3D.tsx +0 -89
- package/examples/three-js-example/vite.config.ts +0 -6
- package/examples/youtube-shorts/src/project.meta +0 -28
- package/examples/youtube-shorts/src/project.ts +0 -9
- package/examples/youtube-shorts/src/revideo.d.ts +0 -1
- package/examples/youtube-shorts/vite.config.ts +0 -8
- /package/examples/minimal-drag-drop/{next/app → app}/api/render/route.ts +0 -0
- /package/examples/minimal-drag-drop/{next/app → app}/globals.css +0 -0
- /package/examples/minimal-drag-drop/{next/app → app}/layout.tsx +0 -0
- /package/examples/minimal-drag-drop/{next/next.config.mjs → next.config.mjs} +0 -0
- /package/examples/minimal-drag-drop/{next/postcss.config.js → postcss.config.js} +0 -0
- /package/examples/minimal-drag-drop/revideo/{src/global.css → global.css} +0 -0
- /package/examples/minimal-drag-drop/{next/tailwind.config.ts → tailwind.config.ts} +0 -0
- /package/examples/minimal-drag-drop/{next/tsconfig.json → tsconfig.json} +0 -0
- /package/examples/minimal-drag-drop/{next/utils → utils}/parse.ts +0 -0
|
@@ -1,26 +1,19 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
2
|
+
"name": "revideo-app",
|
|
3
3
|
"private": true,
|
|
4
4
|
"version": "0.0.0",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"start": "
|
|
7
|
-
"serve": "vite",
|
|
8
|
-
"build": "tsc && vite build",
|
|
6
|
+
"start": "revideo editor --projectFile ./src/project.tsx",
|
|
9
7
|
"render": "tsc && node dist/render.js"
|
|
10
8
|
},
|
|
11
9
|
"dependencies": {
|
|
12
|
-
"@
|
|
13
|
-
"@revideo/2d": "0.
|
|
14
|
-
"@revideo/
|
|
15
|
-
"@revideo/core": "0.5.10",
|
|
16
|
-
"@revideo/ffmpeg": "0.5.10",
|
|
17
|
-
"@revideo/renderer": "0.5.10",
|
|
18
|
-
"@revideo/vite-plugin": "0.5.10",
|
|
19
|
-
"dotenv": "^16.4.5",
|
|
20
|
-
"openai": "^4.39.0"
|
|
10
|
+
"@revideo/core": "0.10.0",
|
|
11
|
+
"@revideo/2d": "0.10.0",
|
|
12
|
+
"@revideo/renderer": "0.10.0"
|
|
21
13
|
},
|
|
22
14
|
"devDependencies": {
|
|
23
|
-
"@revideo/ui": "0.
|
|
15
|
+
"@revideo/ui": "0.10.0",
|
|
16
|
+
"@revideo/cli": "0.10.0",
|
|
24
17
|
"typescript": "5.5.4",
|
|
25
18
|
"vite": "^4.5"
|
|
26
19
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { waitFor,
|
|
1
|
+
import {Img, makeScene2D, Video} from '@revideo/2d';
|
|
2
|
+
import {useScene, createRef, waitFor, makeProject, Vector2} from '@revideo/core';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* The Revideo scene
|
|
6
|
+
*/
|
|
7
|
+
const scene = makeScene2D('scene', function* (view) {
|
|
5
8
|
const avatarRef = createRef<Video>();
|
|
6
9
|
const backgroundRef = createRef<Img>();
|
|
7
10
|
|
|
@@ -26,3 +29,16 @@ export default makeScene2D(function* (view) {
|
|
|
26
29
|
|
|
27
30
|
yield* waitFor(avatarRef().getDuration());
|
|
28
31
|
});
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The final revideo project
|
|
35
|
+
*/
|
|
36
|
+
export default makeProject({
|
|
37
|
+
scenes: [scene],
|
|
38
|
+
settings: {
|
|
39
|
+
// Example settings:
|
|
40
|
+
shared: {
|
|
41
|
+
size: {x: 1080, y: 1080},
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
});
|
|
@@ -3,12 +3,13 @@ import {renderVideo} from '@revideo/renderer';
|
|
|
3
3
|
async function render() {
|
|
4
4
|
console.log('Rendering video...');
|
|
5
5
|
|
|
6
|
+
// This is the main function that renders the video
|
|
6
7
|
const file = await renderVideo({
|
|
7
|
-
projectFile: './src/project.
|
|
8
|
-
settings: {
|
|
8
|
+
projectFile: './src/project.tsx',
|
|
9
|
+
settings: {logProgress: true},
|
|
9
10
|
});
|
|
10
11
|
|
|
11
12
|
console.log(`Rendered video to ${file}`);
|
|
12
13
|
}
|
|
13
14
|
|
|
14
|
-
render();
|
|
15
|
+
render();
|
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
"render": "tsc && node dist/render.js"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@revideo/core": "0.
|
|
11
|
-
"@revideo/2d": "0.
|
|
12
|
-
"@revideo/renderer": "0.
|
|
10
|
+
"@revideo/core": "0.10.0",
|
|
11
|
+
"@revideo/2d": "0.10.0",
|
|
12
|
+
"@revideo/renderer": "0.10.0"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
15
|
-
"@revideo/ui": "0.
|
|
16
|
-
"@revideo/cli": "0.
|
|
15
|
+
"@revideo/ui": "0.10.0",
|
|
16
|
+
"@revideo/cli": "0.10.0",
|
|
17
17
|
"typescript": "5.5.4",
|
|
18
18
|
"vite": "^4.5"
|
|
19
19
|
}
|
|
20
|
-
}
|
|
20
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {makeProject
|
|
1
|
+
import {makeProject} from '@revideo/core';
|
|
2
2
|
|
|
3
3
|
import {Audio, Img, makeScene2D, Video} from '@revideo/2d';
|
|
4
4
|
import {all, chain, createRef, waitFor} from '@revideo/core';
|
|
@@ -50,7 +50,7 @@ export default makeProject({
|
|
|
50
50
|
settings: {
|
|
51
51
|
// Example settings:
|
|
52
52
|
shared: {
|
|
53
|
-
size:
|
|
53
|
+
size: {x: 1920, y: 1080},
|
|
54
54
|
},
|
|
55
55
|
},
|
|
56
56
|
});
|
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
2
|
+
"name": "revideo-app",
|
|
3
3
|
"private": true,
|
|
4
4
|
"version": "0.0.0",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"start": "
|
|
7
|
-
"serve": "vite",
|
|
8
|
-
"build": "tsc && vite build",
|
|
6
|
+
"start": "revideo editor --projectFile ./src/project.tsx",
|
|
9
7
|
"render": "tsc && node dist/render.js"
|
|
10
8
|
},
|
|
11
9
|
"dependencies": {
|
|
12
|
-
"@revideo/core": "0.
|
|
13
|
-
"@revideo/2d": "0.
|
|
14
|
-
"@revideo/renderer": "0.
|
|
15
|
-
"@revideo/vite-plugin": "0.5.10",
|
|
16
|
-
"@revideo/ffmpeg": "0.5.10"
|
|
10
|
+
"@revideo/core": "0.10.0",
|
|
11
|
+
"@revideo/2d": "0.10.0",
|
|
12
|
+
"@revideo/renderer": "0.10.0"
|
|
17
13
|
},
|
|
18
14
|
"devDependencies": {
|
|
19
|
-
"@revideo/ui": "0.
|
|
20
|
-
"@revideo/cli": "0.
|
|
15
|
+
"@revideo/ui": "0.10.0",
|
|
16
|
+
"@revideo/cli": "0.10.0",
|
|
21
17
|
"typescript": "5.5.4",
|
|
22
18
|
"vite": "^4.5"
|
|
23
19
|
}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {all, useScene, createRef, waitFor, easeInExpo, easeInCubic} from '@revideo/core';
|
|
1
|
+
import {makeProject} from '@revideo/core';
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
import {Img, makeScene2D, Txt} from '@revideo/2d';
|
|
4
|
+
import {all, useScene, createRef, easeInCubic} from '@revideo/core';
|
|
5
|
+
import './global.css';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The Revideo scene
|
|
9
|
+
*/
|
|
10
|
+
const scene = makeScene2D('scene', function* (view) {
|
|
5
11
|
const rocketRef = createRef<Img>();
|
|
6
12
|
const earthRef = createRef<Img>();
|
|
7
13
|
const txtRef = createRef<Txt>();
|
|
8
14
|
const logoRef = createRef<Img>();
|
|
9
15
|
|
|
16
|
+
view.fill("#000000")
|
|
10
17
|
|
|
11
18
|
yield view.add(
|
|
12
19
|
<>
|
|
@@ -46,6 +53,19 @@ export default makeScene2D(function* (view) {
|
|
|
46
53
|
/>,
|
|
47
54
|
);
|
|
48
55
|
|
|
49
|
-
|
|
50
56
|
yield* all(txtRef().position.y(150, 2), logoRef().width("30%", 2));
|
|
51
57
|
});
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The final revideo project
|
|
62
|
+
*/
|
|
63
|
+
export default makeProject({
|
|
64
|
+
scenes: [scene],
|
|
65
|
+
settings: {
|
|
66
|
+
// Example settings:
|
|
67
|
+
shared: {
|
|
68
|
+
size: {x: 1920, y: 1080},
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Revideo Minimal Starter Template
|
|
2
|
+
|
|
3
|
+
This is a minimal Revideo starter project. It can be bootstrapped using
|
|
4
|
+
`npm init @revideo@latest` and selecting the minimal template.
|
|
5
|
+
|
|
6
|
+
It includes a simple scene with a background video, music and the Revideo logo.
|
|
7
|
+
You can get started by editing the `project.tsx` file in the `src` folder.
|
|
8
|
+
|
|
9
|
+
You can run the Revideo editor using `npm start` and render the final video
|
|
10
|
+
using `npm run render`.
|
|
11
|
+
|
|
12
|
+
If you want to see what's possible with Revideo, check out the other templates
|
|
13
|
+
in the [Revideo Examples repository](https://github.com/redotvideo/examples), or
|
|
14
|
+
the [Revideo documentation](https://docs.re.video).
|
|
15
|
+
|
|
16
|
+
If you want to include your Revideo project in a website, you can use the
|
|
17
|
+
Next.js template. It can be found in the Revideo Examples repository or
|
|
18
|
+
bootstrapped using `npm init @revideo@latest` and selecting the Next.js
|
|
19
|
+
template.
|
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
2
|
+
"name": "revideo-app",
|
|
3
3
|
"private": true,
|
|
4
4
|
"version": "0.0.0",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"start": "
|
|
7
|
-
"serve": "vite",
|
|
8
|
-
"build": "tsc && vite build",
|
|
6
|
+
"start": "revideo editor --projectFile ./src/project.tsx",
|
|
9
7
|
"render": "tsc && node dist/render.js"
|
|
10
8
|
},
|
|
11
9
|
"dependencies": {
|
|
12
|
-
"@revideo/core": "0.
|
|
13
|
-
"@revideo/2d": "0.
|
|
14
|
-
"@revideo/renderer": "0.
|
|
15
|
-
"@revideo/vite-plugin": "0.5.10",
|
|
16
|
-
"@revideo/ffmpeg": "0.5.10"
|
|
10
|
+
"@revideo/core": "0.10.0",
|
|
11
|
+
"@revideo/2d": "0.10.0",
|
|
12
|
+
"@revideo/renderer": "0.10.0"
|
|
17
13
|
},
|
|
18
14
|
"devDependencies": {
|
|
19
|
-
"@revideo/ui": "0.
|
|
20
|
-
"@revideo/cli": "0.
|
|
15
|
+
"@revideo/ui": "0.10.0",
|
|
16
|
+
"@revideo/cli": "0.10.0",
|
|
21
17
|
"typescript": "5.5.4",
|
|
22
18
|
"vite": "^4.5"
|
|
23
19
|
}
|
package/examples/marketing-templates/marketing-template/src/{scenes/example.tsx → project.tsx}
RENAMED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {all, chain, useScene, createRef, waitFor} from '@revideo/core';
|
|
1
|
+
import {makeProject} from '@revideo/core';
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
import {Grid, Rect, Img, makeScene2D, View2D, Txt} from '@revideo/2d';
|
|
4
|
+
import {all, useScene, createRef, waitFor} from '@revideo/core';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The Revideo scene
|
|
8
|
+
*/
|
|
9
|
+
const scene = makeScene2D('scene', function* (view) {
|
|
5
10
|
const logoRef = createRef<Img>();
|
|
6
11
|
const grid = createRef<Grid>();
|
|
7
12
|
const headingRef = createRef<Txt>()
|
|
@@ -49,6 +54,7 @@ export default makeScene2D(function* (view) {
|
|
|
49
54
|
yield* waitFor(1);
|
|
50
55
|
});
|
|
51
56
|
|
|
57
|
+
|
|
52
58
|
function* addItems(view: View2D, texts: string[]){
|
|
53
59
|
let yPos = 0;
|
|
54
60
|
for(let i=0; i< texts.length; i++){
|
|
@@ -65,3 +71,17 @@ function* addItems(view: View2D, texts: string[]){
|
|
|
65
71
|
}
|
|
66
72
|
|
|
67
73
|
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The final revideo project
|
|
78
|
+
*/
|
|
79
|
+
export default makeProject({
|
|
80
|
+
scenes: [scene],
|
|
81
|
+
settings: {
|
|
82
|
+
// Example settings:
|
|
83
|
+
shared: {
|
|
84
|
+
size: {x: 1920, y: 1080},
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Revideo Minimal Starter Template
|
|
2
|
+
|
|
3
|
+
This is a minimal Revideo starter project. It can be bootstrapped using
|
|
4
|
+
`npm init @revideo@latest` and selecting the minimal template.
|
|
5
|
+
|
|
6
|
+
It includes a simple scene with a background video, music and the Revideo logo.
|
|
7
|
+
You can get started by editing the `project.tsx` file in the `src` folder.
|
|
8
|
+
|
|
9
|
+
You can run the Revideo editor using `npm start` and render the final video
|
|
10
|
+
using `npm run render`.
|
|
11
|
+
|
|
12
|
+
If you want to see what's possible with Revideo, check out the other templates
|
|
13
|
+
in the [Revideo Examples repository](https://github.com/redotvideo/examples), or
|
|
14
|
+
the [Revideo documentation](https://docs.re.video).
|
|
15
|
+
|
|
16
|
+
If you want to include your Revideo project in a website, you can use the
|
|
17
|
+
Next.js template. It can be found in the Revideo Examples repository or
|
|
18
|
+
bootstrapped using `npm init @revideo@latest` and selecting the Next.js
|
|
19
|
+
template.
|
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
2
|
+
"name": "revideo-app",
|
|
3
3
|
"private": true,
|
|
4
4
|
"version": "0.0.0",
|
|
5
5
|
"scripts": {
|
|
6
|
-
"start": "
|
|
7
|
-
"serve": "vite",
|
|
8
|
-
"build": "tsc && vite build",
|
|
6
|
+
"start": "revideo editor --projectFile ./src/project.tsx",
|
|
9
7
|
"render": "tsc && node dist/render.js"
|
|
10
8
|
},
|
|
11
9
|
"dependencies": {
|
|
12
|
-
"@revideo/core": "0.
|
|
13
|
-
"@revideo/2d": "0.
|
|
14
|
-
"@revideo/renderer": "0.
|
|
15
|
-
"@revideo/vite-plugin": "0.5.10",
|
|
16
|
-
"@revideo/ffmpeg": "0.5.10"
|
|
10
|
+
"@revideo/core": "0.10.0",
|
|
11
|
+
"@revideo/2d": "0.10.0",
|
|
12
|
+
"@revideo/renderer": "0.10.0"
|
|
17
13
|
},
|
|
18
14
|
"devDependencies": {
|
|
19
|
-
"@revideo/ui": "0.
|
|
20
|
-
"@revideo/cli": "0.
|
|
15
|
+
"@revideo/ui": "0.10.0",
|
|
16
|
+
"@revideo/cli": "0.10.0",
|
|
21
17
|
"typescript": "5.5.4",
|
|
22
18
|
"vite": "^4.5"
|
|
23
19
|
}
|
package/examples/marketing-templates/multiple-videos-in-one/src/{scenes/example.tsx → project.tsx}
RENAMED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {all, chain, useScene, createRef, waitFor, Reference} from '@revideo/core';
|
|
1
|
+
import {makeProject, Vector2} from '@revideo/core';
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
import {Txt, Rect, View2D, Grid, makeScene2D} from '@revideo/2d';
|
|
4
|
+
import {all, useScene, Reference, createRef, waitFor} from '@revideo/core';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The Revideo scene
|
|
8
|
+
*/
|
|
9
|
+
const scene = makeScene2D('scene', function* (view) {
|
|
5
10
|
|
|
6
11
|
|
|
7
12
|
const backgroundRef = createRef<Rect>();
|
|
@@ -120,3 +125,16 @@ function* addItems(background: Reference<Rect>, backgroundColor: string, texts:
|
|
|
120
125
|
}
|
|
121
126
|
|
|
122
127
|
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The final revideo project
|
|
131
|
+
*/
|
|
132
|
+
export default makeProject({
|
|
133
|
+
scenes: [scene],
|
|
134
|
+
settings: {
|
|
135
|
+
// Example settings:
|
|
136
|
+
shared: {
|
|
137
|
+
size: new Vector2(1920, 1080),
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
});
|
|
@@ -1,29 +1,25 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Revideo Next.js Template
|
|
2
2
|
|
|
3
|
-
This is
|
|
4
|
-
|
|
5
|
-
https://github.com/user-attachments/assets/347cea86-a849-4938-9143-892134bc3276
|
|
3
|
+
This is a [Revideo](https://github.com/redotvideo/revideo) NextJS project that implements basic drag-and-drop functionality.
|
|
6
4
|
|
|
7
5
|
## Getting Started
|
|
8
6
|
|
|
9
|
-
First, install the dependencies
|
|
7
|
+
First, install the dependencies:
|
|
10
8
|
|
|
11
9
|
```bash
|
|
12
|
-
|
|
13
|
-
(cd revideo && npm install)
|
|
10
|
+
npm install
|
|
14
11
|
```
|
|
15
12
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
(cd revideo && npx revideo serve)
|
|
20
|
-
```
|
|
13
|
+
This project comes with the following commands:
|
|
21
14
|
|
|
22
|
-
|
|
15
|
+
- `npm run dev` - Start the Next.js development server
|
|
16
|
+
- `npm run build` - Build the Next.js project
|
|
17
|
+
- `npm run start` - Start the Next.js production server
|
|
18
|
+
- `npm run revideo:serve` - Start the Revideo render api (required for the render button on the Next.js page to work)
|
|
19
|
+
- `npm run revideo:editor` - Start the Revideo editor, which you can use to inspect and preview your Revideo code
|
|
23
20
|
|
|
24
|
-
|
|
25
|
-
(cd next && npm run dev)
|
|
26
|
-
```
|
|
21
|
+
## Building with Revideo
|
|
27
22
|
|
|
28
|
-
|
|
29
|
-
|
|
23
|
+
If you want to see what's possible with Revideo, check out the other templates
|
|
24
|
+
in the [Revideo Examples repository](https://github.com/redotvideo/examples), or
|
|
25
|
+
the [Revideo documentation](https://docs.re.video).
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import {Player} from '@revideo/player-react';
|
|
4
|
-
import {useState, useEffect} from 'react';
|
|
4
|
+
import {useState, useEffect, useRef} from 'react';
|
|
5
5
|
import {LoaderCircle} from 'lucide-react';
|
|
6
6
|
import { parseStream } from '../utils/parse';
|
|
7
7
|
import {Player as CorePlayer} from '@revideo/core';
|
|
8
8
|
import {Scene2D, Shape} from '@revideo/2d';
|
|
9
|
+
import project from '@/revideo/project';
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
function Button({
|
|
@@ -53,7 +54,10 @@ export default function Home() {
|
|
|
53
54
|
height: number;
|
|
54
55
|
} | null>(null);
|
|
55
56
|
|
|
57
|
+
const playerContainerRef = useRef<HTMLDivElement>(null);
|
|
58
|
+
|
|
56
59
|
useEffect(() => {
|
|
60
|
+
console.log("changing", "playerrect", "dimensions", playerRect, dimensions);
|
|
57
61
|
if (playerRect) {
|
|
58
62
|
setTransformMatrix(createTransformationMatrix(playerRect, dimensions));
|
|
59
63
|
}
|
|
@@ -73,6 +77,9 @@ export default function Home() {
|
|
|
73
77
|
};
|
|
74
78
|
|
|
75
79
|
const handlePointerDown = (event: React.PointerEvent<HTMLDivElement>) => {
|
|
80
|
+
console.log("hiiii")
|
|
81
|
+
console.log("playerrect", playerRect);
|
|
82
|
+
console.log("transformmatrix", transformMatrix);
|
|
76
83
|
if (playerRect && transformMatrix) {
|
|
77
84
|
const { x: playerX, y: playerY } = transformPoint(
|
|
78
85
|
event.clientX,
|
|
@@ -80,10 +87,16 @@ export default function Home() {
|
|
|
80
87
|
transformMatrix
|
|
81
88
|
);
|
|
82
89
|
|
|
90
|
+
console.log("AHHH")
|
|
91
|
+
|
|
92
|
+
console.log("pos", playerX, playerY);
|
|
93
|
+
|
|
83
94
|
let hitNode = (corePlayer?.playback.currentScene as Scene2D).getNodeByPosition(playerX, playerY) as Shape;
|
|
84
95
|
while (hitNode) {
|
|
96
|
+
console.log("joo");
|
|
85
97
|
// We want to avoid getting TxtLeaf nodes, but only their parent Txt nodes
|
|
86
98
|
if (nodes.has(hitNode.key)) {
|
|
99
|
+
console.log("jaaa", hitNode.key);
|
|
87
100
|
setDraggingNode(hitNode);
|
|
88
101
|
const node = nodes.get(hitNode.key);
|
|
89
102
|
setDragOffset({ x: playerX - node.x, y: playerY - node.y });
|
|
@@ -190,45 +203,44 @@ export default function Home() {
|
|
|
190
203
|
|
|
191
204
|
return (
|
|
192
205
|
<>
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
206
|
+
<div className="m-auto p-12 max-w-6xl flex flex-col gap-y-4">
|
|
207
|
+
<div
|
|
208
|
+
className="rounded-lg overflow-hidden w-[100%] py-20 bg-gray-100 flex items-center justify-center"
|
|
209
|
+
onPointerDown={handlePointerDown}
|
|
210
|
+
onPointerMove={handlePointerMove}
|
|
211
|
+
onPointerUp={() => {
|
|
212
|
+
setDraggingNode(null);
|
|
213
|
+
setDragOffset(null);
|
|
214
|
+
}}
|
|
215
|
+
>
|
|
216
|
+
<div className='w-[80%] h-[80%]' ref={playerContainerRef}>
|
|
217
|
+
<Player
|
|
218
|
+
project={project}
|
|
219
|
+
controls={false}
|
|
220
|
+
playing={playing}
|
|
221
|
+
width={dimensions.x}
|
|
222
|
+
height={dimensions.y}
|
|
223
|
+
variables={{
|
|
224
|
+
nodes: Object.fromEntries(nodes),
|
|
225
|
+
}}
|
|
226
|
+
onPlayerReady={handlePlayerReady}
|
|
227
|
+
onPlayerResize={(rect: DOMRect) => {
|
|
228
|
+
setPlayerRect(rect);
|
|
229
|
+
}}
|
|
230
|
+
/>
|
|
231
|
+
{(selectedNode && playerRect) && (
|
|
232
|
+
<div
|
|
233
|
+
className="absolute border-2 border-[#5bbad5] pointer-events-none"
|
|
234
|
+
style={{
|
|
235
|
+
left: `${selectedNode.x-selectedNode.width/2}px`,
|
|
236
|
+
top: `${selectedNode.y-selectedNode.height/2}px`,
|
|
237
|
+
width: `${selectedNode.width}px`,
|
|
238
|
+
height: `${selectedNode.height}px`,
|
|
201
239
|
}}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
controls={false}
|
|
207
|
-
playing={playing}
|
|
208
|
-
width={dimensions.x}
|
|
209
|
-
height={dimensions.y}
|
|
210
|
-
variables={{
|
|
211
|
-
nodes: Object.fromEntries(nodes),
|
|
212
|
-
}}
|
|
213
|
-
onPlayerReady={handlePlayerReady}
|
|
214
|
-
onPlayerResize={(rect: DOMRect) => {
|
|
215
|
-
setPlayerRect(rect);
|
|
216
|
-
}}
|
|
217
|
-
/>
|
|
218
|
-
{(selectedNode && playerRect) && (
|
|
219
|
-
<div
|
|
220
|
-
className="absolute border-2 border-[#5bbad5] pointer-events-none"
|
|
221
|
-
style={{
|
|
222
|
-
left: `${selectedNode.x-selectedNode.width/2}px`,
|
|
223
|
-
top: `${selectedNode.y-selectedNode.height/2}px`,
|
|
224
|
-
width: `${selectedNode.width}px`,
|
|
225
|
-
height: `${selectedNode.height}px`,
|
|
226
|
-
}}
|
|
227
|
-
/>
|
|
228
|
-
)}
|
|
229
|
-
|
|
230
|
-
</div>
|
|
231
|
-
</div>
|
|
240
|
+
/>
|
|
241
|
+
)}
|
|
242
|
+
</div>
|
|
243
|
+
</div>
|
|
232
244
|
<div className="flex gap-x-4">
|
|
233
245
|
{/* Progress bar */}
|
|
234
246
|
<div className="text-sm flex-1 bg-gray-100 rounded-md overflow-hidden">
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
/// <reference types="next/image-types/global" />
|
|
3
3
|
|
|
4
4
|
// NOTE: This file should not be edited
|
|
5
|
-
// see https://nextjs.org/docs/
|
|
5
|
+
// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
|