# ============================================================================ # Javis Bot — environment configuration # Copy to `.env` and fill in. Never commit your real `.env`. # ============================================================================ # --------------------------------------------------------------------------- # Discord bot (normal bot account) — voice I/O + slash commands # --------------------------------------------------------------------------- # From https://discord.com/developers/applications → your app DISCORD_BOT_TOKEN= DISCORD_APP_ID= # The (single) server this bot serves. Guild-scoped commands appear instantly. DISCORD_GUILD_ID= # Voice channel used by the stream-test scripts (bot/scripts/stream-test). DISCORD_VOICE_CHANNEL_ID= # --------------------------------------------------------------------------- # Brain bridge (Python service in bridge/) — STT + reply engine + TTS # --------------------------------------------------------------------------- BRIDGE_URL=http://127.0.0.1:8765 BRIDGE_HOST=127.0.0.1 BRIDGE_PORT=8765 JARVIS_BRAIN_ENABLED=1 JARVIS_TTS_ENABLED=1 # faster-whisper device/compute. GPU by default (RTX 5050 / sm_120, verified). # Falls back to CPU automatically if no GPU is passed to the container. WHISPER_DEVICE=cuda WHISPER_COMPUTE_TYPE=float16 # Optional explicit Piper voice model (.onnx). If empty, the jarvis default is used. TTS_PIPER_MODEL_PATH= # --------------------------------------------------------------------------- # Jarvis brain (Ollama-backed). In Docker these populate the rendered # config (docker/jarvis-config.template.json). See src/jarvis/config.py. # --------------------------------------------------------------------------- # In docker-compose this is overridden to http://ollama:11434 automatically. OLLAMA_BASE_URL=http://127.0.0.1:11434 # qwen3:8b — best 8GB-VRAM pick: strongest tool-calling, ~5GB Q4, fits the RTX 5050. OLLAMA_CHAT_MODEL=qwen3:8b OLLAMA_EMBED_MODEL=nomic-embed-text WHISPER_MODEL=small # --------------------------------------------------------------------------- # Docker desktop (VNC) — used only by the container image # --------------------------------------------------------------------------- # VNC viewer password (max 8 chars effective). Watch the screen at localhost:5901. # Also used by the broadcast keepalive: TigerVNC only refreshes its framebuffer # while a VNC client is attached, so the stream keeps a tiny client connected to # avoid a choppy (~1.5 fps) capture. Must match the VNC server's password. If # unset, the keepalive falls back to the obfuscated passwd file (VNC_PASSWD_FILE, # default ~/.config/tigervnc/passwd). VNC_PASSWORD=javis123 # VNC_PASSWD_FILE=/home/claude/.config/tigervnc/passwd # Auto-opened page in the in-container Chrome. CHROME_START_URL=about:blank # --------------------------------------------------------------------------- # VNC screen broadcast # selfbot = real live "Go Live" stream (needs a USER/burner token; ToS risk) # novnc = share a noVNC browser link (safe, real-time, not native) # screenshot = periodic screenshots to the channel (safe, low fps) # none = disabled # --------------------------------------------------------------------------- STREAM_BACKEND=selfbot # The VNC desktop runs on X display :1 (see docs/vnc-xfce-setup.md) VNC_DISPLAY=:1 VNC_RESOLUTION=1920x1080 # 1080p60 broadcast. 8 Mbps suits 60fps (YouTube-style 1080p60 sits ~8-12 Mbps); # drop to 30/4000 for a lighter stream. Max bitrate is 1.5x this value. VNC_FRAMERATE=60 VNC_BITRATE_KBPS=8000 # --- selfbot backend --- # A THROWAWAY/burner Discord user account token. NEVER your main account. # Using a selfbot violates Discord ToS and can get the account banned. DISCORD_SELFBOT_TOKEN= # Hardware (NVENC) encode for the stream. 1 = use the GPU (recommended for # 1080p60), 0 = software x264. Requires an NVIDIA GPU + ffmpeg built with nvenc. STREAM_HW=1 # Capture desktop audio into the broadcast so the stream has sound. 1 = on, # 0 = mute. Pulls the PipeWire/Pulse monitor of the default sink; override the # source with STREAM_AUDIO_SOURCE (e.g. a specific ".monitor"). STREAM_AUDIO=1 STREAM_AUDIO_SOURCE=@DEFAULT_MONITOR@ # --- novnc backend --- # e.g. http://192.168.10.9:6080/vnc.html (websockify --web=/usr/share/novnc 6080 localhost:5901) NOVNC_URL= # --- screenshot backend --- SCREENSHOT_INTERVAL_SEC=5 # --- stream-test scripts (manual broadcast verification) --- # Chrome remote-debugging port the scenario/helper attach to. CDP_PORT=9222 # How long stream-hold.ts keeps the Go-Live up before auto-stopping (ms, 2h). HOLD_MS=7200000 # scenario.mjs inputs: fixed concert clip + search queries. TEST_VIDEO_ID=X_am71G6Vy4 TEST_YT_QUERY=내손을잡아 TEST_NAVER_QUERY=아이유 # Set MV_QUERY to auto-pick the first >=60fps search result instead of the clip. MV_QUERY= # Windowed/fullscreen watch duration per step (seconds). WATCH_SECONDS=20 # --------------------------------------------------------------------------- # Voice behaviour # --------------------------------------------------------------------------- # Silence (ms) that marks the end of an utterance before sending to the brain. VOICE_SILENCE_MS=800