Repository navigation
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
On-badge validation is still needed for native-renderer heap headroom, sustained Life/animation timing, LCD alpha compositing, and controls in both orientations, which host tests and simulator captures cannot establish.
No open issues 🎉
What changed in this PR
Adds a selectable clock-art app to the Universe 2026 badge, adapting twelve John Maeda artworks from the MIT-licensed CodingTrain recreations.
Changes:
- Implements twelve native-rendered faces with elapsed-time animation, bounded history, and a finite Game of Life simulation.
- Adds face navigation, saved selection, and local RTC time display without network access.
- Includes focused regression tests, an icon-generation tool, attribution, and documented resource limits. Full hardware validation remains outstanding.
| File | Description |
|---|---|
tools/build_twelve_clocks_icon.py |
Generates the 24×24 launcher icon without external dependencies. |
tests/test_twelve_clocks.py |
Covers clock logic, rendering calls, navigation, persistence, and cleanup. |
badge/apps/twelve_clocks/README.md |
Documents controls, adaptations, resource limits, and validation. |
badge/apps/twelve_clocks/LICENSE |
Preserves the upstream MIT license and copyright notice. |
badge/apps/twelve_clocks/faces.py |
Implements the twelve renderers and active-face caches. |
badge/apps/twelve_clocks/clockwork.py |
Provides shared fonts, timing, history, and Life simulation logic. |
badge/apps/twelve_clocks/__init__.py |
Integrates app startup, selection, menus, RTC display, and exit cleanup. |
Review effort: Balanced
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
Brings all twelve of John Maeda's 1990s clock artworks to the Universe 2026 badge, adapting the MIT-licensed CodingTrain p5.js recreations into one selectable MicroPython app.
Only the active face runs. Three shared Python modules (25,600 bytes) provide native vector rendering, original font data, elapsed-time animation, a bounded 25-sample history, and a finite 63x30 Life simulation with two buffers totaling 3,780 payload bytes. Selection is remembered, and no network connection is required. Includes a launcher icon, attribution, per-face adaptation notes, and focused regression tests.
Type of change
badge25/) maintenanceBadge app checklist
badge/apps/<name>/with__init__.pyand a 24x24icon.pngREADME.mdstarts with a one-sentence description, followed by usage and any hardware or network requirementsbadge,screen,image, ...) and logical buttons such asBUTTON_SELECTbadge.ticks_delta)assets/, are PNG where possible, and are as small as practicalbadge/secrets.pystays empty)The only image asset is the required app-root 24x24
icon.png(140 bytes); no additionalassets/directory is needed. Hardware coverage is partial, as detailed below.Screenshots
Contact sheet of actual MicroPython WASM simulator captures, each at the app's 320x240 logical resolution, with numbered labels added above each frame. These are simulator renders, not photographs of the badge.
How to use it
Install
badge/apps/twelve_clocks/in the badge's apps directory and launch Twelve Clocks. Left/Right changes faces; Menu opens or closes the list; Up/Down navigates; Select runs a face; Back cancels the list. Home returns to the launcher. The last selected face is saved. Set the badge RTC first; the app reads local RTC time without synchronization or timezone conversion.Licensing and intellectual property
This is an open source repository released under the MIT License. Everything merged here is distributed under the terms of that license.
We can't accept contributions that use someone else's intellectual property (for example, characters, artwork, logos, trademarks, game names, music, fonts, or code) unless that person or company has agreed to its release under the project license. This includes recognizable likenesses of existing games or brands that could be confusing.
Original artworks are by John Maeda. The adaptation follows
CodingTrain/12oclocksat170fb6ff31ed93fe07c82974a918eb790be24b9e; Daniel Shiffman's 2017 MIT copyright notice is preserved in the app's LICENSE.Additional notes
Validation rerun for this PR:
python3 -m unittest discover -s tests -p 'test_twelve_clocks.py'- passed, 17 tests.python3 .github/skills/hyb26-skill/scripts/validate_app.py badge/apps/twelve_clocks- passed, zero warnings.python3 .github/scripts/validate_app_readmes.py badge/apps- passed.git diff --check- passed.Earlier session checks rendered all twelve faces and 48 rollover cases in the Universe 2026 WASM simulator, exercised navigation/persistence/inverted controls, recorded animated faces, and cross-compiled the Life kernel for ARM. The app was installed on a physical Universe 2026 badge; the user confirmed the launcher icon and pendulum face, and RTC setting survived a reboot. Full on-device coverage of every face, both orientations, and capacitive controls remains outstanding.
Animated faces target 15 Hz and Life targets 50 ms steps; these are not measured hardware rates. Face 10's active-only full-screen cache can require up to 307,200 pixel payload bytes. Review heap headroom, sustained performance, and LCD compositing on hardware before treating this as fully hardware-verified. Skipped redraws do not imply CPU/display sleep or battery savings.