Inspiration
Choosing the next track is part musical judgment, part reading the room. We wanted a compact DJ setup that could help with that decision without pulling the DJ away from the decks. mrow brings physical controls, a touchscreen, and an agentic music assistant together in a single physical package.
What it does
mrow runs a customized BiteDJ/Mixxx interface on a Raspberry Pi 4. Its Assist tab suggests tracks from the DJ's available library and builds rolling setlists. The DJ can choose Follow crowd, Build, Hold, or Ease down, inspect the reasons behind suggestions, and load a chosen track into either deck.
Five physical switches provide deck-loading controls and Good / Mid / Bad crowd-feedback inputs. A rotary encoder handles browsing and waveform zoom. the Audience Feedback System allows the DJ to note down the reactions of the audience to further tune the ongoing setlist to the environment. Those ratings influence future recommendations, with history retained across sets.
The assistant uses analyzed local tracks and imported Rekordbox USB catalogs. It considers tempo, harmonic compatibility, genre, available musical features, and past feedback. A Google Gemini agent adds model-ranked suggestions and setlist explanations. Local ranking and planning keep working without an API key or internet connection.
How we built it
Our project is built on top of four layers. First, the hardware: a custom 3D printed enclosure/stand with a Raspberry Pi and a 7" touchscreen display for ease of use. On top of this, we connect three layers together: the audio engine heavily tuned for our specific hardware, Python based agent harness, and our custom Raspberry Pi runtime and hardware bridge. We built on top of pre-existing foundations for the audio engine but heavily modified to work with our use-case.
Our audio engine and runtime launches the bundled Python worker over private process pipes, so the appliance needs no separate browser or assistant server. SQLite stores playback history, feedback, and plans. The local scorer ranks feasible tracks, and bounded beam search assembles a sequence under tempo and key constraints. Model responses are checked against the actual library and transition rules; invalid choices and unavailable models fall back to local results.
The hardware bridge debounces GPIO switches and translates them, along with the I2C rotary encoder, into virtual MIDI controls. The Linux appliance configuration uses Sway, systemd, ALSA, and PipeWire to boot into the DJ interface and support the controller and audio routing. Docker and CMake support arm64 builds.
Challenges we ran into
A live DJ assistant has to stay synchronized with a changing performance. Songs get played, ratings change, and USB drives disappear. We added plan invalidation and stale-response handling so delayed model advice cannot overwrite newer context.
Hardware integration also involved details that are easy to miss: creating the MIDI port before BiteDJ enumerates devices, rejecting switch bounce and held-button repeats, handling encoder reconnection, and separating controller audio from Bluetooth routing. On the Pi, build resources and appliance startup behavior required as much attention as the recommendation logic.
Accomplishments that we're proud of
We connected recommendations, setlist planning, playback history, and tactile feedback inside the same interface the DJ uses to perform. The system preserves manual control while making its suggestions explainable and useful offline.
What we ended up with is a fully functional hardware product with a deeply integrated application suite for DJs. It offers what a professional level setup can do and even more: agentic and intelligently adaptive capabilities.
What we learned
This project highlighted how much a usable music appliance depends on coordination between software and hardware. Good recommendations need reliable playback context, handling of missing metadata, and predictable failure behavior. A model is most useful here when its choices are constrained by the actual music library and the DJ remains in control.
What's next for mrow
We want to tune recommendation weights against DJ feedback, refine touchscreen and physical-control experience, as well as further developing the agentic capabilties. There are still many more possible features to add with Google Gemini's agentic nature as well as ElevenLabs Music and TTS (Text to Speech) functions. Further work includes measuring performance on the Pi and improving musical feature coverage while keeping the system useful offline.

Log in or sign up for Devpost to join the conversation.