I’m not a coder by trade, just someone with too much time on their hands…
The project started after I was inspired by the NR1-UI by @maschine2501 GitHub repo and the Audiophonics plugin so cheers to @olivier_audiophonics. Those projects showed me what was possible, but I found there wasn’t a decent, up-to-date script for 256x64 SPI OLEDs in the Volumio world. That became my starting point.
From there, I’ve built Quadify, a toolkit that adds advanced display and control support for Raspberry Pi audio systems running Volumio. It brings OLED display integration, rotary encoders, buttons, and LEDs together in a clean, modular way, making it much easier to add these features to your setup.
When Quadify starts up it pulls a list of available services and sources from Volumio, then grabs the icons for the main menu. These update dynamically depending on what’s enabled. Once a service is selected, Quadify fetches the navigation from Volumio and builds a menu list. From there, the user can scroll through the options, play a track, or switch between different screen views.
We’re a small group of Quad enthusiasts and have put together a website showing how to breathe new life into the almost-redundant FM4 tuner by turning it into a modern streamer. Many of our members are in their 70s and had never streamed music before, some had never even heard of a Raspberry Pi, so helping them get set up with SSH and installation scripts has been both a challenge and a hugely rewarding experience.
I have attempted to make this into a plugin but hit a few walls regarding volumio saving the users choices in the plugin settings.
I see real potential here. There have been several requests to control Volumio exclusively via RC remote, this could be a step in that direction. Where the Rotary is replaced by UP, DOWN, LEFT, RIGHT and ENTER.
Yes, we’ve experimented with both triggerhappy and LIRC for this. As you say, the mapping is flexible, for example scroll left/right on the rotary can just as easily be mapped to up/down on a remote. I haven’t tested every plugin or service yet, but so far they all seem to follow the same navigation pattern.
Hi Matt, this is amazing, as I was a bit upset when the old 265x64 did RIP but I have this display in my trunk, Will your Plugin also work with Raspberry Pi 5?
Cheers
Benjamin from Frankfurt.
Glad to hear you’ve got that display handy! I’ve had it working on the Pi 5, but it’s not fully ready just yet. The main challenge has been getting Raspberry Pi OS (still on Buster for Volumio) to play nicely with the newer Luma OLED libraries, matching them up was a bit of a headache.
It’s definitely doable, but not quite plug-and-play at the moment. I’ll keep you posted once I’ve got a smoother install path for Pi 5.
We’ve got Luma running on the Pi 5 now, it just took a bit of jiggery-pokery to make it play nicely with Quadify (wiring overlays/initialisation and some version pinning). Appreciate the tip!
We’ll lean on the Debian packages (python3-luma.oled, python3-pillow) on Bookworm/Pi 5 to keep installs faster and less brittle, and only pin the few Python deps we still need in requirements.txt. Appreciate the heads-up and the kind words, glad you like the project! If you spot anything else, keep ’em coming.
Buster vs Bookworm mismatch. Early builds were on Buster/Python 3.7 while newer luma.oled wheels expected newer Pillow/ABI. Pip installs dragged in versions that didn’t play nice with the older base.
Pillow/pycairo/cairosvg stack. Building from pip wanted libjpeg/freetype/cairo dev headers and the versions didn’t always line up. We’ve since moved to the Debian packages on Bookworm where possible.
RPi.GPIO on Pi 5. The Pi 5 GPIO stack changed; we hit edge cases with RPi.GPIO availability/backends. We tweaked our code/service to a setup that works reliably on Volumio’s Bookworm images.
I²C detection script. Our old awk-based i2cdetect parse tripped over BusyBox awk (no strtonum). We replaced it with a tiny Python/smbus probe.
Your venv suggestion is spot on. Our current pattern on Bookworm/Pi 5:
That combo (APT for luma.oled/Pillow, venv for the few pip deps) has been the least brittle. Appreciate the nudge, made our setup cleaner! If you spot any other rough edges, I’m all ears.