@revideo/create 0.5.11-alpha.1102 → 0.5.11-alpha.1104

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 (185) hide show
  1. package/examples/README.md +43 -0
  2. package/examples/avatar-with-background/package.json +27 -0
  3. package/examples/avatar-with-background/src/project.meta +31 -0
  4. package/examples/avatar-with-background/src/project.ts +6 -0
  5. package/examples/avatar-with-background/src/render.ts +14 -0
  6. package/examples/avatar-with-background/src/revideo.d.ts +1 -0
  7. package/examples/avatar-with-background/src/scenes/example.meta +5 -0
  8. package/examples/avatar-with-background/src/scenes/example.tsx +28 -0
  9. package/examples/avatar-with-background/tsconfig.json +9 -0
  10. package/examples/avatar-with-background/vite.config.ts +8 -0
  11. package/examples/default/README.md +19 -0
  12. package/examples/default/package.json +20 -0
  13. package/examples/default/src/project.tsx +56 -0
  14. package/examples/default/src/render.ts +15 -0
  15. package/examples/default/tsconfig.json +10 -0
  16. package/examples/github-stars-celebration/package-lock.json +3833 -0
  17. package/examples/github-stars-celebration/package.json +24 -0
  18. package/examples/github-stars-celebration/src/global.css +1 -0
  19. package/examples/github-stars-celebration/src/project.meta +28 -0
  20. package/examples/github-stars-celebration/src/project.ts +8 -0
  21. package/examples/github-stars-celebration/src/render.ts +15 -0
  22. package/examples/github-stars-celebration/src/revideo.d.ts +1 -0
  23. package/examples/github-stars-celebration/src/scenes/example.meta +5 -0
  24. package/examples/github-stars-celebration/src/scenes/example.tsx +51 -0
  25. package/examples/github-stars-celebration/tsconfig.json +9 -0
  26. package/examples/github-stars-celebration/vite.config.ts +8 -0
  27. package/examples/google-cloud-run-parallelized/README.md +127 -0
  28. package/examples/google-cloud-run-parallelized/render-orchestrator/Dockerfile +56 -0
  29. package/examples/google-cloud-run-parallelized/render-orchestrator/package.json +22 -0
  30. package/examples/google-cloud-run-parallelized/render-orchestrator/src/index.ts +72 -0
  31. package/examples/google-cloud-run-parallelized/render-orchestrator/src/revideo.d.ts +1 -0
  32. package/examples/google-cloud-run-parallelized/render-orchestrator/tsconfig.json +10 -0
  33. package/examples/google-cloud-run-parallelized/render-worker/.gcloudignore +17 -0
  34. package/examples/google-cloud-run-parallelized/render-worker/.puppeteerrc.cjs +9 -0
  35. package/examples/google-cloud-run-parallelized/render-worker/package.json +30 -0
  36. package/examples/google-cloud-run-parallelized/render-worker/src/index.ts +45 -0
  37. package/examples/google-cloud-run-parallelized/render-worker/src/project.meta +31 -0
  38. package/examples/google-cloud-run-parallelized/render-worker/src/project.ts +6 -0
  39. package/examples/google-cloud-run-parallelized/render-worker/src/render.ts +14 -0
  40. package/examples/google-cloud-run-parallelized/render-worker/src/revideo.d.ts +1 -0
  41. package/examples/google-cloud-run-parallelized/render-worker/src/scenes/example.tsx +30 -0
  42. package/examples/google-cloud-run-parallelized/render-worker/tsconfig.json +13 -0
  43. package/examples/google-cloud-run-parallelized/render-worker/vite.config.ts +9 -0
  44. package/examples/logo.svg +6 -0
  45. package/examples/logo_dark.svg +6 -0
  46. package/examples/marketing-templates/README.md +10 -0
  47. package/examples/marketing-templates/marketing-template/package.json +24 -0
  48. package/examples/marketing-templates/marketing-template/src/globals.css +0 -0
  49. package/examples/marketing-templates/marketing-template/src/project.meta +28 -0
  50. package/examples/marketing-templates/marketing-template/src/project.ts +9 -0
  51. package/examples/marketing-templates/marketing-template/src/render.ts +15 -0
  52. package/examples/marketing-templates/marketing-template/src/revideo.d.ts +1 -0
  53. package/examples/marketing-templates/marketing-template/src/scenes/example.meta +5 -0
  54. package/examples/marketing-templates/marketing-template/src/scenes/example.tsx +67 -0
  55. package/examples/marketing-templates/marketing-template/tsconfig.json +9 -0
  56. package/examples/marketing-templates/marketing-template/vite.config.ts +9 -0
  57. package/examples/marketing-templates/multiple-videos-in-one/package.json +24 -0
  58. package/examples/marketing-templates/multiple-videos-in-one/src/project.meta +28 -0
  59. package/examples/marketing-templates/multiple-videos-in-one/src/project.ts +9 -0
  60. package/examples/marketing-templates/multiple-videos-in-one/src/render.ts +15 -0
  61. package/examples/marketing-templates/multiple-videos-in-one/src/revideo.d.ts +1 -0
  62. package/examples/marketing-templates/multiple-videos-in-one/src/scenes/example.meta +5 -0
  63. package/examples/marketing-templates/multiple-videos-in-one/src/scenes/example.tsx +122 -0
  64. package/examples/marketing-templates/multiple-videos-in-one/tsconfig.json +9 -0
  65. package/examples/marketing-templates/multiple-videos-in-one/vite.config.ts +9 -0
  66. package/examples/minimal-drag-drop/README.md +29 -0
  67. package/examples/minimal-drag-drop/next/app/api/render/route.ts +22 -0
  68. package/examples/minimal-drag-drop/next/app/globals.css +3 -0
  69. package/examples/minimal-drag-drop/next/app/layout.tsx +25 -0
  70. package/examples/minimal-drag-drop/next/app/page.tsx +277 -0
  71. package/examples/minimal-drag-drop/next/next-env.d.ts +5 -0
  72. package/examples/minimal-drag-drop/next/next.config.mjs +4 -0
  73. package/examples/minimal-drag-drop/next/package-lock.json +5577 -0
  74. package/examples/minimal-drag-drop/next/package.json +35 -0
  75. package/examples/minimal-drag-drop/next/postcss.config.js +6 -0
  76. package/examples/minimal-drag-drop/next/public/favicon.ico +0 -0
  77. package/examples/minimal-drag-drop/next/public/next.svg +1 -0
  78. package/examples/minimal-drag-drop/next/public/vercel.svg +1 -0
  79. package/examples/minimal-drag-drop/next/tailwind.config.ts +30 -0
  80. package/examples/minimal-drag-drop/next/tsconfig.json +26 -0
  81. package/examples/minimal-drag-drop/next/utils/parse.ts +35 -0
  82. package/examples/minimal-drag-drop/revideo/package-lock.json +3771 -0
  83. package/examples/minimal-drag-drop/revideo/package.json +24 -0
  84. package/examples/minimal-drag-drop/revideo/src/global.css +1 -0
  85. package/examples/minimal-drag-drop/revideo/src/project.meta +28 -0
  86. package/examples/minimal-drag-drop/revideo/src/project.ts +9 -0
  87. package/examples/minimal-drag-drop/revideo/src/render.ts +15 -0
  88. package/examples/minimal-drag-drop/revideo/src/revideo.d.ts +1 -0
  89. package/examples/minimal-drag-drop/revideo/src/scenes/example.meta +5 -0
  90. package/examples/minimal-drag-drop/revideo/src/scenes/example.tsx +44 -0
  91. package/examples/minimal-drag-drop/revideo/tsconfig.json +9 -0
  92. package/examples/minimal-drag-drop/revideo/vite.config.ts +6 -0
  93. package/examples/parallelized-aws-lambda/.dockerignore +3 -0
  94. package/examples/parallelized-aws-lambda/Dockerfile +21 -0
  95. package/examples/parallelized-aws-lambda/Dockerfile.base +64 -0
  96. package/examples/parallelized-aws-lambda/README.md +197 -0
  97. package/examples/parallelized-aws-lambda/revideo-project/.puppeteerrc.cjs +9 -0
  98. package/examples/parallelized-aws-lambda/revideo-project/package-lock.json +4133 -0
  99. package/examples/parallelized-aws-lambda/revideo-project/package.json +28 -0
  100. package/examples/parallelized-aws-lambda/revideo-project/src/lambda.ts +157 -0
  101. package/examples/parallelized-aws-lambda/revideo-project/src/project.meta +28 -0
  102. package/examples/parallelized-aws-lambda/revideo-project/src/project.ts +7 -0
  103. package/examples/parallelized-aws-lambda/revideo-project/src/render.ts +17 -0
  104. package/examples/parallelized-aws-lambda/revideo-project/src/revideo.d.ts +1 -0
  105. package/examples/parallelized-aws-lambda/revideo-project/src/scenes/example.meta +5 -0
  106. package/examples/parallelized-aws-lambda/revideo-project/src/scenes/example.tsx +30 -0
  107. package/examples/parallelized-aws-lambda/revideo-project/tsconfig.json +10 -0
  108. package/examples/parallelized-aws-lambda/revideo-project/vite.config.ts +9 -0
  109. package/examples/reddit-post-video/README.md +84 -0
  110. package/examples/reddit-post-video/package-lock.json +2941 -0
  111. package/examples/reddit-post-video/package.json +27 -0
  112. package/examples/reddit-post-video/src/global.css +1 -0
  113. package/examples/reddit-post-video/src/metadata.json +576 -0
  114. package/examples/reddit-post-video/src/project.meta +31 -0
  115. package/examples/reddit-post-video/src/project.ts +9 -0
  116. package/examples/reddit-post-video/src/render.ts +157 -0
  117. package/examples/reddit-post-video/src/revideo.d.ts +1 -0
  118. package/examples/reddit-post-video/src/scenes/example.meta +5 -0
  119. package/examples/reddit-post-video/src/scenes/example.tsx +74 -0
  120. package/examples/reddit-post-video/tsconfig.json +9 -0
  121. package/examples/reddit-post-video/vite.config.ts +6 -0
  122. package/examples/rive-explanation-video/README.md +9 -0
  123. package/examples/rive-explanation-video/package.json +25 -0
  124. package/examples/rive-explanation-video/src/global.css +1 -0
  125. package/examples/rive-explanation-video/src/project.meta +31 -0
  126. package/examples/rive-explanation-video/src/project.ts +8 -0
  127. package/examples/rive-explanation-video/src/render.ts +15 -0
  128. package/examples/rive-explanation-video/src/revideo.d.ts +1 -0
  129. package/examples/rive-explanation-video/src/scenes/example.meta +5 -0
  130. package/examples/rive-explanation-video/src/scenes/example.tsx +218 -0
  131. package/examples/rive-explanation-video/tsconfig.json +9 -0
  132. package/examples/rive-explanation-video/vite.config.ts +8 -0
  133. package/examples/saas-template/.prettierrc +9 -0
  134. package/examples/saas-template/README.md +26 -0
  135. package/examples/saas-template/app/actions.tsx +114 -0
  136. package/examples/saas-template/app/api/render/route.ts +23 -0
  137. package/examples/saas-template/app/globals.css +3 -0
  138. package/examples/saas-template/app/layout.tsx +25 -0
  139. package/examples/saas-template/app/page.tsx +204 -0
  140. package/examples/saas-template/next.config.mjs +4 -0
  141. package/examples/saas-template/package.json +40 -0
  142. package/examples/saas-template/postcss.config.js +6 -0
  143. package/examples/saas-template/revideo/global.css +1 -0
  144. package/examples/saas-template/revideo/project.ts +9 -0
  145. package/examples/saas-template/revideo/scene.tsx +179 -0
  146. package/examples/saas-template/tailwind.config.ts +30 -0
  147. package/examples/saas-template/tsconfig.json +27 -0
  148. package/examples/saas-template/utils/parse.ts +35 -0
  149. package/examples/stitching-videos/README.md +7 -0
  150. package/examples/stitching-videos/package.json +23 -0
  151. package/examples/stitching-videos/src/project.meta +28 -0
  152. package/examples/stitching-videos/src/project.ts +20 -0
  153. package/examples/stitching-videos/src/render.ts +27 -0
  154. package/examples/stitching-videos/src/revideo.d.ts +1 -0
  155. package/examples/stitching-videos/src/scenes/example.tsx +30 -0
  156. package/examples/stitching-videos/tsconfig.json +9 -0
  157. package/examples/stitching-videos/vite.config.ts +8 -0
  158. package/examples/three-js-example/README.md +8 -0
  159. package/examples/three-js-example/package-lock.json +2753 -0
  160. package/examples/three-js-example/package.json +25 -0
  161. package/examples/three-js-example/src/components/Three.ts +166 -0
  162. package/examples/three-js-example/src/global.css +1 -0
  163. package/examples/three-js-example/src/project.meta +31 -0
  164. package/examples/three-js-example/src/project.ts +8 -0
  165. package/examples/three-js-example/src/render.ts +15 -0
  166. package/examples/three-js-example/src/revideo.d.ts +1 -0
  167. package/examples/three-js-example/src/scenes/basic3D.meta +5 -0
  168. package/examples/three-js-example/src/scenes/basic3D.tsx +89 -0
  169. package/examples/three-js-example/tsconfig.json +9 -0
  170. package/examples/three-js-example/vite.config.ts +6 -0
  171. package/examples/youtube-shorts/README.md +65 -0
  172. package/examples/youtube-shorts/package-lock.json +3881 -0
  173. package/examples/youtube-shorts/package.json +30 -0
  174. package/examples/youtube-shorts/src/get-assets.ts +34 -0
  175. package/examples/youtube-shorts/src/global.css +3 -0
  176. package/examples/youtube-shorts/src/metadata.json +635 -0
  177. package/examples/youtube-shorts/src/project.meta +28 -0
  178. package/examples/youtube-shorts/src/project.ts +9 -0
  179. package/examples/youtube-shorts/src/render.ts +12 -0
  180. package/examples/youtube-shorts/src/revideo.d.ts +1 -0
  181. package/examples/youtube-shorts/src/scenes/example.tsx +224 -0
  182. package/examples/youtube-shorts/src/utils.ts +123 -0
  183. package/examples/youtube-shorts/tsconfig.json +9 -0
  184. package/examples/youtube-shorts/vite.config.ts +8 -0
  185. package/package.json +9 -9
@@ -0,0 +1,157 @@
1
+ import { createClient } from "@deepgram/sdk";
2
+ import { renderVideo } from "@revideo/renderer";
3
+ import axios from "axios";
4
+ import * as fs from "fs";
5
+ import yargs from "yargs";
6
+ import { hideBin } from "yargs/helpers";
7
+
8
+ export interface Word {
9
+ punctuated_word: string;
10
+ start: number;
11
+ end: number;
12
+ }
13
+
14
+ export interface MetaData {
15
+ audioFile: string;
16
+ text: Word[];
17
+ textColor: string;
18
+ }
19
+
20
+ export const deepgramClient = createClient(
21
+ process.env.DEEPGRAM_API_KEY,
22
+ );
23
+
24
+ async function getPostText(postUrl: string) {
25
+ const response = await axios.get(postUrl + ".json");
26
+ const responseData = response.data;
27
+
28
+ return (
29
+ responseData[0].data.children[0].data.title +
30
+ ".\n" +
31
+ responseData[0].data.children[0].data.selftext
32
+ );
33
+ }
34
+
35
+ async function voiceNameToId(voiceName: string): Promise<string | null> {
36
+ const url = "https://api.elevenlabs.io/v1/voices";
37
+ const headers = {
38
+ "Content-Type": "application/json",
39
+ "xi-api-key": process.env.ELEVEN_API_KEY,
40
+ };
41
+
42
+ try {
43
+ const response = await axios.get(url, { headers });
44
+ const voices = response.data.voices;
45
+ const voice = voices.find((v: any) => v.name === voiceName);
46
+ return voice ? voice.voice_id : null;
47
+ } catch (error) {
48
+ console.error("Error fetching voices:", error);
49
+ throw error;
50
+ }
51
+ }
52
+
53
+ async function textToSpeech(post: string, voiceId: string, modelId: string) {
54
+ const url = `https://api.elevenlabs.io/v1/text-to-speech/${voiceId}`;
55
+ const headers = {
56
+ "Content-Type": "application/json",
57
+ "xi-api-key": process.env.ELEVEN_API_KEY,
58
+ };
59
+ const data = {
60
+ model_id: modelId,
61
+ text: post,
62
+ };
63
+
64
+ try {
65
+ const response = await axios.post(url, data, {
66
+ headers,
67
+ responseType: "arraybuffer",
68
+ });
69
+ return response.data;
70
+ } catch (error) {
71
+ console.error("Error making text-to-speech request:", error);
72
+ throw error;
73
+ }
74
+ }
75
+
76
+ export async function speechToText(filePath: string) {
77
+ const { result } = await deepgramClient.listen.prerecorded.transcribeFile(
78
+ fs.readFileSync(filePath),
79
+ {
80
+ model: "nova-2",
81
+ smart_format: true,
82
+ },
83
+ );
84
+
85
+ return result;
86
+ }
87
+
88
+ async function main() {
89
+ const argv = await yargs(hideBin(process.argv)).options({
90
+ voice: {
91
+ alias: "v",
92
+ describe: "The name of the eleven labs voice to use",
93
+ type: "string",
94
+ default: "Sarah",
95
+ },
96
+ post: {
97
+ alias: "p",
98
+ describe: "The Reddit post URL",
99
+ type: "string",
100
+ default:
101
+ "https://www.reddit.com/r/TrueOffMyChest/comments/1bllfgk/i_hate_having_old_parents/",
102
+ },
103
+ textcolor: {
104
+ alias: "c",
105
+ describe: "color of the text",
106
+ type: "string",
107
+ default: "red",
108
+ },
109
+ onlyMetadata: {
110
+ alias: "m",
111
+ describe: "only save metadata and do not render the video",
112
+ type: "boolean",
113
+ default: false,
114
+ },
115
+ }).argv;
116
+
117
+ const url = argv.post;
118
+ const voiceName = argv.voice;
119
+ const textColor = argv.textcolor;
120
+
121
+ const post = await getPostText(url);
122
+ const voiceId = await voiceNameToId(voiceName);
123
+ const ttsRes = await textToSpeech(post, voiceId, "eleven_multilingual_v2");
124
+
125
+ await fs.writeFileSync("./output/audio.wav", ttsRes);
126
+
127
+ const transcriptionResponse = await speechToText("./output/audio.wav");
128
+ const words =
129
+ transcriptionResponse.results.channels[0].alternatives[0].words.map(
130
+ (word: any) => ({
131
+ punctuated_word: word.punctuated_word,
132
+ start: word.start,
133
+ end: word.end,
134
+ }),
135
+ );
136
+
137
+ const metaData: MetaData = {
138
+ audioFile: "./output/audio.wav",
139
+ text: words,
140
+ textColor: textColor,
141
+ };
142
+
143
+ fs.writeFileSync("./metadata.json", JSON.stringify(metaData, null, 2));
144
+ console.log("saved metadata to ./metadata.json");
145
+
146
+ if (!argv.onlyMetadata) {
147
+ const file = renderVideo({
148
+ projectFile: "./vite.config.ts",
149
+ variables: { data: metaData },
150
+ settings: { logProgress: true }
151
+ });
152
+
153
+ console.log(`rendered video to ${file}`)
154
+ }
155
+ }
156
+
157
+ main();
@@ -0,0 +1 @@
1
+ /// <reference types="@revideo/core/project" />
@@ -0,0 +1,5 @@
1
+ {
2
+ "version": 0,
3
+ "timeEvents": [],
4
+ "seed": 3377806303
5
+ }
@@ -0,0 +1,74 @@
1
+ import { Audio, Txt, Video, View2D, makeScene2D } from "@revideo/2d";
2
+ import { createRef, useScene, waitFor } from "@revideo/core";
3
+ import { MetaData, Word } from "../render";
4
+
5
+ export default makeScene2D(function* (view) {
6
+ const videoRef = createRef<Video>();
7
+ const data: MetaData = useScene().variables.get("data", {
8
+ audioFile: "hi",
9
+ text: [],
10
+ textColor: "red",
11
+ })();
12
+
13
+ yield view.add(
14
+ <>
15
+ <Video
16
+ ref={videoRef}
17
+ volume={0}
18
+ src={"https://revideo-example-assets.s3.amazonaws.com/minecraft.mp4"}
19
+ play={true}
20
+ size={"100%"}
21
+ />
22
+ <Audio src={data.audioFile} play={true} />
23
+ </>,
24
+ );
25
+
26
+ let waitBefore = data.text[0].start;
27
+
28
+ for (let i = 0; i < data.text.length; i++) {
29
+ const currentClip = data.text[i];
30
+ const nextClipStart =
31
+ i < data.text.length - 1 ? data.text[i + 1].start : null;
32
+ const isLastClip = i === data.text.length - 1;
33
+ const waitAfter = isLastClip ? 1 : 0;
34
+ yield* displayTextClip(
35
+ currentClip,
36
+ waitBefore,
37
+ waitAfter,
38
+ view,
39
+ data.textColor,
40
+ );
41
+ waitBefore = nextClipStart !== null ? nextClipStart - currentClip.end : 0;
42
+ }
43
+ });
44
+
45
+ function* displayTextClip(
46
+ textClip: Word,
47
+ waitBefore: number,
48
+ waitAfter: number,
49
+ view: View2D,
50
+ textColor: string,
51
+ ) {
52
+ const textRef = createRef<Txt>();
53
+ yield* waitFor(waitBefore);
54
+ view.add(
55
+ <Txt
56
+ fontSize={100}
57
+ fontWeight={800}
58
+ ref={textRef}
59
+ fontFamily={"Raleway"}
60
+ textWrap={true}
61
+ textAlign={"center"}
62
+ fill={textColor}
63
+ width={"70%"}
64
+ lineWidth={2}
65
+ shadowOffset={10}
66
+ shadowBlur={30}
67
+ shadowColor={"black"}
68
+ >
69
+ {textClip.punctuated_word}
70
+ </Txt>,
71
+ );
72
+ yield* waitFor(textClip.end - textClip.start + waitAfter);
73
+ textRef().remove();
74
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "@revideo/2d/tsconfig.project.json",
3
+ "include": ["src"],
4
+ "compilerOptions": {
5
+ "noEmit": false,
6
+ "outDir": "dist",
7
+ "module": "CommonJS"
8
+ }
9
+ }
@@ -0,0 +1,6 @@
1
+ import { defineConfig } from "vite";
2
+ import motionCanvas from "@revideo/vite-plugin";
3
+
4
+ export default defineConfig({
5
+ plugins: [motionCanvas()],
6
+ });
@@ -0,0 +1,9 @@
1
+ # Rive Explanation Video
2
+
3
+ This is the code for a small video showing how you can use Rive animations in Revideo using the `<Rive />` component.
4
+
5
+
6
+ https://github.com/user-attachments/assets/0302a3c2-65e4-4392-8b6c-90c4a505d23d
7
+
8
+
9
+
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "rive-explanation-docs",
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
+ "@lezer/javascript": "^1.4.17",
13
+ "@revideo/2d": "0.5.10",
14
+ "@revideo/core": "0.5.10",
15
+ "@revideo/ffmpeg": "0.5.10",
16
+ "@revideo/renderer": "0.5.10",
17
+ "@revideo/vite-plugin": "0.5.10"
18
+ },
19
+ "devDependencies": {
20
+ "@revideo/cli": "0.5.10",
21
+ "@revideo/ui": "0.5.10",
22
+ "typescript": "5.5.4",
23
+ "vite": "^4.5"
24
+ }
25
+ }
@@ -0,0 +1 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Lexend:wght@100..900&display=swap');
@@ -0,0 +1,31 @@
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": 30,
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
+ }
@@ -0,0 +1,8 @@
1
+ import {makeProject} from '@revideo/core';
2
+ import example from './scenes/example?scene';
3
+
4
+ import './global.css'
5
+
6
+ export default makeProject({
7
+ scenes: [example],
8
+ });
@@ -0,0 +1,15 @@
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();
@@ -0,0 +1 @@
1
+ /// <reference types="@revideo/core/project" />
@@ -0,0 +1,5 @@
1
+ {
2
+ "version": 0,
3
+ "timeEvents": [],
4
+ "seed": 4079423384
5
+ }
@@ -0,0 +1,218 @@
1
+ import { waitFor, createRef, all, Reference, chain } from '@revideo/core';
2
+ import {
3
+ Img,
4
+ makeScene2D,
5
+ Rive,
6
+ Txt,
7
+ Layout,
8
+ LezerHighlighter, Code, word, lines, Rect,
9
+ View2D
10
+ } from '@revideo/2d';
11
+ import {parser} from '@lezer/javascript';
12
+ import {tags} from '@lezer/highlight';
13
+ import {HighlightStyle} from '@codemirror/language';
14
+
15
+ const MyStyle = HighlightStyle.define([
16
+ {
17
+ tag: tags.comment,
18
+ color: '#8E908C',
19
+ },
20
+ {
21
+ tag: [tags.variableName, tags.self, tags.propertyName, tags.attributeName, tags.regexp],
22
+ color: '#C82829',
23
+ },
24
+ {
25
+ tag: [tags.number, tags.bool, tags.null],
26
+ color: '#F5871F',
27
+ },
28
+ {
29
+ tag: [tags.className, tags.typeName, tags.definition(tags.typeName)],
30
+ color: '#C99E00',
31
+ },
32
+ {
33
+ tag: [tags.string, tags.special(tags.brace)],
34
+ color: '#718C00',
35
+ },
36
+ {
37
+ tag: tags.operator,
38
+ color: '#3E999F',
39
+ },
40
+ {
41
+ tag: [tags.definition(tags.propertyName), tags.function(tags.variableName)],
42
+ color: '#4271AE',
43
+ },
44
+ {
45
+ tag: tags.keyword,
46
+ color: '#8959A8',
47
+ },
48
+ {
49
+ tag: tags.derefOperator,
50
+ color: '#4D4D4C',
51
+ },
52
+ {
53
+ tag: tags.bracket,
54
+ color: "grey"
55
+ },
56
+ {
57
+ tag: tags.separator,
58
+ color: "grey"
59
+ },
60
+ {
61
+ tag: tags.punctuation,
62
+ color: "grey"
63
+ },
64
+ {
65
+ tag: tags.typeOperator,
66
+ color: "grey"
67
+ }
68
+ ]);
69
+
70
+ Code.defaultHighlighter = new LezerHighlighter(
71
+ parser.configure({
72
+ dialect: 'jsx ts',
73
+ }),
74
+ MyStyle
75
+ );
76
+
77
+
78
+ export default makeScene2D(function* (view) {
79
+
80
+ const textRef = createRef<Txt>();
81
+ view.add(
82
+ <Txt fontFamily={"Lexend"} fontSize={100} fontWeight={600} ref={textRef}/>
83
+ );
84
+
85
+ yield* all(textRef().text("Rive Animations in Revideo", 1.25))
86
+ yield* all(
87
+ textRef().scale(0.75, 0.75),
88
+ textRef().position.y(-400, 0.75)
89
+ )
90
+ yield* waitFor(0.25);
91
+
92
+ const codeRef= createRef<Code>();
93
+ const videoBoxRef = createRef<Layout>();
94
+ view.add(<Layout opacity={0} position={[550, 100]} size={[600, 600]} ref={videoBoxRef} />);
95
+ view.add(
96
+ <Code
97
+ ref={codeRef}
98
+ textAlign={"left"}
99
+ fontSize={35}
100
+ x={-400}
101
+ y={100}
102
+ opacity={0}
103
+ fontFamily={'JetBrains Mono, monospace'}
104
+ code={
105
+ `export default makeScene2D(function* (view){
106
+ yield view.add(
107
+ <Img
108
+ src={"/sf.png"}
109
+ size={["100%", "100%"]}
110
+ />
111
+ );
112
+
113
+ });
114
+ `
115
+ }/>);
116
+
117
+ videoBoxRef().add(
118
+ <Img
119
+ src={"https://revideo-example-assets.s3.amazonaws.com/sf.png"}
120
+ size={[videoBoxRef().width(), videoBoxRef().height()]}
121
+ />
122
+ );
123
+
124
+ yield* all(
125
+ codeRef().opacity(1, 0.75),
126
+ videoBoxRef().opacity(1, 0.75)
127
+ );
128
+ yield* waitFor(0.5);
129
+
130
+ const riveRef = createRef<Rive>();
131
+ videoBoxRef().add(
132
+ <Rive
133
+ src={"https://revideo-example-assets.s3.amazonaws.com/emoji.riv"}
134
+ animationId={1}
135
+ size={[600, 600]}
136
+ opacity={0}
137
+ ref={riveRef}
138
+ />
139
+ );
140
+ yield* all(codeRef().code.insert([8, 0],
141
+ `\n yield view.add(
142
+ <Rive
143
+ src={"/emoji.riv"}
144
+ animationId={1}
145
+ size={[600, 600]}
146
+ />
147
+ );\n`, 1),
148
+ riveRef().opacity(1, 1)
149
+ );
150
+
151
+ yield* waitFor(1);
152
+
153
+ yield* codeRef().selection(lines(11, 13), 1),
154
+ yield replaceRive(videoBoxRef, riveRef)
155
+ yield* all(
156
+ codeRef().code.replace(word(11, 17, 5), "dog", 2),
157
+ codeRef().code.replace(word(13, 17, 3), "900", 2),
158
+ );
159
+
160
+ yield* codeRef().selection(lines(0, 17), 1);
161
+
162
+ yield* waitFor(1);
163
+ yield* all(
164
+ codeRef().opacity(0, 1),
165
+ videoBoxRef().opacity(0, 1),
166
+ textRef().opacity(0, 1)
167
+ );
168
+
169
+ yield* waitFor(0.5);
170
+ yield* logoAnimation(view);
171
+ });
172
+
173
+ function* replaceRive(box: Reference<Layout>, rive: Reference<Rive>){
174
+ yield* rive().opacity(0, 1);
175
+ rive().remove();
176
+
177
+ const riveRef = createRef<Rive>();
178
+ box().add(
179
+ <Rive
180
+ src={"https://revideo-example-assets.s3.amazonaws.com/dog.riv"}
181
+ size={[1000, 600]}
182
+ opacity={0}
183
+ animationId={1}
184
+ ref={riveRef}
185
+ />
186
+ );
187
+
188
+ yield* riveRef().opacity(1, 1);
189
+ yield* waitFor(5);
190
+ }
191
+
192
+ function* logoAnimation(view: View2D){
193
+ const block1 = createRef<Rect>()
194
+ const block2 = createRef<Rect>()
195
+ const block3 = createRef<Rect>()
196
+ const blocks = createRef<Layout>();
197
+ const logoText = createRef<Txt>();
198
+ view.add(
199
+ <>
200
+ <Layout ref={blocks} x={-600}>
201
+ <Rect fill={"#151515"} height={60} y={-80} x={-620} width={180} radius={9.3} ref={block1} />
202
+ <Rect fill={"#151515"} height={60} width={180} x={-540} radius={9.3} ref={block2} />
203
+ <Rect fill={"#151515"} height={60} width={180} x={-460} y={80} radius={9.3} ref={block3} />
204
+ <Txt ref={logoText} fontFamily={"Lexend"} x={53+757.5} y={20} fontSize={300} letterSpacing={-4} fontWeight={700} text={""}/>
205
+ </Layout>
206
+ </>
207
+ );
208
+
209
+ yield* all(
210
+ block1().position.x(-80, 0.5),
211
+ chain(waitFor(0.1), block2().position.x(0, 0.4)),
212
+ chain(waitFor(0.2), block3().position.x(80, 0.3)),
213
+ )
214
+
215
+ yield* logoText().text("revideo", 1);
216
+
217
+ yield* waitFor(1);
218
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "@revideo/2d/tsconfig.project.json",
3
+ "include": ["src"],
4
+ "compilerOptions": {
5
+ "noEmit": false,
6
+ "outDir": "dist",
7
+ "module": "CommonJS"
8
+ }
9
+ }
@@ -0,0 +1,8 @@
1
+ import {defineConfig} from 'vite';
2
+ import motionCanvas from '@revideo/vite-plugin';
3
+
4
+ export default defineConfig({
5
+ plugins: [
6
+ motionCanvas(),
7
+ ],
8
+ });
@@ -0,0 +1,9 @@
1
+ {
2
+ "useTabs": true,
3
+ "semi": true,
4
+ "singleQuote": true,
5
+ "quoteProps": "as-needed",
6
+ "trailingComma": "all",
7
+ "bracketSpacing": false,
8
+ "printWidth": 100
9
+ }
@@ -0,0 +1,26 @@
1
+ # Revideo Next.js Template
2
+
3
+ This is the [Revideo](https://github.com/redotvideo/revideo) NextJS starter
4
+ project bootstrapped with `npm init @revideo@latest`.
5
+
6
+ ## Getting Started
7
+
8
+ First, install the dependencies:
9
+
10
+ ```bash
11
+ npm install
12
+ ```
13
+
14
+ This project comes with the following commands:
15
+
16
+ - `npm run dev` - Start the Next.js development server
17
+ - `npm run build` - Build the Next.js project
18
+ - `npm run start` - Start the Next.js production server
19
+ - `npm run revideo:serve` - Start the Revideo render api (required for the render button on the Next.js page to work)
20
+ - `npm run revideo:editor` - Start the Revideo editor, which you can use to inspect and preview your Revideo code
21
+
22
+ ## Building with Revideo
23
+
24
+ If you want to see what's possible with Revideo, check out the other templates
25
+ in the [Revideo Examples repository](https://github.com/redotvideo/examples), or
26
+ the [Revideo documentation](https://docs.re.video).