Home/Docs/Capture overview

Capture your calls

Separate channels: Hotato scores the WAV offline, whatever produced it.

The two-channel requirement

Per-channel energy: separation reveals who talked over whom.

  • channel 0 = caller, channel 1 = agent (override: --caller-channel / --agent-channel).
  • Dual-channel / stereo / separate-track recording: most support it.
  • Mono-mixed sums both into one waveform: can’t attribute overlap, degrades every number.

Two ways in

A. Let Hotato pull the recording

Vapi/Twilio: capture auto-pulls it (only network call: that download) and scores offline. See Vapi and Twilio. LiveKit/Pipecat: setup prints a scaffold. Retell: setup explains the workaround.

bash
# auto-pull a Vapi call and score it (needs VAPI_API_KEY)
uvx hotato capture --stack vapi --call-id <id>

# no key? prove the capture → score loop on a bundled call
uvx hotato capture --stack vapi --demo

B. Score a recording you already have

Have the WAV? Caller on channel 0, agent on channel 1:

bash
uvx hotato run --stereo call.wav --stack generic --expect yield

Per-stack guides

Vapi

Dual-channel recording → stereo WAV.

Vapi →

Twilio

RecordingChannels=dual on both legs.

Twilio →

LiveKit

Separate egress, or live adapter.

LiveKit →

Pipecat

In/out channels, or live adapter.

Pipecat →

Retell

Call recording; split channels.

Retell →
When mono is all you have

Caller-onset anchor, overlap becomes degraded:

uvx hotato run --caller mono.wav --onset 2.4 --expect yield