cli: pin the fonts a recording is drawn with (--font-file) #4

Merged
natsukium merged 1 commit from font-files into main 2026-09-26 00:57:56 +09:00
Owner

Stacked on #3 (base gif-merge); retarget once it merges.

Why

A recording rendered with whatever fonts the host has installed, so the same .fcast gave different pixels on two machines and golden tests had nothing stable to compare. felis now takes font files that replace the system scan (natsukium/felis#466).

What

  • Bump every felis crate to a3d420ae, the first rev with RendererConfig::font_files.
  • --font-file PATH (repeatable): every face name from the config or --font-family (primary, style faces, fallbacks) resolves among those files alone. A missing or non-font file is an error.
  • Docs: design "Pinned fonts" and "Theme and font" describe the shipped behavior; the backlog drops the pinned-fonts blocker; README usage lists the flag.

Verification

  • fmt, clippy, tests, cargo deny green locally.
  • Rendered the hello sample with Monaspace Neon pinned: that face is drawn; --font-file /nonexistent.ttf exits with font: load font /nonexistent.ttf: No such file or directory.
  • pi review (luna): PASS, no findings.
Stacked on #3 (base `gif-merge`); retarget once it merges. ## Why A recording rendered with whatever fonts the host has installed, so the same `.fcast` gave different pixels on two machines and golden tests had nothing stable to compare. felis now takes font files that replace the system scan (natsukium/felis#466). ## What - Bump every felis crate to a3d420ae, the first rev with `RendererConfig::font_files`. - `--font-file PATH` (repeatable): every face name from the config or `--font-family` (primary, style faces, fallbacks) resolves among those files alone. A missing or non-font file is an error. - Docs: design "Pinned fonts" and "Theme and font" describe the shipped behavior; the backlog drops the pinned-fonts blocker; README usage lists the flag. ## Verification - fmt, clippy, tests, `cargo deny` green locally. - Rendered the hello sample with Monaspace Neon pinned: that face is drawn; `--font-file /nonexistent.ttf` exits with `font: load font /nonexistent.ttf: No such file or directory`. - pi review (luna): PASS, no findings.
A recording rendered with whatever fonts the host has installed, so the
same .fcast gave different pixels on two machines and golden tests had
nothing stable to compare against. felis now takes a list of font files
that replaces the system scan for every face lookup; felis-reel exposes
it as a repeatable --font-file and bumps the felis pin to that revision.

Assisted-by: Claude Code
natsukium changed target branch from gif-merge to main 2026-09-26 00:55:43 +09:00
natsukium force-pushed font-files from 11ad702416 to 0780711927
All checks were successful
ci / cargo fmt / clippy / test / deny (pull_request) Successful in 54s
2026-09-26 00:55:52 +09:00
Compare
natsukium deleted branch font-files 2026-09-26 00:57:56 +09:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
natsukium/felis-reel!4
No description provided.