Skip to content

Add eight playful native terminal effects - #22

Open
derluke wants to merge 5 commits into
omacom:masterfrom
derluke:master
Open

derluke wants to merge 5 commits into
omacom:masterfrom
derluke:master

Conversation

@derluke

@derluke derluke commented Aug 31, 2026

Copy link
Copy Markdown

Summary

This adds eight original native effects to ttfx:

  • airstrike — ASCII planes dive into the text through fire and debris
  • automata — a fractal elementary cellular automaton resolves into the text
  • bubblepop — rainbow-shimmering bubbles rise, pop, and reveal the text
  • malfunction — a cheerful printer produces nonsense before smoothly printing the text
  • reverselife — Conway's Game of Life runs backward from chaos into readable lettering
  • roses — curling vines, pink roses, and falling petals flower into the text
  • sunshower — rain, clouds, a rising sun, and a rainbow paint the text
  • voronoi — living crystal grows into a faceted Voronoi mosaic and returns to the text

The transitions deliberately connect each animation to the final lettering, and the longer choreography is intended to feel satisfying as a full-screen screensaver rather than a brief CLI flourish.

A small personal note

These effects were dreamed up, watched, critiqued, and refined together with my children and OpenAI Codex. The children were enthusiastic creative directors and the ultimate quality test: the goal was to make something playful enough to genuinely delight them. Codex collaborated on the design iterations and implementation.

Other changes

  • Registers all new effects with --random-effect
  • Adds configurable timing, colors, gradients, and effect-specific controls
  • Adds stock Omarchy logo GIFs and documents all effects in the README gallery
  • Improves the GIF renderer's treatment of block and box-drawing glyphs so terminal artwork stays aligned
  • Excludes native-only effects from upstream Python parity comparisons and includes them correctly in benchmarks/gallery metadata

Verification

  • cargo test
  • cargo check
  • git diff --check
  • Manually exercised each effect against the full Omarchy screensaver text
  • Rendered and visually checked every new stock-logo GIF

@dhh

dhh commented Sep 28, 2026

Copy link
Copy Markdown
Contributor

Thanks for these. They look fun. Two things stand in the way:

  1. It no longer compiles on master. The new effects construct CharacterVisual::new(...).into(), and the visual API changed in Add the fx engine: 11.0x faster than Rust, 1.26x faster than asm #44 (visuals are interned now). So bubble_pop.rs, malfunction.rs, roses.rs and others fail with the trait Into<_> is not implemented for CharacterVisual.
  2. Scope. ttfx is a port of Python TerminalTextEffects, and the README promises that every effect is byte-identical to the Python original from the same input and seed; CI's parity suite checks that. These eight have no Python reference. They'd also run only on the original engine, since fx (the engine since 0.5) doesn't have them, so they'd be much slower than the other 37.

Original effects might fit better upstream in TerminalTextEffects. Once there, ttfx could port them with a reference to check against. If we do want ttfx-only effects, that's a scope change we'd want to decide on deliberately first, and they should then be written for fx.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants