Skip to content

Add twelve selectable clock artworks for the Universe 2026 badge - #167

Open
johnmaeda wants to merge 1 commit into
badger:mainfrom
johnmaeda:johnmaeda-12-oclocks-badge
Open

johnmaeda wants to merge 1 commit into
badger:mainfrom
johnmaeda:johnmaeda-12-oclocks-badge

Conversation

@johnmaeda

Copy link
Copy Markdown

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

  • New badge app
  • Improvement or bug fix to an existing app
  • Firmware, menu, or system change
  • Documentation
  • Infrastructure (workflows, scripts, tooling)
  • Universe 2025 (badge25/) maintenance

Badge app checklist

  • The app lives in badge/apps/<name>/ with __init__.py and a 24x24 icon.png
  • README.md starts with a one-sentence description, followed by usage and any hardware or network requirements
  • Uses the 2026 runtime globals (badge, screen, image, ...) and logical buttons such as BUTTON_SELECT
  • Movement and animation are frame-rate independent (badge.ticks_delta)
  • Tested on Universe 2026 badge hardware, including both orientations and the capacitive controls
  • Assets are in assets/, are PNG where possible, and are as small as practical
  • No secrets, tokens, or personal data are committed (badge/secrets.py stays empty)

The only image asset is the required app-root 24x24 icon.png (140 bytes); no additional assets/ directory is needed. Hardware coverage is partial, as detailed below.

Screenshots

All twelve clock faces in the Universe 2026 simulator

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.

  • I created all code and assets in this PR, or they are already available under an MIT-compatible license and I have credited them in the app README
  • This PR doesn't include third-party characters, logos, trademarks, or other IP, or the owner has agreed to its release under the MIT License
  • I agree that my contribution is licensed under this project's MIT License

Original artworks are by John Maeda. The adaptation follows CodingTrain/12oclocks at 170fb6ff31ed93fe07c82974a918eb790be24b9e; 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.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings November 2, 2026 21:53

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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

No deployments
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.

2 participants