What you get
The transcript is always written to a file, and the agent always reports where. That path is the durable artifact — transcription costs real minutes of compute, and the file outlives the chat session you ran it in.~/.gaia/transcripts/staff-meeting.txt— the raw transcript, written before anything else runs, so a failure in a later stage never costs you the expensive part. Plain prose, no speaker labels — acoustic diarization runs alongside it and writes a separate timings file that the next stage reads.staff-meeting.transcript.md— the readable version: mis-hearings corrected and split into speaker turns, opening with a## Speakerslist. Voices are separated straight from the audio (pyannote + WeSpeaker models, running locally), soSpeaker 1/Speaker 2reflect distinct voices, not guesswork. The names attached to those voices —Priya Ramaninstead ofSpeaker 1— are still inferred from what’s said, so treat the names, not the voice separation, as best-effort. See How speakers are separated and named.- A brief — Executive Brief, Key Facts, Scope, Action Items, Insights, and
Risks / Blockers, written by the
summarizeskill.
Long recordings are summarised in sections, not in one gulp
A 46-minute meeting is around 135,000 characters — more than twice what fits in a single tool result. So the transcript is never handed to the summarizer as one block. It goes to a file, and the summarizer reads that file forward in sections. This matters because the alternative fails quietly. When a transcript is passed inline and gets truncated, what comes back is not an obviously broken summary — it is a fluent, confident brief of the first third of the meeting, with the decisions and action items from the last twenty minutes simply absent. Nothing in the output tells you they are missing. Reading from the file removes the possibility. The practical consequence: the agent chains the three stages itself —transcribe_media, then refine_transcript, then indexing and the summary —
reporting the transcript path along the way rather than stopping to ask. On a
real 46-minute, 4-speaker meeting this takes about 10 minutes total: roughly
9.3 minutes to transcribe — which now includes acoustic diarization, about 3.9
of those minutes — and around 30 seconds to refine, since attaching a name to
an already-separated voice is a much smaller job than the old per-section
guesswork. It is not instant, and it is not meant to be — a summary that
appears in seconds is a summary of the opening minutes.
Quick start
1
Install the skill
import copies each folder into ~/.gaia/skills/, where the agent finds
them by name. transcribe-meeting delegates the brief to summarize, so
install both.2
Start Lemonade Server
Whisper-Large-v3-Turbo
by default, downloaded on first use.3
Ask
In the TUI or Agent UI, name the file and say what you want:First run installs what’s missing (see First run below) and
reports each step as it goes.
How it works
The raw transcript is written before refining or summarizing runs, so a
failure in a later stage never costs you the expensive part.
The preview the agent receives is the first 1200 characters — enough to confirm
it transcribed the right recording, and deliberately far too little to summarise
from. Everything the agent says about the meeting comes from reading the saved
file.
How speakers are separated and named
Two different claims are being made here, and they carry different amounts of confidence. Telling voices apart is real acoustic diarization, not a guess from text.transcribe_media runs pyannote’s segmentation network and a WeSpeaker
embedding model — both ONNX, executed locally via sherpa-onnx — against the
same audio it just transcribed. No PyTorch, no HuggingFace account or gated
licence: the models are plain GitHub release downloads (~33 MB total), used
under their original MIT terms. On a real 46-minute, 4-speaker meeting this
found 4 speakers against a ground truth of 4.
Attaching a real name to a voice is still inferred from what’s said —
self-introduction, being addressed by name, role cues — exactly as before.
On that same recording, the naming pass recovered one participant’s real
name; speakers with no naming evidence in the conversation stay Speaker 1,
Speaker 2, and so on. The output looks like this:
refine_transcript
falls back to the old text-only method instead: turns are split on pauses in
the recording and named from context alone, with lettered labels like
Speaker A, Speaker B. The transcript file’s header always says which
method produced it.
Known limits, both measured on real recordings:
- Very short clips can miss a speaker entirely — on a 90-second clip where a second voice contributed only a few interjecting words, diarization reported one speaker.
- The clustering that decides speaker count when it isn’t known is
threshold-tuned (default
0.65):0.50over-split one recording into 10 clusters,0.75collapsed the same recording to 2.
Corrections cover the whole transcript, not just the uncertain parts
transcribe_media reports the words Whisper itself was least confident about —
up to 25 of them, though it also tells the agent the true total — as a hint
about where mistakes are more likely. refine_transcript doesn’t limit its
edits to those: it re-reads the entire transcript, section by section, and
is told to fix a mis-hearing only when it’s confident, leaving anything
ambiguous exactly as transcribed. It keeps every point that was made — no
summarizing or shortening at this stage. Measured on the same 46-minute test
recording, content retention came out at 99.7%.
First run
Transcription needs pieces that GAIA does not install up front, because most users never transcribe anything. They arrive on first use instead:
Each step reports progress rather than sitting on a spinner. If one can’t
complete, it fails with the command that fixes it.
Troubleshooting
ffmpeg not found and no package manager available
ffmpeg not found and no package manager available
Install it yourself and re-run —
winget install ffmpeg on Windows,
brew install ffmpeg on macOS, sudo apt-get install -y ffmpeg on Debian /
Ubuntu. GAIA checks PATH, so a fresh shell may be needed afterwards.Speakers came back as 'Speaker 1', 'Speaker 2' (or 'Speaker A', 'Speaker B')
Speakers came back as 'Speaker 1', 'Speaker 2' (or 'Speaker A', 'Speaker B')
Numbered labels mean diarization ran and separated real voices, but found
nothing in the conversation to name them — no self-introduction, nobody
addressed by name. Lettered labels mean diarization itself didn’t run
(see First run) and turns were inferred from pauses
instead. Either way, tell the agent who’s who and ask it to rewrite the
transcript.
A short clip only found one speaker
A short clip only found one speaker
Diarization needs enough speech per voice to build a reliable acoustic
profile. On a 90-second clip where a second person contributed only a few
interjecting words, it reported one speaker. Longer recordings with more
speech per person are markedly more reliable.
I got the transcript but no summary
I got the transcript but no summary
The agent is meant to chain the whole pipeline itself — refine, index, then
summarize — so this shouldn’t need a nudge. If it stops after reporting the
transcript path, just ask it to continue from that file; each stage tells
the agent what to call next.
Names in the speaker list look wrong
Names in the speaker list look wrong
The names are inferred from the conversation’s words, not voiceprints —
that part can be wrong even though the voice separation underneath it is
acoustic. Tell the agent the correct mapping and ask it to rewrite the
transcript.
It is slower than I expected
It is slower than I expected
Roughly 9× realtime warm on GPU for transcription, plus acoustic
diarization on the same audio — together about 9.3 minutes for a
46-minute meeting. Refinement is quick by comparison, around 30 seconds,
since attaching a name to an already-separated voice is a small job. The
first run also includes the model downloads — Whisper, plus the
diarization models.
Not this
- Live voice conversation with the agent — that is Voice Interaction.
- Summarizing a document that isn’t a recording — Document Q&A.
Next steps
Starter Skills
Fork
transcribe-meeting into your own meeting formatVoice Interaction
Talk to the agent live instead of transcribing a file
Document Q&A
Ask questions across the transcripts you’ve indexed
CLI Reference
Every
gaia command and flag