Video vibe coding framework that is actually fast.
Write your video in Rust and SVG, render it on the GPU.
With your coding agent, add the fframes skill and ask for a video:
npx skills add dmtrKovalenko/fframes
With cargo:
cargo install --locked cargo-fframes --git https://github.com/dmtrKovalenko/fframes
cargo fframes new my-video
The API reference is on docs.rs/fframes.
Rust and NodeJS (for local development) toolchains.
FFrames will install and compile ffmpeg during the development as we rely on the ffmpeg libav libraries, so there are dependencies on the system encoders required to build libav libraries. Here's what you'll need:
for debian based distros:
sudo apt-get install -y yasm nasm ffmpeg libx264-dev libx265-dev libopus-dev libclang-dev clang ninja libvpx-dev libasound2-dev
for arch based distros:
sudo pacman -S ninja yasm nasm ffmpeg x264 x265 opus clang
for nix users:
nix-shell
brew install pkg-config ffmpeg x264 x265 opus nasm ninja
On Windows ffmpeg is not compiled from source. Instead fframes links a prebuilt FFmpeg 9.0 shared build
(for example ffmpeg-n9.0-latest-win64-gpl-shared-9.0.zip from BtbN/FFmpeg-Builds)
and needs LLVM for bindgen:
winget install LLVM.LLVM
# unzip the ffmpeg build somewhere, then point the build to it:
$env:FFMPEG_DIR = "C:\ffmpeg-n9.0-latest-win64-gpl-shared-9.0"
$env:LIBCLANG_PATH = "C:\Program Files\LLVM\bin"
# the ffmpeg DLLs must be reachable when building (proc macros load them) and running
$env:PATH = "$env:FFMPEG_DIR\bin;$env:PATH"
vcpkg install ffmpeg works as well instead of FFMPEG_DIR. Codecs come from the prebuilt build, so leave the
codec features (h264, h265, ...) off: they request a from-source ffmpeg build which is not supported on Windows.
Once everything is installed please install the just command runner and init the repo.
npm install --global pnpm # the package manager for nodejs based editor
cargo install --locked just cargo-watch wasm-bindgen-cli wasm-pack
just init-repo
During the build fframes will automatically download and compile required libraries. You can control which libraries will be tried to link (usually codecs or hw acceleration libraries) by using cargo features of the fframes_renderer(for encoding) and fframes(for decoding) crates.
[dependencies]
# this will enable and try to link libx264 during the build
fframes_renderer = { version = "0.1.0", features = ["h264", "libav-agree-gpl"] }
All the build and linking of codecs and other system libs are leveraging the ffmpeg build system, so for troubleshooting please refer the ffmpeg compilation guide.
For the beta testing we provide a couple of examples you can use as a reference:
To display the video editor for example you can use the following command:
just run {{example}} # just run podcast
In order to render the example to file run
just render {{example}} # just render podcast
In order to create your custom video just copy an example. It is not recommended though to use this framework in the production, as it may panic. The project is still under hard development.
Please provide any of your feedback and ideas as issues, and feel free to contribute, but ideally, start from the issue.
All the libraries are already published to the crates io including the most recent nightly version. So you can already install and use them independently.
To change something in the editor please run this command in the separate terminal:
just watch-editor
fframes is released under the MIT License.
Rust
80.7%
ReScript
8.1%
TypeScript
2.9%
HTML
2.8%
C
1.9%
Go Template
1.5%
Shell
1.1%
Video vibe coding framework that is actually fast.
Write your video in Rust and SVG, render it on the GPU.
With your coding agent, add the fframes skill and ask for a video:
npx skills add dmtrKovalenko/fframes
With cargo:
cargo install --locked cargo-fframes --git https://github.com/dmtrKovalenko/fframes
cargo fframes new my-video
The API reference is on docs.rs/fframes.
Rust and NodeJS (for local development) toolchains.
FFrames will install and compile ffmpeg during the development as we rely on the ffmpeg libav libraries, so there are dependencies on the system encoders required to build libav libraries. Here's what you'll need:
for debian based distros:
sudo apt-get install -y yasm nasm ffmpeg libx264-dev libx265-dev libopus-dev libclang-dev clang ninja libvpx-dev libasound2-dev
for arch based distros:
sudo pacman -S ninja yasm nasm ffmpeg x264 x265 opus clang
for nix users:
nix-shell
brew install pkg-config ffmpeg x264 x265 opus nasm ninja
On Windows ffmpeg is not compiled from source. Instead fframes links a prebuilt FFmpeg 9.0 shared build
(for example ffmpeg-n9.0-latest-win64-gpl-shared-9.0.zip from BtbN/FFmpeg-Builds)
and needs LLVM for bindgen:
winget install LLVM.LLVM
# unzip the ffmpeg build somewhere, then point the build to it:
$env:FFMPEG_DIR = "C:\ffmpeg-n9.0-latest-win64-gpl-shared-9.0"
$env:LIBCLANG_PATH = "C:\Program Files\LLVM\bin"
# the ffmpeg DLLs must be reachable when building (proc macros load them) and running
$env:PATH = "$env:FFMPEG_DIR\bin;$env:PATH"
vcpkg install ffmpeg works as well instead of FFMPEG_DIR. Codecs come from the prebuilt build, so leave the
codec features (h264, h265, ...) off: they request a from-source ffmpeg build which is not supported on Windows.
Once everything is installed please install the just command runner and init the repo.
npm install --global pnpm # the package manager for nodejs based editor
cargo install --locked just cargo-watch wasm-bindgen-cli wasm-pack
just init-repo
During the build fframes will automatically download and compile required libraries. You can control which libraries will be tried to link (usually codecs or hw acceleration libraries) by using cargo features of the fframes_renderer(for encoding) and fframes(for decoding) crates.
[dependencies]
# this will enable and try to link libx264 during the build
fframes_renderer = { version = "0.1.0", features = ["h264", "libav-agree-gpl"] }
All the build and linking of codecs and other system libs are leveraging the ffmpeg build system, so for troubleshooting please refer the ffmpeg compilation guide.
For the beta testing we provide a couple of examples you can use as a reference:
To display the video editor for example you can use the following command:
just run {{example}} # just run podcast
In order to render the example to file run
just render {{example}} # just render podcast
In order to create your custom video just copy an example. It is not recommended though to use this framework in the production, as it may panic. The project is still under hard development.
Please provide any of your feedback and ideas as issues, and feel free to contribute, but ideally, start from the issue.
All the libraries are already published to the crates io including the most recent nightly version. So you can already install and use them independently.
To change something in the editor please run this command in the separate terminal:
just watch-editor
fframes is released under the MIT License.
Rust
80.7%
ReScript
8.1%
TypeScript
2.9%
HTML
2.8%
C
1.9%
Go Template
1.5%
Shell
1.1%