diff --git a/bun.lock b/bun.lock index 8aab685e408..ca8e5ff3599 100644 --- a/bun.lock +++ b/bun.lock @@ -1610,6 +1610,42 @@ "typescript": "5.8.2", }, }, + "packages/template-prompt-to-video": { + "name": "template-ai-video", + "version": "1.0.0", + "dependencies": { + "@remotion/animation-utils": "workspace:*", + "@remotion/cli": "workspace:*", + "@remotion/google-fonts": "workspace:*", + "@remotion/layout-utils": "workspace:*", + "@remotion/media": "workspace:*", + "@remotion/zod-types": "workspace:*", + "react": "19.0.0", + "react-dom": "19.0.0", + "remotion": "workspace:*", + "zod": "3.22.3", + }, + "devDependencies": { + "@elevenlabs/elevenlabs-js": "^2.20.0", + "@remotion/eslint-config-flat": "workspace:*", + "@types/prompts": "^2.4.9", + "@types/react": "19.0.0", + "@types/uuid": "^11.0.0", + "@types/web": "0.0.166", + "@types/yargs": "^17.0.33", + "chalk": "^5.6.2", + "dotenv": "^17.2.3", + "eslint": "9.19.0", + "ora": "^9.0.0", + "prettier": "3.6.0", + "prompts": "^2.4.2", + "tsx": "^4.20.6", + "typescript": "5.8.2", + "uuid": "^13.0.0", + "yargs": "^18.0.0", + "zod-to-json-schema": "^3.24.6", + }, + }, "packages/template-react-router": { "name": "template-react-router", "dependencies": { @@ -2610,6 +2646,8 @@ "@docusaurus/utils-validation": ["@docusaurus/utils-validation@3.9.1", "", { "dependencies": { "@docusaurus/logger": "3.9.1", "@docusaurus/utils": "3.9.1", "@docusaurus/utils-common": "3.9.1", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "tslib": "^2.6.0" } }, "sha512-5bzab5si3E1udrlZuVGR17857Lfwe8iFPoy5AvMP9PXqDfoyIKT7gDQgAmxdRDMurgHaJlyhXEHHdzDKkOxxZQ=="], + "@elevenlabs/elevenlabs-js": ["@elevenlabs/elevenlabs-js@2.20.0", "", { "dependencies": { "command-exists": "^1.2.9", "node-fetch": "^2.7.0" } }, "sha512-xe3nHHU+P0rNl2a2KKy4iCCLtUFsTksBleYU4afszfJq2jDYvaRAFQ7NCc+/tOduJof4eEm/KQIWM7Y+85+M6Q=="], + "@emnapi/core": ["@emnapi/core@1.5.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg=="], "@emnapi/runtime": ["@emnapi/runtime@1.5.0", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ=="], @@ -3820,7 +3858,7 @@ "@types/prompt": ["@types/prompt@1.1.2", "", { "dependencies": { "@types/node": "20.12.14", "@types/revalidator": "0.3.8" } }, "sha512-Zc9YzOvjAWxxGY7qo0Q6yINMVVspAa4p68UCzucWMU+GaPujpjwbOwzI38s7Jq01k0GztzLxXlRiFcZf/aeIWA=="], - "@types/prompts": ["@types/prompts@2.4.1", "", { "dependencies": { "@types/node": "20.12.14" } }, "sha512-1Mqzhzi9W5KlooNE4o0JwSXGUDeQXKldbGn9NO4tpxwZbHXYd+WcKpCksG2lbhH7U9I9LigfsdVsP2QAY0lNPA=="], + "@types/prompts": ["@types/prompts@2.4.9", "", { "dependencies": { "@types/node": "*", "kleur": "^3.0.3" } }, "sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA=="], "@types/qs": ["@types/qs@6.9.7", "", {}, "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="], @@ -3894,7 +3932,7 @@ "@types/ws": ["@types/ws@8.5.10", "", { "dependencies": { "@types/node": "20.12.14" } }, "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A=="], - "@types/yargs": ["@types/yargs@17.0.32", "", { "dependencies": { "@types/yargs-parser": "21.0.0" } }, "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog=="], + "@types/yargs": ["@types/yargs@17.0.33", "", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA=="], "@types/yargs-parser": ["@types/yargs-parser@21.0.0", "", {}, "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA=="], @@ -4306,9 +4344,9 @@ "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], - "cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], + "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], - "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + "cli-spinners": ["cli-spinners@3.3.0", "", {}, "sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ=="], "cli-table3": ["cli-table3@0.6.5", "", { "dependencies": { "string-width": "4.2.3" }, "optionalDependencies": { "@colors/colors": "1.5.0" } }, "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ=="], @@ -4316,7 +4354,7 @@ "clipboard": ["clipboard@2.0.11", "", { "dependencies": { "good-listener": "^1.2.2", "select": "^1.1.2", "tiny-emitter": "^2.0.0" } }, "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw=="], - "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "4.2.3", "strip-ansi": "6.0.1", "wrap-ansi": "7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], "clone": ["clone@2.1.2", "", {}, "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="], @@ -4352,6 +4390,8 @@ "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + "command-exists": ["command-exists@1.2.9", "", {}, "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="], + "commander": ["commander@5.1.0", "", {}, "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg=="], "common-ancestor-path": ["common-ancestor-path@1.0.1", "", {}, "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="], @@ -4888,7 +4928,7 @@ "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], - "get-east-asian-width": ["get-east-asian-width@1.2.0", "", {}, "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA=="], + "get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="], "get-func-name": ["get-func-name@2.0.2", "", {}, "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ=="], @@ -5164,7 +5204,7 @@ "is-installed-globally": ["is-installed-globally@0.4.0", "", { "dependencies": { "global-dirs": "3.0.0", "is-path-inside": "3.0.3" } }, "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ=="], - "is-interactive": ["is-interactive@1.0.0", "", {}, "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="], + "is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="], "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], @@ -5208,7 +5248,7 @@ "is-typedarray": ["is-typedarray@1.0.0", "", {}, "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="], - "is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], + "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], @@ -5370,7 +5410,7 @@ "lodash.zip": ["lodash.zip@4.2.0", "", {}, "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg=="], - "log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "4.1.2", "is-unicode-supported": "0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], + "log-symbols": ["log-symbols@7.0.1", "", { "dependencies": { "is-unicode-supported": "^2.0.0", "yoctocolors": "^2.1.1" } }, "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg=="], "loglevel": ["loglevel@1.9.2", "", {}, "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg=="], @@ -5568,6 +5608,8 @@ "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], "mini-css-extract-plugin": ["mini-css-extract-plugin@2.9.2", "", { "dependencies": { "schema-utils": "4.2.0", "tapable": "2.2.1" }, "peerDependencies": { "webpack": "5.96.1" } }, "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w=="], @@ -5724,7 +5766,7 @@ "optionator": ["optionator@0.9.3", "", { "dependencies": { "@aashutoshrathi/word-wrap": "1.2.6", "deep-is": "0.1.4", "fast-levenshtein": "2.0.6", "levn": "0.4.1", "prelude-ls": "1.2.1", "type-check": "0.4.0" } }, "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg=="], - "ora": ["ora@5.4.1", "", { "dependencies": { "bl": "4.1.0", "chalk": "4.1.2", "cli-cursor": "3.1.0", "cli-spinners": "2.9.2", "is-interactive": "1.0.0", "is-unicode-supported": "0.1.0", "log-symbols": "4.1.0", "strip-ansi": "6.0.1", "wcwidth": "1.0.1" } }, "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ=="], + "ora": ["ora@9.0.0", "", { "dependencies": { "chalk": "^5.6.2", "cli-cursor": "^5.0.0", "cli-spinners": "^3.2.0", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.1.0", "log-symbols": "^7.0.1", "stdin-discarder": "^0.2.2", "string-width": "^8.1.0", "strip-ansi": "^7.1.2" } }, "sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A=="], "outdent": ["outdent@0.8.0", "", {}, "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A=="], @@ -6212,7 +6254,7 @@ "resq": ["resq@1.11.0", "", { "dependencies": { "fast-deep-equal": "2.0.1" } }, "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw=="], - "restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "5.1.2", "signal-exit": "3.0.7" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], + "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], "restructure": ["restructure@3.0.2", "", {}, "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw=="], @@ -6418,6 +6460,8 @@ "std-env": ["std-env@3.7.0", "", {}, "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg=="], + "stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="], + "stop-iteration-iterator": ["stop-iteration-iterator@1.0.0", "", { "dependencies": { "internal-slot": "1.1.0" } }, "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ=="], "stream-browserify": ["stream-browserify@3.0.0", "", { "dependencies": { "inherits": "2.0.4", "readable-stream": "3.6.0" } }, "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA=="], @@ -6432,7 +6476,7 @@ "string-hash": ["string-hash@1.1.3", "", {}, "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A=="], - "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "10.4.0", "get-east-asian-width": "1.2.0", "strip-ansi": "7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "string-width": ["string-width@8.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.0", "strip-ansi": "^7.1.0" } }, "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg=="], "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "8.0.0", "is-fullwidth-code-point": "3.0.0", "strip-ansi": "6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -6518,6 +6562,8 @@ "teeny-request": ["teeny-request@9.0.0", "", { "dependencies": { "http-proxy-agent": "5.0.0", "https-proxy-agent": "5.0.1", "node-fetch": "2.6.9", "stream-events": "1.0.5", "uuid": "9.0.1" } }, "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g=="], + "template-ai-video": ["template-ai-video@workspace:packages/template-prompt-to-video"], + "template-audiogram": ["template-audiogram@workspace:packages/template-audiogram"], "template-code-hike": ["template-code-hike@workspace:packages/template-code-hike"], @@ -6652,7 +6698,7 @@ "tsutils": ["tsutils@3.21.0", "", { "dependencies": { "tslib": "1.14.1" }, "peerDependencies": { "typescript": "5.8.2" } }, "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA=="], - "tsx": ["tsx@4.19.3", "", { "dependencies": { "esbuild": "0.25.0", "get-tsconfig": "4.8.1" }, "optionalDependencies": { "fsevents": "2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ=="], + "tsx": ["tsx@4.20.6", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg=="], "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], @@ -6944,7 +6990,7 @@ "yaml": ["yaml@2.2.2", "", {}, "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA=="], - "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "8.0.1", "escalade": "3.2.0", "get-caller-file": "2.0.5", "require-directory": "2.1.1", "string-width": "4.2.3", "y18n": "5.0.8", "yargs-parser": "21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "yargs": ["yargs@18.0.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^7.2.0", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg=="], "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], @@ -7440,6 +7486,8 @@ "@docusaurus/utils-validation/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "@elevenlabs/elevenlabs-js/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "5.0.0" } }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "@emnapi/core/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "@emnapi/runtime/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], @@ -7538,6 +7586,8 @@ "@google-cloud/text-to-speech/google-gax": ["google-gax@3.6.1", "", { "dependencies": { "@grpc/grpc-js": "1.8.22", "@grpc/proto-loader": "0.7.13", "@types/long": "4.0.2", "@types/rimraf": "3.0.2", "abort-controller": "3.0.0", "duplexify": "4.1.3", "fast-text-encoding": "1.0.6", "google-auth-library": "8.7.0", "is-stream-ended": "0.1.4", "node-fetch": "2.6.9", "object-hash": "3.0.0", "proto3-json-serializer": "1.1.1", "protobufjs": "7.2.4", "protobufjs-cli": "1.1.1", "retry-request": "5.0.2" }, "bin": { "compileProtos": "build/tools/compileProtos.js", "minifyProtoJson": "build/tools/minify.js" } }, "sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w=="], + "@grpc/proto-loader/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "8.0.1", "escalade": "3.2.0", "get-caller-file": "2.0.5", "require-directory": "2.1.1", "string-width": "4.2.3", "y18n": "5.0.8", "yargs-parser": "21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "@happy-dom/global-registrator/happy-dom": ["happy-dom@14.5.1", "", { "dependencies": { "entities": "4.5.0", "webidl-conversions": "7.0.0", "whatwg-mimetype": "3.0.0" } }, "sha512-nCmCszZnhHHvcY3gDqLNZrU71QzCT1sI2OUQy2YSn3omMYWe+QHSTO1PfS/1r6fds6zt6GI7L1tRIxo7RgC8lg=="], "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="], @@ -7586,6 +7636,8 @@ "@puppeteer/browsers/tar-fs": ["tar-fs@3.1.0", "", { "dependencies": { "pump": "3.0.0", "tar-stream": "3.1.7" }, "optionalDependencies": { "bare-fs": "4.2.1", "bare-path": "3.0.0" } }, "sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w=="], + "@puppeteer/browsers/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "8.0.1", "escalade": "3.2.0", "get-caller-file": "2.0.5", "require-directory": "2.1.1", "string-width": "4.2.3", "y18n": "5.0.8", "yargs-parser": "21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "@radix-ui/react-arrow/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "19.0.0", "@types/react-dom": "19.0.0", "react": "19.0.0", "react-dom": "19.0.0" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], "@radix-ui/react-collection/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "19.0.0", "react": "19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], @@ -7756,6 +7808,8 @@ "@remix-run/dev/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@remix-run/dev/ora": ["ora@5.4.1", "", { "dependencies": { "bl": "4.1.0", "chalk": "4.1.2", "cli-cursor": "3.1.0", "cli-spinners": "2.9.2", "is-interactive": "1.0.0", "is-unicode-supported": "0.1.0", "log-symbols": "4.1.0", "strip-ansi": "6.0.1", "wcwidth": "1.0.1" } }, "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ=="], + "@remix-run/dev/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "@remix-run/dev/postcss": ["postcss@8.5.1", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ=="], @@ -7960,6 +8014,8 @@ "@types/nlcst/@types/unist": ["@types/unist@2.0.6", "", {}, "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="], + "@types/prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + "@types/request/form-data": ["form-data@2.5.1", "", { "dependencies": { "asynckit": "0.4.0", "combined-stream": "1.0.8", "mime-types": "2.1.34" } }, "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA=="], "@types/serve-index/@types/express": ["@types/express@5.0.1", "", { "dependencies": { "@types/body-parser": "1.19.1", "@types/express-serve-static-core": "5.0.4", "@types/serve-static": "1.13.10" } }, "sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ=="], @@ -8088,6 +8144,8 @@ "boxen/chalk": ["chalk@5.3.0", "", {}, "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w=="], + "boxen/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "10.4.0", "get-east-asian-width": "1.2.0", "strip-ansi": "7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "browserify-zlib/pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="], "cacache/fs-minipass": ["fs-minipass@3.0.3", "", { "dependencies": { "minipass": "7.1.2" } }, "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw=="], @@ -8110,9 +8168,9 @@ "cli-table3/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "8.0.0", "is-fullwidth-code-point": "3.0.0", "strip-ansi": "6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "8.0.0", "is-fullwidth-code-point": "3.0.0", "strip-ansi": "6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "cliui/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "10.4.0", "get-east-asian-width": "1.2.0", "strip-ansi": "7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "4.3.0", "string-width": "4.2.3", "strip-ansi": "6.0.1" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "cliui/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], "cloudevents/ajv": ["ajv@8.11.0", "", { "dependencies": { "fast-deep-equal": "3.1.3", "json-schema-traverse": "1.0.0", "require-from-string": "2.0.2", "uri-js": "4.4.1" } }, "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg=="], @@ -8614,6 +8672,10 @@ "openai/@types/node": ["@types/node@18.14.6", "", {}, "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA=="], + "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "ora/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + "p-locate/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], "p-queue/eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], @@ -8812,6 +8874,10 @@ "resq/fast-deep-equal": ["fast-deep-equal@2.0.1", "", {}, "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w=="], + "restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], + + "restore-cursor/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "rimraf/glob": ["glob@7.2.0", "", { "dependencies": { "fs.realpath": "1.0.0", "inflight": "1.0.6", "inherits": "2.0.4", "minimatch": "3.1.2", "once": "1.4.0", "path-is-absolute": "1.0.1" } }, "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q=="], "router/debug": ["debug@4.4.1", "", { "dependencies": { "ms": "2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], @@ -8868,9 +8934,7 @@ "ssri/minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], - "string-width/emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], - - "string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + "string-width/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -8900,6 +8964,14 @@ "teeny-request/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], + "template-ai-video/@types/uuid": ["@types/uuid@11.0.0", "", { "dependencies": { "uuid": "*" } }, "sha512-HVyk8nj2m+jcFRNazzqyVKiZezyhDKrGUA3jlEcg/nZ6Ms+qHwocba1Y/AaVaznJTAM9xpdFSh+ptbNrhOGvZA=="], + + "template-ai-video/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "template-ai-video/dotenv": ["dotenv@17.2.3", "", {}, "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w=="], + + "template-ai-video/uuid": ["uuid@13.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w=="], + "template-next-app/@eslint/js": ["@eslint/js@9.38.0", "", {}, "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A=="], "template-next-app/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.46.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.46.0", "@typescript-eslint/type-utils": "8.46.0", "@typescript-eslint/utils": "8.46.0", "@typescript-eslint/visitor-keys": "8.46.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.46.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA=="], @@ -8962,16 +9034,22 @@ "template-render-server/express": ["express@5.1.0", "", { "dependencies": { "accepts": "2.0.0", "body-parser": "2.2.0", "content-disposition": "1.0.0", "content-type": "1.0.5", "cookie": "0.7.2", "cookie-signature": "1.2.1", "debug": "4.4.0", "encodeurl": "2.0.0", "escape-html": "1.0.3", "etag": "1.8.1", "finalhandler": "2.1.0", "fresh": "2.0.0", "http-errors": "2.0.0", "merge-descriptors": "2.0.0", "mime-types": "3.0.1", "on-finished": "2.4.1", "once": "1.4.0", "parseurl": "1.3.3", "proxy-addr": "2.0.7", "qs": "6.14.0", "range-parser": "1.2.1", "router": "2.2.0", "send": "1.2.0", "serve-static": "2.2.0", "statuses": "2.0.1", "type-is": "2.0.1", "vary": "1.1.2" } }, "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA=="], + "template-render-server/tsx": ["tsx@4.19.3", "", { "dependencies": { "esbuild": "0.25.0", "get-tsconfig": "4.8.1" }, "optionalDependencies": { "fsevents": "2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ=="], + "template-still/@types/express": ["@types/express@4.17.13", "", { "dependencies": { "@types/body-parser": "1.19.1", "@types/express-serve-static-core": "4.17.35", "@types/qs": "6.9.7", "@types/serve-static": "1.13.10" } }, "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA=="], "template-still/dotenv": ["dotenv@16.0.3", "", {}, "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="], "template-still/p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + "template-tts-azure/tsx": ["tsx@4.19.3", "", { "dependencies": { "esbuild": "0.25.0", "get-tsconfig": "4.8.1" }, "optionalDependencies": { "fsevents": "2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ=="], + "template-tts-google/@types/express": ["@types/express@4.17.13", "", { "dependencies": { "@types/body-parser": "1.19.1", "@types/express-serve-static-core": "4.17.35", "@types/qs": "6.9.7", "@types/serve-static": "1.13.10" } }, "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA=="], "template-tts-google/dotenv": ["dotenv@16.0.3", "", {}, "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="], + "template-tts-google/tsx": ["tsx@4.19.3", "", { "dependencies": { "esbuild": "0.25.0", "get-tsconfig": "4.8.1" }, "optionalDependencies": { "fsevents": "2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ=="], + "terser/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], @@ -9108,8 +9186,12 @@ "whatwg-url/webidl-conversions": ["webidl-conversions@4.0.2", "", {}, "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="], + "widest-line/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "10.4.0", "get-east-asian-width": "1.2.0", "strip-ansi": "7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], + "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "10.4.0", "get-east-asian-width": "1.2.0", "strip-ansi": "7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "wrap-ansi/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "8.0.0", "is-fullwidth-code-point": "3.0.0", "strip-ansi": "6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -9118,7 +9200,9 @@ "xmlhttprequest-ts/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], - "yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "8.0.0", "is-fullwidth-code-point": "3.0.0", "strip-ansi": "6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "yargs/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "10.4.0", "get-east-asian-width": "1.2.0", "strip-ansi": "7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + + "yargs/yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], "yauzl/buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], @@ -9618,6 +9702,8 @@ "@docusaurus/utils/p-queue/p-timeout": ["p-timeout@3.2.0", "", { "dependencies": { "p-finally": "1.0.0" } }, "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg=="], + "@elevenlabs/elevenlabs-js/node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "0.0.3", "webidl-conversions": "3.0.1" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + "@eslint/eslintrc/espree/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], "@firebase/auth-compat/node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "0.0.3", "webidl-conversions": "3.0.1" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], @@ -9666,6 +9752,10 @@ "@google-cloud/text-to-speech/google-gax/retry-request": ["retry-request@5.0.2", "", { "dependencies": { "debug": "4.4.1", "extend": "3.0.2" } }, "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ=="], + "@grpc/proto-loader/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "4.2.3", "strip-ansi": "6.0.1", "wrap-ansi": "7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "@grpc/proto-loader/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "8.0.0", "is-fullwidth-code-point": "3.0.0", "strip-ansi": "6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.0.1", "", {}, "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="], "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], @@ -9704,6 +9794,10 @@ "@puppeteer/browsers/tar-fs/tar-stream": ["tar-stream@3.1.7", "", { "dependencies": { "b4a": "1.6.6", "fast-fifo": "1.3.2", "streamx": "2.20.0" } }, "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ=="], + "@puppeteer/browsers/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "4.2.3", "strip-ansi": "6.0.1", "wrap-ansi": "7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "@puppeteer/browsers/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "8.0.0", "is-fullwidth-code-point": "3.0.0", "strip-ansi": "6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "@radix-ui/react-dialog/@radix-ui/react-presence/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "19.0.0", "react": "19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], "@radix-ui/react-dialog/@radix-ui/react-use-controllable-state/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "19.0.0", "react": "19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], @@ -10194,11 +10288,23 @@ "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], + "boxen/string-width/emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], + + "boxen/string-width/get-east-asian-width": ["get-east-asian-width@1.2.0", "", {}, "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA=="], + + "boxen/string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + "chokidar/anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "cli-table3/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "cliui/string-width/emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], + + "cliui/string-width/get-east-asian-width": ["get-east-asian-width@1.2.0", "", {}, "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA=="], + + "cliui/string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + + "cliui/strip-ansi/ansi-regex": ["ansi-regex@6.0.1", "", {}, "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="], "cloudevents/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], @@ -10566,6 +10672,8 @@ "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + "ora/strip-ansi/ansi-regex": ["ansi-regex@6.0.1", "", {}, "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="], + "p-locate/p-limit/yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], "peek-stream/duplexify/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "1.0.3", "inherits": "2.0.4", "isarray": "1.0.0", "process-nextick-args": "2.0.1", "safe-buffer": "5.1.2", "string_decoder": "1.1.1", "util-deprecate": "1.0.2" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], @@ -10966,11 +11074,25 @@ "webpackbar/wrap-ansi/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "8.0.0", "is-fullwidth-code-point": "3.0.0", "strip-ansi": "6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "widest-line/string-width/emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], + + "widest-line/string-width/get-east-asian-width": ["get-east-asian-width@1.2.0", "", {}, "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA=="], + + "widest-line/string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], + "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "wrap-ansi/string-width/emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], + + "wrap-ansi/string-width/get-east-asian-width": ["get-east-asian-width@1.2.0", "", {}, "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA=="], + "wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.0.1", "", {}, "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="], - "yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "yargs/string-width/emoji-regex": ["emoji-regex@10.4.0", "", {}, "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw=="], + + "yargs/string-width/get-east-asian-width": ["get-east-asian-width@1.2.0", "", {}, "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA=="], + + "yargs/string-width/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], "@astrojs/react/@vitejs/plugin-react/@babel/core/@babel/parser": ["@babel/parser@7.26.2", "", { "dependencies": { "@babel/types": "7.26.0" }, "bin": "./bin/babel-parser.js" }, "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ=="], @@ -11740,6 +11862,10 @@ "@docusaurus/utils/@docusaurus/types/@mdx-js/mdx/unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "3.0.2" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], + "@elevenlabs/elevenlabs-js/node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + + "@elevenlabs/elevenlabs-js/node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + "@firebase/auth-compat/node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], "@firebase/auth-compat/node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], @@ -11748,6 +11874,8 @@ "@firebase/auth/node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + "@firebase/firestore/@grpc/grpc-js/@grpc/proto-loader/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "8.0.1", "escalade": "3.2.0", "get-caller-file": "2.0.5", "require-directory": "2.1.1", "string-width": "4.2.3", "y18n": "5.0.8", "yargs-parser": "21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "@firebase/firestore/@grpc/proto-loader/yargs/cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "4.2.3", "strip-ansi": "6.0.1", "wrap-ansi": "7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="], "@firebase/firestore/@grpc/proto-loader/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "8.0.0", "is-fullwidth-code-point": "3.0.0", "strip-ansi": "6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -11772,6 +11900,10 @@ "@google-cloud/text-to-speech/google-gax/retry-request/debug": ["debug@4.4.1", "", { "dependencies": { "ms": "2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="], + "@grpc/proto-loader/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "4.3.0", "string-width": "4.2.3", "strip-ansi": "6.0.1" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "@grpc/proto-loader/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "@mdx-js/mdx/remark-parse/@types/mdast/@types/unist": ["@types/unist@2.0.6", "", {}, "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="], "@mdx-js/mdx/remark-parse/mdast-util-from-markdown/@types/unist": ["@types/unist@2.0.6", "", {}, "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="], @@ -11800,6 +11932,10 @@ "@puppeteer/browsers/tar-fs/bare-path/bare-os": ["bare-os@3.6.2", "", {}, "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A=="], + "@puppeteer/browsers/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "4.3.0", "string-width": "4.2.3", "strip-ansi": "6.0.1" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "@puppeteer/browsers/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "@radix-ui/react-menu/@radix-ui/react-roving-focus/@radix-ui/react-use-controllable-state/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "19.0.0", "react": "19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], "@react-router/dev/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.21.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ=="], @@ -12348,6 +12484,10 @@ "@vitest/mocker/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.21.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw=="], + "boxen/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.0.1", "", {}, "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="], + + "cliui/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.0.1", "", {}, "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="], + "copy-webpack-plugin/schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "cross-fetch/node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], @@ -12864,6 +13004,10 @@ "webpackbar/wrap-ansi/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "widest-line/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.0.1", "", {}, "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="], + + "yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.0.1", "", {}, "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA=="], + "@babel/plugin-transform-modules-commonjs/@babel/helper-module-transforms/@babel/core/@babel/helper-compilation-targets/@babel/compat-data": ["@babel/compat-data@7.27.5", "", {}, "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg=="], "@babel/plugin-transform-modules-commonjs/@babel/helper-module-transforms/@babel/core/@babel/helper-compilation-targets/@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], @@ -13242,6 +13386,10 @@ "@docusaurus/utils/@docusaurus/types/@mdx-js/mdx/unist-util-stringify-position/@types/unist": ["@types/unist@3.0.2", "", {}, "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="], + "@firebase/firestore/@grpc/grpc-js/@grpc/proto-loader/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "4.2.3", "strip-ansi": "6.0.1", "wrap-ansi": "7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "@firebase/firestore/@grpc/grpc-js/@grpc/proto-loader/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "8.0.0", "is-fullwidth-code-point": "3.0.0", "strip-ansi": "6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "@firebase/firestore/@grpc/proto-loader/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "4.3.0", "string-width": "4.2.3", "strip-ansi": "6.0.1" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], "@firebase/firestore/@grpc/proto-loader/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -13828,6 +13976,10 @@ "@docusaurus/utils/@docusaurus/types/@mdx-js/mdx/remark-mdx/micromark-extension-mdxjs/micromark-extension-mdxjs-esm": ["micromark-extension-mdxjs-esm@3.0.0", "", { "dependencies": { "@types/estree": "1.0.7", "devlop": "1.1.0", "micromark-core-commonmark": "2.0.1", "micromark-util-character": "2.1.0", "micromark-util-events-to-acorn": "2.0.2", "micromark-util-symbol": "2.0.0", "micromark-util-types": "2.0.0", "unist-util-position-from-estree": "2.0.0", "vfile-message": "4.0.2" } }, "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A=="], + "@firebase/firestore/@grpc/grpc-js/@grpc/proto-loader/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "4.3.0", "string-width": "4.2.3", "strip-ansi": "6.0.1" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "@firebase/firestore/@grpc/grpc-js/@grpc/proto-loader/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "@mdx-js/mdx/remark-parse/mdast-util-from-markdown/micromark/micromark-core-commonmark/micromark-factory-destination": ["micromark-factory-destination@1.0.0", "", { "dependencies": { "micromark-util-character": "1.1.0", "micromark-util-symbol": "1.0.1", "micromark-util-types": "1.0.2" } }, "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw=="], "@mdx-js/mdx/remark-parse/mdast-util-from-markdown/micromark/micromark-core-commonmark/micromark-factory-label": ["micromark-factory-label@1.0.2", "", { "dependencies": { "micromark-util-character": "1.1.0", "micromark-util-symbol": "1.0.1", "micromark-util-types": "1.0.2", "uvu": "0.5.6" } }, "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg=="], diff --git a/packages/create-video/src/prompts.ts b/packages/create-video/src/prompts.ts index 1b23ccbc804..e308e181e42 100644 --- a/packages/create-video/src/prompts.ts +++ b/packages/create-video/src/prompts.ts @@ -25,7 +25,6 @@ export async function selectAsync( const {value} = await prompt({ limit: 11, ...questions, - // @ts-expect-error: onRender not in the types onRender(this: { cursor: number; firstRender: boolean; diff --git a/packages/create-video/src/templates.ts b/packages/create-video/src/templates.ts index 987579b66e3..b094abf81d0 100644 --- a/packages/create-video/src/templates.ts +++ b/packages/create-video/src/templates.ts @@ -37,14 +37,14 @@ export type Template = { | 'google-tts' | 'audiogram' | 'music-visualization' + | 'prompt-to-video' | 'skia' | 'overlay' | 'stargazer' | 'tiktok' | 'code-hike' | 'render-server' - | 'recorder' - | 'editor-starter'; + | 'recorder'; defaultBranch: string; featuredOnHomePage: string | null; previewURL: string | null; @@ -376,6 +376,27 @@ export const FEATURED_TEMPLATES: Template[] = [ templateInMonorepo: 'template-music-visualization', allowEnableTailwind: true, }, + { + homePageLabel: 'Prompt to Video', + shortName: 'Prompt to Video', + org: 'remotion-dev', + repoName: 'template-prompt-to-video', + description: 'Create a story with images and voiceover from a prompt', + longerDescription: + 'A template that turns prompts into short videos with a script, images and voiceover. Uses OpenAI and ElevenLabs to generate the content.', + promoVideo: { + muxId: 'FGl01Rw6c5YOjBCTdVhn5wrmVaRWDOjDeT28iY3Sv47w', + height: 1920, + width: 1080, + }, + cliId: 'prompt-to-video' as const, + type: 'video' as const, + defaultBranch: 'main', + featuredOnHomePage: null, + previewURL: null, + templateInMonorepo: 'template-prompt-to-video', + allowEnableTailwind: true, + }, { homePageLabel: 'Skia', shortName: 'Skia', diff --git a/packages/docs/src/components/IconForTemplate.tsx b/packages/docs/src/components/IconForTemplate.tsx index e08ee9dc592..333f5a7f370 100644 --- a/packages/docs/src/components/IconForTemplate.tsx +++ b/packages/docs/src/components/IconForTemplate.tsx @@ -7,6 +7,7 @@ import {JSIcon} from './icons/js'; import {MusicIcon} from './icons/music'; import {NextIcon} from './icons/next'; import {OverlayIcon} from './icons/overlay'; +import {PromptToVideoIcon} from './icons/prompt-to-video'; import {Recorder} from './icons/recorder'; import {RemixIcon} from './icons/remix'; import {RenderServerIcon} from './icons/render-server'; @@ -165,11 +166,9 @@ export const IconForTemplate: React.FC<{ return ; } - return ( - - ); + if (template.cliId === 'prompt-to-video') { + return ; + } + + throw new Error(`Unknown template: ${template.cliId satisfies never}`); }; diff --git a/packages/docs/src/components/icons/prompt-to-video.tsx b/packages/docs/src/components/icons/prompt-to-video.tsx new file mode 100644 index 00000000000..085403758a0 --- /dev/null +++ b/packages/docs/src/components/icons/prompt-to-video.tsx @@ -0,0 +1,13 @@ +import type {SVGProps} from 'react'; +import React from 'react'; + +export const PromptToVideoIcon: React.FC> = (props) => { + return ( + + + + ); +}; diff --git a/packages/promo-pages/src/components/homepage/IconForTemplate.tsx b/packages/promo-pages/src/components/homepage/IconForTemplate.tsx index f1e3b8b70a2..22e8ce61cdb 100644 --- a/packages/promo-pages/src/components/homepage/IconForTemplate.tsx +++ b/packages/promo-pages/src/components/homepage/IconForTemplate.tsx @@ -7,8 +7,10 @@ import {JSIcon} from '../icons/js'; import {MusicIcon} from '../icons/music'; import {NextIcon} from '../icons/next'; import {OverlayIcon} from '../icons/overlay'; +import {PromptToVideoIcon} from '../icons/prompt-to-video'; import {Recorder} from '../icons/recorder'; import {ReactRouterIcon} from '../icons/remix'; +import {RenderServerIcon} from '../icons/render-server'; import {SkiaIcon} from '../icons/skia'; import {Stargazer} from '../icons/stargazer'; import {StillIcon} from '../icons/still'; @@ -136,6 +138,10 @@ export const IconForTemplate: React.FC<{ return ; } + if (template.cliId === 'render-server') { + return ; + } + if (template.cliId === 'recorder') { return ; } @@ -160,11 +166,9 @@ export const IconForTemplate: React.FC<{ return ; } - return ( - - ); + if (template.cliId === 'prompt-to-video') { + return ; + } + + throw new Error(`Unknown template: ${template.cliId satisfies never}`); }; diff --git a/packages/promo-pages/src/components/icons/prompt-to-video.tsx b/packages/promo-pages/src/components/icons/prompt-to-video.tsx new file mode 100644 index 00000000000..8fa47af59d6 --- /dev/null +++ b/packages/promo-pages/src/components/icons/prompt-to-video.tsx @@ -0,0 +1,12 @@ +import type {SVGProps} from 'react'; + +export const PromptToVideoIcon: React.FC> = (props) => { + return ( + + + + ); +}; diff --git a/packages/promo-pages/src/components/icons/render-server.tsx b/packages/promo-pages/src/components/icons/render-server.tsx new file mode 100644 index 00000000000..7b027f2e8cc --- /dev/null +++ b/packages/promo-pages/src/components/icons/render-server.tsx @@ -0,0 +1,20 @@ +import type {SVGProps} from 'react'; +import React from 'react'; + +export const RenderServerIcon: React.FC> = (props) => { + return ( + + + + + ); +}; diff --git a/packages/promo-pages/tsconfig.json b/packages/promo-pages/tsconfig.json index 5ccdf28bc93..62d9180c963 100644 --- a/packages/promo-pages/tsconfig.json +++ b/packages/promo-pages/tsconfig.json @@ -17,6 +17,9 @@ }, { "path": "../player" + }, + { + "path": "../create-video" } ] } diff --git a/packages/template-prompt-to-video/.env.example b/packages/template-prompt-to-video/.env.example new file mode 100644 index 00000000000..6eb968ff7e5 --- /dev/null +++ b/packages/template-prompt-to-video/.env.example @@ -0,0 +1,2 @@ +OPENAI_API_KEY= +ELEVENLABS_API_KEY= \ No newline at end of file diff --git a/packages/template-prompt-to-video/.gitignore b/packages/template-prompt-to-video/.gitignore new file mode 100644 index 00000000000..b62197ba2f2 --- /dev/null +++ b/packages/template-prompt-to-video/.gitignore @@ -0,0 +1,7 @@ +node_modules +dist +.DS_Store +.env + +# Ignore the output video from Git but not videos you import into src/. +out diff --git a/packages/template-prompt-to-video/.prettierrc b/packages/template-prompt-to-video/.prettierrc new file mode 100644 index 00000000000..37d50717489 --- /dev/null +++ b/packages/template-prompt-to-video/.prettierrc @@ -0,0 +1,5 @@ +{ + "useTabs": false, + "bracketSpacing": true, + "tabWidth": 2 +} diff --git a/packages/template-prompt-to-video/Promo.png b/packages/template-prompt-to-video/Promo.png new file mode 100644 index 00000000000..3da13c20a62 Binary files /dev/null and b/packages/template-prompt-to-video/Promo.png differ diff --git a/packages/template-prompt-to-video/README.md b/packages/template-prompt-to-video/README.md new file mode 100644 index 00000000000..6d105b02470 --- /dev/null +++ b/packages/template-prompt-to-video/README.md @@ -0,0 +1,116 @@ +# Remotion AI Video template + +

+ + + Animated Remotion Logo + +

+ +Using this template you can create high quality **AI videos for TikTok or Instagram**. + +It includes a CLI that will generate a story script, images and voiceover using OpenAI and ElevenLabs. + +## Getting started + +Set up the demo story: + +**Install Dependencies** + +```console +npm install +``` + +**Start Preview** + +```console +npm run dev +``` + +**Render video** + +```console +npx remotion render +``` + +Or check out the [Remotion docs](/docs/render/). There are lots of ways to render. + +## Creating a new story + +You can easily create your own videos using provided CLI. + +It will generate a script, images, voiceover and timeline based on your story title and topic. Topics that work well: history, ELI5, fun facts, science. + +**Configure environment variables** + +Create .env file with following env vars (you can also find them in .env.example): + +``` +OPENAI_API_KEY= +ELEVENLABS_API_KEY= +``` + +If you don't create an env file, you will be prompted for these variables when using CLI. + +**Select voice** + +In [`generateVoice()`](cli/service.ts) replace the voice id from ElevenLabs with the one you like. You can use their API for this. Alternatively, you can open any voice on their website and extract the Voice ID from the url (id comes after `voiceId=`). + +```console +https://elevenlabs.io/app/voice-library?voiceId=aTxZrSrp47xsP6Ot4Kgd +``` + +**Generate story timeline** + +```console +npm run gen +``` + +You will be prompted to enter story title and topic. + +Title can be a vague one or long and detailed. Short title on the first slide will be generated based on it. + +Topic can be e.g. History, Interesting facts, ELI5 etc. + +After you enter title and topic, CLI will generate text, images and audio with timestamps, and combine all those into a timeline that van be used by this template to render a video. + +## Technical overview + +Remotion is rendering videos based on Timeline (timeline.json in project folder). The timeline is generated by CLI. + +It consists of three blocks - Elements, Text and Audio. + +Elements define slide backgrounds and include enter/exit transitions (e.g. blur) and animations that are applied while slide is active (e.g. scale, rotate). + +Text and audio are self explanatory. The only special thing about them is that they are synced. + +You can customize the generation of the timeline in [`createTimeLineFromStoryWithDetails()`](cli/timeline.ts) function. + +## Deploying on a remote server + +Current project needs light modification if you want to deploy it as a remote service. + +Remotion renderer with template bundle should be deployed as per usual. + +Then you have to update [`Root.tsx`](src/Root.tsx) to use timeline url that you will pass as a prop (instead of project name). + +The last thing - you have to upload generated resources (images and audio) to server and use urls to them instead of file names when generating a timeline. + +## Issues + +Found an issue with Remotion? Upgrade Remotion to receive fixes: + +``` +npx remotion upgrade +``` + +Didn't help? [File an issue here](https://github.com/remotion-dev/remotion/issues/new). + +## Contributing + +The source of this template is in the [Remotion Monorepo](https://github.com/remotion-dev/remotion/tree/main/packages/template-ai-video). +Don't send pull requests here, this is only a mirror. + +## License + +Note that for some entities a company license is needed. [Read the terms here](https://github.com/remotion-dev/remotion/blob/main/LICENSE.md). diff --git a/packages/template-prompt-to-video/cli/cli.ts b/packages/template-prompt-to-video/cli/cli.ts new file mode 100644 index 00000000000..b0565febaaa --- /dev/null +++ b/packages/template-prompt-to-video/cli/cli.ts @@ -0,0 +1,300 @@ +#!/usr/bin/env node + +import yargs from "yargs"; +import { hideBin } from "yargs/helpers"; +import prompts from "prompts"; +import ora from "ora"; +import chalk from "chalk"; +import * as dotenv from "dotenv"; +import { + generateAiImage, + generateVoice, + getGenerateImageDescriptionPrompt, + getGenerateStoryPrompt, + openaiStructuredCompletion, + setApiKey, +} from "./service"; +import { + ContentItemWithDetails, + StoryMetadataWithDetails, + StoryScript, + StoryWithImages, + Timeline, +} from "../src/lib/types"; +import { v4 as uuidv4 } from "uuid"; +import * as fs from "fs"; +import * as path from "path"; +import { createTimeLineFromStoryWithDetails } from "./timeline"; + +dotenv.config({ quiet: true }); + +interface GenerateOptions { + apiKey?: string; + elevenlabsApiKey?: string; + title?: string; + topic?: string; +} + +class ContentFS { + title: string; + slug: string; + + constructor(title: string) { + this.title = title; + this.slug = this.getSlug(); + } + + saveDescriptor(descriptor: StoryMetadataWithDetails) { + const dirPath = this.getDir(); + const filePath = path.join(dirPath, "descriptor.json"); + fs.writeFileSync(filePath, JSON.stringify(descriptor, null, 2)); + } + + saveTimeline(timeline: Timeline) { + const dirPath = this.getDir(); + const filePath = path.join(dirPath, "timeline.json"); + fs.writeFileSync(filePath, JSON.stringify(timeline, null, 2)); + } + + getDir(dir?: string): string { + const segments = ["public", "content", this.slug]; + if (dir) { + segments.push(dir); + } + const p = path.join(process.cwd(), ...segments); + fs.mkdirSync(p, { recursive: true }); + return p; + } + + getImagePath(uid: string): string { + const dirPath = this.getDir("images"); + return path.join(dirPath, `${uid}.png`); + } + + getAudioPath(uid: string): string { + const dirPath = this.getDir("audio"); + return path.join(dirPath, `${uid}.mp3`); + } + + getSlug(): string { + return this.title + .toLowerCase() + .replace(/[^a-z0-9]+/g, "-") + .replace(/^-+|-+$/g, ""); + } +} + +async function generateStory(options: GenerateOptions) { + try { + let apiKey = options.apiKey || process.env.OPENAI_API_KEY; + let elevenlabsApiKey = + options.elevenlabsApiKey || process.env.ELEVENLABS_API_KEY; + + if (!apiKey) { + const response = await prompts({ + type: "password", + name: "apiKey", + message: "Enter your OpenAI API key:", + validate: (value) => value.length > 0 || "API key is required", + }); + + if (!response.apiKey) { + console.log(chalk.red("API key is required. Exiting...")); + process.exit(1); + } + + apiKey = response.apiKey; + } + + if (!elevenlabsApiKey) { + const response = await prompts({ + type: "password", + name: "elevenlabsApiKey", + message: "Enter your ElevenLabs API key:", + validate: (value) => + value.length > 0 || "ElevenLabs API key is required", + }); + + if (!response.elevenlabsApiKey) { + console.log(chalk.red("API key is required. Exiting...")); + process.exit(1); + } + + elevenlabsApiKey = response.elevenlabsApiKey; + } + + let { title, topic } = options; + + if (!title || !topic) { + const response = await prompts([ + { + type: "text", + name: "title", + message: "Title of the story:", + initial: title, + validate: (value) => value.length > 0 || "Title is required", + }, + { + type: "text", + name: "topic", + message: "Topic of the story:", + initial: topic, + validate: (value) => value.length > 0 || "Topic is required", + }, + ]); + + if (!response.title || !response.topic) { + console.log(chalk.red("Title and topic are required. Exiting...")); + process.exit(1); + } + + title = response.title; + topic = response.topic; + } + + console.log(chalk.blue(`\n📖 Creating story: "${title}"`)); + console.log(chalk.blue(`📝 Topic: ${topic}\n`)); + + const storyWithDetails: StoryMetadataWithDetails = { + shortTitle: title!, + content: [], + }; + + const storySpinner = ora("Generating story...").start(); + setApiKey(apiKey!); + const storyRes = await openaiStructuredCompletion( + getGenerateStoryPrompt(title!, topic!), + StoryScript, + ); + storySpinner.succeed(chalk.green("Story generated!")); + + const descriptionsSpinner = ora("Generating image descriptions...").start(); + const storyWithImagesRes = await openaiStructuredCompletion( + getGenerateImageDescriptionPrompt(storyRes.text), + StoryWithImages, + ); + descriptionsSpinner.succeed(chalk.green("Image descriptions generated!")); + + for (const item of storyWithImagesRes.result) { + const contentWithDetails: ContentItemWithDetails = { + text: item.text, + imageDescription: item.imageDescription, + uid: uuidv4(), + audioTimestamps: { + characters: [], + characterStartTimesSeconds: [], + characterEndTimesSeconds: [], + }, + }; + + storyWithDetails.content.push(contentWithDetails); + } + + const contentFs = new ContentFS(title!); + contentFs.saveDescriptor(storyWithDetails); + + const imagesSpinner = ora("Generating images and voice...").start(); + for (let i = 0; i < storyWithDetails.content.length; i++) { + const storyItem = storyWithDetails.content[i]; + imagesSpinner.text = `[${i * 2 + 1}/${storyWithDetails.content.length * 2}] Generating image for ${storyItem.text}`; + await generateAiImage({ + prompt: storyItem.imageDescription, + path: contentFs.getImagePath(storyItem.uid), + onRetry: (attempt) => { + imagesSpinner.text = `[${i * 2 + 1}/${storyWithDetails.content.length * 2}] Generating image for ${storyItem.text} (retry ${attempt + 1})`; + }, + }); + imagesSpinner.text = `[${i * 2 + 2}/${storyWithDetails.content.length * 2}] Generating voice for ${storyItem.text}`; + const timings = await generateVoice( + storyItem.text, + elevenlabsApiKey!, + contentFs.getAudioPath(storyItem.uid), + ); + storyItem.audioTimestamps = timings; + } + contentFs.saveDescriptor(storyWithDetails); + imagesSpinner.succeed(chalk.green("Images generated!")); + + const finalSpinner = ora("Generating final result...").start(); + const timeline = createTimeLineFromStoryWithDetails(storyWithDetails); + contentFs.saveTimeline(timeline); + finalSpinner.succeed(chalk.green("Final result generated!")); + + console.log(chalk.green.bold("\n✨ Story generation complete!\n")); + console.log("Run " + chalk.blue("npm run dev") + " to preview the story"); + + return {}; + } catch (error) { + console.error(chalk.red("\n❌ Error:"), error); + process.exit(1); + } +} + +yargs(hideBin(process.argv)) + .command( + "generate", + "Generate story timeline for given title and topic", + (yargs) => { + return yargs + .option("api-key", { + alias: "k", + type: "string", + description: "OpenAI API key", + }) + .option("title", { + alias: "t", + type: "string", + description: "Title of the story", + }) + .option("topic", { + alias: "p", + type: "string", + description: + "Topic of the story (e.g. Interesting Facts, History, etc.)", + }); + }, + async (argv) => { + await generateStory({ + apiKey: argv["api-key"], + title: argv.title, + topic: argv.topic, + }); + }, + ) + .command( + "$0", + "Generate a story (default command)", + (yargs) => { + return yargs + .option("api-key", { + alias: "k", + type: "string", + description: "OpenAI API key", + }) + .option("title", { + alias: "t", + type: "string", + description: "Title of the story", + }) + .option("topic", { + alias: "p", + type: "string", + description: + "Topic of the story (e.g. Interesting Facts, History, etc.)", + }); + }, + async (argv) => { + await generateStory({ + apiKey: argv["api-key"], + title: argv.title, + topic: argv.topic, + }); + }, + ) + .demandCommand(0, 1) + .help() + .alias("help", "h") + .version() + .alias("version", "v") + .strict() + .parse(); diff --git a/packages/template-prompt-to-video/cli/service.ts b/packages/template-prompt-to-video/cli/service.ts new file mode 100644 index 00000000000..35fbfad337a --- /dev/null +++ b/packages/template-prompt-to-video/cli/service.ts @@ -0,0 +1,177 @@ +import z from "zod"; +import * as fs from "fs"; +import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js"; +import { CharacterAlignmentResponseModel } from "@elevenlabs/elevenlabs-js/api"; +import { IMAGE_HEIGHT, IMAGE_WIDTH } from "../src/lib/constants"; +import { zodToJsonSchema } from "zod-to-json-schema"; + +let apiKey: string | null = null; + +export const setApiKey = (key: string) => { + apiKey = key; +}; + +export const openaiStructuredCompletion = async ( + prompt: string, + schema: z.ZodType, +): Promise => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const jsonSchema = zodToJsonSchema(schema) as any; + + const res = await fetch("https://api.openai.com/v1/chat/completions", { + method: "POST", + headers: { + Authorization: `Bearer ${apiKey}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + model: "gpt-4.1", + messages: [{ role: "user", content: prompt }], + response_format: { + type: "json_schema", + json_schema: { + name: "response", + schema: { + type: jsonSchema.type || "object", + properties: jsonSchema.properties, + required: jsonSchema.required, + additionalProperties: jsonSchema.additionalProperties ?? false, + }, + strict: true, + }, + }, + }), + }); + + if (!res.ok) throw new Error(`OpenAI error: ${await res.text()}`); + + const data = await res.json(); + const content = data.choices[0]?.message?.content; + + if (!content) { + throw new Error("No content in OpenAI response"); + } + + const parsed = JSON.parse(content); + return schema.parse(parsed); +}; + +function saveUint8ArrayToPng(uint8Array: Uint8Array, filePath: string) { + const buffer = Buffer.from(uint8Array); + fs.writeFileSync(filePath, buffer as Uint8Array); +} + +export const generateAiImage = async ({ + prompt, + path, + onRetry, +}: { + prompt: string; + path: string; + onRetry: (attempt: number) => void; +}) => { + const maxRetries = 3; + let attempt = 0; + let lastError: Error | null = null; + + while (attempt < maxRetries) { + const res = await fetch("https://api.openai.com/v1/images/generations", { + method: "POST", + headers: { + Authorization: `Bearer ${apiKey}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + model: "dall-e-3", + prompt, + size: `${IMAGE_WIDTH}x${IMAGE_HEIGHT}`, + response_format: "b64_json", + }), + }); + + if (res.ok) { + const data = await res.json(); + const buffer = Buffer.from(data.data[0].b64_json, "base64"); + const uint8Array = new Uint8Array(buffer); + + saveUint8ArrayToPng(uint8Array, path); + return; + } else { + lastError = new Error( + `OpenAI error (attempt ${attempt + 1}): ${await res.text()}`, + ); + attempt++; + if (attempt < maxRetries) { + // Wait 1 second before retrying + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + onRetry(attempt); + } + } + + // Ran out of retries, throw the last error + throw lastError!; +}; + +export const getGenerateStoryPrompt = (title: string, topic: string) => { + const prompt = `Write a short story with title [${title}] (its topic is [${topic}]). + You must follow best practices for great storytelling. + The script must be 8-10 sentences long. + Story events can be from anywhere in the world, but text must be translated into English language. + Result result without any formatting and title, as one continuous text. + Skip new lines.`; + + return prompt; +}; + +export const getGenerateImageDescriptionPrompt = (storyText: string) => { + const prompt = `You are given story text. + Generate (in English) 5-8 very detailed image descriptions for this story. + Return their description as json array with story sentences matched to images. + Story sentences must be in the same order as in the story and their content must be preserved. + Each image must match 1-2 sentence from the story. + Images must show story content in a way that is visually appealing and engaging, not just characters. + Give output in json format: + + [ + { + "text": "....", + "imageDescription": "..." + } + ] + + + ${storyText} + `; + + return prompt; +}; + +const saveBase64ToMp3 = (data: string, path: string) => { + const buffer = Buffer.from(data, "base64"); + fs.writeFileSync(path, buffer as Uint8Array); +}; + +export const generateVoice = async ( + text: string, + apiKey: string, + path: string, +): Promise => { + const client = new ElevenLabsClient({ + environment: "https://api.elevenlabs.io", + apiKey, + }); + + const voiceId = "21m00Tcm4TlvDq8ikWAM"; + + const data = await client.textToSpeech.convertWithTimestamps(voiceId, { + text, + }); + + if (!data.alignment || !data.alignment.characterEndTimesSeconds.length) { + throw new Error("ElevenLabs response missing timestamps"); + } + + saveBase64ToMp3(data.audioBase64, path); + return data.alignment; +}; diff --git a/packages/template-prompt-to-video/cli/timeline.ts b/packages/template-prompt-to-video/cli/timeline.ts new file mode 100644 index 00000000000..a17210eae17 --- /dev/null +++ b/packages/template-prompt-to-video/cli/timeline.ts @@ -0,0 +1,179 @@ +import type { + BackgroundElement, + ElementAnimation, + StoryMetadataWithDetails, + TextElement, + Timeline, +} from "../src/lib/types"; + +export const createTimeLineFromStoryWithDetails = ( + storyWithDetails: StoryMetadataWithDetails, +): Timeline => { + const timeline: Timeline = { + elements: [], + text: [], + audio: [], + shortTitle: storyWithDetails.shortTitle, + }; + + let durationMs = 0; + let zoomIn = true; + + for (let i = 0; i < storyWithDetails.content.length; i++) { + const content = storyWithDetails.content[i]; + + const lenMs = Math.ceil( + content.audioTimestamps.characterEndTimesSeconds[ + content.audioTimestamps.characterEndTimesSeconds.length - 1 + ] * 1000, + ); + + const bgElem: BackgroundElement = { + startMs: durationMs, + endMs: durationMs + lenMs, + imageUrl: content.uid, + enterTransition: "blur", + exitTransition: "blur", + animations: getBgAnimations(lenMs, zoomIn), + }; + + timeline.elements.push(bgElem); + timeline.audio.push({ + startMs: durationMs, + endMs: durationMs + lenMs, + audioUrl: content.uid, + }); + + // hadnle text word by word + const words = content.text.split(" "); + const { + characterStartTimesSeconds: character_start_times_seconds, + characterEndTimesSeconds: character_end_times_seconds, + } = content.audioTimestamps; + + const MaxSentenseSizeChars = 14; + + let currentText = ""; + let currentStartMs = character_start_times_seconds[0] * 1000 + durationMs; + let currentEndMs = durationMs; + let currentCharIndex = 0; + + for (const word of words) { + if ((currentText + word).length > MaxSentenseSizeChars) { + const textElem: TextElement = { + startMs: currentStartMs, + endMs: currentEndMs, + text: currentText.trim(), + position: "center", + animations: getTextAnimations(), + }; + + timeline.text.push(textElem); + + currentText = ""; + currentStartMs = currentEndMs; + } + + currentText += `${word} `; + for (let i = 0; i < word.length; i++) { + currentEndMs = + character_end_times_seconds[currentCharIndex] * 1000 + durationMs; + currentCharIndex++; + } + + currentEndMs = + character_end_times_seconds[currentCharIndex] * 1000 + durationMs; + currentCharIndex++; + } + + if (currentText.trim().length > 0) { + const textElem: TextElement = { + startMs: currentStartMs, + endMs: + character_end_times_seconds[character_end_times_seconds.length - 1] * + 1000 + + durationMs, + text: currentText.trim(), + position: "center", + animations: getTextAnimations(), + }; + + timeline.text.push(textElem); + } + + durationMs += lenMs; + + zoomIn = !zoomIn; + } + + return timeline; +}; + +export function findAllSpaceIndexes(str: string) { + const indexes = []; + for (let i = 0; i < str.length; i++) { + if (str[i] === " ") { + indexes.push(i); + } + } + return indexes; +} + +export const getBgAnimations = (durationMs: number, zoomIn: boolean) => { + const animations: ElementAnimation[] = []; + + const startMs = 0; + const endMs = durationMs; + + const scaleFrom = zoomIn ? 1.5 : 1; + const scaleTo = zoomIn ? 1 : 1.5; + + animations.push({ + type: "scale", + from: scaleFrom, + to: scaleTo, + startMs, + endMs, + }); + + return animations; +}; + +export const getTextAnimations = () => { + const animations: ElementAnimation[] = []; + + const durationMs = 300; + + const startMs = 0; + const endMs = durationMs; + + // start scale from 0.5 to 0.7 + // eslint-disable-next-line @remotion/deterministic-randomness + const startScale = Math.random() * 0.2 + 0.5; + // dont scale with 40% chance + // eslint-disable-next-line @remotion/deterministic-randomness + const dontScale = Math.random() > 0.6; + // eslint-disable-next-line @remotion/deterministic-randomness + const bounces = Math.random() > 0.5; + + // scale + animations.push({ + type: "scale", + from: dontScale ? 1 : startScale, + to: bounces ? 1.25 : 1, + startMs, + endMs, + }); + + if (bounces) { + animations.push({ + type: "scale", + from: 1.25, + to: 1, + startMs: endMs, + endMs: endMs + 200, + }); + } + + return animations; +}; diff --git a/packages/template-prompt-to-video/eslint.config.mjs b/packages/template-prompt-to-video/eslint.config.mjs new file mode 100644 index 00000000000..13b44a0d650 --- /dev/null +++ b/packages/template-prompt-to-video/eslint.config.mjs @@ -0,0 +1,3 @@ +import { config } from "@remotion/eslint-config-flat"; + +export default config; diff --git a/packages/template-prompt-to-video/package.json b/packages/template-prompt-to-video/package.json new file mode 100644 index 00000000000..1b75e8a6cd9 --- /dev/null +++ b/packages/template-prompt-to-video/package.json @@ -0,0 +1,47 @@ +{ + "name": "template-ai-video", + "version": "1.0.0", + "description": "Create AI videos using remotion", + "scripts": { + "dev": "remotion studio", + "build": "remotion bundle", + "upgrade": "remotion upgrade", + "lint": "eslint src && tsc", + "gen": "bun cli/cli.ts" + }, + "repository": {}, + "license": "UNLICENSED", + "dependencies": { + "@remotion/animation-utils": "workspace:*", + "@remotion/cli": "workspace:*", + "@remotion/google-fonts": "workspace:*", + "@remotion/layout-utils": "workspace:*", + "@remotion/media": "workspace:*", + "@remotion/zod-types": "workspace:*", + "react": "19.0.0", + "react-dom": "19.0.0", + "remotion": "workspace:*", + "zod": "3.22.3" + }, + "devDependencies": { + "@elevenlabs/elevenlabs-js": "^2.20.0", + "@remotion/eslint-config-flat": "workspace:*", + "@types/prompts": "^2.4.9", + "@types/react": "19.0.0", + "@types/uuid": "^11.0.0", + "@types/web": "0.0.166", + "@types/yargs": "^17.0.33", + "chalk": "^5.6.2", + "dotenv": "^17.2.3", + "eslint": "9.19.0", + "ora": "^9.0.0", + "prettier": "3.6.0", + "prompts": "^2.4.2", + "tsx": "^4.20.6", + "typescript": "5.8.2", + "uuid": "^13.0.0", + "yargs": "^18.0.0", + "zod-to-json-schema": "^3.24.6" + }, + "private": true +} diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/audio/11f4911a-f39f-4567-8963-41511d05b593.mp3 b/packages/template-prompt-to-video/public/content/history-of-venus/audio/11f4911a-f39f-4567-8963-41511d05b593.mp3 new file mode 100644 index 00000000000..1aeec4f7560 Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/audio/11f4911a-f39f-4567-8963-41511d05b593.mp3 differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/audio/20cf0ab8-49cb-4ead-816d-6af0b588668a.mp3 b/packages/template-prompt-to-video/public/content/history-of-venus/audio/20cf0ab8-49cb-4ead-816d-6af0b588668a.mp3 new file mode 100644 index 00000000000..95b8da26394 Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/audio/20cf0ab8-49cb-4ead-816d-6af0b588668a.mp3 differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/audio/33b24fbd-dc71-4692-87af-fdff7661c222.mp3 b/packages/template-prompt-to-video/public/content/history-of-venus/audio/33b24fbd-dc71-4692-87af-fdff7661c222.mp3 new file mode 100644 index 00000000000..d370445b139 Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/audio/33b24fbd-dc71-4692-87af-fdff7661c222.mp3 differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/audio/5584e376-d02e-48fc-9e47-fc7bf86000af.mp3 b/packages/template-prompt-to-video/public/content/history-of-venus/audio/5584e376-d02e-48fc-9e47-fc7bf86000af.mp3 new file mode 100644 index 00000000000..8c8b6f7ec7a Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/audio/5584e376-d02e-48fc-9e47-fc7bf86000af.mp3 differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/audio/83e869e5-18fd-4de9-b70f-dc0f180da912.mp3 b/packages/template-prompt-to-video/public/content/history-of-venus/audio/83e869e5-18fd-4de9-b70f-dc0f180da912.mp3 new file mode 100644 index 00000000000..c234dc656f7 Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/audio/83e869e5-18fd-4de9-b70f-dc0f180da912.mp3 differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/audio/90917ba0-8b7c-4309-a784-4f1fdc28d9fb.mp3 b/packages/template-prompt-to-video/public/content/history-of-venus/audio/90917ba0-8b7c-4309-a784-4f1fdc28d9fb.mp3 new file mode 100644 index 00000000000..fdbdfc3a6a9 Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/audio/90917ba0-8b7c-4309-a784-4f1fdc28d9fb.mp3 differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/audio/919d538b-3407-440a-b26a-73a5321a3af0.mp3 b/packages/template-prompt-to-video/public/content/history-of-venus/audio/919d538b-3407-440a-b26a-73a5321a3af0.mp3 new file mode 100644 index 00000000000..a6b4a112b2a Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/audio/919d538b-3407-440a-b26a-73a5321a3af0.mp3 differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/audio/99af6411-714b-4b72-b66e-f6c02a184493.mp3 b/packages/template-prompt-to-video/public/content/history-of-venus/audio/99af6411-714b-4b72-b66e-f6c02a184493.mp3 new file mode 100644 index 00000000000..0d12f8c0d58 Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/audio/99af6411-714b-4b72-b66e-f6c02a184493.mp3 differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/descriptor.json b/packages/template-prompt-to-video/public/content/history-of-venus/descriptor.json new file mode 100644 index 00000000000..06237c75b7d --- /dev/null +++ b/packages/template-prompt-to-video/public/content/history-of-venus/descriptor.json @@ -0,0 +1,2893 @@ +{ + "shortTitle": "History of Venus", + "content": [ + { + "text": "Once upon a time, long before telescopes watched the sky, people looked up and saw a bright star, not knowing it was Venus.", + "imageDescription": "A tranquil nighttime scene from ancient times, with people in simple robes gazing up at a sparkling, brilliantly bright 'star' in the deep indigo sky. The landscape is dotted with flickering bonfires and shadowy figures pointing upwards in wonder. There are no modern instruments, just the natural awe of humans watching the heavens.", + "uid": "83e869e5-18fd-4de9-b70f-dc0f180da912", + "audioTimestamps": { + "characters": [ + "O", + "n", + "c", + "e", + " ", + "u", + "p", + "o", + "n", + " ", + "a", + " ", + "t", + "i", + "m", + "e", + ",", + " ", + "l", + "o", + "n", + "g", + " ", + "b", + "e", + "f", + "o", + "r", + "e", + " ", + "t", + "e", + "l", + "e", + "s", + "c", + "o", + "p", + "e", + "s", + " ", + "w", + "a", + "t", + "c", + "h", + "e", + "d", + " ", + "t", + "h", + "e", + " ", + "s", + "k", + "y", + ",", + " ", + "p", + "e", + "o", + "p", + "l", + "e", + " ", + "l", + "o", + "o", + "k", + "e", + "d", + " ", + "u", + "p", + " ", + "a", + "n", + "d", + " ", + "s", + "a", + "w", + " ", + "a", + " ", + "b", + "r", + "i", + "g", + "h", + "t", + " ", + "s", + "t", + "a", + "r", + ",", + " ", + "n", + "o", + "t", + " ", + "k", + "n", + "o", + "w", + "i", + "n", + "g", + " ", + "i", + "t", + " ", + "w", + "a", + "s", + " ", + "V", + "e", + "n", + "u", + "s", + "." + ], + "characterStartTimesSeconds": [ + 0, + 0.186, + 0.255, + 0.29, + 0.325, + 0.36, + 0.406, + 0.453, + 0.522, + 0.557, + 0.604, + 0.627, + 0.685, + 0.731, + 0.882, + 0.952, + 1.126, + 1.161, + 1.405, + 1.474, + 1.556, + 1.614, + 1.637, + 1.695, + 1.73, + 1.788, + 1.834, + 1.869, + 1.927, + 1.962, + 1.997, + 2.043, + 2.113, + 2.183, + 2.241, + 2.31, + 2.368, + 2.438, + 2.485, + 2.531, + 2.554, + 2.612, + 2.647, + 2.717, + 2.763, + 2.81, + 2.844, + 2.879, + 2.902, + 2.937, + 2.961, + 2.984, + 3.007, + 3.042, + 3.1, + 3.17, + 3.448, + 3.564, + 3.843, + 3.901, + 3.947, + 3.994, + 4.04, + 4.087, + 4.11, + 4.145, + 4.18, + 4.226, + 4.261, + 4.296, + 4.342, + 4.365, + 4.412, + 4.47, + 4.516, + 4.574, + 4.598, + 4.621, + 4.656, + 4.714, + 4.76, + 4.853, + 4.899, + 4.957, + 4.992, + 5.05, + 5.108, + 5.178, + 5.213, + 5.248, + 5.283, + 5.329, + 5.41, + 5.457, + 5.538, + 5.689, + 5.817, + 5.933, + 6.142, + 6.211, + 6.269, + 6.304, + 6.339, + 6.374, + 6.409, + 6.444, + 6.49, + 6.548, + 6.571, + 6.594, + 6.641, + 6.676, + 6.699, + 6.734, + 6.769, + 6.803, + 6.838, + 6.896, + 6.931, + 7.001, + 7.082, + 7.198, + 7.314 + ], + "characterEndTimesSeconds": [ + 0.186, + 0.255, + 0.29, + 0.325, + 0.36, + 0.406, + 0.453, + 0.522, + 0.557, + 0.604, + 0.627, + 0.685, + 0.731, + 0.882, + 0.952, + 1.126, + 1.161, + 1.405, + 1.474, + 1.556, + 1.614, + 1.637, + 1.695, + 1.73, + 1.788, + 1.834, + 1.869, + 1.927, + 1.962, + 1.997, + 2.043, + 2.113, + 2.183, + 2.241, + 2.31, + 2.368, + 2.438, + 2.485, + 2.531, + 2.554, + 2.612, + 2.647, + 2.717, + 2.763, + 2.81, + 2.844, + 2.879, + 2.902, + 2.937, + 2.961, + 2.984, + 3.007, + 3.042, + 3.1, + 3.17, + 3.448, + 3.564, + 3.843, + 3.901, + 3.947, + 3.994, + 4.04, + 4.087, + 4.11, + 4.145, + 4.18, + 4.226, + 4.261, + 4.296, + 4.342, + 4.365, + 4.412, + 4.47, + 4.516, + 4.574, + 4.598, + 4.621, + 4.656, + 4.714, + 4.76, + 4.853, + 4.899, + 4.957, + 4.992, + 5.05, + 5.108, + 5.178, + 5.213, + 5.248, + 5.283, + 5.329, + 5.41, + 5.457, + 5.538, + 5.689, + 5.817, + 5.933, + 6.142, + 6.211, + 6.269, + 6.304, + 6.339, + 6.374, + 6.409, + 6.444, + 6.49, + 6.548, + 6.571, + 6.594, + 6.641, + 6.676, + 6.699, + 6.734, + 6.769, + 6.803, + 6.838, + 6.896, + 6.931, + 7.001, + 7.082, + 7.198, + 7.314, + 7.616 + ] + } + }, + { + "text": "The ancient Romans named it after their goddess of love because of its beautiful glow.", + "imageDescription": "A classical Roman courtyard where wise men, women in togas, and children admire Venus's radiant glow in the sky. A statue of the goddess Venus stands prominently, bathed in the same soft, glowing light as the 'star' above, reinforcing the connection between the goddess and the planet.", + "uid": "99af6411-714b-4b72-b66e-f6c02a184493", + "audioTimestamps": { + "characters": [ + "T", + "h", + "e", + " ", + "a", + "n", + "c", + "i", + "e", + "n", + "t", + " ", + "R", + "o", + "m", + "a", + "n", + "s", + " ", + "n", + "a", + "m", + "e", + "d", + " ", + "i", + "t", + " ", + "a", + "f", + "t", + "e", + "r", + " ", + "t", + "h", + "e", + "i", + "r", + " ", + "g", + "o", + "d", + "d", + "e", + "s", + "s", + " ", + "o", + "f", + " ", + "l", + "o", + "v", + "e", + " ", + "b", + "e", + "c", + "a", + "u", + "s", + "e", + " ", + "o", + "f", + " ", + "i", + "t", + "s", + " ", + "b", + "e", + "a", + "u", + "t", + "i", + "f", + "u", + "l", + " ", + "g", + "l", + "o", + "w", + "." + ], + "characterStartTimesSeconds": [ + 0, + 0.163, + 0.209, + 0.232, + 0.29, + 0.325, + 0.383, + 0.418, + 0.464, + 0.499, + 0.534, + 0.557, + 0.615, + 0.662, + 0.743, + 0.813, + 0.871, + 0.917, + 0.975, + 1.045, + 1.091, + 1.149, + 1.196, + 1.242, + 1.265, + 1.3, + 1.335, + 1.37, + 1.416, + 1.474, + 1.533, + 1.579, + 1.614, + 1.637, + 1.683, + 1.707, + 1.73, + 1.765, + 1.8, + 1.834, + 1.881, + 1.927, + 1.997, + 2.055, + 2.09, + 2.125, + 2.183, + 2.229, + 2.264, + 2.299, + 2.322, + 2.392, + 2.438, + 2.519, + 2.566, + 2.612, + 2.659, + 2.694, + 2.752, + 2.798, + 2.833, + 2.879, + 2.914, + 2.949, + 2.984, + 3.007, + 3.03, + 3.077, + 3.111, + 3.158, + 3.193, + 3.239, + 3.274, + 3.32, + 3.367, + 3.402, + 3.448, + 3.495, + 3.553, + 3.611, + 3.657, + 3.715, + 3.762, + 3.843, + 3.959, + 4.029 + ], + "characterEndTimesSeconds": [ + 0.163, + 0.209, + 0.232, + 0.29, + 0.325, + 0.383, + 0.418, + 0.464, + 0.499, + 0.534, + 0.557, + 0.615, + 0.662, + 0.743, + 0.813, + 0.871, + 0.917, + 0.975, + 1.045, + 1.091, + 1.149, + 1.196, + 1.242, + 1.265, + 1.3, + 1.335, + 1.37, + 1.416, + 1.474, + 1.533, + 1.579, + 1.614, + 1.637, + 1.683, + 1.707, + 1.73, + 1.765, + 1.8, + 1.834, + 1.881, + 1.927, + 1.997, + 2.055, + 2.09, + 2.125, + 2.183, + 2.229, + 2.264, + 2.299, + 2.322, + 2.392, + 2.438, + 2.519, + 2.566, + 2.612, + 2.659, + 2.694, + 2.752, + 2.798, + 2.833, + 2.879, + 2.914, + 2.949, + 2.984, + 3.007, + 3.03, + 3.077, + 3.111, + 3.158, + 3.193, + 3.239, + 3.274, + 3.32, + 3.367, + 3.402, + 3.448, + 3.495, + 3.553, + 3.611, + 3.657, + 3.715, + 3.762, + 3.843, + 3.959, + 4.029, + 4.319 + ] + } + }, + { + "text": "Incredibly, there were times it was called both the 'Morning Star' and the 'Evening Star'—no one realized they were the same planet!", + "imageDescription": "A magical transition scene showing the same bright planet in a pastel dawn sky labeled 'Morning Star' on one horizon, and again glimmering over a sunset landscape labeled 'Evening Star' on the other. Two groups of people observe at different times, unaware they see the same object.", + "uid": "919d538b-3407-440a-b26a-73a5321a3af0", + "audioTimestamps": { + "characters": [ + "I", + "n", + "c", + "r", + "e", + "d", + "i", + "b", + "l", + "y", + ",", + " ", + "t", + "h", + "e", + "r", + "e", + " ", + "w", + "e", + "r", + "e", + " ", + "t", + "i", + "m", + "e", + "s", + " ", + "i", + "t", + " ", + "w", + "a", + "s", + " ", + "c", + "a", + "l", + "l", + "e", + "d", + " ", + "b", + "o", + "t", + "h", + " ", + "t", + "h", + "e", + " ", + "'", + "M", + "o", + "r", + "n", + "i", + "n", + "g", + " ", + "S", + "t", + "a", + "r", + "'", + " ", + "a", + "n", + "d", + " ", + "t", + "h", + "e", + " ", + "'", + "E", + "v", + "e", + "n", + "i", + "n", + "g", + " ", + "S", + "t", + "a", + "r", + "'", + "—", + "n", + "o", + " ", + "o", + "n", + "e", + " ", + "r", + "e", + "a", + "l", + "i", + "z", + "e", + "d", + " ", + "t", + "h", + "e", + "y", + " ", + "w", + "e", + "r", + "e", + " ", + "t", + "h", + "e", + " ", + "s", + "a", + "m", + "e", + " ", + "p", + "l", + "a", + "n", + "e", + "t", + "!" + ], + "characterStartTimesSeconds": [ + 0, + 0.197, + 0.279, + 0.337, + 0.383, + 0.43, + 0.488, + 0.534, + 0.604, + 0.673, + 0.708, + 0.731, + 0.755, + 0.778, + 0.801, + 0.836, + 0.871, + 0.894, + 0.929, + 0.952, + 0.987, + 1.022, + 1.045, + 1.08, + 1.126, + 1.207, + 1.265, + 1.324, + 1.358, + 1.393, + 1.428, + 1.451, + 1.486, + 1.509, + 1.544, + 1.567, + 1.625, + 1.66, + 1.707, + 1.741, + 1.788, + 1.834, + 1.858, + 1.892, + 1.927, + 1.974, + 2.02, + 2.055, + 2.09, + 2.113, + 2.136, + 2.159, + 2.183, + 2.206, + 2.252, + 2.322, + 2.368, + 2.415, + 2.461, + 2.485, + 2.519, + 2.589, + 2.635, + 2.705, + 2.856, + 2.949, + 3.123, + 3.297, + 3.355, + 3.402, + 3.437, + 3.483, + 3.506, + 3.529, + 3.553, + 3.587, + 3.611, + 3.692, + 3.738, + 3.773, + 3.82, + 3.866, + 3.889, + 3.913, + 3.982, + 4.017, + 4.087, + 4.203, + 4.272, + 4.423, + 4.69, + 4.76, + 4.807, + 4.865, + 4.899, + 4.946, + 4.981, + 5.027, + 5.074, + 5.132, + 5.19, + 5.259, + 5.341, + 5.387, + 5.445, + 5.468, + 5.503, + 5.526, + 5.55, + 5.584, + 5.608, + 5.642, + 5.666, + 5.7, + 5.724, + 5.747, + 5.782, + 5.805, + 5.828, + 5.851, + 5.886, + 5.933, + 5.991, + 6.037, + 6.084, + 6.118, + 6.165, + 6.223, + 6.293, + 6.362, + 6.432, + 6.548 + ], + "characterEndTimesSeconds": [ + 0.197, + 0.279, + 0.337, + 0.383, + 0.43, + 0.488, + 0.534, + 0.604, + 0.673, + 0.708, + 0.731, + 0.755, + 0.778, + 0.801, + 0.836, + 0.871, + 0.894, + 0.929, + 0.952, + 0.987, + 1.022, + 1.045, + 1.08, + 1.126, + 1.207, + 1.265, + 1.324, + 1.358, + 1.393, + 1.428, + 1.451, + 1.486, + 1.509, + 1.544, + 1.567, + 1.625, + 1.66, + 1.707, + 1.741, + 1.788, + 1.834, + 1.858, + 1.892, + 1.927, + 1.974, + 2.02, + 2.055, + 2.09, + 2.113, + 2.136, + 2.159, + 2.183, + 2.206, + 2.252, + 2.322, + 2.368, + 2.415, + 2.461, + 2.485, + 2.519, + 2.589, + 2.635, + 2.705, + 2.856, + 2.949, + 3.123, + 3.297, + 3.355, + 3.402, + 3.437, + 3.483, + 3.506, + 3.529, + 3.553, + 3.587, + 3.611, + 3.692, + 3.738, + 3.773, + 3.82, + 3.866, + 3.889, + 3.913, + 3.982, + 4.017, + 4.087, + 4.203, + 4.272, + 4.423, + 4.69, + 4.76, + 4.807, + 4.865, + 4.899, + 4.946, + 4.981, + 5.027, + 5.074, + 5.132, + 5.19, + 5.259, + 5.341, + 5.387, + 5.445, + 5.468, + 5.503, + 5.526, + 5.55, + 5.584, + 5.608, + 5.642, + 5.666, + 5.7, + 5.724, + 5.747, + 5.782, + 5.805, + 5.828, + 5.851, + 5.886, + 5.933, + 5.991, + 6.037, + 6.084, + 6.118, + 6.165, + 6.223, + 6.293, + 6.362, + 6.432, + 6.548, + 6.827 + ] + } + }, + { + "text": "Unlike any other planet, Venus spins backwards, so the Sun rises in the west and sets in the east.", + "imageDescription": "A surreal Venusian landscape with rocky plains and an enormous, thickly clouded sky. The Sun is shown rising in the western part of the sky with unusual shadows, highlighting the alien concept of a backward sunrise.", + "uid": "20cf0ab8-49cb-4ead-816d-6af0b588668a", + "audioTimestamps": { + "characters": [ + "U", + "n", + "l", + "i", + "k", + "e", + " ", + "a", + "n", + "y", + " ", + "o", + "t", + "h", + "e", + "r", + " ", + "p", + "l", + "a", + "n", + "e", + "t", + ",", + " ", + "V", + "e", + "n", + "u", + "s", + " ", + "s", + "p", + "i", + "n", + "s", + " ", + "b", + "a", + "c", + "k", + "w", + "a", + "r", + "d", + "s", + ",", + " ", + "s", + "o", + " ", + "t", + "h", + "e", + " ", + "S", + "u", + "n", + " ", + "r", + "i", + "s", + "e", + "s", + " ", + "i", + "n", + " ", + "t", + "h", + "e", + " ", + "w", + "e", + "s", + "t", + " ", + "a", + "n", + "d", + " ", + "s", + "e", + "t", + "s", + " ", + "i", + "n", + " ", + "t", + "h", + "e", + " ", + "e", + "a", + "s", + "t", + "." + ], + "characterStartTimesSeconds": [ + 0, + 0.209, + 0.29, + 0.348, + 0.395, + 0.441, + 0.488, + 0.534, + 0.569, + 0.639, + 0.685, + 0.743, + 0.789, + 0.836, + 0.859, + 0.894, + 0.929, + 0.987, + 1.033, + 1.091, + 1.161, + 1.242, + 1.312, + 1.428, + 1.498, + 1.614, + 1.683, + 1.753, + 1.823, + 1.892, + 1.939, + 1.974, + 2.02, + 2.078, + 2.136, + 2.194, + 2.252, + 2.322, + 2.368, + 2.426, + 2.473, + 2.531, + 2.601, + 2.659, + 2.705, + 2.775, + 2.891, + 3.042, + 3.193, + 3.262, + 3.332, + 3.39, + 3.413, + 3.437, + 3.46, + 3.506, + 3.553, + 3.646, + 3.692, + 3.762, + 3.808, + 3.878, + 3.936, + 4.029, + 4.063, + 4.11, + 4.133, + 4.168, + 4.203, + 4.226, + 4.249, + 4.272, + 4.307, + 4.342, + 4.458, + 4.54, + 4.609, + 4.679, + 4.702, + 4.737, + 4.772, + 4.83, + 4.865, + 4.946, + 5.004, + 5.039, + 5.085, + 5.108, + 5.143, + 5.178, + 5.201, + 5.224, + 5.248, + 5.306, + 5.375, + 5.433, + 5.515, + 5.666 + ], + "characterEndTimesSeconds": [ + 0.209, + 0.29, + 0.348, + 0.395, + 0.441, + 0.488, + 0.534, + 0.569, + 0.639, + 0.685, + 0.743, + 0.789, + 0.836, + 0.859, + 0.894, + 0.929, + 0.987, + 1.033, + 1.091, + 1.161, + 1.242, + 1.312, + 1.428, + 1.498, + 1.614, + 1.683, + 1.753, + 1.823, + 1.892, + 1.939, + 1.974, + 2.02, + 2.078, + 2.136, + 2.194, + 2.252, + 2.322, + 2.368, + 2.426, + 2.473, + 2.531, + 2.601, + 2.659, + 2.705, + 2.775, + 2.891, + 3.042, + 3.193, + 3.262, + 3.332, + 3.39, + 3.413, + 3.437, + 3.46, + 3.506, + 3.553, + 3.646, + 3.692, + 3.762, + 3.808, + 3.878, + 3.936, + 4.029, + 4.063, + 4.11, + 4.133, + 4.168, + 4.203, + 4.226, + 4.249, + 4.272, + 4.307, + 4.342, + 4.458, + 4.54, + 4.609, + 4.679, + 4.702, + 4.737, + 4.772, + 4.83, + 4.865, + 4.946, + 5.004, + 5.039, + 5.085, + 5.108, + 5.143, + 5.178, + 5.201, + 5.224, + 5.248, + 5.306, + 5.375, + 5.433, + 5.515, + 5.666, + 5.991 + ] + } + }, + { + "text": "Its days are longer than its years, making time seem strange up there.", + "imageDescription": "A dreamlike, time-warped scene featuring the surface of Venus with swirling clocks melting over jagged rocks and a skewed horizon hinting at an odd flow of time—a visual metaphor for days lasting longer than years.", + "uid": "11f4911a-f39f-4567-8963-41511d05b593", + "audioTimestamps": { + "characters": [ + "I", + "t", + "s", + " ", + "d", + "a", + "y", + "s", + " ", + "a", + "r", + "e", + " ", + "l", + "o", + "n", + "g", + "e", + "r", + " ", + "t", + "h", + "a", + "n", + " ", + "i", + "t", + "s", + " ", + "y", + "e", + "a", + "r", + "s", + ",", + " ", + "m", + "a", + "k", + "i", + "n", + "g", + " ", + "t", + "i", + "m", + "e", + " ", + "s", + "e", + "e", + "m", + " ", + "s", + "t", + "r", + "a", + "n", + "g", + "e", + " ", + "u", + "p", + " ", + "t", + "h", + "e", + "r", + "e", + "." + ], + "characterStartTimesSeconds": [ + 0, + 0.232, + 0.29, + 0.337, + 0.383, + 0.43, + 0.488, + 0.546, + 0.592, + 0.627, + 0.662, + 0.708, + 0.731, + 0.766, + 0.813, + 0.882, + 0.929, + 0.987, + 1.033, + 1.068, + 1.115, + 1.138, + 1.173, + 1.219, + 1.242, + 1.289, + 1.324, + 1.37, + 1.405, + 1.463, + 1.509, + 1.567, + 1.614, + 1.73, + 1.881, + 2.055, + 2.264, + 2.322, + 2.368, + 2.426, + 2.485, + 2.519, + 2.543, + 2.589, + 2.635, + 2.717, + 2.775, + 2.821, + 2.856, + 2.902, + 2.949, + 3.007, + 3.053, + 3.123, + 3.17, + 3.216, + 3.274, + 3.332, + 3.39, + 3.448, + 3.495, + 3.529, + 3.576, + 3.622, + 3.669, + 3.692, + 3.715, + 3.773, + 3.82, + 3.947 + ], + "characterEndTimesSeconds": [ + 0.232, + 0.29, + 0.337, + 0.383, + 0.43, + 0.488, + 0.546, + 0.592, + 0.627, + 0.662, + 0.708, + 0.731, + 0.766, + 0.813, + 0.882, + 0.929, + 0.987, + 1.033, + 1.068, + 1.115, + 1.138, + 1.173, + 1.219, + 1.242, + 1.289, + 1.324, + 1.37, + 1.405, + 1.463, + 1.509, + 1.567, + 1.614, + 1.73, + 1.881, + 2.055, + 2.264, + 2.322, + 2.368, + 2.426, + 2.485, + 2.519, + 2.543, + 2.589, + 2.635, + 2.717, + 2.775, + 2.821, + 2.856, + 2.902, + 2.949, + 3.007, + 3.053, + 3.123, + 3.17, + 3.216, + 3.274, + 3.332, + 3.39, + 3.448, + 3.495, + 3.529, + 3.576, + 3.622, + 3.669, + 3.692, + 3.715, + 3.773, + 3.82, + 3.947, + 4.133 + ] + } + }, + { + "text": "Volcanoes cover much of its surface, but thick clouds of toxic gas hide them from our view.", + "imageDescription": "A dramatic, cross-section image showing tall, craggy volcanoes erupting on Venus’s surface, with waves of bright lava flows partially obscured by dense, swirling yellow-brown clouds, conveying the mysterious hidden world beneath.", + "uid": "5584e376-d02e-48fc-9e47-fc7bf86000af", + "audioTimestamps": { + "characters": [ + "V", + "o", + "l", + "c", + "a", + "n", + "o", + "e", + "s", + " ", + "c", + "o", + "v", + "e", + "r", + " ", + "m", + "u", + "c", + "h", + " ", + "o", + "f", + " ", + "i", + "t", + "s", + " ", + "s", + "u", + "r", + "f", + "a", + "c", + "e", + ",", + " ", + "b", + "u", + "t", + " ", + "t", + "h", + "i", + "c", + "k", + " ", + "c", + "l", + "o", + "u", + "d", + "s", + " ", + "o", + "f", + " ", + "t", + "o", + "x", + "i", + "c", + " ", + "g", + "a", + "s", + " ", + "h", + "i", + "d", + "e", + " ", + "t", + "h", + "e", + "m", + " ", + "f", + "r", + "o", + "m", + " ", + "o", + "u", + "r", + " ", + "v", + "i", + "e", + "w", + "." + ], + "characterStartTimesSeconds": [ + 0, + 0.209, + 0.267, + 0.313, + 0.372, + 0.464, + 0.546, + 0.592, + 0.65, + 0.685, + 0.743, + 0.778, + 0.848, + 0.894, + 0.94, + 0.975, + 1.045, + 1.08, + 1.138, + 1.184, + 1.219, + 1.254, + 1.277, + 1.312, + 1.358, + 1.393, + 1.44, + 1.474, + 1.498, + 1.533, + 1.591, + 1.649, + 1.707, + 1.8, + 1.858, + 2.009, + 2.032, + 2.148, + 2.218, + 2.276, + 2.322, + 2.38, + 2.403, + 2.461, + 2.508, + 2.554, + 2.589, + 2.647, + 2.682, + 2.752, + 2.81, + 2.856, + 2.914, + 2.961, + 2.995, + 3.019, + 3.053, + 3.111, + 3.158, + 3.309, + 3.402, + 3.495, + 3.541, + 3.587, + 3.646, + 3.82, + 3.889, + 3.959, + 4.017, + 4.087, + 4.133, + 4.18, + 4.214, + 4.238, + 4.261, + 4.296, + 4.331, + 4.389, + 4.412, + 4.447, + 4.481, + 4.516, + 4.563, + 4.598, + 4.632, + 4.667, + 4.714, + 4.76, + 4.807, + 4.853, + 4.934 + ], + "characterEndTimesSeconds": [ + 0.209, + 0.267, + 0.313, + 0.372, + 0.464, + 0.546, + 0.592, + 0.65, + 0.685, + 0.743, + 0.778, + 0.848, + 0.894, + 0.94, + 0.975, + 1.045, + 1.08, + 1.138, + 1.184, + 1.219, + 1.254, + 1.277, + 1.312, + 1.358, + 1.393, + 1.44, + 1.474, + 1.498, + 1.533, + 1.591, + 1.649, + 1.707, + 1.8, + 1.858, + 2.009, + 2.032, + 2.148, + 2.218, + 2.276, + 2.322, + 2.38, + 2.403, + 2.461, + 2.508, + 2.554, + 2.589, + 2.647, + 2.682, + 2.752, + 2.81, + 2.856, + 2.914, + 2.961, + 2.995, + 3.019, + 3.053, + 3.111, + 3.158, + 3.309, + 3.402, + 3.495, + 3.541, + 3.587, + 3.646, + 3.82, + 3.889, + 3.959, + 4.017, + 4.087, + 4.133, + 4.18, + 4.214, + 4.238, + 4.261, + 4.296, + 4.331, + 4.389, + 4.412, + 4.447, + 4.481, + 4.516, + 4.563, + 4.598, + 4.632, + 4.667, + 4.714, + 4.76, + 4.807, + 4.853, + 4.934, + 5.201 + ] + } + }, + { + "text": "Although it is Earth's twin in size, Venus is the hottest planet, with surface temperatures high enough to melt lead.", + "imageDescription": "A comparative illustration showing Venus and Earth side by side in space, similar in size, but with Venus’s surface glowing intensely red and orange to represent extreme heat; a thermometer graphic dramatically exceeding the melting point of lead.", + "uid": "33b24fbd-dc71-4692-87af-fdff7661c222", + "audioTimestamps": { + "characters": [ + "A", + "l", + "t", + "h", + "o", + "u", + "g", + "h", + " ", + "i", + "t", + " ", + "i", + "s", + " ", + "E", + "a", + "r", + "t", + "h", + "'", + "s", + " ", + "t", + "w", + "i", + "n", + " ", + "i", + "n", + " ", + "s", + "i", + "z", + "e", + ",", + " ", + "V", + "e", + "n", + "u", + "s", + " ", + "i", + "s", + " ", + "t", + "h", + "e", + " ", + "h", + "o", + "t", + "t", + "e", + "s", + "t", + " ", + "p", + "l", + "a", + "n", + "e", + "t", + ",", + " ", + "w", + "i", + "t", + "h", + " ", + "s", + "u", + "r", + "f", + "a", + "c", + "e", + " ", + "t", + "e", + "m", + "p", + "e", + "r", + "a", + "t", + "u", + "r", + "e", + "s", + " ", + "h", + "i", + "g", + "h", + " ", + "e", + "n", + "o", + "u", + "g", + "h", + " ", + "t", + "o", + " ", + "m", + "e", + "l", + "t", + " ", + "l", + "e", + "a", + "d", + "." + ], + "characterStartTimesSeconds": [ + 0, + 0.221, + 0.279, + 0.313, + 0.337, + 0.372, + 0.395, + 0.43, + 0.453, + 0.488, + 0.511, + 0.546, + 0.58, + 0.627, + 0.662, + 0.72, + 0.755, + 0.789, + 0.824, + 0.882, + 0.906, + 0.952, + 0.987, + 1.022, + 1.08, + 1.149, + 1.231, + 1.277, + 1.335, + 1.37, + 1.405, + 1.486, + 1.544, + 1.753, + 1.823, + 1.997, + 2.032, + 2.206, + 2.276, + 2.345, + 2.426, + 2.508, + 2.554, + 2.612, + 2.659, + 2.694, + 2.74, + 2.763, + 2.786, + 2.81, + 2.856, + 2.902, + 2.949, + 2.995, + 3.042, + 3.088, + 3.123, + 3.158, + 3.204, + 3.251, + 3.309, + 3.379, + 3.46, + 3.529, + 3.646, + 3.762, + 3.971, + 4.029, + 4.075, + 4.11, + 4.145, + 4.191, + 4.238, + 4.284, + 4.342, + 4.389, + 4.447, + 4.493, + 4.516, + 4.551, + 4.574, + 4.621, + 4.667, + 4.702, + 4.737, + 4.772, + 4.807, + 4.853, + 4.899, + 4.946, + 4.992, + 5.016, + 5.074, + 5.108, + 5.166, + 5.201, + 5.236, + 5.271, + 5.306, + 5.352, + 5.387, + 5.422, + 5.457, + 5.492, + 5.538, + 5.561, + 5.596, + 5.666, + 5.701, + 5.747, + 5.793, + 5.84, + 5.898, + 5.944, + 6.014, + 6.072, + 6.188 + ], + "characterEndTimesSeconds": [ + 0.221, + 0.279, + 0.313, + 0.337, + 0.372, + 0.395, + 0.43, + 0.453, + 0.488, + 0.511, + 0.546, + 0.58, + 0.627, + 0.662, + 0.72, + 0.755, + 0.789, + 0.824, + 0.882, + 0.906, + 0.952, + 0.987, + 1.022, + 1.08, + 1.149, + 1.231, + 1.277, + 1.335, + 1.37, + 1.405, + 1.486, + 1.544, + 1.753, + 1.823, + 1.997, + 2.032, + 2.206, + 2.276, + 2.345, + 2.426, + 2.508, + 2.554, + 2.612, + 2.659, + 2.694, + 2.74, + 2.763, + 2.786, + 2.81, + 2.856, + 2.902, + 2.949, + 2.995, + 3.042, + 3.088, + 3.123, + 3.158, + 3.204, + 3.251, + 3.309, + 3.379, + 3.46, + 3.529, + 3.646, + 3.762, + 3.971, + 4.029, + 4.075, + 4.11, + 4.145, + 4.191, + 4.238, + 4.284, + 4.342, + 4.389, + 4.447, + 4.493, + 4.516, + 4.551, + 4.574, + 4.621, + 4.667, + 4.702, + 4.737, + 4.772, + 4.807, + 4.853, + 4.899, + 4.946, + 4.992, + 5.016, + 5.074, + 5.108, + 5.166, + 5.201, + 5.236, + 5.271, + 5.306, + 5.352, + 5.387, + 5.422, + 5.457, + 5.492, + 5.538, + 5.561, + 5.596, + 5.666, + 5.701, + 5.747, + 5.793, + 5.84, + 5.898, + 5.944, + 6.014, + 6.072, + 6.188, + 6.409 + ] + } + }, + { + "text": "Despite its harsh environment, it continues to spark our imagination, reminding us that mysteries often hide in plain sight. People dream that one day, we might find a way to explore its hidden secrets up close.", + "imageDescription": "An imaginative vision of future explorers in advanced protective suits standing beside a futuristic spacecraft on Venus’s surface. Swirling clouds and shimmering hazes fill the sky, while the explorers look out with wonder, symbolizing hope and the human thirst for discovery.", + "uid": "90917ba0-8b7c-4309-a784-4f1fdc28d9fb", + "audioTimestamps": { + "characters": [ + "D", + "e", + "s", + "p", + "i", + "t", + "e", + " ", + "i", + "t", + "s", + " ", + "h", + "a", + "r", + "s", + "h", + " ", + "e", + "n", + "v", + "i", + "r", + "o", + "n", + "m", + "e", + "n", + "t", + ",", + " ", + "i", + "t", + " ", + "c", + "o", + "n", + "t", + "i", + "n", + "u", + "e", + "s", + " ", + "t", + "o", + " ", + "s", + "p", + "a", + "r", + "k", + " ", + "o", + "u", + "r", + " ", + "i", + "m", + "a", + "g", + "i", + "n", + "a", + "t", + "i", + "o", + "n", + ",", + " ", + "r", + "e", + "m", + "i", + "n", + "d", + "i", + "n", + "g", + " ", + "u", + "s", + " ", + "t", + "h", + "a", + "t", + " ", + "m", + "y", + "s", + "t", + "e", + "r", + "i", + "e", + "s", + " ", + "o", + "f", + "t", + "e", + "n", + " ", + "h", + "i", + "d", + "e", + " ", + "i", + "n", + " ", + "p", + "l", + "a", + "i", + "n", + " ", + "s", + "i", + "g", + "h", + "t", + ".", + " ", + "P", + "e", + "o", + "p", + "l", + "e", + " ", + "d", + "r", + "e", + "a", + "m", + " ", + "t", + "h", + "a", + "t", + " ", + "o", + "n", + "e", + " ", + "d", + "a", + "y", + ",", + " ", + "w", + "e", + " ", + "m", + "i", + "g", + "h", + "t", + " ", + "f", + "i", + "n", + "d", + " ", + "a", + " ", + "w", + "a", + "y", + " ", + "t", + "o", + " ", + "e", + "x", + "p", + "l", + "o", + "r", + "e", + " ", + "i", + "t", + "s", + " ", + "h", + "i", + "d", + "d", + "e", + "n", + " ", + "s", + "e", + "c", + "r", + "e", + "t", + "s", + " ", + "u", + "p", + " ", + "c", + "l", + "o", + "s", + "e", + "." + ], + "characterStartTimesSeconds": [ + 0, + 0.197, + 0.267, + 0.325, + 0.406, + 0.464, + 0.522, + 0.569, + 0.604, + 0.639, + 0.685, + 0.72, + 0.778, + 0.813, + 0.871, + 0.929, + 0.975, + 1.01, + 1.057, + 1.091, + 1.138, + 1.196, + 1.289, + 1.347, + 1.393, + 1.44, + 1.486, + 1.544, + 1.591, + 1.707, + 1.823, + 2.032, + 2.101, + 2.148, + 2.194, + 2.218, + 2.264, + 2.322, + 2.38, + 2.438, + 2.519, + 2.577, + 2.647, + 2.67, + 2.717, + 2.74, + 2.775, + 2.833, + 2.879, + 2.949, + 2.995, + 3.053, + 3.123, + 3.181, + 3.228, + 3.262, + 3.286, + 3.332, + 3.367, + 3.425, + 3.495, + 3.553, + 3.611, + 3.68, + 3.773, + 3.843, + 3.901, + 3.947, + 4.063, + 4.214, + 4.54, + 4.598, + 4.656, + 4.725, + 4.795, + 4.841, + 4.888, + 4.957, + 4.981, + 5.004, + 5.074, + 5.143, + 5.236, + 5.317, + 5.341, + 5.399, + 5.433, + 5.468, + 5.526, + 5.573, + 5.631, + 5.7, + 5.759, + 5.805, + 5.863, + 5.921, + 5.979, + 6.026, + 6.107, + 6.153, + 6.246, + 6.316, + 6.362, + 6.397, + 6.455, + 6.502, + 6.594, + 6.653, + 6.687, + 6.722, + 6.757, + 6.78, + 6.838, + 6.885, + 6.931, + 6.978, + 7.036, + 7.07, + 7.14, + 7.198, + 7.279, + 7.326, + 7.361, + 7.477, + 7.57, + 8.266, + 8.336, + 8.394, + 8.44, + 8.499, + 8.557, + 8.603, + 8.649, + 8.707, + 8.766, + 8.812, + 8.87, + 8.928, + 8.986, + 9.009, + 9.044, + 9.079, + 9.114, + 9.172, + 9.242, + 9.311, + 9.358, + 9.404, + 9.451, + 9.567, + 9.718, + 9.868, + 10.112, + 10.182, + 10.24, + 10.298, + 10.344, + 10.391, + 10.426, + 10.461, + 10.495, + 10.542, + 10.6, + 10.67, + 10.728, + 10.751, + 10.809, + 10.832, + 10.879, + 10.913, + 10.971, + 11.018, + 11.088, + 11.122, + 11.157, + 11.238, + 11.285, + 11.366, + 11.447, + 11.517, + 11.587, + 11.633, + 11.668, + 11.714, + 11.749, + 11.796, + 11.842, + 11.889, + 11.923, + 11.97, + 12.016, + 12.051, + 12.098, + 12.132, + 12.202, + 12.249, + 12.341, + 12.411, + 12.469, + 12.516, + 12.585, + 12.632, + 12.678, + 12.736, + 12.783, + 12.852, + 12.899, + 12.98, + 13.096, + 13.166, + 13.41 + ], + "characterEndTimesSeconds": [ + 0.197, + 0.267, + 0.325, + 0.406, + 0.464, + 0.522, + 0.569, + 0.604, + 0.639, + 0.685, + 0.72, + 0.778, + 0.813, + 0.871, + 0.929, + 0.975, + 1.01, + 1.057, + 1.091, + 1.138, + 1.196, + 1.289, + 1.347, + 1.393, + 1.44, + 1.486, + 1.544, + 1.591, + 1.707, + 1.823, + 2.032, + 2.101, + 2.148, + 2.194, + 2.218, + 2.264, + 2.322, + 2.38, + 2.438, + 2.519, + 2.577, + 2.647, + 2.67, + 2.717, + 2.74, + 2.775, + 2.833, + 2.879, + 2.949, + 2.995, + 3.053, + 3.123, + 3.181, + 3.228, + 3.262, + 3.286, + 3.332, + 3.367, + 3.425, + 3.495, + 3.553, + 3.611, + 3.68, + 3.773, + 3.843, + 3.901, + 3.947, + 4.063, + 4.214, + 4.54, + 4.598, + 4.656, + 4.725, + 4.795, + 4.841, + 4.888, + 4.957, + 4.981, + 5.004, + 5.074, + 5.143, + 5.236, + 5.317, + 5.341, + 5.399, + 5.433, + 5.468, + 5.526, + 5.573, + 5.631, + 5.7, + 5.759, + 5.805, + 5.863, + 5.921, + 5.979, + 6.026, + 6.107, + 6.153, + 6.246, + 6.316, + 6.362, + 6.397, + 6.455, + 6.502, + 6.594, + 6.653, + 6.687, + 6.722, + 6.757, + 6.78, + 6.838, + 6.885, + 6.931, + 6.978, + 7.036, + 7.07, + 7.14, + 7.198, + 7.279, + 7.326, + 7.361, + 7.477, + 7.57, + 8.266, + 8.336, + 8.394, + 8.44, + 8.499, + 8.557, + 8.603, + 8.649, + 8.707, + 8.766, + 8.812, + 8.87, + 8.928, + 8.986, + 9.009, + 9.044, + 9.079, + 9.114, + 9.172, + 9.242, + 9.311, + 9.358, + 9.404, + 9.451, + 9.567, + 9.718, + 9.868, + 10.112, + 10.182, + 10.24, + 10.298, + 10.344, + 10.391, + 10.426, + 10.461, + 10.495, + 10.542, + 10.6, + 10.67, + 10.728, + 10.751, + 10.809, + 10.832, + 10.879, + 10.913, + 10.971, + 11.018, + 11.088, + 11.122, + 11.157, + 11.238, + 11.285, + 11.366, + 11.447, + 11.517, + 11.587, + 11.633, + 11.668, + 11.714, + 11.749, + 11.796, + 11.842, + 11.889, + 11.923, + 11.97, + 12.016, + 12.051, + 12.098, + 12.132, + 12.202, + 12.249, + 12.341, + 12.411, + 12.469, + 12.516, + 12.585, + 12.632, + 12.678, + 12.736, + 12.783, + 12.852, + 12.899, + 12.98, + 13.096, + 13.166, + 13.41, + 13.56 + ] + } + } + ] +} \ No newline at end of file diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/images/11f4911a-f39f-4567-8963-41511d05b593.png b/packages/template-prompt-to-video/public/content/history-of-venus/images/11f4911a-f39f-4567-8963-41511d05b593.png new file mode 100644 index 00000000000..0668858b441 Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/images/11f4911a-f39f-4567-8963-41511d05b593.png differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/images/20cf0ab8-49cb-4ead-816d-6af0b588668a.png b/packages/template-prompt-to-video/public/content/history-of-venus/images/20cf0ab8-49cb-4ead-816d-6af0b588668a.png new file mode 100644 index 00000000000..f3bcda5fc9a Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/images/20cf0ab8-49cb-4ead-816d-6af0b588668a.png differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/images/33b24fbd-dc71-4692-87af-fdff7661c222.png b/packages/template-prompt-to-video/public/content/history-of-venus/images/33b24fbd-dc71-4692-87af-fdff7661c222.png new file mode 100644 index 00000000000..c9abdb6f3e5 Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/images/33b24fbd-dc71-4692-87af-fdff7661c222.png differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/images/5584e376-d02e-48fc-9e47-fc7bf86000af.png b/packages/template-prompt-to-video/public/content/history-of-venus/images/5584e376-d02e-48fc-9e47-fc7bf86000af.png new file mode 100644 index 00000000000..b204078679c Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/images/5584e376-d02e-48fc-9e47-fc7bf86000af.png differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/images/83e869e5-18fd-4de9-b70f-dc0f180da912.png b/packages/template-prompt-to-video/public/content/history-of-venus/images/83e869e5-18fd-4de9-b70f-dc0f180da912.png new file mode 100644 index 00000000000..ccfd4a4c603 Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/images/83e869e5-18fd-4de9-b70f-dc0f180da912.png differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/images/90917ba0-8b7c-4309-a784-4f1fdc28d9fb.png b/packages/template-prompt-to-video/public/content/history-of-venus/images/90917ba0-8b7c-4309-a784-4f1fdc28d9fb.png new file mode 100644 index 00000000000..a4b85bc60b0 Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/images/90917ba0-8b7c-4309-a784-4f1fdc28d9fb.png differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/images/919d538b-3407-440a-b26a-73a5321a3af0.png b/packages/template-prompt-to-video/public/content/history-of-venus/images/919d538b-3407-440a-b26a-73a5321a3af0.png new file mode 100644 index 00000000000..d5ae39fe4c2 Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/images/919d538b-3407-440a-b26a-73a5321a3af0.png differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/images/99af6411-714b-4b72-b66e-f6c02a184493.png b/packages/template-prompt-to-video/public/content/history-of-venus/images/99af6411-714b-4b72-b66e-f6c02a184493.png new file mode 100644 index 00000000000..0c48cb8cef4 Binary files /dev/null and b/packages/template-prompt-to-video/public/content/history-of-venus/images/99af6411-714b-4b72-b66e-f6c02a184493.png differ diff --git a/packages/template-prompt-to-video/public/content/history-of-venus/timeline.json b/packages/template-prompt-to-video/public/content/history-of-venus/timeline.json new file mode 100644 index 00000000000..1bea8d34828 --- /dev/null +++ b/packages/template-prompt-to-video/public/content/history-of-venus/timeline.json @@ -0,0 +1,1606 @@ +{ + "elements": [ + { + "startMs": 0, + "endMs": 7616, + "imageUrl": "83e869e5-18fd-4de9-b70f-dc0f180da912", + "enterTransition": "blur", + "exitTransition": "blur", + "animations": [ + { + "type": "scale", + "from": 1.5, + "to": 1, + "startMs": 0, + "endMs": 7616 + } + ] + }, + { + "startMs": 7616, + "endMs": 11935, + "imageUrl": "99af6411-714b-4b72-b66e-f6c02a184493", + "enterTransition": "blur", + "exitTransition": "blur", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.5, + "startMs": 0, + "endMs": 4319 + } + ] + }, + { + "startMs": 11935, + "endMs": 18762, + "imageUrl": "919d538b-3407-440a-b26a-73a5321a3af0", + "enterTransition": "blur", + "exitTransition": "blur", + "animations": [ + { + "type": "scale", + "from": 1.5, + "to": 1, + "startMs": 0, + "endMs": 6827 + } + ] + }, + { + "startMs": 18762, + "endMs": 24753, + "imageUrl": "20cf0ab8-49cb-4ead-816d-6af0b588668a", + "enterTransition": "blur", + "exitTransition": "blur", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.5, + "startMs": 0, + "endMs": 5991 + } + ] + }, + { + "startMs": 24753, + "endMs": 28886, + "imageUrl": "11f4911a-f39f-4567-8963-41511d05b593", + "enterTransition": "blur", + "exitTransition": "blur", + "animations": [ + { + "type": "scale", + "from": 1.5, + "to": 1, + "startMs": 0, + "endMs": 4133 + } + ] + }, + { + "startMs": 28886, + "endMs": 34087, + "imageUrl": "5584e376-d02e-48fc-9e47-fc7bf86000af", + "enterTransition": "blur", + "exitTransition": "blur", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.5, + "startMs": 0, + "endMs": 5201 + } + ] + }, + { + "startMs": 34087, + "endMs": 40496, + "imageUrl": "33b24fbd-dc71-4692-87af-fdff7661c222", + "enterTransition": "blur", + "exitTransition": "blur", + "animations": [ + { + "type": "scale", + "from": 1.5, + "to": 1, + "startMs": 0, + "endMs": 6409 + } + ] + }, + { + "startMs": 40496, + "endMs": 54056, + "imageUrl": "90917ba0-8b7c-4309-a784-4f1fdc28d9fb", + "enterTransition": "blur", + "exitTransition": "blur", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.5, + "startMs": 0, + "endMs": 13560 + } + ] + } + ], + "text": [ + { + "startMs": 0, + "endMs": 685, + "text": "Once upon a", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 685, + "endMs": 1695, + "text": "time, long", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5070892202427698, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 1695, + "endMs": 1997, + "text": "before", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.650247613480069, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 1997, + "endMs": 2612, + "text": "telescopes", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 2612, + "endMs": 3042, + "text": "watched the", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 3042, + "endMs": 4145, + "text": "sky, people", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5312906191856691, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 4145, + "endMs": 4714, + "text": "looked up and", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6984326431081123, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 4714, + "endMs": 5410, + "text": "saw a bright", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6445892502264121, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 5410, + "endMs": 6339, + "text": "star, not", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 6339, + "endMs": 6896, + "text": "knowing it was", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 6896, + "endMs": 7616, + "text": "Venus.", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 7616, + "endMs": 8231, + "text": "The ancient", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 8231, + "endMs": 8916, + "text": "Romans named", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.662161653933625, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 8916, + "endMs": 9497, + "text": "it after their", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 9497, + "endMs": 10008, + "text": "goddess of", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6388131110354789, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 10008, + "endMs": 10600, + "text": "love because", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6323294044608418, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 10600, + "endMs": 10855, + "text": "of its", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 10855, + "endMs": 11331, + "text": "beautiful", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.689881743853058, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 11331, + "endMs": 11935, + "text": "glow.", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5843134627873369, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 11935, + "endMs": 12690, + "text": "Incredibly,", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 12690, + "endMs": 13015, + "text": "there were", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6822711271671517, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 13015, + "endMs": 13560, + "text": "times it was", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6171702148398952, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 13560, + "endMs": 14025, + "text": "called both", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 14025, + "endMs": 14524, + "text": "the 'Morning", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6213784824708739, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 14524, + "endMs": 15522, + "text": "Star' and the", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 15522, + "endMs": 15917, + "text": "'Evening", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.679307191316065, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 15917, + "endMs": 16962, + "text": "Star'—no one", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6175949484127287, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 16962, + "endMs": 17577, + "text": "realized they", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 17577, + "endMs": 18053, + "text": "were the same", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 18053, + "endMs": 18762, + "text": "planet!", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 18762, + "endMs": 19505, + "text": "Unlike any", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.59875153690998, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 19505, + "endMs": 20376, + "text": "other planet,", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5666186805089255, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 20376, + "endMs": 21084, + "text": "Venus spins", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6654676119000248, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 21084, + "endMs": 22152, + "text": "backwards, so", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6171542494318256, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 22152, + "endMs": 22872, + "text": "the Sun rises", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6799068445538758, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 22872, + "endMs": 23441, + "text": "in the west", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6524040045014661, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 23441, + "endMs": 23940, + "text": "and sets in", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6973740497614885, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 23940, + "endMs": 24753, + "text": "the east.", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 24753, + "endMs": 25519, + "text": "Its days are", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5017647501826319, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 25519, + "endMs": 26042, + "text": "longer than", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5972452883935493, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 26042, + "endMs": 27017, + "text": "its years,", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.564986619802243, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 27017, + "endMs": 27609, + "text": "making time", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6018507711057028, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 27609, + "endMs": 28282, + "text": "seem strange", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5782847024126105, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 28282, + "endMs": 28886, + "text": "up there.", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5055966053795952, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 28886, + "endMs": 29629, + "text": "Volcanoes", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5629222453413919, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 29629, + "endMs": 30244, + "text": "cover much of", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5699858221834716, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 30244, + "endMs": 31034, + "text": "its surface,", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5950691148336467, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 31034, + "endMs": 31533, + "text": "but thick", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5566802724360221, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 31533, + "endMs": 31997, + "text": "clouds of", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5366881194737613, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 31997, + "endMs": 33100, + "text": "toxic gas hide", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 33100, + "endMs": 33600, + "text": "them from our", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6484750077540622, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 33600, + "endMs": 34087, + "text": "view.", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5735095017110776, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 34087, + "endMs": 34807, + "text": "Although it is", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 34807, + "endMs": 35422, + "text": "Earth's twin", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6985425271710941, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 35422, + "endMs": 36699, + "text": "in size, Venus", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6887989441787467, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 36699, + "endMs": 37291, + "text": "is the hottest", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6311379480437896, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 37291, + "endMs": 38278, + "text": "planet, with", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5681166169682664, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 38278, + "endMs": 38638, + "text": "surface", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.654541893694066, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 38638, + "endMs": 39161, + "text": "temperatures", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 39161, + "endMs": 39753, + "text": "high enough to", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6818260316184099, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 39753, + "endMs": 40496, + "text": "melt lead.", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5424967449824123, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 40496, + "endMs": 41274, + "text": "Despite its", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5271325069222614, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 41274, + "endMs": 41553, + "text": "harsh", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 41553, + "endMs": 42528, + "text": "environment,", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 42528, + "endMs": 43213, + "text": "it continues", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6036401812144718, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 43213, + "endMs": 43828, + "text": "to spark our", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 43828, + "endMs": 45036, + "text": "imagination,", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 45036, + "endMs": 45813, + "text": "reminding us", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 45813, + "endMs": 46603, + "text": "that mysteries", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 46603, + "endMs": 47334, + "text": "often hide in", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6491396876752396, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 47334, + "endMs": 48762, + "text": "plain sight.", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6418804091035437, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 48762, + "endMs": 49482, + "text": "People dream", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5264743831317681, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 49482, + "endMs": 50608, + "text": "that one day,", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 50608, + "endMs": 51305, + "text": "we might find", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.5898792305191535, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 51305, + "endMs": 51734, + "text": "a way to", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6063143077570282, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 51734, + "endMs": 52385, + "text": "explore its", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6772011243839006, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + }, + { + "startMs": 52385, + "endMs": 53174, + "text": "hidden secrets", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 1, + "to": 1, + "startMs": 0, + "endMs": 300 + } + ] + }, + { + "startMs": 53174, + "endMs": 54056, + "text": "up close.", + "position": "center", + "animations": [ + { + "type": "scale", + "from": 0.6598653425552847, + "to": 1.25, + "startMs": 0, + "endMs": 300 + }, + { + "type": "scale", + "from": 1.25, + "to": 1, + "startMs": 300, + "endMs": 500 + } + ] + } + ], + "audio": [ + { + "startMs": 0, + "endMs": 7616, + "audioUrl": "83e869e5-18fd-4de9-b70f-dc0f180da912" + }, + { + "startMs": 7616, + "endMs": 11935, + "audioUrl": "99af6411-714b-4b72-b66e-f6c02a184493" + }, + { + "startMs": 11935, + "endMs": 18762, + "audioUrl": "919d538b-3407-440a-b26a-73a5321a3af0" + }, + { + "startMs": 18762, + "endMs": 24753, + "audioUrl": "20cf0ab8-49cb-4ead-816d-6af0b588668a" + }, + { + "startMs": 24753, + "endMs": 28886, + "audioUrl": "11f4911a-f39f-4567-8963-41511d05b593" + }, + { + "startMs": 28886, + "endMs": 34087, + "audioUrl": "5584e376-d02e-48fc-9e47-fc7bf86000af" + }, + { + "startMs": 34087, + "endMs": 40496, + "audioUrl": "33b24fbd-dc71-4692-87af-fdff7661c222" + }, + { + "startMs": 40496, + "endMs": 54056, + "audioUrl": "90917ba0-8b7c-4309-a784-4f1fdc28d9fb" + } + ], + "shortTitle": "History of Venus" +} diff --git a/packages/template-prompt-to-video/remotion.config.ts b/packages/template-prompt-to-video/remotion.config.ts new file mode 100644 index 00000000000..2fb58bae468 --- /dev/null +++ b/packages/template-prompt-to-video/remotion.config.ts @@ -0,0 +1,9 @@ +// See all configuration options: https://remotion.dev/docs/config +// Each option also is available as a CLI flag: https://remotion.dev/docs/cli + +// Note: When using the Node.JS APIs, the config file doesn't apply. Instead, pass options directly to the APIs + +import { Config } from "@remotion/cli/config"; + +Config.setVideoImageFormat("jpeg"); +Config.setOverwriteOutput(true); diff --git a/packages/template-prompt-to-video/src/Root.tsx b/packages/template-prompt-to-video/src/Root.tsx new file mode 100644 index 00000000000..a7dbc6d9acb --- /dev/null +++ b/packages/template-prompt-to-video/src/Root.tsx @@ -0,0 +1,42 @@ +import { Composition, getStaticFiles } from "remotion"; +import { AIVideo, aiVideoSchema } from "./components/AIVideo"; +import { FPS, INTRO_DURATION } from "./lib/constants"; +import { getTimelinePath, loadTimelineFromFile } from "./lib/utils"; + +export const RemotionRoot: React.FC = () => { + const staticFiles = getStaticFiles(); + const timelines = staticFiles + .filter((file) => file.name.endsWith("timeline.json")) + .map((file) => file.name.split("/")[1]); + + return ( + <> + {timelines.map((storyName) => ( + { + const { lengthFrames, timeline } = await loadTimelineFromFile( + getTimelinePath(storyName), + ); + + return { + durationInFrames: lengthFrames + INTRO_DURATION, + props: { + ...props, + timeline, + }, + }; + }} + /> + ))} + + ); +}; diff --git a/packages/template-prompt-to-video/src/components/AIVideo.tsx b/packages/template-prompt-to-video/src/components/AIVideo.tsx new file mode 100644 index 00000000000..ce8e9578bee --- /dev/null +++ b/packages/template-prompt-to-video/src/components/AIVideo.tsx @@ -0,0 +1,114 @@ +import { AbsoluteFill, Sequence, staticFile, useVideoConfig } from "remotion"; +import { z } from "zod"; +import { Audio } from "@remotion/media"; +import { TimelineSchema } from "../lib/types"; +import { FPS, INTRO_DURATION } from "../lib/constants"; +import { loadFont } from "@remotion/google-fonts/BreeSerif"; +import { Background } from "./Background"; +import Subtitle from "./Subtitle"; +import { calculateFrameTiming, getAudioPath } from "../lib/utils"; + +export const aiVideoSchema = z.object({ + timeline: TimelineSchema.nullable(), +}); + +const { fontFamily } = loadFont(); + +export const AIVideo: React.FC> = ({ + timeline, +}) => { + if (!timeline) { + throw new Error("Expected timeline to be fetched"); + } + + const { id } = useVideoConfig(); + + return ( + + + +
+ {timeline.shortTitle} +
+
+
+ + {timeline.elements.map((element, index) => { + const { startFrame, duration } = calculateFrameTiming( + element.startMs, + element.endMs, + { includeIntro: index === 0 }, + ); + + return ( + + + + ); + })} + + {timeline.text.map((element, index) => { + const { startFrame, duration } = calculateFrameTiming( + element.startMs, + element.endMs, + { addIntroOffset: true }, + ); + + return ( + + + + ); + })} + + {timeline.audio.map((element, index) => { + const { startFrame, duration } = calculateFrameTiming( + element.startMs, + element.endMs, + { addIntroOffset: true }, + ); + + return ( + + + ); + })} +
+ ); +}; diff --git a/packages/template-prompt-to-video/src/components/Background.tsx b/packages/template-prompt-to-video/src/components/Background.tsx new file mode 100644 index 00000000000..e2baf142b79 --- /dev/null +++ b/packages/template-prompt-to-video/src/components/Background.tsx @@ -0,0 +1,68 @@ +import { + AbsoluteFill, + Img, + staticFile, + useCurrentFrame, + useVideoConfig, +} from "remotion"; +import { FPS, IMAGE_HEIGHT, IMAGE_WIDTH } from "../lib/constants"; +import { BackgroundElement } from "../lib/types"; +import { calculateBlur, getImagePath } from "../lib/utils"; + +const EXTRA_SCALE = 0.2; + +export const Background: React.FC<{ + item: BackgroundElement; + project: string; +}> = ({ item, project }) => { + const frame = useCurrentFrame(); + const localMs = (frame / FPS) * 1000; + const { width, height } = useVideoConfig(); + + const imageRatio = IMAGE_HEIGHT / IMAGE_WIDTH; + + const imgWidth = height; + const imgHeight = imgWidth * imageRatio; + let animScale = 1 + EXTRA_SCALE; + + const currentScaleAnim = item.animations?.find( + (anim) => + anim.type === "scale" && anim.startMs <= localMs && anim.endMs >= localMs, + ); + + if (currentScaleAnim) { + const progress = + (localMs - currentScaleAnim.startMs) / + (currentScaleAnim.endMs - currentScaleAnim.startMs); + animScale = + EXTRA_SCALE + + progress * (currentScaleAnim.to - currentScaleAnim.from) + + currentScaleAnim.from; + } + + const imgScale = animScale; + const top = -(imgHeight * imgScale - height) / 2; + const left = -(imgWidth * imgScale - width) / 2; + + const blur = calculateBlur({ item, localMs }); + const maxBlur = 25; + + const currentBlur = maxBlur * blur; + + return ( + + + + ); +}; diff --git a/packages/template-prompt-to-video/src/components/Subtitle.tsx b/packages/template-prompt-to-video/src/components/Subtitle.tsx new file mode 100644 index 00000000000..389ec762a3a --- /dev/null +++ b/packages/template-prompt-to-video/src/components/Subtitle.tsx @@ -0,0 +1,35 @@ +import React from "react"; +import { + AbsoluteFill, + spring, + useCurrentFrame, + useVideoConfig, +} from "remotion"; +import { Word } from "./Word"; + +const Subtitle: React.FC<{ text: string }> = ({ text }) => { + const frame = useCurrentFrame(); + const { fps } = useVideoConfig(); + + const enter = spring({ + frame, + fps, + config: { + damping: 200, + }, + durationInFrames: 5, + }); + + return ( + + + + + + + + + ); +}; + +export default Subtitle; diff --git a/packages/template-prompt-to-video/src/components/Word.tsx b/packages/template-prompt-to-video/src/components/Word.tsx new file mode 100644 index 00000000000..bc30632b16a --- /dev/null +++ b/packages/template-prompt-to-video/src/components/Word.tsx @@ -0,0 +1,52 @@ +import type React from "react"; +import { AbsoluteFill, interpolate, useVideoConfig } from "remotion"; +import { fitText } from "@remotion/layout-utils"; +import { makeTransform, scale, translateY } from "@remotion/animation-utils"; +import { loadFont } from "@remotion/google-fonts/BreeSerif"; + +export const Word: React.FC<{ + enterProgress: number; + text: string; + stroke: boolean; +}> = ({ enterProgress, text, stroke }) => { + const { fontFamily } = loadFont(); + const { width } = useVideoConfig(); + const desiredFontSize = 120; + + const fittedText = fitText({ + fontFamily, + text, + withinWidth: width * 0.8, + }); + + const fontSize = Math.min(desiredFontSize, fittedText.fontSize); + + return ( + +
+ {text} +
+
+ ); +}; diff --git a/packages/template-prompt-to-video/src/index.ts b/packages/template-prompt-to-video/src/index.ts new file mode 100644 index 00000000000..f31c790edb3 --- /dev/null +++ b/packages/template-prompt-to-video/src/index.ts @@ -0,0 +1,4 @@ +import { registerRoot } from "remotion"; +import { RemotionRoot } from "./Root"; + +registerRoot(RemotionRoot); diff --git a/packages/template-prompt-to-video/src/lib/constants.ts b/packages/template-prompt-to-video/src/lib/constants.ts new file mode 100644 index 00000000000..847c5a36971 --- /dev/null +++ b/packages/template-prompt-to-video/src/lib/constants.ts @@ -0,0 +1,4 @@ +export const FPS = 30; +export const INTRO_DURATION = 1 * FPS; +export const IMAGE_WIDTH = 1024; +export const IMAGE_HEIGHT = 1792; diff --git a/packages/template-prompt-to-video/src/lib/types.ts b/packages/template-prompt-to-video/src/lib/types.ts new file mode 100644 index 00000000000..ad0c9c423ad --- /dev/null +++ b/packages/template-prompt-to-video/src/lib/types.ts @@ -0,0 +1,100 @@ +import { CharacterAlignmentResponseModel } from "@elevenlabs/elevenlabs-js/api"; +import { z } from "zod"; + +const BackgroundTransitionTypeSchema = z.union([ + z.literal("fade"), + z.literal("blur"), + z.literal("none"), +]); + +const TimelineElementSchema = z.object({ + startMs: z.number(), + endMs: z.number(), +}); + +const ElementAnimationSchema = TimelineElementSchema.extend({ + type: z.literal("scale"), + from: z.number(), + to: z.number(), +}); + +const BackgroundElementSchema = TimelineElementSchema.extend({ + imageUrl: z.string(), + enterTransition: BackgroundTransitionTypeSchema.optional(), + exitTransition: BackgroundTransitionTypeSchema.optional(), + animations: z.array(ElementAnimationSchema).optional(), +}); + +const TextElementSchema = TimelineElementSchema.extend({ + text: z.string(), + position: z.union([ + z.literal("top"), + z.literal("bottom"), + z.literal("center"), + ]), + animations: z.array(ElementAnimationSchema).optional(), +}); + +const AudioElementSchema = TimelineElementSchema.extend({ + audioUrl: z.string(), +}); + +const TimelineSchema = z.object({ + shortTitle: z.string(), + elements: z.array(BackgroundElementSchema), + text: z.array(TextElementSchema), + audio: z.array(AudioElementSchema), +}); + +export type BackgroundTransitionType = z.infer< + typeof BackgroundTransitionTypeSchema +>; + +export type TimelineElement = z.infer; +export type ElementAnimation = z.infer; +export type BackgroundElement = z.infer; +export type TextElement = z.infer; +export type AudioElement = z.infer; +export type Timeline = z.infer; + +export { + BackgroundTransitionTypeSchema, + TimelineElementSchema, + ElementAnimationSchema, + BackgroundElementSchema, + TextElementSchema, + AudioElementSchema, + TimelineSchema, +}; + +export const StoryScript = z.object({ + text: z.string(), +}); + +export const StoryWithImages = z.object({ + result: z.array( + z.object({ + text: z.string(), + imageDescription: z.string(), + }), + ), +}); + +export const VoiceDescriptorSchema = z.object({ + id: z.string(), + name: z.string(), +}); + +export type VoiceDescriptor = z.infer; + +export interface StoryMetadataWithDetails { + shortTitle: string; + content: ContentItemWithDetails[]; +} + +export interface ContentItemWithDetails { + text: string; + imageDescription: string; + uid: string; + audioTimestamps: CharacterAlignmentResponseModel; +} diff --git a/packages/template-prompt-to-video/src/lib/utils.ts b/packages/template-prompt-to-video/src/lib/utils.ts new file mode 100644 index 00000000000..f9347109957 --- /dev/null +++ b/packages/template-prompt-to-video/src/lib/utils.ts @@ -0,0 +1,69 @@ +import { staticFile } from "remotion"; +import { BackgroundElement, Timeline } from "./types"; +import { FPS, INTRO_DURATION } from "./constants"; + +export const loadTimelineFromFile = async (filename: string) => { + const res = await fetch(staticFile(filename)); + const json = await res.json(); + const timeline = json as Timeline; + timeline.elements.sort((a, b) => a.startMs - b.startMs); + + const lengthMs = + timeline.elements.length > 0 + ? timeline.elements[timeline.elements.length - 1].endMs / 1000 + : 0; + const lengthFrames = Math.floor(lengthMs * FPS); + + return { timeline, lengthFrames }; +}; + +export const calculateFrameTiming = ( + startMs: number, + endMs: number, + options: { includeIntro?: boolean; addIntroOffset?: boolean } = {}, +) => { + const { includeIntro = false, addIntroOffset = false } = options; + + const startFrame = + (startMs * FPS) / 1000 + (addIntroOffset ? INTRO_DURATION : 0); + const duration = + ((endMs - startMs) * FPS) / 1000 + (includeIntro ? INTRO_DURATION : 0); + + return { startFrame, duration }; +}; + +export const calculateBlur = ({ + item, + localMs, +}: { + item: BackgroundElement; + localMs: number; +}) => { + const maxBlur = 1; + const fadeMs = 1000; + + const startMs = item.startMs; + const endMs = item.endMs; + + const { enterTransition } = item; + const { exitTransition } = item; + + if (enterTransition === "blur" && localMs < fadeMs) { + return (1 - localMs / fadeMs) * maxBlur; + } + + if (exitTransition === "blur" && localMs > endMs - startMs - fadeMs) { + return (1 - (endMs - startMs - localMs) / fadeMs) * maxBlur; + } + + return 0; +}; + +export const getTimelinePath = (proj: string) => + `content/${proj}/timeline.json`; + +export const getImagePath = (proj: string, uid: string) => + `content/${proj}/images/${uid}.png`; + +export const getAudioPath = (proj: string, uid: string) => + `content/${proj}/audio/${uid}.mp3`; diff --git a/packages/template-prompt-to-video/tsconfig.json b/packages/template-prompt-to-video/tsconfig.json new file mode 100644 index 00000000000..4bdf271b9d1 --- /dev/null +++ b/packages/template-prompt-to-video/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "commonjs", + "jsx": "react-jsx", + "strict": true, + "noEmit": true, + "lib": ["es2015"], + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "noUnusedLocals": true + }, + "exclude": ["remotion.config.ts"] +} diff --git a/tsconfig.json b/tsconfig.json index 8fd0bfd8c61..08b687fa353 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -171,6 +171,9 @@ { "path": "./packages/template-audiogram" }, + { + "path": "./packages/template-prompt-to-video" + }, { "path": "./packages/template-music-visualization" },