Skip to content
Rainforge
All work

Private speech-to-text and text-to-speech

Paul built two private speech services on our own server, one that transcribes calls and one that reads text aloud, so customer audio never leaves our hardware.

IrisVoice AI2026AI automationHosting & opsCustom software
Iris: Self-hosted speech-to-text + text-to-speech APIs

Calls full of names and phone numbers

Our team spends a good part of each day on the phone with leads, and our products were starting to need a voice: transcripts of calls and voicemails, spoken summaries, narration for product videos and hands-free tools for a workshop floor. The easy route is a hosted speech service. It bills every minute, and every recording goes to someone else’s servers. Those recordings hold customer names, phone numbers and prices, and we wanted them to stay on hardware we own.

Open speech models had become good enough to try. Out of the box they were slow, they clicked between chunks of audio, they read numbers and abbreviations badly and they fell over on long texts.

Two small services with a fixed front door

Paul, one of our engineers, started Iris in March 2026 as two small services. One listens and turns speech into text. The other turns text into speech. Each has its own address and needs a key to use.

The decision that mattered most came early. Every app talks to the same two requests, transcribe and synthesize, and never needs to know which model is doing the work. That let Paul swap models freely over the following months. The listening side moved from a widely used starting model to a smaller, faster one in April, and later to larger ones, including a model that covers many European languages. None of the apps calling it had to change. Each swap was a small change with the old version kept next to it, so a bad one could be undone in seconds.

Getting rid of the pops and the mumbling

The speaking side took more work. A light model with a handful of preset voices came first and did not sound natural enough. Voice cloning from a short recording came next and is still kept as an option. The voice in use today comes from a larger open model, picked after two others of the same size were timed on the same machine. It won on how natural it sounds for the memory it needs, and on how well it streams.

Then came the fixes that make it pleasant to listen to. Short fades between chunks took out the pops. The volume stays steady from one chunk to the next, and quiet gaps are left alone so they do not turn into hiss. Before any text reaches the model, a cleaning step spells out numbers, amounts of money, web addresses and abbreviations, because the model mumbles when it meets them raw. Speech streams out as it is made, so playback begins before the sentence is finished.

Every change is checked the same way. A test reads a line aloud, transcribes the audio back to text and compares the two, and any skipped, repeated or made-up word shows up at once.

Sharing one card with the language models

The server has one large graphics card, and the language models our other tools depend on run on it too. Paul rebuilt the speaking model’s setup for the newest generation of card and tuned it until it produced speech much faster than it had out of the box. One request can now read out a long passage in a single go.

The models run at a middle setting that keeps most of the sound while using a fraction of the memory, which is what lets speech and language work share the card. Changing that setting is one line of configuration. When a big language-model job needs the whole card, the speech services are paused for it.

Where the voices go next

Both services answer around the clock through secure public addresses. They are the parts we build voice features from when a client asks for them: transcribing calls, sorting voicemails, reading summaries aloud and voicing product videos.

Screens

Diagram: client to a secure gateway to speech-to-text and text-to-speech services on our own GPU server
A request passes a secure gateway on its way to the speech-to-text or text-to-speech service on our own GPU (illustration, synthesised waveform).
Terminal: health checks, a synthesis request and a transcription round-trip (fictional text, endpoint placeholders)
Health checks, then text to speech and back to text through the two APIs.

Keep reading

Tell us what’s slowing you down.

Thirty minutes, one call. You describe the work that eats your week; we tell you what we would build, how long it takes and what it costs. Even if the answer is “you don’t need us”.

Book a call: free 30-min scoping