@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,25 +0,0 @@
1
- {
2
- "name": "3d-testing",
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.5.4",
13
- "@revideo/core": "^0.5.4",
14
- "@revideo/renderer": "^0.5.4",
15
- "@revideo/ffmpeg": "^0.5.4",
16
- "three": "^0.167.1"
17
- },
18
- "devDependencies": {
19
- "@revideo/ui": "^0.5.4",
20
- "@revideo/vite-plugin": "^0.5.4",
21
- "@types/three": "^0.167.1",
22
- "typescript": "^5.2.2",
23
- "vite": "^4.0.0"
24
- }
25
- }
@@ -1,166 +0,0 @@
1
- import { Layout, LayoutProps } from "@revideo/2d/lib/components";
2
- import { computed, initial, signal } from "@revideo/2d/lib/decorators";
3
- import { Vector2 } from "@revideo/core/lib/types";
4
- import {
5
- Camera,
6
- Color,
7
- OrthographicCamera,
8
- PerspectiveCamera,
9
- Scene,
10
- WebGLRenderer,
11
- } from "three";
12
- import { SimpleSignal } from "@revideo/core/lib/signals";
13
-
14
- interface RenderCallback {
15
- (renderer: WebGLRenderer, scene: Scene, camera: Camera): void;
16
- }
17
-
18
- export interface ThreeProps extends LayoutProps {
19
- scene?: Scene;
20
- camera?: Camera;
21
- quality?: number;
22
- background?: string;
23
- zoom?: number;
24
- onRender?: RenderCallback;
25
- }
26
-
27
- export class Three extends Layout {
28
- @initial(1)
29
- @signal()
30
- public declare readonly quality: SimpleSignal<number, this>;
31
-
32
- @initial(null)
33
- @signal()
34
- public declare readonly camera: SimpleSignal<Camera | null, this>;
35
-
36
- @initial(null)
37
- @signal()
38
- public declare readonly scene: SimpleSignal<Scene | null, this>;
39
-
40
- @initial(null)
41
- @signal()
42
- public declare readonly background: SimpleSignal<string | null, this>;
43
-
44
- @initial(1)
45
- @signal()
46
- public declare readonly zoom: SimpleSignal<number, this>;
47
-
48
- private readonly renderer: WebGLRenderer;
49
- private readonly context: WebGLRenderingContext;
50
- private readonly pixelSample = new Uint8Array(4);
51
- public onRender: RenderCallback;
52
-
53
- public constructor({ onRender, ...props }: ThreeProps) {
54
- super(props);
55
- this.renderer = borrow();
56
- this.context = this.renderer.getContext();
57
- this.onRender =
58
- onRender ?? ((renderer, scene, camera) => renderer.render(scene, camera));
59
- }
60
-
61
- protected override async draw(context: CanvasRenderingContext2D) {
62
- const { width, height } = this.computedSize();
63
- const quality = this.quality();
64
- const scene = this.configuredScene();
65
- const camera = this.configuredCamera();
66
- const renderer = this.configuredRenderer();
67
-
68
- if (width > 0 && height > 0) {
69
- this.onRender(renderer, scene, camera);
70
- context.imageSmoothingEnabled = false;
71
- context.drawImage(
72
- renderer.domElement,
73
- 0,
74
- 0,
75
- quality * width,
76
- quality * height,
77
- width / -2,
78
- height / -2,
79
- width,
80
- height,
81
- );
82
- }
83
-
84
- super.draw(context);
85
- }
86
-
87
- @computed()
88
- private configuredRenderer(): WebGLRenderer {
89
- const size = this.computedSize();
90
- const quality = this.quality();
91
-
92
- this.renderer.setSize(size.width * quality, size.height * quality);
93
- return this.renderer;
94
- }
95
-
96
- @computed()
97
- private configuredCamera(): Camera {
98
- const size = this.computedSize();
99
- const camera = this.camera();
100
- const ratio = size.width / size.height;
101
- const scale = this.zoom() / 2;
102
- if (camera instanceof OrthographicCamera) {
103
- camera.left = -ratio * scale;
104
- camera.right = ratio * scale;
105
- camera.bottom = -scale;
106
- camera.top = scale;
107
- camera.updateProjectionMatrix();
108
- } else if (camera instanceof PerspectiveCamera) {
109
- camera.aspect = ratio;
110
- camera.updateProjectionMatrix();
111
- }
112
-
113
- return camera;
114
- }
115
-
116
- @computed()
117
- private configuredScene(): Scene | null {
118
- const scene = this.scene();
119
- const background = this.background();
120
- if (scene) {
121
- scene.background = background ? new Color(background) : null;
122
- }
123
- return scene;
124
- }
125
-
126
- public getColorAtPoint(position: Vector2) {
127
- const relativePosition = position.scale(this.quality());
128
- this.context.readPixels(
129
- relativePosition.x,
130
- relativePosition.y,
131
- 1,
132
- 1,
133
- this.context.RGBA,
134
- this.context.UNSIGNED_BYTE,
135
- this.pixelSample,
136
- );
137
- const color = new Color();
138
- color.setRGB(
139
- this.pixelSample[0] / 255,
140
- this.pixelSample[1] / 255,
141
- this.pixelSample[2] / 255,
142
- );
143
- return color;
144
- }
145
-
146
- public dispose() {
147
- dispose(this.renderer);
148
- }
149
- }
150
-
151
- const pool: WebGLRenderer[] = [];
152
- function borrow() {
153
- if (pool.length) {
154
- return pool.pop();
155
- } else {
156
- return new WebGLRenderer({
157
- canvas: document.createElement("canvas"),
158
- // antialias: true,
159
- alpha: true,
160
- stencil: true,
161
- });
162
- }
163
- }
164
- function dispose(renderer: WebGLRenderer) {
165
- pool.push(renderer);
166
- }
@@ -1 +0,0 @@
1
- @import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Lexend:wght@600&family=Noto+Color+Emoji&display=swap");
@@ -1,31 +0,0 @@
1
- {
2
- "version": 0,
3
- "shared": {
4
- "background": "rgb(255,255,255)",
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": 60,
21
- "resolutionScale": 1,
22
- "colorSpace": "srgb",
23
- "exporter": {
24
- "name": "@revideo/core/wasm",
25
- "options": {
26
- "fastStart": true,
27
- "includeAudio": true
28
- }
29
- }
30
- }
31
- }
@@ -1,8 +0,0 @@
1
- import { makeProject } from "@revideo/core";
2
-
3
- import basic3D from "./scenes/basic3D?scene";
4
- import "./global.css";
5
-
6
- export default makeProject({
7
- scenes: [basic3D],
8
- });
@@ -1,15 +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
- settings: {logProgress: true},
10
- });
11
-
12
- console.log(`Rendered video to ${file}`);
13
- }
14
-
15
- render();
@@ -1 +0,0 @@
1
- /// <reference types="@revideo/core/project" />
@@ -1,5 +0,0 @@
1
- {
2
- "version": 0,
3
- "timeEvents": [],
4
- "seed": 3264532001
5
- }
@@ -1,89 +0,0 @@
1
- import {Three} from '../components/Three';
2
- import { makeScene2D, Txt } from '@revideo/2d';
3
- import { tween, waitFor, delay, createRef, all, chain, linear} from '@revideo/core';
4
- import * as THREE from 'three';
5
-
6
-
7
- function setup3DScene() {
8
- const threeScene = new THREE.Scene();
9
-
10
- const geometry = new THREE.BoxGeometry( 0.2, 0.2, 0.2 );
11
- const material = new THREE.MeshNormalMaterial();
12
-
13
- const mesh = new THREE.Mesh( geometry, material );
14
- threeScene.add(mesh);
15
-
16
- const camera = new THREE.PerspectiveCamera(90);
17
-
18
- mesh.position.set(0, 0, 0);
19
- mesh.scale.set(1, 1, 1);
20
- camera.rotation.set(0, 0, 0);
21
- camera.position.set(0, 0, 0.5);
22
-
23
- return {threeScene, camera, mesh};
24
- }
25
-
26
- export default makeScene2D(function* (view) {
27
- const {threeScene, camera, mesh} = setup3DScene();
28
-
29
- const threeRef = createRef<Three>();
30
- const txtRef = createRef<Txt>();
31
-
32
- yield view.add(
33
- <>
34
- <Three
35
- width={1920}
36
- height={1080}
37
- camera={camera}
38
- scene={threeScene}
39
- opacity={0}
40
- fontWeight={900}
41
- ref={threeRef}
42
- />
43
- </>
44
- );
45
-
46
- yield view.add(<Txt fill={"black"} fontFamily={"Lexend"} ref={txtRef} fontSize={80}/>)
47
-
48
- yield* chain(
49
- txtRef().text("Revideo x 3D with Three.js", 1),
50
- all(
51
- txtRef().position.y(-300, 1),
52
- delay(0.5, threeRef().opacity(1, 0.5))
53
- )
54
- )
55
-
56
- yield tween(4, value => {
57
- mesh.rotation.set(
58
- 0,
59
- linear(value, 0, 2*3.14),
60
- 0
61
- );
62
- });
63
-
64
- yield* waitFor(2);
65
-
66
- yield addRotatingCube(threeRef().scene(), 0.1, 0.3, -0.2, 0.1);
67
- yield addRotatingCube(threeRef().scene(), 0.1, -0.3, -0.2, 0.1);
68
-
69
- yield* waitFor(2);
70
- });
71
-
72
- function* addRotatingCube(threeScene: THREE.Scene, size: number, x: number, y: number, z: number){
73
- const geometry = new THREE.BoxGeometry( size, size, size );
74
- const material = new THREE.MeshNormalMaterial();
75
- const mesh = new THREE.Mesh( geometry, material );
76
-
77
- mesh.position.set(x, y, z);
78
- mesh.scale.set(1, 1, 1);
79
-
80
- threeScene.add(mesh);
81
-
82
- yield* tween(4, value => {
83
- mesh.rotation.set(
84
- 0,
85
- linear(value, 0, 2*3.14),
86
- 0
87
- );
88
- });
89
- }
@@ -1,9 +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
- }
9
- }
@@ -1,6 +0,0 @@
1
- import { defineConfig } from "vite";
2
- import motionCanvas from "@revideo/vite-plugin";
3
-
4
- export default defineConfig({
5
- plugins: [motionCanvas()],
6
- });
@@ -1,65 +0,0 @@
1
- # Youtube Shorts with Subtitles
2
-
3
- This example project lets you generate Youtube Shorts with AI.
4
-
5
- https://github.com/redotvideo/revideo-examples/assets/122226645/98bc202d-6b7d-4b8a-9a7f-c41533d8c760
6
-
7
-
8
- ## Project Structure
9
-
10
- There are two main files you should look at in this project:
11
-
12
- - `src/scenes/example.tsx`: This file defines the flow of the video and its animations. It accepts variables such as a list of background images, a voiceover audio file, as well as a list of words along with their timestamps to display the video captions.
13
- - `src/render.ts`: This is a node.js process which generates assets (script, voiceover, etc.) using AI services and consequently calls `renderVideo()` to export a video that uses the assets it generated as an input.
14
-
15
-
16
- ## Getting Started
17
-
18
- After cloning the repo, go inside the project folder and install all dependencies using `npm install`. Now you can preview an example video.
19
-
20
- ### Preview Video
21
-
22
- You can start the editor using the following command:
23
-
24
- ```
25
- npm start
26
- ```
27
-
28
- The editor preview uses example assets (images and voiceovers) specified in `src/metadata.json` which are located in an AWS bucket we own. This way, you can test the template without having to generate your own assets.
29
-
30
- When previewing the video in the editor, your browser will first have to load the assets, which can cause a bit of a lag - you might have to wait a few seconds. This will not be a problem when exporting the video though - when building a web app, this can also easily be avoided by preloading the assets (see our [docs](https://docs.re.video/preview-with-player/#preloading-assets) for info on this).
31
-
32
-
33
- ## Rendering your own Videos
34
- If you want to render your own videos using ChatGPT, Dall-E and Elevenlabs voiceovers, you need to create a `.env` file in the project root directory and add the following environment variables:
35
-
36
- ```
37
- OPENAI_API_KEY=<your-openai-key>
38
- ELEVEN_API_KEY=<your-elevenlabs-key>
39
- DEEPGRAM_API_KEY=<your-deepgram-key>
40
- ```
41
-
42
- Now you can run `npm run render`, which will execute `src/render.ts`.
43
-
44
-
45
- ## Animating Subtitles
46
-
47
- This project has a heavy emphasis on animating subtitles. It provides the option to stream subtitles word-by-word, to highlight the currently spoken word, or to let words fade into the image as they appear. To play around with the different caption animation options, you can modify the `textSettings` object in `src/scenes/example.tsx`:
48
-
49
- ```ts
50
- const textSettings: captionSettings = {
51
- fontSize: 80,
52
- numSimultaneousWords: 4, // how many words are shown at most simultaneously
53
- textColor: "white",
54
- fontWeight: 800,
55
- fontFamily: "Mulish",
56
- stream: false, // if true, words appear one by one
57
- textAlign: "center",
58
- textBoxWidthInPercent: 70,
59
- fadeInAnimation: true,
60
- currentWordColor: "cyan",
61
- currentWordBackgroundColor: "red", // adds a colored box to the word currently spoken
62
- shadowColor: "black",
63
- shadowBlur: 30
64
- }
65
- ```