Enabling Transcription in Jitsi Meet

Chris Carrington
4 min readNov 7, 2023

--

Over my past two Medium articles, I have written about supporting transcription in Jitsi Meet. In both articles, I noted how cumbersome transcription is for Jitsi Meet users. However, I have encountered some additional configuration that makes it far easier to use. This article covers how to enable transcription in Jitsi Meet with a configuration that provides a much better user experience than in my previous two articles.

Installation and Configuration

To install and configure Jitsi Meet with transcription, do the following:

  1. Install Jitsi Meet per the documentation.
  2. Note: these instructions are for the Vosk transcription service. If you’re interested in using my fork of Jigasi that supports Deepgram speech-to-text, read this article for more information.
    Install Jigasi, the Jitsi Meet service that interfaces with speech-to-text services to provide transcription:
sudo apt install jigasi

3. Configure Jigasi. This is done in the /etc/jitsi/jigasi/sip-communicator.properties file. Uncomment and edit the following lines:

# Options regarding Transcription. Read the README for a detailed description
# about each property

org.jitsi.jigasi.ENABLE_TRANSCRIPTION=true

...

# delivering final transcript
org.jitsi.jigasi.transcription.DIRECTORY=/var/lib/jigasi/transcripts
org.jitsi.jigasi.transcription.BASE_URL=http://localhost/
org.jitsi.jigasi.transcription.jetty.port=-1
org.jitsi.jigasi.transcription.ADVERTISE_URL=false

# save formats
org.jitsi.jigasi.transcription.SAVE_JSON=false
org.jitsi.jigasi.transcription.SAVE_TXT=true

# send formats
org.jitsi.jigasi.transcription.SEND_JSON=true
org.jitsi.jigasi.transcription.SEND_TXT=false

# Vosk server
org.jitsi.jigasi.transcription.customService=org.jitsi.jigasi.transcription.VoskTranscriptionService
# org.jitsi.jigasi.transcription.vosk.websocket_url={"en": "ws://localhost:2700", "fr": "ws://localhost:2710"}
org.jitsi.jigasi.transcription.vosk.websocket_url=ws://localhost:2700

4. Start Vosk:

docker run -d -p 2700:2700 alphacep/kaldi-en:latest

5. Configure Jitsi Meet. Its configuration file name will vary depending on the hostname you configured during the Jitsi Meet installation. My file is located at /etc/jitsi/meet/omoiomoi.org-config.js. You’ll want to edit the following section of the configuration file:

    // Transcription options.
// transcription: {
// // Whether the feature should be enabled or not.
// enabled: false,

// // Translation languages.
// // Available languages can be found in
// // ./src/react/features/transcribing/translation-languages.json.
// translationLanguages: ['en', 'es', 'fr', 'ro'],

// // Important languages to show on the top of the language list.
// translationLanguagesHead: ['en'],

// // If true transcriber will use the application language.
// // The application language is either explicitly set by participants in their settings or automatically
// // detected based on the environment, e.g. if the app is opened in a chrome instance which
// // is using french as its default language then transcriptions for that participant will be in french.
// // Defaults to true.
// useAppLanguage: true,

// // Transcriber language. This settings will only work if "useAppLanguage"
// // is explicitly set to false.
// // Available languages can be found in
// // ./src/react/features/transcribing/transcriber-langs.json.
// preferredLanguage: 'en-US',

// // Disable start transcription for all participants.
// disableStartForAll: false,

// // Enables automatic turning on captions when recording is started
// autoCaptionOnRecord: false,
// },

Uncomment and edit the appropriate lines so it looks like this:

    // Transcription options.
transcription: {
// // Whether the feature should be enabled or not.
enabled: true,

// // Translation languages.
// // Available languages can be found in
// // ./src/react/features/transcribing/translation-languages.json.
// translationLanguages: ['en', 'es', 'fr', 'ro'],

// // Important languages to show on the top of the language list.
// translationLanguagesHead: ['en'],

// // If true transcriber will use the application language.
// // The application language is either explicitly set by participants in their settings or automatically
// // detected based on the environment, e.g. if the app is opened in a chrome instance which
// // is using french as its default language then transcriptions for that participant will be in french.
// // Defaults to true.
useAppLanguage: true,

// // Transcriber language. This settings will only work if "useAppLanguage"
// // is explicitly set to false.
// // Available languages can be found in
// // ./src/react/features/transcribing/transcriber-langs.json.
// preferredLanguage: 'en-US',

// // Disable start transcription for all participants.
// disableStartForAll: false,

// // Enables automatic turning on captions when recording is started
// autoCaptionOnRecord: false,
},

6. Restart all Jitsi Meet services:

sudo systemctl restart jitsi-videobridge2.service
sudo systemctl restart jicofo.service
sudo systemctl restart jigasi.service
sudo systemctl restart prosody.service

Using Transcription

Once you have completed those steps, you should see a new option in the Jitsi Meet UI. To see and use it:

  1. Start a meeting:
Jitsi Meet Start Meeting Screen

2. Click the following at the bottom of the screen for more options:

3. Click the following for close captions on the screen:

…and that's it. With this configuration, you will no longer need to invite the “transcriber” user to the room. It is automatically invited for you. It’s a much-improved user experience over the “Invite people,” invite “jitsi_meet_transcribe” method of starting transcription.

Conclusion

I hope you have found this article helpful. Please note that while this configuration makes it much easier to transcribe Jitsi Meet meetings, it doesn’t do anything to make access to transcriptions after the meeting easier. For details on a service that provides storage and retrieval of transcripts, check out this article. Thanks for reading!

--

--

Chris Carrington

A software engineer who’s getting back into the workforce after a long career break