| Crates.io | aether-renderer-core |
| lib.rs | aether-renderer-core |
| version | 0.4.0 |
| created_at | 2025-06-07 17:00:43.185115+00 |
| updated_at | 2025-06-14 20:19:26.112502+00 |
| description | A sacred Rust-based CLI for rendering transparent WebM/MP4/GIF from PNG sequences |
| homepage | https://sacred-ai.com/about/aetherrenderer |
| repository | https://github.com/madspaaskesen/aether-renderer-core |
| max_upload_size | |
| id | 1704209 |
| size | 72,111 |
๐ฟ Aether Renderer Core is now being tested through real-world use inside the GUI.
Output behavior and flags will evolve gently based on how it breathes with the interface.
A lightweight CLI tool for rendering frameโbased content using FFmpeg.
Aether Renderer is a minimal and sacred media compiler for image sequences โ now with smart CLI, glob support, and gentle rendering feedback ๐๏ธ
Aether Renderer Core is a lightweight, Rust-based and a sacred CLI tool to render transparent .webm, .mp4, and .gif from image sequences with alpha channel support, loop softening, and ffmpeg power.
Built with love for artists, developers, and sacred animation workflows.
frame_%04d.png (numbered) or glob patterns like scene_*.png--verbose)--config file or inline CLI arguments--verbose-ffmpeg for full logs)Built like a triple-mode sacred core:
--config โ full JSON or TOML-based config--input + --output CLI modeUseful for overriding output resolution, fps, or preview without rewriting full config. Aiming to be super dev-friendly โ a pleasure to use.
aether-renderer-core --config render.json
Supports .json or .toml formats.
aether-renderer-core --input frames.zip --output output.webm --file-pattern '*.png' --fps 30 --format webm --verbose
aether-renderer-core --config render.json --fps 60 --preview
CLI params override matching fields in the config.
| Flag | Type | Default | Description |
|---|---|---|---|
--input |
Path | required | Folder or ZIP with image frames |
--output |
Path | required | Output video file path |
--fps |
Number | 30 | Frames per second |
--file-pattern |
String | *.png |
Glob or sequence pattern for frames |
--format |
String | webm |
Output format (webm, gif, ...) |
--fade-in |
Float | 0.0 |
Seconds to fade in |
--fade-out |
Float | 0.0 |
Seconds to fade out |
--bitrate |
String | (none) | e.g. 2500k |
--crf |
Number | (none) | e.g. 23 for x264 (lower = better) |
--preview |
Flag | false | Enables preview mode (renders a single frame) |
--preview N |
Number (opt) | middle frame | Preview frame N (default = middle of sequence) |
--open |
Flag | false | Open output file on OS when done |
--verbose |
Flag | false | Prints detailed logs + progress bar |
--verbose-ffmpeg |
Flag | false | Show full ffmpeg logs |
--file-pattern contains *, glob mode is used automatically (-pattern_type glob).
frame_%04d.png use native ffmpeg sequence.--preview flag can optionally take a number.
--open flag opens the output video after rendering (only works with full video render)."frame_%04d.png" for ffmpeg-native sequences."*.png" or "scene*.png" will auto-activate -pattern_type glob.--bitrate and --crf are mutually exclusive (if both set, crf takes priority).--fade-in and --fade-out flags apply ffmpeg's fade filter under the hood. The start of the fade out is automatically calculated from the frame count and FPS.{
"input": "/Users/you/Downloads/frames.zip",
"output": "/Users/you/Downloads/output.webm",
"fps": 30,
"format": "webm",
"fade_in": 0.0,
"fade_out": 0.0,
"bitrate": null,
"crf": 24,
"preview": false,
"file_pattern": "*.png",
"verbose": true,
"verbose_ffmpeg": false
}
Save this as example_config.json and run:
aether-renderer-core --config example_config.json
Run as if you have downloaded source code via cargo run.
cargo run --release -- \
--input ./frames \
--output my.webm \
--fps 30 \
--format webm \
--fade-in 1 \
--fade-out 1 \
--bitrate 2M \
--crf 23 \
--preview
frame_0000.png
frame_0001.png
frame_0002.png
...
You can now also pass a .zip file containing frames:
cargo run -- --input ./my-frames.zip --output my.webm --fps 30 --format webm
frame_0000.png
frame_0001.png
frame_0002.png
...
Alpha-enabled PNGs are recommended for transparent .webm.
Convert to gif file with transparent background:
cargo run -- --input ./my-frames.zip --output my.gif --fps 30 --format gif
(Just make sure ffmpeg is installed)
Tested with a single frame duplicated N times, rendered via aether-renderer-core.

| Frames | Total Time (s) | Output Size (MB) | Avg Time/Frame (ms) |
|---|---|---|---|
| 1 | 1.17 | 0.00 | 1173.9 |
| 10 | 0.91 | 0.00 | 91.0 |
| 100 | 1.79 | 0.01 | 17.9 |
| 1000 | 13.13 | 0.13 | 13.1 |
| 10000 | 112.07 | 1.28 | 11.2 |
โจ Even at 10,000 frames, the renderer maintains ~11ms per frame performance โ demonstrating excellent scalability, stability, and I/O handling.
This library is now integrated with the Aether Renderer GUI (built in Tauri)
to test real-world file access, path compatibility, and command flow.
We expect small improvements based on how the frontend interacts with:
--app-output path resolution--preview usage and thumbnail flow--verbose-ffmpeg)Feedback from GUI testing will guide the next minor release.
prebuilds for linux, mac & windows can be found under releases in github repository.
๐ ๏ธ Download prebuilt binaries from the Releases page.
ffmpeg must be installed and accessible in your system pathPerfect โ that's a wise and user-friendly decision.
You keep consistency with the crate name (aether-renderer-core)
โ
and reduce confusion across GitHub, crates.io, cargo installs, and CLI usage.
The default binary is called:
aether-renderer-core
This name is consistent whether you:
Install via cargo:
cargo install aether-renderer-core
Download from GitHub Releases for:
macOS: aether-renderer-core-v0.4.0-macos-x86_64Windows: aether-renderer-core-v0.4.0-windows-x86_64.exeLinux: aether-renderer-core-v0.4.0-linux-x86_64If you prefer a shorter alias, you can rename it after download:
mv aether-renderer-core-v0.4.0-linux-x86_64 aether
./aether --config config.json
But all examples in this guide will use the full name:
aether-renderer-core --config config.json
Aether Renderer Core is built with care and covered by 22 focused tests, including:
__MACOSX/๐ธ Tests reflect both expected success and graceful error recovery, ensuring stability across platforms.
This project contains both unit tests and integration tests. The unit tests live
next to the code they verify (for example in
src/utils/unzip_frames.rs) while the integration tests reside in
tests/integration.rs.
Run all tests using Cargo:
cargo test
The integration suite relies on ffmpeg being available on your system. If
ffmpeg is missing, the rendering test is skipped but all other tests still
run.
22 sacred tests ๐ฟ โ thatโs beautiful, elegant, and symbolic.
Letโs honor that in the README like this:
You can test the renderer using the provided frame sequence:
Run it like this:
cargo run -- --input examples/sacred-stars.zip --output demo.webm --fps 30 --format webm
This will generate a loopable .webm video with alpha.
See full demo here (just started): Webpage demo
Hereโs one frame from the sacred animation:


โถ๏ธ Watch output video
.png โ .webm (with alpha).mp4 export--fade-in, --fade-out for soft loopsaether-renderer) ๐This project uses Rustโs official formatting standard via cargo fmt.
Before committing or opening a pull request, please run:
cargo fmt
MIT โ created with sacred care by @madspaaskesen
Aether renderer GUI v0.1.1 is out now, it uses Aether renderer core as a crate ๐ชผ
You can now convert your transparent image sequences to webm, gif or mp4 from this gui also. ๐ชผ


See git repository: https://github.com/madspaaskesen/aether-renderer-gui
Download installer from release page: https://github.com/madspaaskesen/aether-renderer-gui/releases
๐ Made with clarity and care by @mads @ @sacred-ai ๐
๐ธ Powered by Rust Lang, Rust getting started
Aether Renderer Core is the sacred heart of a lightweight animation rendering toolkit. Converts frame sequences to video with love, transparency, and full creative control.