# Desktop UI PySide6>=6.6 # Audio I/O (mic capture + speaker playback) — cross-platform via PortAudio. # On Linux you may also need the system package: sudo apt install libportaudio2 sounddevice>=0.4.6 numpy>=1.24 # HTTP client to the Bolt desk API requests>=2.31 # Streaming speech-to-text (audio/stt_stream.py). Optional in practice: without # it the pet falls back to uploading the finished clip, exactly as before. websocket-client>=1.7 # Wake-word detection (local, offline after first run) — runs the # custom-trained thunderbolt.onnx model shipped in this repo, same runtime # as the main repo's desk_client/bolt_desk.py (bolt.onnx). First use # downloads openwakeword's feature-extraction sub-models (~few MB, cached # under the package's own resources/ dir afterward) — needs internet once. openwakeword # Offline TTS fallback if ElevenLabs isn't configured or a request fails. # Uses SAPI5 on Windows, NSSpeechSynthesizer on macOS, espeak on Linux # (Linux also needs: sudo apt install espeak-ng). pyttsx3>=2.90 # Global push-to-talk hotkey (PUSH_TO_TALK_HOTKEY). Optional: the pet # degrades to wake-word + tray + click if it's missing or if the session # won't allow a global key hook (most Wayland setups; macOS needs # Accessibility permission). pynput>=1.7 # Optional — only needed for scripts/slice_spritesheet.py (converting a # grid sprite sheet into the per-frame-PNG convention sprite.py expects). # Not imported by the app itself. Pillow>=10.0 # Screen reading (`petctl read`) — Bolt OCRs a monitor and uses the text in # his reply. Both optional: without them `petctl read` reports what's missing # and the rest of the pet is unaffected. # mss screen capture. X11/Win32/macOS — NOT Wayland. # pytesseract a thin wrapper; the actual engine is a system package: # sudo apt install tesseract-ocr # No-sudo alternative to those two lines: pip install rapidocr-onnxruntime # (pure pip, reuses the onnxruntime openwakeword already pulls in, slower to # start). screen_text.resolve_engine() picks whichever is present. mss>=9.0 pytesseract>=0.3.10 # Test runner (tests/ — pure logic, no audio hardware or display needed; # run with QT_QPA_PLATFORM=offscreen). pytest>=8.0