| ELEVENLABS_API_KEY |
Yes |
— |
ElevenLabs API key for text-to-speech & speech-to-text services. |
| ELEVENLABS_VOICE_ID |
No |
JBFqnCBsd6RMkjVDRZzb |
Default ElevenLabs voice ID when no other voice is selected. |
| ANTHROPIC_API_KEY |
No |
— |
Anthropic API key for sermon generation & Claude translation provider; can be set in Admin UI. |
| GEMINI_API_KEY |
No |
— |
Google Gemini API key for biblical simulator & sermon generation (cheaper than Anthropic). |
| GOOGLE_TRANSLATE_API_KEY |
No |
— |
Google Cloud Translation API key; enables Google Translate provider (default). |
| DEEPL_API_KEY |
No |
— |
DeepL API key for DeepL translation provider; leave empty if not using. |
| YOUTUBE_API_KEY |
No |
— |
YouTube Data API v3 key for admin live-stream lookup; can be set in Admin UI. |
| YOUTUBE_CHANNEL_ID |
No |
— |
Default YouTube channel ID for live-stream search (e.g., UCxxxxxxxxxxxxxxxxxxxxxx); can be changed in Admin UI. |
| TRANSLATION_PROVIDER |
No |
libretranslate |
Primary translation provider (google | deepl | claude | libretranslate); can be changed in Admin UI. |
| APP_ENV |
No |
local |
Application environment: local (development) or prod (Docker). |
| FRONTEND_URL |
No |
http://localhost |
Frontend base URL for CORS origin & OAuth redirect URLs; set to actual domain in production. |
| LISTEN_PORT |
No |
80 |
Port the frontend listens on. |
| REDIS_PASSWORD |
No |
— |
Redis password for authentication; leave empty for no auth. |
| LIBRETRANSLATE_API_KEY |
No |
— |
LibreTranslate API key if your instance requires authentication. |
| ADMIN_PASSWORD |
No |
admin123 |
Legacy socket auth password for admin access; must be changed in production. |
| APP_ADMIN_USERNAME |
No |
admin |
Admin user seeded into the database on first boot. |
| APP_ADMIN_PASSWORD |
No |
admin123 |
Admin user password seeded on first boot; must be changed in production. |
| APP_USERNAME |
No |
user |
User-facing login username; change in production. |
| APP_PASSWORD |
No |
changeme |
User-facing login password; must be changed in production. |
| JWT_SECRET |
No |
— |
Secret key for JWT session cookies; generate a strong random string (e.g., openssl rand -hex 32) in production. |
| COOKIE_SECURE |
No |
true |
Enable secure cookies when serving over HTTPS; set to true in production. |
| DB_PASSWORD |
No |
— |
PostgreSQL database password. |
| AGENT_PSK |
No |
— |
Pre-shared key for remote audio agents; leave empty to disable enforcement (server logs warnings instead). |
| GOOGLE_CLIENT_ID |
No |
— |
Google OAuth client ID for Sign In with Google; login button only shows when set. |
| GOOGLE_CLIENT_SECRET |
No |
— |
Google OAuth client secret (required if GOOGLE_CLIENT_ID is set). |
| APPLE_CLIENT_ID |
No |
— |
Apple Services ID for Sign In with Apple; login button only shows when set. |
| APPLE_TEAM_ID |
No |
— |
Apple Developer Team ID (10-character identifier); required if APPLE_CLIENT_ID is set. |
| APPLE_KEY_ID |
No |
— |
Apple Sign In with Apple Key ID (10-character); required if APPLE_CLIENT_ID is set. |
| APPLE_PRIVATE_KEY |
No |
— |
Apple .p8 private key in PEM format (includes -----BEGIN/END PRIVATE KEY----- markers); required if APPLE_CLIENT_ID is set. |
| OIDC_ISSUER |
No |
— |
OIDC issuer URL for Authentik; legacy — leave empty to disable Sign in with ONIT Systems button. |
| OIDC_CLIENT_ID |
No |
— |
OIDC client ID for Authentik; legacy — leave empty to disable. |
| OIDC_CLIENT_SECRET |
No |
— |
OIDC client secret for Authentik; legacy — leave empty to disable. |
| elevenlabs.api_key |
Yes |
— |
ElevenLabs API key (from environment variable ELEVENLABS_API_KEY). |
| elevenlabs.default_voice_id |
No |
kxj9qk6u5PfI0ITgJwO0 |
Default ElevenLabs voice ID when none is selected. |
| elevenlabs.tts_model |
No |
eleven_multilingual_v2 |
ElevenLabs text-to-speech model identifier. |
| elevenlabs.tts_settings.stability |
No |
0.5 |
TTS stability parameter (0–1); higher = more consistent pronunciation. |
| elevenlabs.tts_settings.similarity_boost |
No |
0.75 |
TTS similarity boost parameter (0–1); higher = closer to original voice. |
| elevenlabs.tts_settings.style |
No |
0.0 |
TTS style parameter (0–1). |
| elevenlabs.tts_settings.speed |
No |
1.0 |
TTS playback speed multiplier. |
| elevenlabs.tts_settings.use_speaker_boost |
No |
true |
Enable ElevenLabs speaker boost feature. |
| elevenlabs.stt_model |
No |
scribe_v2_realtime |
ElevenLabs speech-to-text model (scribe_v2_realtime or legacy scribe_v2). |
| anthropic.api_key |
No |
— |
Anthropic API key (from environment variable ANTHROPIC_API_KEY). |
| deepl.api_key |
No |
— |
DeepL API key (from environment variable DEEPL_API_KEY). |
| google.api_key |
No |
— |
Google Cloud API key for translation (from environment variable GOOGLE_TRANSLATE_API_KEY). |
| gemini.api_key |
No |
— |
Google Gemini API key (from environment variable GEMINI_API_KEY). |
| youtube.api_key |
No |
— |
YouTube Data API v3 key (from environment variable YOUTUBE_API_KEY). |
| youtube.channel_id |
No |
— |
Default YouTube channel ID (from environment variable YOUTUBE_CHANNEL_ID). |
| libretranslate.url |
No |
http://libretranslate:5000 |
LibreTranslate service base URL. |
| libretranslate.api_key |
No |
— |
LibreTranslate API key (optional, from environment variable LIBRETRANSLATE_API_KEY). |
| database.host |
No |
postgres |
PostgreSQL database hostname. |
| database.port |
No |
5432 |
PostgreSQL database port. |
| database.username |
No |
translator |
PostgreSQL database username. |
| database.password |
No |
— |
PostgreSQL database password (from environment variable DB_PASSWORD). |
| database.database |
No |
translator_db |
PostgreSQL database name. |
| database.pool_size |
No |
10 |
PostgreSQL connection pool size. |
| redis.host |
No |
redis |
Redis server hostname. |
| redis.port |
No |
6379 |
Redis server port. |
| redis.password |
No |
— |
Redis password (from environment variable REDIS_PASSWORD); leave empty for no auth. |
| auth.admin_username |
No |
admin |
Legacy admin username for socket authentication. |
| auth.admin_password |
No |
admin123 |
Legacy admin password for socket authentication; must be changed in production. |
| auth.jwt_secret |
No |
— |
Secret for JWT session tokens (from environment variable JWT_SECRET). |
| auth.session_days |
No |
30 |
JWT session expiry in days. |
| auth.agent_psk |
No |
— |
Pre-shared key for remote audio agents (from environment variable AGENT_PSK); leave blank to disable enforcement. |
| audio.sample_rate |
No |
16000 |
Audio sample rate in Hz. |
| audio.channels |
No |
1 |
Number of audio channels (mono = 1). |
| audio.chunk_duration_ms |
No |
250 |
Duration of each audio chunk in milliseconds. |
| translation.source_lang |
No |
auto |
Source language code for translation (auto-detect). |
| translation.target_lang_en |
No |
en |
Target language code (English). |
| translation.target_lang_ru |
No |
ru |
Target language code (Russian). |
| translation.provider |
No |
google |
Primary translation provider (google | deepl | claude | libretranslate). |
| translation.fallback |
No |
libretranslate |
Fallback translation provider when primary fails (google | deepl | claude | libretranslate | none). |
| translation.translate_workers |
No |
2 |
Number of parallel translation workers in Stage 1 of the TTS pipeline. |
| translation.request_timeout_ms |
No |
5000 |
Per-provider translation request timeout in milliseconds. |
| tts_pipeline.initial_buffer_segments |
No |
1 |
Number of translated segments to buffer before starting TTS playback. |
| tts_pipeline.low_water_hold_ms |
No |
1500 |
Milliseconds to wait for the next segment before emitting audio for the current segment; set to 0 to disable. |
| tts_pipeline.audio_lag_segments |
No |
2 |
Number of segments TTS audio should lag behind live translation text. |
| tts_pipeline.audio_lag_timeout_ms |
No |
8000 |
Max milliseconds to wait for the lag-depth target before emitting audio. |
| song_detection.window_seconds |
No |
10 |
Seconds of audio classified per song detection check. |
| song_detection.interval_seconds |
No |
15 |
Interval in seconds between song detection checks. |
| song_detection.confirm_music_windows |
No |
2 |
Consecutive "music" verdicts before auto-pausing translation. |
| song_detection.confirm_speech_windows |
No |
1 |
Consecutive "speech" verdicts before auto-resuming after song pause. |
| song_detection.max_auto_pause_minutes |
No |
10 |
Hard cap: auto-pause is force-resumed after this many minutes. |
| prayer_detection.exit_max_wait_ms |
No |
15000 |
Milliseconds to wait after "Amen" before classifying prayer end. |
| prayer_detection.max_auto_pause_minutes |
No |
5 |
Hard cap: auto-pause is force-resumed after this many minutes. |
| server.port |
No |
3001 |
Backend server port. |
| server.cors_origin |
No |
http://localhost:5183 |
CORS origin for frontend requests. |
| feature_flags.youtube_input |
No |
true |
Enable YouTube live stream input source. |
| feature_flags.mic_input |
No |
true |
Enable microphone input source. |
| feature_flags.auto_language_detect |
No |
true |
Enable automatic source language detection. |
| feature_flags.user_language_selector |
No |
false |
Allow users to select translation language pair. |
| feature_flags.audio_device_selector |
No |
true |
Enable audio input device selection UI. |
| feature_flags.video_translation |
No |
true |
Enable video call translation feature (/video route). |
| feature_flags.video_voice_cloning |
No |
false |
Premium: show Clone Voice button in /video lobby. |
| feature_flags.remote_audio_source |
No |
false |
Enable /audio-source route for headless remote audio relay. |
| feature_flags.agent_audio_source |
No |
false |
Show connected agent audio sources section in admin panel. |
| feature_flags.stream_input |
No |
false |
Enable "Audio Stream" source in admin panel (http/icecast URLs). |
| feature_flags.auto_pause_songs |
No |
false |
Auto-pause translation during worship songs. |
| feature_flags.auto_pause_prayer |
No |
false |
Auto-pause translation during spoken prayer. |
| feature_flags.broadcast |
No |
false |
Enable /broadcast route for public receiver page. |
| feature_flags.translate |
No |
false |
Enable /translate route for live translator page. |
| feature_flags.projector |
No |
false |
Enable /projector route for congregation screen & ProPresenter output. |