Chapter 06

Playlist and scene timing

“Playlist” here means the sign’s automatic rotation between scenes — not a media queue you fill with arbitrary effects. Today the product ships ashared cycle between idle clock and launch countdown when countdown is the base preference and cards are far from NET.

In sync by design

Matching B0rds can select the same scene, transition, and elapsed animation phase without communicating with one another. Each sign independently applies the same timing contract to synchronized Unix UTC. Different boot times do not change the result.

  • Required — NTP-synchronized time, compatible firmware and apps, the same ordered playlist, and matching timing settings.
  • Not required — pairing displays, choosing a leader, running a local hub, or sending animation state between signs.
  • Live data — may change what a scene paints, but never its synchronized duration or scene boundary.
  • Offline behavior — rotation continues from monotonic uptime, but the sign is explicitly unsynchronized and may drift relative to another display.
  • Precision — this is soft synchronization rather than hard frame lock; the side-by-side product target is approximately 100 ms.

What ships today

  • Base preference — choose idle clock or launch countdown (display.base_mode). That is the scene that owns the display when nothing else is active.
  • Explicit dwell — with countdown as base andscene.timing.include_idle_clock on, the sign can dwell on the idle clock for 48 seconds, then show Launch for 12 seconds by default.scene.timing.shared_cycle_ms remains a deprecated compatibility alias that proportionally rescales those two explicit dwells.
  • Pin one — SoftAP Playlist mode Pin idle clock orPin countdown (sticky countdown clears idle clock from rotation).
  • Pause / resume / manual advance —scene.timing.rotation_paused holds the local presentation while the shared epoch timeline continues. SoftAP Advance now (or USB display advance) shows the next slot locally; both overrides rejoin at a shared boundary.
  • Reorder — ↑/↓ on SoftAP slots setsscene.timing.clock_leads (which scene phase comes first).
  • Near-NET behavior — launch proximity does not change scene dwell. It may select countdown detail within the configured force-detail window.
  • Empty list — with no launch cards, countdown mode stays on the launch scene so system messages (for example no data) remain visible; it does not silently flip to the clock.
  • Notifications — the base timeline keeps running behind the notify track. Clearing or expiry reveals whichever base presentation is then current.

Operator knobs (SoftAP)

On the SoftAP Display screen under Playlist:

  • Playlist mode — rotate, pin clock, pin countdown, or manual advance only.
  • Slot list — reorder (↑/↓), pin, or remove idle clock (confirm).
  • Pause / Resume / Advance now — hold a local presentation or show the next slot without stopping the shared timeline.
  • Clock / Launch dwell — explicit visit budgets; the shared-cycle field is a deprecated proportional alias.
  • List hold (ms) — how long a list view holds.
  • Page / detail flip (seconds) — detail page cadence.

Defaults and full ranges: Settings reference.

USB

  • settings get|set scene.timing.rotation_paused /scene.timing.clock_leads /scene.timing.include_idle_clock /scene.timing.shared_cycle_ms then settings save
  • display mode idle|countdown — pin preference alias
  • display advance — jump to the next playlist slot

What does not ship yet

  • Arbitrary scene stacks (weather, stocks, custom art as first-class slots).
  • Per-hour calendar scheduling of unrelated modes.
  • A separate “playlist” product name in the SoftAP bottom nav — controls live under Display.

Related: Display and idle clock ·Launch countdown ·Tide clock ·Scene transitions ·Settings reference