- Rust 93.3%
- Nix 6.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
ci / cargo fmt / clippy / test / deny (push) Successful in 57s
Reviewed-on: #10 |
||
| .forgejo/workflows | ||
| docs | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| clippy.toml | ||
| deny.toml | ||
| flake.lock | ||
| flake.nix | ||
| README.md | ||
| rustfmt.toml | ||
felis-reel
Render a felis-fcast
.fcast recording to a video file (MP4, WebM, GIF) or a PNG sequence,
headlessly, through felis's own renderer. It plays the role agg plays for
asciinema's .cast: felis-fcast records and replays, and felis-reel
turns a recording into pixels.
felis-reel <in.fcast> (-o <out.{mp4,webm,gif}> | --frames-dir DIR)
[--fps N] [--speed X] [--idle-limit SECS] [--cursor-blink]
[--font-family F] [--font-size PX] [--font-file PATH]...
[--theme <felis-config>]
Invoked as felis reel … on felis's external-subcommand model, the same
way felis fcast … reaches felis-fcast.
Status: proof of concept. It renders MP4, WebM, GIF and PNG
sequences; ffmpeg must be on PATH for the video formats (the dev shell
provides it). The design is
docs/explanation/design.md, and open work
is listed in docs/backlog.md.
Development
nix develop enters the dev shell. CI runs cargo fmt --check,
cargo clippy -- -D warnings, cargo test --all-features and
cargo deny check; run them before sending a change. The golden tests
(tests/golden.rs) render on lavapipe with fonts the dev shell pins and
skip outside it; FELIS_REEL_BLESS=1 cargo test --test golden rewrites
the reference frames after an intended change.
Why a separate tool
felis-fcast does not render recordings by design. A video encoder adds
font rasterization, a GPU device, and an encoder to the dependency tree,
and record/serve should not have to carry them. The renderer should
not own video encoding either. felis-reel sits between the two: it reads
the format through felis-fcast's parser and draws with felis's renderer.