8 ms·
Show HN: Revideo – Create Videos with Code
Hey HN! We’re building Revideo (https://github.com/redotvideo/revideo https://github.com/redotvideo/revideo), an open source framework for programmatic video editing.
Revideo lets you create video templates in Typescript and render them with dynamic inputs through an API. It also comes with a <Player /> component that lets you preview your projects in the browser and integrate video editing functionality into web apps.
The project is useful for anyone who wants to build apps that automate certain video editing tasks. A lot of companies in the space build their own custom stack for this, like Opus (https://www.opus.pro/ https://www.opus.pro/), which automatically creates highlight videos from podcasts, or Clueso (https://www.clueso.io/ https://www.clueso.io/), which lets you create stutter-free product walkthroughs with AI voiceovers.
Revideo is based on the HTML Canvas API and is forked from Motion Canvas (https://github.com/motion-canvas/motion-canvas https://github.com/motion-canvas/motion-canvas), a tool that lets you create canvas animations. While Motion Canvas is intended by its maintainer to exclusively be a standalone application [1], we have turned Revideo into a library that developers can integrate into their apps, while specifically focusing on video use cases. To support this, we have, among other things, added the ability to do headless rendering, made video rendering much faster and added support for syncing and exporting audio.
We’re excited about programmatic video editing because of the possibility to automate content creation with AI. One of our users is building StoriesByAngris (https://storiesbyangris.com/ https://storiesbyangris.com/), which lets you create video-based RPG stories from language prompts. Other users are marketing-tech companies that help their customers generate and A/B test different versions of video ads.
We started to work on video tooling because we ourselves explored a bunch of product ideas in the space of AI-based video creation earlier this year. For example, we built apps that automatically create educational short videos and tinkered with apps that let you create memes.
While building these products, we were frustrated with the video editing frameworks we used: Moviepy (https://github.com/Zulko/moviepy https://github.com/Zulko/moviepy), which we used initially, doesn’t work in the browser, so we’d often have to wait minutes for a video to render just to test our code changes. Remotion (https://github.com/remotion-dev/remotion https://github.com/remotion-dev/remotion), which we switched to later, is pretty good, but we didn’t want to rely on it as it is not FOSS (source-available only).
We had already followed Motion Canvas for some time and really liked it, so we thought that extending it would get us to something useful much faster than building an animation library from scratch. We initially tried to build Revideo as a set of Motion Canvas plugins, but we soon realized that the changes we were making were too drastic and far too complex to fit into plugins. This is why we ultimately created a fork. We’re unsure if this is the right way to go in the long term, and would prefer to find a way to build Revideo without feeling like we’re dividing the community - if you have experience with this (keeping forks with complex changes in sync with upstream) or other suggestions on how to solve this, we’d love your input.
Our current focus is improving the open source project. In the long term, we want to make money by building a rendering service for developers building apps with Revideo.
We’d love to hear your feedback and suggestions on what we can improve! You can find our repo at https://github.com/redotvideo/revideo https://github.com/redotvideo/revideo, and you can explore example projects at https://github.com/redotvideo/examples https://github.com/redotvideo/examples
[1] “Motion Canvas is not a normal npm package. It's a standalone tool that happens to be distributed via npm.” - https://github.com/orgs/motion-canvas/discussions/1015 https://github.com/orgs/motion-canvas/discussions/1015
- pavi2410 2y agoI see that Revideo uses generator functions which seems intuitive to me as it linearizes frame sequences wrt time as the function yields. How does this compare to Remotion^ which uses "React" mental model? ^: https://remotion.dev https://remotion.dev
- hkonsti 2y agoYes, exactly! We're also big fans of the generator function model. In Remotion, you get the current frame of the animation through a React hook called useCurrentFrame(). You then use React to build the UI based on the return value of the hook. By structuring it as a generator function, later parts of the function are for later parts of the animation, which makes it a bit easier to read and write. We found this to be a little more intuitive. Ultimately it probably comes down to personal preference.
- deleted 2y ago[deleted]
- bobosha 2y agopython support?
- hkonsti 2y agoThis is unfortunately not something that is currently on the roadmap. Revideo mainly runs inside the browser which is why we built it entirely in Typescript. You can check out moviepy (https://github.com/Zulko/moviepy https://github.com/Zulko/moviepy) for a similar project written in Python.
- KhoomeiK 2y agoInteresting—LangChain seemed kinda like unnecessary abstractions in natural language (since everything is just string manipulations), but with AI video, there's so many different abstractions that I'd need to handle (images, puppeting, facegen, voicegen, etc). Seems like there might be room for a "LangChain for Video" in this space...