Product Vamp
Product Vamp is a two-device sheet-music appliance.
- Raspberry Pi Zero 2 W hosts the control Wi-Fi AP, runs the display/control service in Docker, and drives a Waveshare Zero-DISP-7A 1024x600 touch display.
- Raspberry Pi Pico 2 W runs UF2 firmware for a Waveshare 2-inch capacitive touch LCD and sends menu/page commands over the Zero-hosted AP.
The Zero imports generated score assets into SQLite through Noto at startup. Runtime navigation and rendering use Ligo for the HTTP API, Luma for touch UI rendering, and Modulus for shared build/runtime utilities.
Pico controls:
- Tap: next menu item or next score page.
- Double tap: previous menu item or previous score page.
- Tap and hold: select the highlighted mode/song/part/practice row/key, or return from score view to the previous menu.
Build
Configure and build the native development target:
python3 modulus.py configure
python3 modulus.py build
Release verification:
python3 modulus.py configure --target x86_64_gcc12_release
python3 modulus.py build --target x86_64_gcc12_release
Configure/build can read public packages anonymously from the khodo Conan registry.
Refresh clangd compile databases, including the Pico firmware database, with:
python3 modulus.py lsp
When running directly outside the generated Modulus Docker image, set PICO_SDK_PATH before refreshing the Pico database.
Package
Product packaging targets Raspberry Pi OS/Debian trixie on ARM64 and optionally builds Pico firmware. Set PICO_SDK_PATH when building the firmware artifact:
PICO_SDK_PATH=/path/to/pico-sdk python3 modulus.py package --version latest --update
The package command creates:
build/packages/product-vamp-latest-arm_64_gcc12_release.tar.gz
build/packages/product-vamp-latest-arm_64_gcc12_release.tar.gz.sha256
The tarball contains the Zero Docker archive, Pi install scripts, generated score assets, and Pico UF2 firmware.
Publishing the rolling generic package requires credentials only for upload:
PACKAGE_REGISTRY_USER=<user> \
PACKAGE_REGISTRY_TOKEN=<token> \
python3 package/scripts/publish_latest_generic_package.py
Artifacts are published to the khodo generic package registry.
Score Assets
Source score JSON lives in data/. Generated score JSON is not committed. To inspect generated assets without building the full package, run:
python3 -m generator --data-dir data --output-dir /tmp/product-vamp-generated --static-assets-dir package/assets --clean --check
The --check path compares generation invariants against data/expected/performance_summary.json.
Bundled third-party font assets live in package/assets/fonts/petaluma. Petaluma is from Steinberg and is distributed under the SIL Open Font License; the package keeps OFL.txt next to the font files. If the Pico bitmap font needs to be refreshed after changing the bundled UI font, run:
python3 tools/generate_pico_font.py
python3 tools/generate_pico_font.py --check
License
Product Vamp is released under the MIT License. Bundled third-party fonts keep their own licenses next to the font files.