Deployed · Running as a service
I used a commercial speech vendor long enough to learn it properly, then replaced it. Type text and get speech, describe a voice in plain language and audition takes, or hand it a recording and it will train a high-fidelity voice from it in about half an hour.
A dependency problem solved with architecture
The two synthesis engines worth using have irreconcilable dependency trees — the same packages at incompatible versions. The usual outcome is that you pick one and live with its weaknesses.
Instead each engine lives in its own managed virtual environment behind a single backend, with the second driven through a subprocess worker. The API surface is unified; the dependency hells never meet. External tooling paths come from environment variables and degrade to "not configured" rather than crashing, so a fresh clone still runs everything else.
A five-stage ML pipeline as a monitored background job
Training a voice from a raw recording is not one operation, it is a chain: normalize the audio with ffmpeg, slice it into training-length segments, transcribe every segment with an ASR model to build a text-audio manifest, fine-tune a LoRA adapter against that manifest, register the result in the voice library, and render a sample so the user can hear what they got.
Every stage shells out to blocking GPU tooling, so the whole chain runs on a daemon thread with its state mirrored to a per-job status file that the browser polls. The user gets a progress bar; the server never blocks; a failed stage reports which stage failed rather than dying silently.
Because it runs somewhere real
It runs as managed services on a dedicated GPU box. Releasing is one command that archives the code together with the voice library, transfers it, extracts it, restarts the services, and prints a health check. If the health check fails you know before you walk away.

The voice library, and the labels are the point. 10-Second Clone is zero-shot cloning from a few seconds of reference audio. 30-Minute Clone is the LoRA fine-tuning path — the five-stage pipeline described above. Text to Voice with a Prompt badge is a voice conjured from a written description with no reference recording at all. Three genuinely different methods, one library, one API. The footer names both engines: Chatterbox · VoxCPM · self-hosted.
What is mine and what is not
More of this project is orchestration of other people’s models than is true of the rest of my work. The synthesis engines, the ASR model, and the segmentation tooling are all third-party — the contribution here is the multi-engine architecture, the training pipeline, and the operational shape, not the models.
The git history badly understates the work: four commits against thirteen substantive research and trial reports covering engine selection, cloning approaches, and fine-tuning results. The documentation is the real record.