Inspiration AI voice clones are now cheap enough to turn up in ads, audiobooks, games and dubbing. The people whose voices they copy usually find out by accident. Voice actors Paul Lehrman and Linnea Sage say they heard clones of their own voices, sold by an AI company, in videos they never recorded. The law is starting to require consent and pay: Tennessee's ELVIS Act, the SAG-AFTRA 2025 video-game agreement, and the EU AI Act's rules for synthetic audio. Existing tools each do one piece. ElevenLabs pays creators, but only for use on ElevenLabs. YouTube and Pex detect voices but don't pay anyone. Nothing meters a voice across platforms, applies the owner's own terms, and pays them automatically.

What it does Consent first. A voice owner enrols by recording a consent statement and reading a random, single-use liveness phrase. Gemini checks both recordings, and the phrase is also matched in code, so nobody can enrol someone else from an old clip. Terms in plain English. The owner types something like "$30 a minute for ads, free for non-profits, never for politics". Gemini turns it into a structured policy, and the owner confirms it. Detection, even of clones. A brand uploads an ad to pre-clear it. The AI pipeline finds each registered voice, labels it as an AI clone or an original, measures the minutes and classifies the use (ad, game, political…). A Bryntum timeline shows every segment. PayPal billing. Licensed use is priced from each owner's terms, and one PayPal invoice (Invoicing v2) is sent for the scan. When it's paid, PayPal's signed INVOICING.INVOICE.PAID webhook triggers a PayPal Payout of each owner's royalty, with the platform fee shown on every line. No licence? No lawsuit. An unlicensed use gets a retroactive licence offer on the same kind of invoice, plus a takedown template if it's declined. A blocked use, such as a political ad for a voice that forbids politics, gets no offer: the owner is alerted with the evidence. The owner's ledger. Every use is a row in a SHA-256 hash-chained ledger, shown in AG Grid with the PayPal invoice and payout IDs. For platforms. POST /scan and GET /policy/{voice}, with Python and TypeScript SDKs generated by APIMatic. How we built it PayPal (sandbox). All PayPal calls go through server/paypal.py:

API What it does Safety detail OAuth client credentials Gets access tokens
Invoicing v2 Create, send, and record payment for the sandbox shortcut Cent-rounded line per voice; PayPal-Request-Id per scan Webhooks INVOICING.INVOICE.PAID and PAYMENT.PAYOUTS-ITEM.* Every event checked with verify-webhook-signature and deduped by event ID Payouts Pays each owner's royalty sender_batch_id = roy-{invoice}-{voice}, so a retried webhook can never pay twice; we tested this against the sandbox AI.

Speech pipeline: Silero VAD → SpeechBrain ECAPA-TDNN embeddings on 1.5 s windows, matched to enrolled voices with a calibrated threshold → a wav2vec2 clone-detection probe → Whisper small. It runs on a Kaggle T4. Gemini does three jobs: use-type classification, terms → policy, and the consent and liveness check. Demo voices. Five fictional personas made by blending Kokoro-82M voice packs, and their AI clones made with F5-TTS. No real person's voice was recorded or cloned.

App. FastAPI + React, hosted on Render. Bryntum Scheduler draws the detection timeline, and AG Grid shows the ledger.

Results (small, synthetic set, and honest about it) Measure Result Speaker match EER 0% on whole clips, for originals and AI clones; 1.1% on 1.5 s windows Clone detection 89.8% accuracy, but 14.5% false positives on originals. So the clone label is shown as evidence and is never used to bill. A pretrained deepfake detector flagged nothing as fake on this data Minutes 10.8% mean error; always under-counts, so it under-bills, never over-bills Use type 5/5 demo files and 40/40 labelled sentences PayPal end to end Invoice → verified webhook → Payout SUCCESS → verified payout webhook, plus a real PayPal retry handled correctly Challenges PayPal payout fees. The sandbox charged $0.25 to pay out a $0.55 royalty. Paying out per use doesn't work, so royalties are paid once per paid invoice, and the fee is shown. Fractional cents. Fractional-minute quantities produced fractional cents on invoices, so we round each line ourselves. Kaggle's move to Python 3.13 broke Kokoro, spaCy and SpeechBrain installs. We worked around them with isolated venvs and two small compatibility patches. Gemini's free-tier quota is 20 requests a day per model, so the client falls back across models. What's next Real enrolled speakers, with an ASVspoof-style clone evaluation. A GPU worker for live scanning of new uploads. Monthly batched payouts with a minimum threshold. C2PA / EU AI Act marking checks as an extra signal. A platform plug-in, "Content ID for voices".

Built With

  • ag-grid
  • apimatic
  • bryntum
  • ecapa-tdnn
  • f5-tts
  • fastapi
  • gemini
  • kaggle
  • kokoro
  • paypal
  • paypal-payouts
  • paypal-webhooks
  • python
  • react
  • render
  • silero-vad
  • speechbrain
  • sqlite
  • vite
  • wav2vec2
  • whisper
Share this project:

Updates

Submission history