CoProduce
Remote music co-production over Ableton Live.
- TypeScript
- Electron
- WebRTC
- Node.js
- pnpm workspaces
The problem it solves
Two producers working remotely today use Zoom: one shares a screen, the other watches and describes changes out loud. The call's audio is processed for speech — echo cancellation, noise suppression, gain control — so the music arrives unrecognisable.
What it does
A desktop app that connects both machines with a room code: one person sees, hears and operates the other's Ableton session as if the project were open on their own computer.
The hard part
Streaming music, not speech
The entire real-time web audio stack is tuned for calls: it assumes a person talking and applies processing that destroys a mix. Automatic gain control, echo cancellation and noise suppression all have to be explicitly disabled, and the codec forced into music mode at high bitrate. On the other end, capturing Ableton's output on macOS needs a virtual audio driver the system doesn't ship, so the app has to detect its absence and walk the user through installing it rather than failing without explanation.
Technical decisions
Direct peer-to-peer, with relay fallbackinstead ofalways routing through a server
Because Latency is the only requirement that matters here. An extra hop through an intermediate server adds delay exactly where it's noticeable. The relay exists only for when a direct connection can't be established.
Why I shut it down
I shut it down while it worked, and that was the point
I got as far as a working installer: remote control of the other machine and real-time music-quality audio, both solved. While researching the market I found Muse, which does exactly this and has years of development behind it. Continuing would have meant building a worse version of something that already exists, for a problem that was already solved. I stopped there. The hard part — understanding why video-call audio destroys a mix, and how to avoid it — I learned anyway, and that stays with me.
What I learned
Two things. The technical one: a platform's defaults encode a use case, and stepping outside it means manually disabling everything designed to help. The other, less comfortable and more useful: researching the market before writing code would have saved weeks, and realising it late still beats not realising it.
What's next
Nothing. It's closed on purpose.
In short
- Reached a working installer on Windows and macOS
- Remote control and real-time audio, both solved
- Shut down as a product decision, not for technical reasons