📈 GH Trending Explorer 🎲 Surprise me

← all repos

dmtrKovalenko / fframes

git clone https://github.com/dmtrKovalenko/fframes.git v1.3.0 · 1d ago

programmatic video rendering framework that is actually fast

+14
stars, 24h · #1,037
+~98
stars, 7 days · #1,278
+~420
stars, 30 days · #1,231
2.9k
★ total · +4% this week
76
forks · 14 open issues

Star history (as recorded here)

2026-10-20 · 2,883 ★ 2026-10-22 · 2,925 ★
LanguageRust
LicenseMIT
Created2021-11-22 (4y ago)
Last pushtoday
Watchers58
OwnerUser

GitHub topics

Links

README excerpt
Video vibe coding framework that is actually fast. 
 Write your video in Rust and SVG, render it on the GPU.
 This 128 second video was vibed in 48 minutes and rendered in 36 seconds . 
 It is an fframes project: examples/fframes-intro . 
---
## Ask your agent for a video
fframes ships a skill for coding agents. Add it once:
 [code] 
Then describe the video you want, the way you would brief a motion designer. The skill takes your agent from an empty
folder to a rendered `.mp4`: it installs fframes, creates a project, designs the motion, places the sound, and checks
the result before handing it to you.
The fframes API is explicit and verbose, and that is why it stayed unreleased for years.
Writing explicit, verbose code is exactly what an agent with the right skill is good at.
## Built for an author that cannot watch
A coding agent cannot watch a video or hear a soundtrack. Every generated project comes with a command line that turns
a video into things an agent can read: PNGs, text and numbers.
 Your agent 
 You 
 Checks every frame without rendering pixels. 
 inspect reports missing fonts or images, text cut off by the canvas, invalid SVG and panics, each with its time and scene. 
 Looks at the motion. 
 strip lays evenly spaced frames out on one contact sheet, onion blends frames to show a movement's path and easing, frame writes full-size PNGs. 
 Measures the sound. 
 audio analyze reports loudness (LUFS), true peak, clipping and silence, per scene.
 Watch it in real time, with sound. 
 preview opens a GPU window to play, pause, seek and step through frame by frame. 
 Scrub it in the browser. 
 The editor runs the video compiled to WebAssembly, with a timeline. 
 Ship it. 
 render writes the final file; render --draft encodes one scene at half size in about a second.
Every command runs as `cargo run --release -- ` inside the project:
| command | output |
| --- | --- |
| `timeline` | the scenes with their frame and second ranges, and every audio track with its mix settings |
| `inspect` | problems in a frame every 0.25 s and the first and last frame of every scene; exit code 2 on errors |
| `strip -n 12` | `strip.png`, a labelled contact sheet |
| `frame @end, @50%` | full-size PNGs in `frames/` |
| `onion " @0.. @1s" -n 6` | `onion.png`, the blended movement |
| `audio analyze --waveform w.png` | the loudness report and a waveform with scene lines and cue ticks |
| `preview` | the real-time window, for a human |
| `render [--draft]` | the video, or a part of it |
` ` is the name of a scene struct in your video. Times read as `120` (frame), `3.2s`, `50%`, ` @1.2s`, and
ranges like ` @0.. @1s`. Add `--json` to parse the output.
## Why it is fast
- **The GPU draws.** The Skia backend renders on Metal (macOS) or Vulkan (Linux, Windows), about 10x faster than the built-in CPU backend.
- **Static markup is cached.** Parts of a frame without `{expressions}` are hashed at compile time and reused by the renderers.
- **ffmpeg encodes.** fframes links ff