clock widget
The clock widget displays the current time. Every draw tick the engine calls draw() again, so the display stays current at the 50 ms cadence of the held-widget loop — no special mechanism needed.
It reuses the same text-render surface as message and countdown, so font_color, border, and font knobs all work exactly the same way.

Minimal example
[[playlist.section.widget]]type = "clock"Options
Section titled “Options”The format knob
Section titled “The format knob”Presets
Section titled “Presets”"12h" and "24h" are the built-in presets.
"12h"—3:09 PM(no leading zero on the hour;AM/PMsuffix)"24h"—15:09(zero-padded hour)
The presets build the string directly from datetime fields rather than via strftime, so the output is identical on every platform.
Custom strftime format
Section titled “Custom strftime format”Any string containing % is passed to Python’s datetime.strftime() verbatim.
[[playlist.section.widget]]type = "clock"format = "%H:%M:%S" # 24-hour with secondsYou can include the date inline in the same format string:
[[playlist.section.widget]]type = "clock"format = "%a %b %d %H:%M" # e.g. "Sat Jun 13 15:09"Timezone
Section titled “Timezone”By default the clock shows the system local time. Set timezone to any IANA timezone name to override it:
[[playlist.section.widget]]type = "clock"timezone = "America/New_York"format = "12h"The timezone is resolved via Python’s stdlib zoneinfo module — no extra dependencies. An invalid timezone name produces a clear validation error at config load.
Common patterns
Section titled “Common patterns”12-hour clock with a rainbow border
Section titled “12-hour clock with a rainbow border”[[playlist.section.widget]]type = "clock"format = "12h"font_color = [255, 255, 255]border = "rainbow"24-hour clock with a color cycle
Section titled “24-hour clock with a color cycle”[[playlist.section.widget]]type = "clock"format = "24h"font_color = "color_cycle"Inline date and time
Section titled “Inline date and time”[[playlist.section.widget]]type = "clock"format = "%a %b %d %H:%M"This renders a single line like Sat Jun 13 15:09. Stacked date-over-time (two rows) is a planned future addition.
Show the timezone abbreviation
Section titled “Show the timezone abbreviation”Add %Z to a custom format to print the timezone abbreviation (EDT, JST, …) next to the time:

[[playlist.section.widget]]type = "clock"timezone = "America/New_York"format = "%H:%M %Z"Show the UTC offset
Section titled “Show the UTC offset”%z prints the numeric offset (+0900, -0400) instead of the abbreviation:

[[playlist.section.widget]]type = "clock"timezone = "Asia/Tokyo"format = "%H:%M %z"To pair the zone label with a 12-hour time, combine the codes: format = "%I:%M %p %Z" renders 05:48 PM EDT.
World clock — one section per city
Section titled “World clock — one section per city”Give each timezone its own slideshow section to rotate through several cities, each labelled with %Z:
[[playlist.section]]mode = "slideshow"hold_time = 5
[[playlist.section.widget]]type = "clock"timezone = "America/New_York"format = "NYC %H:%M %Z"
[[playlist.section]]mode = "slideshow"hold_time = 5
[[playlist.section.widget]]type = "clock"timezone = "Asia/Tokyo"format = "TYO %H:%M %Z"Slideshow mode
Section titled “Slideshow mode”The clock widget is designed for slideshow-mode sections, where the engine holds each widget for hold_time seconds and redraws every tick. In a scroll or ticker section the widget will scroll across the panel like any other text widget — which may not be what you want for a clock.
Recommended: slideshow section for a clock
[playlist.section]mode = "slideshow"hold_time = 30
[[playlist.section.widget]]type = "clock"format = "12h"Validation
Section titled “Validation”led-ticker validate catches common mistakes before the display starts:
- Unknown preset (
format = "12hr") →clock: format '12hr' is not a known preset ('12h'/'24h') or a strftime template (no '%') - Invalid timezone (
timezone = "Mars/Phobos") →clock: timezone 'Mars/Phobos' is not a valid IANA timezone name