Case study

Ensayadero.studio

A rehearsal room that listens back.

A rehearsal tool for bands: upload a recording and get it back split into stems, with MIDI and an editable chord chart, in a multi-track mixer. In invite-only beta.

See it live

In private beta. If you'd like to try it, I'll set you up with an account. beltran@rengifo.es

The Ensayadero home screen: what goes in, what the pipeline does, and what comes out.
The product explained in three columns, above the recorder that takes a rehearsal straight off the room mic.
A session playing: transport, stereo meters, a channel strip with its waveform and a loop marker.
Playback with per-channel mute, solo and EQ, and loop markers for the bars that need repeating.
The chord chart in editing mode, with sections, chords, lap counts and timings.
The chart the models guessed, open for correction: sections, chords, laps and timings. The band's edits survive reprocessing.

Self-hosted audio ML, no paid APIs

A Python pipeline — Demucs for stem separation, Basic Pitch and Omnizart for transcription, Omnizart and madmom for chords — runs on TensorFlow and PyTorch, which is why it ships in the same Docker image as the Next.js server, self-hosted with Coolify, behind a job queue that recovers interrupted work on restart.

Next.js on Supabase

Next.js 16 and React 19 with RLS-aware API routes; Supabase for Postgres, Google OAuth with an allow-list and role claims, and Storage for stems, MIDI and charts. Playback in the browser with Tone.js and wavesurfer.

Built with

Next.js 16 · React 19 · Supabase · Tone.js · wavesurfer · Python — Demucs, Basic Pitch, Omnizart · TensorFlow · PyTorch · Docker on Coolify (self-hosted)

The code is private — happy to walk through it on a call. beltran@rengifo.es

← Back to the résumé

Need an engineer who ships end to end — and still sweats the pixels? Let's talk.

© 2026 Beltrán Rengifo