2 releases
Uses new Rust 2024
| 0.1.5 | Oct 18, 2025 |
|---|---|
| 0.1.4 | Oct 18, 2025 |
#14 in Rendering engine
265 downloads per month
Used in 3 crates
(2 directly)
230KB
5K
SLoC
Ranim
Ranim is an animation engine crate implemented in pure rust, inspired heavily by Manim and jkjkil4/JAnim.
[!WARNING] Ranim is now WIP. It only supports some basic items and animations, the apis are unstable and may change frequently, the documentation is also not complete.
Dependencies
Runtime dependencies:
- ffmpeg: encode videos Ranim will try to use ffmpeg from system's path environment variable first, if no ffmpeg is found, ranim will automatic download ffmpeg to the current working dir.
Installation
Currently, it is experimental on crates.io:
[dependencies]
ranim = "0.1.5"
You can also use from git for the latest updates:
[dependencies]
ranim = { git = "https://github.com/azurice/ranim" }
For the usage, check out the examples folder. You can run the examples with:
cargo run -p ranim-cli --release -- preview --example <example-name> # run a preview app for the example
cargo run -p ranim-cli --release -- render --example <example-name> # render the example
See Ranim Cli for more.
Ranim Cli
Ranim cli is a command line tool to help you build the animation. It enables animation previewing with hot reload through dylib.
Please notice that you can use ranim without ranim-cli, the previewing and rendering process can be achieved by simply invoking apis provided by ranim, but it may enhance your experience.
You can install it with:
cargo install ranim-cli
Or install from git:
cargo install --git https://github.com/azurice/ranim ranim-cli --locked
Or you can create a bin, and run cli from ranim_cli directly (this can make sure the version of ranim matches ranim_cli):
fn main() {
ranim_cli::main();
}
Basic Usage:
ranim preview[ <scene_name>]: Launch a preview app and invoke cargo to build your library automatically when the source code is changed, then reload it through libloading and show it in the preview app.ranim render[ <scene-name1> <scene_name2> ...]: Render scene's output, when no scene name is specified, render all scenes.
You can specify the package with --package and --example (just like cargo, note that your anim target should have crate-type of dylib or cdylib), and other aditional arguments you want to pass to cargo build can be passed after --.
For example:
ranim render -p render scene_a scene_b -- --release
Feature Flags
-
Default features
-
anims: re-exportranim-anims, default on. -
items: re-exportranim-items, default on.
-
-
render: enable render api in cmd moduleuse
render_sceneorrender_scene_outputto render scene to output -
preview: enbale preview api in cmd moduleuse
preview_sceneapi to launch an preview app on a scene https://github.com/user-attachments/assets/5bf287e2-b06f-42f8-83b6-76f3775e298e -
profiling: enable profiling with https://github.com/EmbarkStudios/puffinCPU uses
127.0.0.1:8585and GPU uses127.0.0.1:8586
Design
Once the design is stablized, I may write about it.
For now, you can check out the code.
Aknowledgements
Star History
Dependencies
~22MB
~482K SLoC