@revideo/create 0.5.8-alpha.1084 → 0.5.8-beta.1082

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 (175) hide show
  1. package/package.json +9 -9
  2. package/examples/README.md +0 -43
  3. package/examples/avatar-with-background/package-lock.json +0 -3223
  4. package/examples/avatar-with-background/package.json +0 -26
  5. package/examples/avatar-with-background/src/project.meta +0 -31
  6. package/examples/avatar-with-background/src/project.ts +0 -6
  7. package/examples/avatar-with-background/src/render.ts +0 -14
  8. package/examples/avatar-with-background/src/revideo.d.ts +0 -1
  9. package/examples/avatar-with-background/src/scenes/example.meta +0 -5
  10. package/examples/avatar-with-background/src/scenes/example.tsx +0 -27
  11. package/examples/avatar-with-background/tsconfig.json +0 -9
  12. package/examples/avatar-with-background/vite.config.ts +0 -8
  13. package/examples/default/package.json +0 -24
  14. package/examples/default/src/project.meta +0 -31
  15. package/examples/default/src/project.ts +0 -7
  16. package/examples/default/src/render.ts +0 -15
  17. package/examples/default/src/revideo.d.ts +0 -1
  18. package/examples/default/src/scenes/example.tsx +0 -38
  19. package/examples/default/tsconfig.json +0 -9
  20. package/examples/default/vite.config.ts +0 -8
  21. package/examples/github-stars-celebration/package-lock.json +0 -3833
  22. package/examples/github-stars-celebration/package.json +0 -24
  23. package/examples/github-stars-celebration/src/global.css +0 -1
  24. package/examples/github-stars-celebration/src/project.meta +0 -28
  25. package/examples/github-stars-celebration/src/project.ts +0 -8
  26. package/examples/github-stars-celebration/src/render.ts +0 -15
  27. package/examples/github-stars-celebration/src/revideo.d.ts +0 -1
  28. package/examples/github-stars-celebration/src/scenes/example.meta +0 -5
  29. package/examples/github-stars-celebration/src/scenes/example.tsx +0 -51
  30. package/examples/github-stars-celebration/tsconfig.json +0 -9
  31. package/examples/github-stars-celebration/vite.config.ts +0 -8
  32. package/examples/google-cloud-run-parallelized/README.md +0 -127
  33. package/examples/google-cloud-run-parallelized/render-orchestrator/Dockerfile +0 -56
  34. package/examples/google-cloud-run-parallelized/render-orchestrator/package.json +0 -22
  35. package/examples/google-cloud-run-parallelized/render-orchestrator/src/index.ts +0 -72
  36. package/examples/google-cloud-run-parallelized/render-orchestrator/src/revideo.d.ts +0 -1
  37. package/examples/google-cloud-run-parallelized/render-orchestrator/tsconfig.json +0 -10
  38. package/examples/google-cloud-run-parallelized/render-worker/.gcloudignore +0 -17
  39. package/examples/google-cloud-run-parallelized/render-worker/.puppeteerrc.cjs +0 -9
  40. package/examples/google-cloud-run-parallelized/render-worker/package.json +0 -30
  41. package/examples/google-cloud-run-parallelized/render-worker/src/index.ts +0 -45
  42. package/examples/google-cloud-run-parallelized/render-worker/src/project.meta +0 -31
  43. package/examples/google-cloud-run-parallelized/render-worker/src/project.ts +0 -6
  44. package/examples/google-cloud-run-parallelized/render-worker/src/render.ts +0 -14
  45. package/examples/google-cloud-run-parallelized/render-worker/src/revideo.d.ts +0 -1
  46. package/examples/google-cloud-run-parallelized/render-worker/src/scenes/example.tsx +0 -30
  47. package/examples/google-cloud-run-parallelized/render-worker/tsconfig.json +0 -13
  48. package/examples/google-cloud-run-parallelized/render-worker/vite.config.ts +0 -9
  49. package/examples/logo.svg +0 -6
  50. package/examples/logo_dark.svg +0 -6
  51. package/examples/marketing-templates/README.md +0 -10
  52. package/examples/marketing-templates/marketing-template/package-lock.json +0 -3824
  53. package/examples/marketing-templates/marketing-template/package.json +0 -24
  54. package/examples/marketing-templates/marketing-template/src/globals.css +0 -0
  55. package/examples/marketing-templates/marketing-template/src/project.meta +0 -28
  56. package/examples/marketing-templates/marketing-template/src/project.ts +0 -9
  57. package/examples/marketing-templates/marketing-template/src/render.ts +0 -15
  58. package/examples/marketing-templates/marketing-template/src/revideo.d.ts +0 -1
  59. package/examples/marketing-templates/marketing-template/src/scenes/example.meta +0 -5
  60. package/examples/marketing-templates/marketing-template/src/scenes/example.tsx +0 -67
  61. package/examples/marketing-templates/marketing-template/tsconfig.json +0 -9
  62. package/examples/marketing-templates/marketing-template/vite.config.ts +0 -9
  63. package/examples/marketing-templates/multiple-videos-in-one/package-lock.json +0 -3824
  64. package/examples/marketing-templates/multiple-videos-in-one/package.json +0 -24
  65. package/examples/marketing-templates/multiple-videos-in-one/src/project.meta +0 -28
  66. package/examples/marketing-templates/multiple-videos-in-one/src/project.ts +0 -9
  67. package/examples/marketing-templates/multiple-videos-in-one/src/render.ts +0 -15
  68. package/examples/marketing-templates/multiple-videos-in-one/src/revideo.d.ts +0 -1
  69. package/examples/marketing-templates/multiple-videos-in-one/src/scenes/example.meta +0 -5
  70. package/examples/marketing-templates/multiple-videos-in-one/src/scenes/example.tsx +0 -122
  71. package/examples/marketing-templates/multiple-videos-in-one/tsconfig.json +0 -9
  72. package/examples/marketing-templates/multiple-videos-in-one/vite.config.ts +0 -9
  73. package/examples/parallelized-aws-lambda/.dockerignore +0 -3
  74. package/examples/parallelized-aws-lambda/Dockerfile +0 -21
  75. package/examples/parallelized-aws-lambda/Dockerfile.base +0 -64
  76. package/examples/parallelized-aws-lambda/README.md +0 -197
  77. package/examples/parallelized-aws-lambda/revideo-project/.puppeteerrc.cjs +0 -9
  78. package/examples/parallelized-aws-lambda/revideo-project/package-lock.json +0 -4133
  79. package/examples/parallelized-aws-lambda/revideo-project/package.json +0 -31
  80. package/examples/parallelized-aws-lambda/revideo-project/src/lambda.ts +0 -144
  81. package/examples/parallelized-aws-lambda/revideo-project/src/project.meta +0 -28
  82. package/examples/parallelized-aws-lambda/revideo-project/src/project.ts +0 -7
  83. package/examples/parallelized-aws-lambda/revideo-project/src/render.ts +0 -16
  84. package/examples/parallelized-aws-lambda/revideo-project/src/revideo.d.ts +0 -1
  85. package/examples/parallelized-aws-lambda/revideo-project/src/scenes/example.meta +0 -5
  86. package/examples/parallelized-aws-lambda/revideo-project/src/scenes/example.tsx +0 -29
  87. package/examples/parallelized-aws-lambda/revideo-project/tsconfig.json +0 -10
  88. package/examples/parallelized-aws-lambda/revideo-project/vite.config.ts +0 -9
  89. package/examples/reddit-post-video/README.md +0 -84
  90. package/examples/reddit-post-video/package-lock.json +0 -2941
  91. package/examples/reddit-post-video/package.json +0 -27
  92. package/examples/reddit-post-video/src/global.css +0 -1
  93. package/examples/reddit-post-video/src/metadata.json +0 -576
  94. package/examples/reddit-post-video/src/project.meta +0 -31
  95. package/examples/reddit-post-video/src/project.ts +0 -9
  96. package/examples/reddit-post-video/src/render.ts +0 -157
  97. package/examples/reddit-post-video/src/revideo.d.ts +0 -1
  98. package/examples/reddit-post-video/src/scenes/example.meta +0 -5
  99. package/examples/reddit-post-video/src/scenes/example.tsx +0 -74
  100. package/examples/reddit-post-video/tsconfig.json +0 -9
  101. package/examples/reddit-post-video/vite.config.ts +0 -6
  102. package/examples/rive-explanation-video/README.md +0 -9
  103. package/examples/rive-explanation-video/package-lock.json +0 -3706
  104. package/examples/rive-explanation-video/package.json +0 -25
  105. package/examples/rive-explanation-video/src/global.css +0 -1
  106. package/examples/rive-explanation-video/src/project.meta +0 -31
  107. package/examples/rive-explanation-video/src/project.ts +0 -8
  108. package/examples/rive-explanation-video/src/render.ts +0 -15
  109. package/examples/rive-explanation-video/src/revideo.d.ts +0 -1
  110. package/examples/rive-explanation-video/src/scenes/example.meta +0 -5
  111. package/examples/rive-explanation-video/src/scenes/example.tsx +0 -218
  112. package/examples/rive-explanation-video/tsconfig.json +0 -9
  113. package/examples/rive-explanation-video/vite.config.ts +0 -8
  114. package/examples/saas-template/.prettierrc +0 -9
  115. package/examples/saas-template/README.md +0 -28
  116. package/examples/saas-template/next/app/actions.tsx +0 -113
  117. package/examples/saas-template/next/app/api/render/route.ts +0 -22
  118. package/examples/saas-template/next/app/globals.css +0 -3
  119. package/examples/saas-template/next/app/layout.tsx +0 -25
  120. package/examples/saas-template/next/app/page.tsx +0 -187
  121. package/examples/saas-template/next/next.config.mjs +0 -4
  122. package/examples/saas-template/next/package.json +0 -34
  123. package/examples/saas-template/next/postcss.config.js +0 -6
  124. package/examples/saas-template/next/public/favicon.ico +0 -0
  125. package/examples/saas-template/next/public/next.svg +0 -1
  126. package/examples/saas-template/next/public/vercel.svg +0 -1
  127. package/examples/saas-template/next/tailwind.config.ts +0 -30
  128. package/examples/saas-template/next/tsconfig.json +0 -26
  129. package/examples/saas-template/next/utils/parse.ts +0 -35
  130. package/examples/saas-template/revideo/package.json +0 -24
  131. package/examples/saas-template/revideo/src/global.css +0 -1
  132. package/examples/saas-template/revideo/src/project.meta +0 -27
  133. package/examples/saas-template/revideo/src/project.ts +0 -9
  134. package/examples/saas-template/revideo/src/render.ts +0 -15
  135. package/examples/saas-template/revideo/src/revideo.d.ts +0 -1
  136. package/examples/saas-template/revideo/src/scenes/example.meta +0 -5
  137. package/examples/saas-template/revideo/src/scenes/example.tsx +0 -178
  138. package/examples/saas-template/revideo/tsconfig.json +0 -9
  139. package/examples/saas-template/revideo/vite.config.ts +0 -6
  140. package/examples/stitching-videos/README.md +0 -7
  141. package/examples/stitching-videos/package-lock.json +0 -2801
  142. package/examples/stitching-videos/package.json +0 -23
  143. package/examples/stitching-videos/src/project.meta +0 -28
  144. package/examples/stitching-videos/src/project.ts +0 -20
  145. package/examples/stitching-videos/src/render.ts +0 -26
  146. package/examples/stitching-videos/src/revideo.d.ts +0 -1
  147. package/examples/stitching-videos/src/scenes/example.tsx +0 -30
  148. package/examples/stitching-videos/tsconfig.json +0 -9
  149. package/examples/stitching-videos/vite.config.ts +0 -8
  150. package/examples/three-js-example/README.md +0 -8
  151. package/examples/three-js-example/package-lock.json +0 -2753
  152. package/examples/three-js-example/package.json +0 -25
  153. package/examples/three-js-example/src/components/Three.ts +0 -166
  154. package/examples/three-js-example/src/global.css +0 -1
  155. package/examples/three-js-example/src/project.meta +0 -31
  156. package/examples/three-js-example/src/project.ts +0 -8
  157. package/examples/three-js-example/src/render.ts +0 -15
  158. package/examples/three-js-example/src/revideo.d.ts +0 -1
  159. package/examples/three-js-example/src/scenes/basic3D.meta +0 -5
  160. package/examples/three-js-example/src/scenes/basic3D.tsx +0 -89
  161. package/examples/three-js-example/tsconfig.json +0 -9
  162. package/examples/three-js-example/vite.config.ts +0 -6
  163. package/examples/youtube-shorts/README.md +0 -65
  164. package/examples/youtube-shorts/package-lock.json +0 -3914
  165. package/examples/youtube-shorts/package.json +0 -30
  166. package/examples/youtube-shorts/src/global.css +0 -3
  167. package/examples/youtube-shorts/src/metadata.json +0 -635
  168. package/examples/youtube-shorts/src/project.meta +0 -28
  169. package/examples/youtube-shorts/src/project.ts +0 -9
  170. package/examples/youtube-shorts/src/render.ts +0 -43
  171. package/examples/youtube-shorts/src/revideo.d.ts +0 -1
  172. package/examples/youtube-shorts/src/scenes/example.tsx +0 -211
  173. package/examples/youtube-shorts/src/utils.ts +0 -123
  174. package/examples/youtube-shorts/tsconfig.json +0 -9
  175. package/examples/youtube-shorts/vite.config.ts +0 -8
@@ -1,31 +0,0 @@
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.6",
13
- "@revideo/core": "0.4.6",
14
- "@revideo/ffmpeg": "0.4.6",
15
- "@revideo/renderer": "0.4.6",
16
- "@revideo/vite-plugin": "0.4.6",
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.6",
24
- "@revideo/ui": "0.4.6",
25
- "typescript": "^5.2.2",
26
- "vite": "^4.5"
27
- }
28
- }
29
-
30
-
31
-
@@ -1,144 +0,0 @@
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
- }
@@ -1,28 +0,0 @@
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/wasm",
25
- "options": {}
26
- }
27
- }
28
- }
@@ -1,7 +0,0 @@
1
- import {makeProject} from '@revideo/core';
2
-
3
- import example from './scenes/example?scene';
4
-
5
- export default makeProject({
6
- scenes: [example],
7
- });
@@ -1,16 +0,0 @@
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();
@@ -1 +0,0 @@
1
- /// <reference types="@revideo/core/project" />
@@ -1,5 +0,0 @@
1
- {
2
- "version": 0,
3
- "timeEvents": [],
4
- "seed": 307431050
5
- }
@@ -1,29 +0,0 @@
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
- });
@@ -1,10 +0,0 @@
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
- }
@@ -1,9 +0,0 @@
1
- import {defineConfig} from 'vite';
2
- import motionCanvas from '@revideo/vite-plugin';
3
-
4
-
5
- export default defineConfig({
6
- plugins: [
7
- motionCanvas(),
8
- ]
9
- });
@@ -1,84 +0,0 @@
1
- # Create Short Videos from Reddit Posts 🪄
2
-
3
- This project uses [Revideo](https://github.com/redotvideo/revideo) to automatically generate short videos from Reddit Post urls. Here is a (low resolution) example generated from this [Reddit Post](https://www.reddit.com/r/careeradvice/comments/1bn9do3/how_do_i_leave_a_job_i_hate_but_its_comfortable/):
4
-
5
-
6
-
7
- https://github.com/user-attachments/assets/485df630-7862-4862-affe-7f510279f1fa
8
-
9
-
10
- <br/>
11
-
12
-
13
-
14
- <br/>
15
-
16
-
17
- Two code files do most of the heavy lifting here:
18
-
19
- - `src/render.ts` is a node process that fetches the contents of the provided Reddit post url, generates a voiceover using [ElevenLabs](https://elevenlabs.io/), gets timestamps for the voiceover and organizes all of this metadata in `./metadata.json`. Finally, it calls `renderVideo` to render & export the project using a headless browser.
20
- - `src/scenes/example.tsx` defines the animation flow and audio of our video
21
- <br/>
22
- <br/>
23
-
24
-
25
-
26
- ## Getting Started
27
-
28
- First, you should clone the repository and install all dependencies:
29
-
30
- ```bash
31
- git clone https://github.com/redotvideo/examples.git
32
- cd reddit-post-video
33
- npm install
34
- ```
35
-
36
- You can now look at the example project using the editor:
37
-
38
- ```bash
39
- npm start
40
- ```
41
- <br/>
42
- <br/>
43
-
44
-
45
- ## Create your own video
46
-
47
- To create your own video, you should first set up API keys for ElevenLabs (to generate voiceovers) and Deepgram (to get timestamps for subtitles):
48
-
49
- ```
50
- export ELEVEN_API_KEY=<your-elevenlabs-key>
51
- export DEEPGRAM_API_KEY=<your-deepgram-key>
52
- ```
53
-
54
-
55
- You now have two options: You can either directly render and export a video, or first generate its metadata and voiceover and preview in the editor before exporting.
56
-
57
- #### Option 1: Generate metadata, preview and render in editor
58
-
59
- To generate metadata, run the following command:
60
-
61
- ```bash
62
- tsc && node dist/render.js --post <reddit-post-url> --onlyMetadata
63
- ```
64
-
65
- This saves the voiceover to `./output/audio.wav` and your metadata to `./metadata.json`. You can now preview your video by starting the editor, and export your video by clicking the "Render" button in the browser:
66
-
67
- ```bash
68
- npm start
69
- ```
70
-
71
- #### Option 2: Render video through function call
72
-
73
- If you don't want to preview, but render directly, you can omit the `--onlyMetadata` flag. This will call the `renderVideo` function:
74
-
75
- ```bash
76
- tsc && node dist/src/renderScript.js --post <reddit-post-url>
77
- ```
78
-
79
- #### Additional parameters
80
-
81
- You can modify the text color and voice of your video using the following flags:
82
-
83
- - `--voice Daniel`: default is Sarah
84
- - `--textcolor yellow`: default is red