A local speech-to-speech desktop app: Hold-to-talk → transcribe (STT) → LLM → TTS → play audio, with a polished DearPyGUI interface.
- Backend: LocalAI (runs on your machine)
- UI: DearPyGUI
- Input: push-to-talk hotkey + on-screen button
- Output: local TTS playback
- Persistence:
./modelsfolder for LocalAI model caching (no repeated installs)
Linux/macOS
bash scripts/run_localai_docker.shWindows (PowerShell)
./scripts/run_localai_docker.ps1This mounts ./models into LocalAI as /models.
Inside the LocalAI container, install a TTS model (example: VibeVoice):
local-ai run models install vibevoiceList installed models:
curl http://localhost:8080/v1/modelspython -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -r requirements.txt
python -m skippy --config config/default.toml- PTT hotkey:
SHIFT_R(Right Shift) by default - Or hold the “Hold to talk” button in the UI
Change in config/default.toml:
[audio]
ptt_key = "SPACE"config/default.toml— LocalAI URL, model names, audio devices, hotkey, persona fileconfig/personas/*.md— editable personalities (system prompt)
Skippy/
skippy/ # app code
config/ # config + personas
models/ # persistent LocalAI models (ignored by git)
scripts/ # helper scripts (docker + run)
docs/ # documentation
- Skippy defaults to LocalAI's
/ttsendpoint (often WAV-like output). If your TTS returns mp3/opus, install ffmpeg so the fallback decoder can handle it. - If streaming looks weird, turn off Stream reply.