Skip to content

Seven more apps: support 64x64 square panels (round 2) - #747

Merged
nsluke merged 6 commits into
tronbyt:mainfrom
nsluke:feat/square-round2
Oct 3, 2026
Merged

nsluke merged 6 commits into
tronbyt:mainfrom
nsluke:feat/square-round2

Conversation

@nsluke

@nsluke nsluke commented Oct 1, 2026

Copy link
Copy Markdown
Collaborator

Seven more. Each rendered at 64×32, 64×64 and 128×64, then installed on real hardware — a 64×32, two 64×64 and a 128×64 display on the bench — and rendered by the server for all four.

app 64×32 (unchanged) 64×64
worldclock
binaryclock
cisaticker
germanpartypolls
citibikebymk
usdebtclock
solartimeclock

64×64 column: the committed @64x64.webp preview (native 64px, upscaled by the browser). 64×32 column: the app's existing preview.

What changed, per app

  • worldclock — already spreads its cities down the panel (space_around, expanded); flag only, verified by rendering.
  • binaryclock — six columns of bits across the panel width, which a square panel shares, so every bar and the box it sits in get 2× the height.
  • cisaticker — an 8px masthead over 7px alert rows with 1px rules. ROWS = (canvas.height() - 8) // 8: 3 on 64×32, 7 on 64×64.
  • germanpartypolls — a 16px pie beside a scrolling list. On square: a 24px pie with the poll date on top, and the full list underneath, where six parties fit without scrolling.
  • citibikebymk — a ~30-row block, centred instead of hung from the top edge.
  • usdebtclock — crops a 68×50 flag to 64×32; a square panel has the rows for all 50, so it's centred and the five lines of figures are centred over it. Its square preview is a still (the animated one was 478 KB).
  • solartimeclock — box sized to the panel; the column expands on square so space_evenly spreads the title and times.

usdebtclock and the render deadline

This one animates 1,500 frames, and on the bench's Raspberry Pi 3B that already costs 18–30 s of the server's 30 s at 64×32, untouched — it timed out on the 64×32 display during testing with the original code. A larger canvas multiplies that, so taller canvases now get a pixel-frame budget rather than a flat count: 488 frames at 64×64, 244 at 128×64, still 1,500 at 64×32. Measured after the change: 15 s on both 64×64 displays (was a 30 s timeout). Worth knowing that this app is marginal on Pi-class servers in animated mode regardless; the still mode is instant.

Verification

  • solartimeclock is byte-identical at 64×32. binaryclock renders thirty seconds from "now" so can't be byte-compared; it and the live-data apps were checked by eye at 64×32. The classic code path is untouched in each — the square branch is additive.
  • All seven pass pixlet check; shape tested with h == w via is_square(), never h == 64; none claim supports2x.

🤖 Generated with Claude Code

nsluke and others added 4 commits October 1, 2026 12:40
worldclock already spreads its cities down the panel and only needed to
say so.

binaryclock is six columns of bits across the panel width, which a
square panel shares, so every bar and the box it sits in get twice the
height.

cisaticker is an 8px masthead over 7px alert rows with 1px rules: three
rows on 64x32, seven on 64x64, from the same arithmetic.

germanpartypolls put a 16px pie beside a scrolling list. On square the
pie is 24px with the poll date beside it on top, and the list sits
underneath where six parties fit without scrolling.

citibikebymk's block is about 30 rows and is centred rather than hung
from the top edge.

usdebtclock crops a 68x50 flag to 64x32; a square panel has the rows for
all of it, so it is centred, and the five lines of figures are centred
over it. Its square preview is a still: the animated one was 478KB.

solartimeclock's box is sized to the panel and its column expands on
square so space_evenly spreads the title and times.

solartimeclock is byte-identical at 64x32. binaryclock renders thirty
seconds from "now" so cannot be compared by bytes; it and the others
were checked by eye. All seven were installed on the bench's 64x32, two
64x64 and 128x64 displays and rendered there by the server.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
1500 frames at 64x32 already takes a Pi 3B about 18 of the server's 30
seconds; at 64x64 and 128x64 it timed out and the panel got nothing.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
750 still timed out on the bench Pi; 500 renders in about the time the
64x32 panel takes for the full 1500 and is still 17s of animation.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
500 frames was fine at 64x64 but 128x64 still timed out on the bench
Pi, so the count comes from a pixel-frame budget instead of a flat
number: 488 at 64x64, 244 at 128x64, 1500 unchanged at 64x32.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@nsluke
nsluke requested a review from tavdog as a code owner October 1, 2026 16:58
@nsluke
nsluke merged commit 5d12d14 into tronbyt:main Oct 3, 2026
2 checks passed
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.

1 participant