Dev Patel

v0.1.0 · consent-gated · Oct 2026 → Present

Your Voice, Any Language

Talk to anyone on Earth
in your own voice.

Real-time translation for calls and videos, spoken in your own cloned voice, entirely on your machine — where cloning requires a live, spoken, liveness-checked consent on a real microphone.

The local web UI after the bundled scripted conversation: Spanish out in a synthetic demo speaker's cloned voice, English back as Spanish captions, and per-stage latency against the budget — 6.8 s median against 3.7 s.

Highlights

31timed liveness prompts to enroll
6.8 smedian latency vs 3.7 s budget
138tests

The problem.

Translation on a call usually means captions, or a stranger's synthetic voice speaking for you. Speaking in your own voice in another language is now technically possible with zero-shot voice cloning.

The same technology clones anyone from a podcast clip. Building it responsibly means the hard part isn't the translation — it is making sure the voice being cloned belongs to the person at the microphone.

What I built.

Each direction of a call runs its own capture, recognise and speak threads, so a slow voice never drops microphone audio. Silero VAD finds utterances, Whisper re-decodes them every second while you speak, and LocalAgreement-2 commits only words two hypotheses agree on, so captions don't flicker. Finished clauses go to translation and ZipVoice before the sentence ends, out through a virtual microphone your call app can select.

Enrollment records only from a capture device that passes a hardware check that never trusts device properties. You read a consent statement, then answer three random three-digit prompts, each within 2 s, on the same mic, checked by a speaker embedding. The profile is HMAC-signed and verified on every load.

Sending into a call is dry run until you type send, and starts with a spoken notice that the listener is hearing an AI translation. All synthesized speech carries a spread-spectrum watermark. Video mode dubs a file into your voice, keeping the original timing with capped time-stretch.

Screens.

make demo: the consent gate refusing a file, a monitor and a virtual mic as enrollment sources, a Spanish clip dubbed into English, and the latency table printed whether or not it is within budget.
make demo: the consent gate refusing a file, a monitor and a virtual mic as enrollment sources, a Spanish clip dubbed into English, and the latency table printed whether or not it is within budget.

What I considered.

Rejected

Enroll a voice from an uploaded audio file

That is how a podcast clip becomes someone else's voice. Files, monitors and virtual devices are all refused; enrollment is live, on hardware, with prompts no recording can anticipate.

Rejected

Identify hardware microphones from their reported device properties

Rejected after review. A remap source with alsa properties passed the check. Properties are now never trusted; PulseAudio fields, owner modules and the kernel's card list all have to agree.

Chosen

Local by default, a dry run before sending, a spoken disclosure and a watermark

Nothing leaves the machine unless you opt into the cloud translator, and transcripts — never audio — are all it would send. The cost is latency: on a 2-vCPU machine, voice cloning alone blows the budget.

Results.

  • make demo dubs a synthetic Spanish clip into English in a bundled demo speaker's cloned voice, runs a two-way call on a scripted conversation, and checks for the watermark in the audio it synthesized.
  • The consent gate refuses enrollment from a file, a monitor of an output, and a virtual microphone; one regression test exists per bypass found in review, including a spoofed hardware source.
  • Latency is printed rather than hidden: on the 2-vCPU build machine, end of speech to translated voice ran 4.5–8.4 s on a quiet run against a 3.7 s budget, dominated by voice cloning.
  • 138 tests in CI on Python 3.10–3.13; the real enrollment path runs against a mocked hardware microphone.

Architecture

How it fits together.

Your micSilero VADASRWhisper · LocalAgreement-2TranslateArgos · phrasebookClaude opt-inYour voiceZipVoice clonewatermarkVirtual micthe call hears youConsent gatehardware · livenesssigned profile
  1. 01

    Your micSilero VAD

  2. 02

    ASRWhisper · LocalAgreement-2

  3. 03

    TranslateArgos · phrasebook · Claude opt-in

  4. 04

    Your voiceZipVoice clone · watermark

  5. 05

    Virtual micthe call hears you

    Consent gatehardware · liveness · signed profile

Two directions at once, each with its own threads. The consent gate sits in front of the voice, not behind it.

In hindsight

Most of what matters here isn't verified on real people: enrollment has only run against a mocked microphone, the speaker check's threshold was calibrated on eight public clips and is weak, and the default cloning model is likely non-commercial. The gate stops casual misuse, not a determined one — someone who controls their own audio stack can fake hardware — and the README says exactly that. The review round that spoofed the hardware check taught me to treat every field a user can set as input, including the ones that look like system facts.

Tech specs.

Type
Project
Where
Personal
When
Oct 2026 → Present
Duration
1 mo
Status
v0.1.0 · consent-gated
Stack
PythonWhispersherpa-onnxONNX RuntimeFastAPIPulseAudioFFmpegGitHub Actions
Caveats
Latency runs over budget on the 2-vCPU machine it was built on. The consent gate is a guardrail, not a security boundary, and its speaker check is uncalibrated on real people.