@revideo/create 0.4.3-alpha.1001 → 0.4.3

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.
Files changed (39) hide show
  1. package/examples/README.md +5 -2
  2. package/examples/default/package.json +7 -7
  3. package/examples/github-stars-celebration/package-lock.json +3833 -0
  4. package/examples/github-stars-celebration/package.json +24 -0
  5. package/examples/github-stars-celebration/src/global.css +1 -0
  6. package/examples/github-stars-celebration/src/project.meta +31 -0
  7. package/examples/github-stars-celebration/src/project.ts +8 -0
  8. package/examples/github-stars-celebration/src/render.ts +15 -0
  9. package/examples/github-stars-celebration/src/revideo.d.ts +1 -0
  10. package/examples/github-stars-celebration/src/scenes/example.meta +5 -0
  11. package/examples/github-stars-celebration/src/scenes/example.tsx +51 -0
  12. package/examples/github-stars-celebration/tsconfig.json +9 -0
  13. package/examples/github-stars-celebration/vite.config.ts +8 -0
  14. package/examples/google-cloud-run-parallelized/render-orchestrator/Dockerfile +1 -1
  15. package/examples/google-cloud-run-parallelized/render-orchestrator/package.json +3 -3
  16. package/examples/google-cloud-run-parallelized/render-worker/package.json +8 -8
  17. package/examples/google-cloud-run-parallelized/render-worker/src/index.ts +7 -1
  18. package/examples/google-cloud-run-parallelized/render-worker/src/project.meta +31 -0
  19. package/examples/google-cloud-run-parallelized/render-worker/src/project.ts +1 -1
  20. package/examples/google-cloud-run-parallelized/render-worker/src/render.ts +14 -0
  21. package/examples/parallelized-aws-lambda/.dockerignore +2 -0
  22. package/examples/parallelized-aws-lambda/Dockerfile +21 -0
  23. package/examples/parallelized-aws-lambda/Dockerfile.base +64 -0
  24. package/examples/parallelized-aws-lambda/README.md +197 -0
  25. package/examples/parallelized-aws-lambda/revideo-project/.puppeteerrc.cjs +9 -0
  26. package/examples/parallelized-aws-lambda/revideo-project/package-lock.json +4133 -0
  27. package/examples/parallelized-aws-lambda/revideo-project/package.json +31 -0
  28. package/examples/parallelized-aws-lambda/revideo-project/src/lambda.ts +144 -0
  29. package/examples/parallelized-aws-lambda/revideo-project/src/project.meta +31 -0
  30. package/examples/parallelized-aws-lambda/revideo-project/src/project.ts +7 -0
  31. package/examples/parallelized-aws-lambda/revideo-project/src/render.ts +16 -0
  32. package/examples/parallelized-aws-lambda/revideo-project/src/revideo.d.ts +1 -0
  33. package/examples/parallelized-aws-lambda/revideo-project/src/scenes/example.meta +5 -0
  34. package/examples/parallelized-aws-lambda/revideo-project/src/scenes/example.tsx +29 -0
  35. package/examples/parallelized-aws-lambda/revideo-project/tsconfig.json +10 -0
  36. package/examples/parallelized-aws-lambda/revideo-project/vite.config.ts +9 -0
  37. package/examples/saas-template/next/package.json +1 -1
  38. package/examples/saas-template/revideo/package.json +7 -7
  39. package/package.json +9 -9
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "test-revideo-project",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "scripts": {
6
+ "start": "vite",
7
+ "serve": "vite",
8
+ "build": "tsc && vite build",
9
+ "render": "tsc && node dist/render.js"
10
+ },
11
+ "dependencies": {
12
+ "@revideo/2d": "0.4.3",
13
+ "@revideo/core": "0.4.3",
14
+ "@revideo/ffmpeg": "0.4.3",
15
+ "@revideo/renderer": "0.4.3",
16
+ "@revideo/vite-plugin": "0.4.3",
17
+ "@sparticuz/chromium": "^123.0.1",
18
+ "aws-lambda": "^1.0.7",
19
+ "aws-sdk": "^2.1642.0",
20
+ "ffmpeg-static": "^5.2.0"
21
+ },
22
+ "devDependencies": {
23
+ "@revideo/cli": "^0.4.3",
24
+ "@revideo/ui": "0.4.3",
25
+ "typescript": "^5.2.2",
26
+ "vite": "^4.5"
27
+ }
28
+ }
29
+
30
+
31
+
@@ -0,0 +1,144 @@
1
+ import { renderPartialVideo } from '@revideo/renderer';
2
+ import { mergeAudioWithVideo, concatenateMedia } from '@revideo/ffmpeg';
3
+ import chromium from '@sparticuz/chromium';
4
+ import * as AWS from "aws-sdk";
5
+ import * as fs from "fs";
6
+
7
+ AWS.config.update({ region: 'us-east-1' });
8
+ chromium.setHeadlessMode = true;
9
+
10
+ const s3 = new AWS.S3();
11
+ const lambda = new AWS.Lambda();
12
+
13
+ export const handler = async (event: any, context: any) => {
14
+ const { jobType, jobId } = event;
15
+
16
+ if(jobType == "partialRender"){
17
+
18
+ try {
19
+ const { workerId, numWorkers, variables } = event;
20
+
21
+ const { audioFile, videoFile } = await renderPartialVideo({
22
+ projectFile: './src/project.ts',
23
+ workerId: workerId,
24
+ numWorkers: numWorkers,
25
+ variables: variables,
26
+ settings: { logProgress: true, viteBasePort: 5000, outDir: "/tmp/output", viteConfig: { cacheDir: "/tmp/.vite"}, puppeteer: { args: chromium.args, headless: chromium.headless }}
27
+ });
28
+
29
+ await Promise.all([uploadFileToBucket(audioFile, `${jobId}-audio-${workerId}.wav`), uploadFileToBucket(videoFile, `${jobId}-video-${workerId}.mp4`)]);
30
+
31
+ return {
32
+ statusCode: 200,
33
+ body: JSON.stringify({
34
+ audioUrl: `https://${process.env.REVIDEO_BUCKET_NAME}.s3.amazonaws.com/${jobId}-audio-${workerId}.wav`,
35
+ videoUrl: `https://${process.env.REVIDEO_BUCKET_NAME}.s3.amazonaws.com/${jobId}-video-${workerId}.mp4`
36
+ }),
37
+ };
38
+ } catch(err) {
39
+ return {
40
+ statusCode: 500,
41
+ body: JSON.stringify({
42
+ error: `Error during partial render: ${err}`
43
+ })
44
+ }
45
+ }
46
+
47
+
48
+ } else {
49
+ const { numWorkers, variables, jobId } = event;
50
+
51
+ try {
52
+
53
+ const renderPromises = [];
54
+ for (let i = 0; i < numWorkers; i++) {
55
+ console.log("invoking worker", i);
56
+ renderPromises.push(invokePartialRender(variables, i, numWorkers, jobId));
57
+ }
58
+
59
+ console.log("now waiting");
60
+
61
+ const results = await Promise.all(renderPromises);
62
+ console.log("obtained results", results);
63
+ const audios = results.map(result => result.audioUrl);
64
+ const videos = results.map(result => result.videoUrl);
65
+
66
+ console.log("videos", videos);
67
+ await Promise.all([
68
+ concatenateMedia(audios, `/tmp/${jobId}-audio.wav`),
69
+ concatenateMedia(videos, `/tmp/${jobId}-visuals.mp4`)
70
+ ]);
71
+
72
+ await mergeAudioWithVideo(`/tmp/${jobId}-audio.wav`, `/tmp/${jobId}-visuals.mp4`, `/tmp/${jobId}.mp4`);
73
+ await uploadFileToBucket(`/tmp/${jobId}.mp4`, `${jobId}.mp4`);
74
+
75
+ return {
76
+ statusCode: 200,
77
+ body: JSON.stringify({
78
+ resultUrl: `https://${process.env.REVIDEO_BUCKET_NAME}.s3.amazonaws.com/${jobId}.mp4`,
79
+ }),
80
+ };
81
+ } catch(err){
82
+ return {
83
+ statusCode: 500,
84
+ body: JSON.stringify({
85
+ error: `An error occured during rendering: ${err}`
86
+ }),
87
+ };
88
+ }
89
+
90
+
91
+ }
92
+
93
+ };
94
+
95
+ async function uploadFileToBucket(localPath: string, destinationPath: string) {
96
+ const fileContent = await fs.promises.readFile(localPath);
97
+
98
+ const params = {
99
+ Bucket: process.env.REVIDEO_BUCKET_NAME,
100
+ Key: destinationPath,
101
+ Body: fileContent,
102
+ };
103
+
104
+ try {
105
+ const data = await s3.upload(params).promise();
106
+ console.log(`File uploaded successfully. ${data.Location}`);
107
+ } catch (err) {
108
+ console.error("Error uploading file: ", err);
109
+ }
110
+ }
111
+
112
+ async function invokePartialRender(variables: any, workerId: number, numWorkers: number, jobId: string){
113
+ const params = {
114
+ FunctionName: process.env.AWS_LAMBDA_FUNCTION_NAME,
115
+ InvocationType: 'RequestResponse',
116
+ LogType: 'None',
117
+ Payload: JSON.stringify({
118
+ variables: variables,
119
+ workerId: workerId,
120
+ numWorkers: numWorkers,
121
+ jobId: jobId,
122
+ jobType: "partialRender"
123
+ }),
124
+ };
125
+
126
+ try {
127
+ const data = await lambda.invoke(params).promise();
128
+ const payload = JSON.parse(data.Payload as string);
129
+ console.log('Lambda invoke result:', payload);
130
+
131
+ // Parse the body string to JSON to access the audioUrl and videoUrl
132
+ const body = JSON.parse(payload.body);
133
+
134
+ if(payload.statusCode !== 200){
135
+ throw Error(body.message); // Use the parsed body for error messages
136
+ }
137
+
138
+ return { audioUrl: body.audioUrl, videoUrl: body.videoUrl };
139
+
140
+ } catch (error) {
141
+ console.error("Error during partial render:", error);
142
+ throw error;
143
+ }
144
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "version": 0,
3
+ "shared": {
4
+ "background": null,
5
+ "range": [
6
+ 0,
7
+ null
8
+ ],
9
+ "size": {
10
+ "x": 1920,
11
+ "y": 1080
12
+ },
13
+ "audioOffset": 0
14
+ },
15
+ "preview": {
16
+ "fps": 30,
17
+ "resolutionScale": 1
18
+ },
19
+ "rendering": {
20
+ "fps": 30,
21
+ "resolutionScale": 1,
22
+ "colorSpace": "srgb",
23
+ "exporter": {
24
+ "name": "@revideo/core/ffmpeg",
25
+ "options": {
26
+ "fastStart": true,
27
+ "includeAudio": true
28
+ }
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,7 @@
1
+ import {makeProject} from '@revideo/core';
2
+
3
+ import example from './scenes/example?scene';
4
+
5
+ export default makeProject({
6
+ scenes: [example],
7
+ });
@@ -0,0 +1,16 @@
1
+ import {renderVideo} from '@revideo/renderer';
2
+
3
+ async function render() {
4
+ console.log('Rendering video...');
5
+
6
+ // This is the main function that renders the video
7
+ const file = await renderVideo({
8
+ projectFile: './src/project.ts',
9
+ variables: {message: 'Hi!'},
10
+ settings: {logProgress: true},
11
+ });
12
+
13
+ console.log(`Rendered video to ${file}`);
14
+ }
15
+
16
+ render();
@@ -0,0 +1 @@
1
+ /// <reference types="@revideo/core/project" />
@@ -0,0 +1,5 @@
1
+ {
2
+ "version": 0,
3
+ "timeEvents": [],
4
+ "seed": 307431050
5
+ }
@@ -0,0 +1,29 @@
1
+ import {Audio, Img, Txt, Video, makeScene2D} from '@revideo/2d';
2
+ import {createRef, createSignal, useScene, waitFor} from '@revideo/core';
3
+
4
+ export default makeScene2D(function* (view) {
5
+ const fontSize = createSignal(50);
6
+
7
+ yield view.add(
8
+ <>
9
+ <Video
10
+ src={'https://revideo-example-assets.s3.amazonaws.com/beach-4.mp4'}
11
+ size={['100%', '100%']}
12
+ play={true}
13
+ />
14
+ <Audio
15
+ src={'https://revideo-example-assets.s3.amazonaws.com/chill-beat-2.mp3'}
16
+ play={true}
17
+ />
18
+ </>,
19
+ );
20
+
21
+ yield* waitFor(1);
22
+
23
+ yield view.add(<Txt fill={"white"} fontSize={fontSize}>{useScene().variables.get("message", "Hello World!")()}</Txt>);
24
+
25
+ yield* fontSize(100, 4); // increase font size to 100 in 4 seconds
26
+
27
+ yield* waitFor(25); // wait for 25 seconds more
28
+
29
+ });
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "@revideo/2d/tsconfig.project.json",
3
+ "include": ["src"],
4
+ "compilerOptions": {
5
+ "noEmit": false,
6
+ "outDir": "dist",
7
+ "module": "CommonJS",
8
+ "esModuleInterop": true,
9
+ }
10
+ }
@@ -0,0 +1,9 @@
1
+ import {defineConfig} from 'vite';
2
+ import motionCanvas from '@revideo/vite-plugin';
3
+
4
+
5
+ export default defineConfig({
6
+ plugins: [
7
+ motionCanvas(),
8
+ ]
9
+ });
@@ -10,7 +10,7 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "@radix-ui/react-navigation-menu": "^1.1.4",
13
- "@revideo/player-react": "0.4.2",
13
+ "@revideo/player-react": "0.4.3",
14
14
  "class-variance-authority": "^0.7.0",
15
15
  "lucide-react": "^0.378.0",
16
16
  "next": "14.2.3",
@@ -9,15 +9,15 @@
9
9
  "render": "tsc && node dist/render.js"
10
10
  },
11
11
  "dependencies": {
12
- "@revideo/core": "0.4.2",
13
- "@revideo/2d": "0.4.2",
14
- "@revideo/renderer": "0.4.2",
15
- "@revideo/vite-plugin": "0.4.2",
16
- "@revideo/ffmpeg": "0.4.2"
12
+ "@revideo/core": "0.4.3",
13
+ "@revideo/2d": "0.4.3",
14
+ "@revideo/renderer": "0.4.3",
15
+ "@revideo/vite-plugin": "0.4.3",
16
+ "@revideo/ffmpeg": "0.4.3"
17
17
  },
18
18
  "devDependencies": {
19
- "@revideo/ui": "0.4.2",
20
- "@revideo/cli": "0.4.2",
19
+ "@revideo/ui": "0.4.3",
20
+ "@revideo/cli": "0.4.3",
21
21
  "typescript": "^5.2.2",
22
22
  "vite": "^4.5"
23
23
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revideo/create",
3
- "version": "0.4.3-alpha.1001+7bb63d94",
3
+ "version": "0.4.3",
4
4
  "description": "Quickly scaffold revideo projects",
5
5
  "main": "index.js",
6
6
  "author": "revideo",
@@ -20,17 +20,17 @@
20
20
  "url": "https://github.com/havenhq/revideo.git"
21
21
  },
22
22
  "devDependencies": {
23
- "@revideo/2d": "^0.4.3-alpha.1001+7bb63d94",
24
- "@revideo/core": "^0.4.3-alpha.1001+7bb63d94",
25
- "@revideo/ffmpeg": "^0.4.3-alpha.1001+7bb63d94",
26
- "@revideo/renderer": "^0.4.3-alpha.1001+7bb63d94",
27
- "@revideo/ui": "^0.4.3-alpha.1001+7bb63d94",
28
- "@revideo/vite-plugin": "^0.4.3-alpha.1001+7bb63d94"
23
+ "@revideo/2d": "0.4.3",
24
+ "@revideo/core": "0.4.3",
25
+ "@revideo/ffmpeg": "0.4.3",
26
+ "@revideo/renderer": "0.4.3",
27
+ "@revideo/ui": "0.4.3",
28
+ "@revideo/vite-plugin": "0.4.3"
29
29
  },
30
30
  "dependencies": {
31
- "@revideo/telemetry": "^0.4.3-alpha.1001+7bb63d94",
31
+ "@revideo/telemetry": "0.4.3",
32
32
  "minimist": "^1.2.8",
33
33
  "prompts": "^2.4.2"
34
34
  },
35
- "gitHead": "7bb63d94086f91d734e0a895489fad1d5c4b2478"
35
+ "gitHead": "31ac96141a6a1bf1f1de519dc0475a0d8a8d0347"
36
36
  }