rustmotion 0.7.0

A CLI tool that renders motion design videos from JSON scenarios. No browser, no Node.js — just a single Rust binary.
Documentation
[package]
name = "rustmotion"
version.workspace = true
edition = "2021"
description = "A CLI tool that renders motion design videos from JSON scenarios. No browser, no Node.js — just a single Rust binary."
license = "MIT"
repository = "https://github.com/LeadcodeDev/rustmotion"

[lib]
path = "src/lib.rs"

# Le binaire vit ici, et pas dans une crate à part, parce que c'est la seule
# façon que `cargo install rustmotion` livre une commande : une crate qui n'a
# qu'une `[lib]` installe une bibliothèque et rien d'exécutable. La
# sous-commande `studio` ne peut pas y être : `rustmotion-studio` dépend de
# `rustmotion`, donc la dépendance inverse — même optionnelle — est un cycle
# que cargo refuse. Le studio garde son propre binaire `rustmotion-studio`.
[[bin]]
name = "rustmotion"
path = "src/bin/main.rs"

[dependencies]
rustmotion-core.workspace = true
rustmotion-components = { workspace = true, features = ["lottie-native"] }
rustmotion-html.workspace = true
skia-safe = "0.99"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
clap = { version = "4", features = ["derive"] }
clap_complete = "4.6.0"
ratatui = "0.29"
crossterm = "0.28"
dirs = "6.0.0"
# Le CLI produit le JSON Schema (`rustmotion schema`) et s'en sert pour la
# détection d'attributs inconnus : schemars passe donc de dev-dependency à
# dépendance normale.
schemars = "0.8"
openh264 = "0.6"
minimp4 = { version = "0.1", features = ["aac"] }
gif = "0.13"
symphonia = { version = "0.5", features = ["mp3", "wav", "ogg", "flac", "aac"] }
rubato = "0.16"
notify = "7"
rayon = "1"
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp"] }
syntect = { version = "5", default-features = false, features = ["default-fancy"] }
similar = "2"
resvg = "0.44"
usvg = "0.44"
tiny-skia = "0.11"
ureq = "3"
rustfft = "6"

[features]
# Opt-in: integration tests that shell out to a real ffmpeg binary.
ffmpeg_integration = []
## Re-expose native Lottie decoding (default-on). Activating this feature here
## propagates to rustmotion-components so consumers only need to touch rustmotion.
lottie-native = ["rustmotion-components/lottie-native"]