{"id":13572562,"url":"https://github.com/redotvideo/revideo","last_synced_at":"2025-05-14T01:09:38.389Z","repository":{"id":227100212,"uuid":"770297271","full_name":"redotvideo/revideo","owner":"redotvideo","description":"Create Videos with Code","archived":false,"fork":false,"pushed_at":"2025-02-24T15:49:15.000Z","size":13265,"stargazers_count":3177,"open_issues_count":46,"forks_count":129,"subscribers_count":14,"default_branch":"main","last_synced_at":"2025-04-10T22:17:52.516Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://re.video","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/redotvideo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["aarthificial"],"patreon":"aarthificial"}},"created_at":"2024-03-11T10:04:04.000Z","updated_at":"2025-04-09T20:08:27.000Z","dependencies_parsed_at":"2024-04-24T10:44:28.062Z","dependency_job_id":"058b48c4-9f87-4187-950b-26be9b42c4c1","html_url":"https://github.com/redotvideo/revideo","commit_stats":null,"previous_names":["havenhq/revideo","redotvideo/revideo"],"tags_count":57,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redotvideo%2Frevideo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redotvideo%2Frevideo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redotvideo%2Frevideo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redotvideo%2Frevideo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redotvideo","download_url":"https://codeload.github.com/redotvideo/revideo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248305856,"owners_count":21081577,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T14:01:26.808Z","updated_at":"2025-04-10T22:17:57.247Z","avatar_url":"https://github.com/redotvideo.png","language":"TypeScript","funding_links":["https://github.com/sponsors/aarthificial","https://patreon.com/aarthificial"],"categories":["TypeScript","Language and platform specific libraries"],"sub_categories":["Javascript"],"readme":"\u003cbr/\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://re.video\"\u003e\n    \u003cpicture\u003e\n      \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./logo_dark.svg\"\u003e\n      \u003cimg width=\"360\" alt=\"Revideo logo\" src=\"./logo.svg\"\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://lerna.js.org\"\u003e\u003cimg src=\"https://img.shields.io/badge/published%20with-lerna-c084fc?style=flat\" alt=\"published with lerna\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://vitejs.dev\"\u003e\u003cimg src=\"https://img.shields.io/badge/powered%20by-vite-646cff?style=flat\" alt=\"powered by vite\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@revideo/core\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@revideo/core?style=flat\" alt=\"npm package version\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://discord.com/invite/JDjbfp6q2G\"\u003e\u003cimg src=\"https://img.shields.io/discord/1071029581009657896?style=flat\u0026logo=discord\u0026logoColor=fff\u0026color=404eed\" alt=\"discord\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cbr/\u003e\n\n# Revideo - Create Videos with Code\n\nRevideo is an open source framework for programmatic video editing. It is forked\nfrom the amazing [Motion Canvas](https://motioncanvas.io/) editor, with the goal\nof turning it from a standalone application into a library that developers can\nuse to build entire video editing apps.\n\nRevideo lets you create video templates in Typescript and deploy an API endpoint\nto render them with dynamic inputs. It also provides a React player component to\npreview changes in the browser in real-time. If you want to learn more, you can\ncheck out our [docs](https://docs.re.video/), our\n[examples repository](https://github.com/redotvideo/revideo-examples), and join\nour [Discord server](https://discord.com/invite/MVJsrqjy3j).\n\n#### News 🔥\n\n- [05/21/2024] We released an\n  [example](https://github.com/redotvideo/revideo-examples/tree/main/google-cloud-run-parallelized)\n  on how to parallelize rendering jobs with Google Cloud Functions\n- [05/20/2024] We have a [new website](https://re.video/)!\n\n\u003cbr/\u003e\n\n## Getting Started\n\nTo create an example project, run the following command:\n\n```bash\nnpm init @revideo@latest\n```\n\nThe example project will have the following code, which defines the video shown\nbelow.\n\n```tsx\nimport {Audio, Img, Video, makeScene2D} from '@revideo/2d';\nimport {all, chain, createRef, waitFor} from '@revideo/core';\n\nexport default makeScene2D('scene', function* (view) {\n  const logoRef = createRef\u003cImg\u003e();\n\n  yield view.add(\n    \u003c\u003e\n      \u003cVideo\n        src={'https://revideo-example-assets.s3.amazonaws.com/stars.mp4'}\n        size={['100%', '100%']}\n        play={true}\n      /\u003e\n      \u003cAudio\n        src={'https://revideo-example-assets.s3.amazonaws.com/chill-beat.mp3'}\n        play={true}\n        time={17.0}\n      /\u003e\n    \u003c/\u003e,\n  );\n\n  yield* waitFor(1);\n\n  view.add(\n    \u003cImg\n      width={'1%'}\n      ref={logoRef}\n      src={\n        'https://revideo-example-assets.s3.amazonaws.com/revideo-logo-white.png'\n      }\n    /\u003e,\n  );\n\n  yield* chain(\n    all(logoRef().scale(40, 2), logoRef().rotation(360, 2)),\n    logoRef().scale(60, 1),\n  );\n});\n```\n\nhttps://github.com/havenhq/revideo/assets/122226645/4d4e56ba-5143-4e4b-9acf-d8a04330d162\n\n\u003cbr/\u003e\n\n## Differences between Revideo and Motion Canvas\n\nMotion Canvas aims to be a\n[standalone editor](https://github.com/orgs/motion-canvas/discussions/1015) for\nanimations. While it happens to be distributed as an npm package, the\nmaintainers don't intend for it to be used as a library.\n\nWe started out as users of Motion Canvas ourselves but ran into these\nlimitations when we wanted to build a video editing app on top of it. After\nbuilding our initial version using Motion Canvas' plugin system, we realized\nthat we wanted to make more fundamental changes to the codebase that would be\ndifficult to implement while keeping compatibility with the existing Motion\nCanvas API.\n\nThat's why we decided to fork the project and turn it into Revideo. We wrote a\nbit more about it on our [blog](https://re.video/blog/fork).\n\nConcretely, some of the differences to Motion Canvas are the following ones:\n\n- **Headless Rendering:** Motion Canvas currently requires you to press a button\n  in its UI to render a video. We have exposed this functionality as a\n  [function call](https://docs.re.video/renderer/renderVideo/) and are making it\n  possible to deploy a rendering API to services like Google Cloud Run\n  ([example](https://github.com/redotvideo/revideo-examples/tree/main/google-cloud-run),\n  or to use our CLI to expose a rendering endpoint from your Revideo project\n  ([docs](https://docs.re.video/render-endpoint))\n- **Faster Rendering:** When building an app rather than creating videos for\n  yourself, rendering speeds are quite important. We have sped up rendering\n  speeds by enabling\n  [parallelized rendering](https://github.com/redotvideo/revideo/pull/74) and\n  replacing the `seek()` operation for HTML video with our ffmpeg-based\n  [video frame extractor](https://github.com/redotvideo/revideo/pull/33)\n- **Better Audio Support:** We have enabled audio export from `\u003cVideo/\u003e` tags\n  during rendering, and have also added an `\u003cAudio/\u003e` tag that makes it easy to\n  synchronize audio with your animations.\n\n\u003cbr/\u003e\n\n## Telemetry\n\nTo understand how people use Revideo, we **anonymously** track how many videos\nare rendered using the open-source tool\n[Posthog](https://github.com/PostHog/posthog). You can find our code\nimplementing Posthog\n[here](https://github.com/redotvideo/revideo/tree/main/packages/telemetry).\n\nIf you want to disable telemetry, just set the following environment variable:\n\n```bash\nDISABLE_TELEMETRY=true\n```\n\n## Learn More\n\nTo learn more about Revideo, feel free to check out our\n[documentation](http://docs.re.video/) or join our\n[Discord server](https://discord.gg/hexYBZGBY8).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredotvideo%2Frevideo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredotvideo%2Frevideo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredotvideo%2Frevideo/lists"}