BoothVoiceover studio · v1

Voiceover recording · real-time direction

The director is listening.

Read your voiceover script out loud. Booth listens to every word, cuts you off with the exact line to redo, and hands you a clean master when you wrap.

Enter the booth →Chrome or Edge · microphone · 2 minutes
Live proof · no mic needed

A deliberately bad take of the script below runs through Booth's real judge pipeline. Watch it catch the misreads.

The session

01

Set the script

Paste your VO script, one line per line. The director takes it into the booth with you.

02

Read out loud

A real-time voice agent follows your read against every line. Numbers, names, stumbles: nothing slips.

03

Get cut, get it right

Flub a line and the director cuts you off mid-read: line number, what you said, what it should be. Read it again.

04

Print the master

Wrap the session and Booth assembles the best read of every line into a clean WAV. The editing session never happens.

45 min

Scrubbing takes, per video, today

1.8 s

After your pause, the cut is triggered, by design

0

Editing sessions when you wrap

Under the glass

One WebSocket. Real interruption handling.

The director is a managed agent on the AssemblyAI Voice Agent API: streaming STT, turn detection, interruption handling, and speech synthesis in a single connection. Booth wires its decisions into the app as client-side tools — every retake call you see stamped on the script is a tool call the agent made.

The master is assembled from word-level timestamps returned by the sync transcription model: the best-scoring read of each line, spliced with fades, in your browser. Raw session audio never leaves your machine except as a transcription request.

// the director's whole briefing
await ws.send(JSON.stringify({
  type: "session.update",
  session: {
    system_prompt: DIRECTOR_RULES + script,
    greeting: "Step up to the glass.",
    tools: [call_retake, mark_take, finalize],
    input:  { format: { encoding: "audio/pcm" } },
    output: { voice: "alba",
              format: { encoding: "audio/pcm" } },
  },
}));

// the money moment, as an event
{ "type": "tool.call",
  "name": "call_retake",
  "arguments": { "from_line": 3,
                 "reason": "said two cups,
                            script says four" } }

Take your position.