Transcribe audio into a raw transcript, a speaker-diarized transcript, and an LLM summary. The transcriber service orchestrates Whisper, an internal diarizer, and an LLM. It is the only service exposed to the outside.
cp .env.example .env
docker compose up --buildCOMPOSE_PROFILES=cpu (default) or gpu in .env picks the worker/Whisper variant.
Transcriber API - http://localhost:8000 (interactive docs at /docs).
Submit, poll, cancel.
POST /v1/transcribe- form:file, and any ofraw,diarized,summary(at least one), optionalwebhooks[]GET /v1/jobs/{id}- status and resultPOST /v1/jobs/{id}/cancel
Up to 4 GB and 4 hours. The worker first converts every upload to FLAC, 16 kHz, mono. A
strategy is picked by the file extension (transcriber/src/pipeline/convert.py). A file with no
audio track is rejected with 400.
- Audio:
wav,mp3,m4a,flac,ogg,oga,opus,aac,wma,amr,aiff,aif,mka,caf - Video (the audio track is used):
mp4,m4v,mov,mkv,webm,avi,wmv,flv,mpg,mpeg,ts,mts,3gp
mcp-server exposes transcription to AI agents over Streamable HTTP at
http://localhost:8002/mcp. One tool:
transcribe(path, raw, diarized, summary)-pathis a file in the shared pool, absolute or relative to its root; returns the requested artifacts once the job finishes.
The pool is POOL_DIR from .env, mounted read-only at the same path. Mount the directory the
agent's uploads land in there, so the paths it reports resolve inside the MCP container.
config.yaml- runtime settings (models, limits, LLM provider, logging)prompts.yaml- summary prompts.env- ports, tokens, images, profile
The API accepts an upload and returns. Worker consumes the job out of band. Redis carries the job and its result.









