SquishBox
The SquishBox is a compact add-on board and enclosure for Raspberry Pi (primarily Pi 3B+ and Pi 4) that combines:
- high-quality stereo DAC with 1/4" outputs
- MIDI in/out via TRS minijacks
- 16x2 character LCD
- pushbutton rotary encoder
- breakout GPIO for extra controls, LEDs, and peripherals
This creates a portable embedded platform for audio projects such as synths, sound modules, pedalboard utilities, sequencers, and music players.
The software package includes ready-to-run applications plus a simple Python API for building your own.
Building/Obtaining
This repository includes schematics, PCB fabrication files, BOMs, and enclosure models for users who want to build their own hardware.
Kits and pre-built units are also available from the Geek Funk Labs store.
Installing
The SquishBox software is targeted for a Pi 3B+/4 running Raspberry Pi OS (64-bit, based on Debian 13 "Trixie") or newer. Other platforms may work but are not officially tested.
Before installing (even on a fresh system) it's advisable to first run
sudo apt update && sudo apt upgrade to update your audio stack.
To run the install script, log in as a regular user and enter:
bash <(curl -sL geekfunklabs.com/squishbox)
Answer the prompts, wait for install to complete, and reboot the Pi to activate the LCD/button interface.
Using the SquishBox
On first boot, the SquishBox starts a launcher that lets the user choose an app to run or modify system settings. Selections can be made by turning the rotary encoder. Tapping the rotary encoder confirms a choice. Pressing and holding the encoder will cancel or return to the previous screen in most situations. To safely shut down the SquishBox before disconnecting power, use the "Shutdown" option in the "Exit" menu.
Writing SquishBox Apps
The squishbox python package provides access to the LCD, controls (buttons/encoders), outputs, and a set of menu-driven interaction helpers. Here is a simple example app:
import squishbox
sb = squishbox.SquishBox()
card = "hw:sndrpihifiberry"
sb.lcd.clear()
sb.lcd.write("Audio Test", row=0)
while True:
i, option = sb.menu_choose(["Noise", "Sine", "Exit"], row=1)
if option == "Noise":
sb.shell_cmd(f"speaker-test -l2 -c2 -D{card}")
elif option == "Sine":
sb.shell_cmd(f"speaker-test -l2 -c2 -tsine -D{card}")
elif option == "Exit":
break
Support and Feature Requests
The SquishBox is under active development, and feature requests are welcome.
Please post requests/questions to Discussions on GitHub, and open issues or pull requests for bugs.
Metadata
Release files for squishbox 1.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| squishbox-1.3.2.tar.gz | 35.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| squishbox-1.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 78.1 kB
Release files / squishbox-1.3.2.tar.gz
| Download URL | squishbox-1.3.2.tar.gz |
|---|---|
| Size | 35.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5da55854f50bc94744b6f787af8245ef19472a103b058f529ec2211075c3916b
|
|
BLAKE2b-256 checksum How to use checksums |
c088be5a6c96408ae67d013c94d1416e30dfc3e72179d4bf0a45a1f71f0f0297
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.
Transparency logRelease files / squishbox-1.3.2-py3-none-any.whl
| Download URL | squishbox-1.3.2-py3-none-any.whl |
|---|---|
| Size | 42.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2321d8fc4ac65f8e2239d55824d5382df1f616bb3f2d52e7fe38f1086b41b0f4
|
|
BLAKE2b-256 checksum How to use checksums |
2f1fdae9bb4f2225d48884d61a68efd354d439a90252ad1ec8c2a5a8872e0834
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.
Transparency log