Skip to content
led-ticker

Sprite and flair transitions

The flair pack (led-ticker-flair) ships two categories of transition: homage sprite-trails — pixel-art characters that cross the panel — and text-effect transitions that manipulate the outgoing content itself. Both are referenced by their namespaced slug, e.g. transition = "pokeball.forward" or transition = "flair.spinout".

The four homage families — nyancat, pokeball, pacman, and sailor_moon — ship together in the led-ticker-flair package (one install, four entry points, each with .forward, .reverse, and .alternating variants).

Add one line to config/requirements-plugins.txt (copied from config/requirements-plugins.example.txt):

led-ticker-flair

One install registers all four families. See Plugins for the install flow.

A bare transition = "nyancat" (the pre-plugin spelling) raises a config-load error pointing at the namespaced nyancat.forward slug — the namespaced form is what the flair pack registers.

Nyan Cat flies across the panel with a rainbow trail. Auto-activates a hi-res webp sprite on scaled signs (see Hires below).

Type stringDirection
nyancat.forwardLeft → right
nyancat.reverseRight → left
nyancat.alternatingAlternates each swap
nyancat.forward — Nyan Cat flies left-to-right with rainbow trail
nyancat.forward — Nyan Cat flies left-to-right with rainbow trail

A Pokéball rolls across with a run-cycle sprite chasing. show_pikachu / show_pokeball toggle the sprite elements. Auto-activates a hi-res sprite on scaled signs (see Hires below). Also ships the :pokeball.ball: emoji.

Type stringDirection
pokeball.forwardLeft → right
pokeball.reverseRight → left
pokeball.alternatingAlternates each swap
pokeball.forward — Pokéball rolls left-to-right with run-cycle sprite chasing (default)
pokeball.forward — Pokéball rolls left-to-right with run-cycle sprite chasing (default)
pokeball.forward — single-sprite modes via show_pikachu / show_pokeball
pokeball.forward — single-sprite modes via show_pikachu / show_pokeball

Pac-Man chases three scared ghosts with a chomping animation. Keeps its 8-bit look at all scales.

Type stringDirection
pacman.forwardLeft → right
pacman.reverseRight → left
pacman.alternatingAlternates each swap
pacman.forward — Pac-Man chases 3 scared ghosts with chomping animation
pacman.forward — Pac-Man chases 3 scared ghosts with chomping animation

The Moon Stick wand sweeps across with a sparkle trail. Keeps its 8-bit look at all scales.

Type stringDirection
sailor_moon.forwardLeft → right
sailor_moon.reverseRight → left
sailor_moon.alternatingAlternates each swap
sailor_moon.forward — Moon Stick wand sweeps across with sparkle trail
sailor_moon.forward — Moon Stick wand sweeps across with sparkle trail

Sprite transitions run a pixel-art character across the panel, erasing the outgoing widget and revealing the incoming one. They are provided by four packages in the external led-ticker-plugins monorepo — nyancat, pokeball, pacman, and sailor_moon — each with forward, reverse, and alternating variants. Reference them by their namespaced slug, e.g. transition = "pokeball.forward". Add the families you want to config/requirements-plugins.txt (install only the ones you use) and restart (docker compose restart):

git+https://github.com/JamesAwesome/led-ticker-plugins.git@nyancat-v0.1.0#subdirectory=plugins/nyancat
git+https://github.com/JamesAwesome/led-ticker-plugins.git@pokeball-v0.1.0#subdirectory=plugins/pokeball
git+https://github.com/JamesAwesome/led-ticker-plugins.git@pacman-v0.1.0#subdirectory=plugins/pacman
git+https://github.com/JamesAwesome/led-ticker-plugins.git@sailor_moon-v0.1.0#subdirectory=plugins/sailor_moon
Family Variants Hires on bigsign? Best for
nyancat nyancat.forward, nyancat.reverse, nyancat.alternating yes (animated webp) General playful
pokeball pokeball.forward, pokeball.reverse, pokeball.alternating yes (run-cycle sprite + rolling pokeball) Pop-culture variety
sailor_moon sailor_moon.forward, sailor_moon.reverse, sailor_moon.alternating no (8-bit aesthetic is the design) Magical / sparkle
pacman pacman.forward, pacman.reverse, pacman.alternating no (8-bit aesthetic is the design) Retro arcade

A fifth sprite family, baseball (baseball.roll, baseball.roll_reverse, baseball.roll_alternating — procedural ball, 8 rotation frames, hires on bigsign; best for sports sections), ships with the baseball package in the led-ticker-plugins monorepo. Install it via config/requirements-plugins.txt (add led-ticker-baseball and restart with docker compose restart) before using these.

Variants

  • Forward (<fam>.forward): sprite enters from the left, exits right
  • Reverse (<fam>.reverse): sprite enters from the right, exits left (sprite flipped horizontally)
  • Alternating (<fam>.alternating): cycles forward → reverse → forward each swap

Pokeball-specific options

Option Default Description
show_pikachu true Render the run-cycle sprite chasing the ball
show_pokeball true Render the pokeball sprite (set false for sprite-only chase)

Cross-scale transitions

Sprite transitions work correctly when the outgoing and incoming sections have different scale values (e.g. a scale=2 section swapping to a scale=4 section). The canvas is switched to the incoming scale before the first frame, so the sprite stays physically consistent throughout — there is no size snap mid-transition.

Tuning

  • transition_duration: sprite transitions need time to traverse the panel — 1.5–2.5 s feels right
  • Shorter durations clip the sprite exit; longer ones work fine

nyancat.forward and pokeball.forward auto-activate hi-res sprites whenever the canvas is at default_scale > 1 — that is, any big / scaled sign (see Display), typically a bigsign-style build. The hi-res variants are noticeably more detailed and read better at distance:

  • nyancat — animated webp Nyan Cat sprite at native physical resolution
  • pokeball — rolling pokeball with animated run-cycle sprite

The sailor_moon and pacman families keep their 8-bit look at all scales — the chunky aesthetic is part of the design.

The rolling-baseball family (baseball.roll, baseball.roll_reverse, baseball.roll_alternating) ships with the baseball package in the led-ticker-plugins monorepo, alongside that package’s MLB widgets and :baseball.ball: emoji. Install it via config/requirements-plugins.txt (see Plugins) to use it.


flair.spinout (flair >= 0.3.0, core >= 4.6)

Section titled “flair.spinout (flair >= 0.3.0, core >= 4.6)”

flair.spinout spins the outgoing widget’s content out of view — starting at rest, then accelerating — before cutting to the incoming widget. Unlike a sprite trail, nothing crosses the panel; the content itself rotates and disappears. Transition duration follows [transitions] duration (default 0.5 s; sprite-style durations of 1.0–1.5 s look best for a full revolution or two).

`flair.spinout` — outgoing text accelerates and spins out before the incoming widget appears
`flair.spinout` — outgoing text accelerates and spins out before the incoming widget appears

flair.spinout is part of the same led-ticker-flair package as the homage sprite-trails:

led-ticker-flair

One install registers all flair transitions and animations. See Plugins for the install flow.

Minimal

[transitions]
default = "flair.spinout"
duration = 1.0
[[playlist.section]]
mode = "slideshow"
hold_time = 3.0
[[playlist.section.widget]]
type = "message"
text = "SPIN OUT"
center = true
font_color = [0, 220, 255]
[[playlist.section]]
mode = "slideshow"
hold_time = 2.5
[[playlist.section.widget]]
type = "message"
text = "AND CUT"
center = true
font_color = [80, 255, 80]
KnobDefaultNotes
revolutions2Integer >= 1. Full turns before the content disappears.
direction"cw""cw" (clockwise) or "ccw" (counter-clockwise).

Set knobs via an inline table on [transitions] default or on the section’s transition field:

[transitions]
default = {type = "flair.spinout", revolutions = 1, direction = "ccw"}
duration = 1.0
  • Background color holds. The outgoing section’s bg_color fills the panel for the entire spin duration — the background never flashes or drops to black mid-transition.
  • Scrolled text spins from its parked position. If the outgoing widget had been scrolling, flair.spinout picks up at the position where the text stopped (the same outgoing_scroll_pos continuity used by the push family).
  • Colors freeze during the spin. Animated font_color providers (rainbow, color_cycle, shimmer) are paused for the outgoing widget while it spins, consistent with how transitions pause frame-aware effects in general.
  • Pairs with flair.propeller. Use flair.spinout as the inter-widget or between-sections transition alongside animation = "flair.propeller" on message widgets for a full spin-in / spin-out cycle. See flair.propeller → Pairing with flair.spinout.