These are the three failures we hit ourselves when building free Vosk transcription into our platform. Each has a distinct symptom, so you can go straight to the right fix.
Check the logs first:
docker compose -f docker-compose.yml -f jigasi.yml -f jigasi-override.yml -f vosk.yml logs --tail 200 jigasi vosk
Symptom 1: service-unavailable when enabling subtitles
Cause: the stock jigasi.yml hardcodes JIGASI_MODE=sip. As a SIP gateway, Jigasi never answers Jicofo’s transcription requests.
Fix: override the mode.
# jigasi-override.yml
services:
jigasi:
environment:
- JIGASI_MODE=transcriber
- JIGASI_TRANSCRIBER_PASSWORD
docker compose -f docker-compose.yml -f jigasi.yml -f jigasi-override.yml -f vosk.yml up -d jigasi
Symptom 2: “SASLError using SCRAM-SHA-1: not-authorized”
Cause: Jigasi joins as transcriber@hidden.meet.jitsi, and JIGASI_TRANSCRIBER_PASSWORD was never set, so it logs in with an empty password. The base jigasi.yml does not even pass the variable to the container.
Fix: set it and restart Prosody, which creates the account on start:
JIGASI_TRANSCRIBER_PASSWORD=a-long-random-password
docker compose -f docker-compose.yml -f jigasi.yml -f jigasi-override.yml -f vosk.yml restart prosody jigasi
Symptom 3: transcripts with join events but no words
Cause: Jigasi is not talking to Vosk. The Docker init scripts do not write the JIGASI_SIP_COMMUNICATOR_PROP_* variables into the properties file in transcriber mode, and the Vosk property is easy to misspell. Jigasi reads vosk.websocket_url with an underscore; vosk.websocket.url is silently ignored and Jigasi tries localhost, where nothing is listening.
Fix: mount a properties file with the correct name:
# config/jigasi/custom-sip-communicator.properties
org.jitsi.jigasi.transcription.customService=org.jitsi.jigasi.transcription.VoskTranscriptionService
org.jitsi.jigasi.transcription.vosk.websocket_url=ws://vosk:2700
org.jitsi.jigasi.transcription.DIRECTORY=/config/transcripts
org.jitsi.jigasi.transcription.SAVE_TXT=true
Symptom 4: Vosk keeps restarting
Cause: not enough memory. The English model needs several GB on its own.
Fix: use a server with at least 16 GB of RAM. On AWS a t3.xlarge works; a c5.xlarge with 8 GB does not.
Symptom 5: captions work, but no transcript file
Check that /config/transcripts exists inside the Jigasi container and is mapped to a host folder, and that SAVE_TXT=true is set. Transcripts are written when the meeting ends.
Full setup
The complete, working configuration is in free self-hosted transcription with Jigasi and Vosk. If you would rather not debug it, our transcription service sets it up on your server, and on our platform it is a one-time $29 feature.