# Stage: transcribe ## Purpose Generate raw per-speaker transcripts from prepared audio using WhisperX. ## Inputs - `audio/*.flac` from `prepare` ## Outputs - `transcripts/raw/.json` ## Key Behavior - discovers prepared audio from manifest inputs or canonical audio directory. - derives speaker ID from `.flac` basename. - dispatches WhisperX requests through a bounded worker pool. - validates each output as JSON. - writes run-local outputs then materializes canonical transcript outputs. ## Invariants - speaker basenames must be unique. - output path returned by adapter must match requested output path. - each successful output is validated before stage success. ## Related Contracts And Tests - [WhisperX](../integrations/whisperx.md) owns HTTP, retry, timeout, and cancellation semantics. - [Configuration](../config.md#pipeline) owns concurrency and other operator-selected values. - Implementation and tests: `internal/stage/transcribe.go`, `internal/stage/transcribe_test.go`