AI-powered voice tutor for practicing foreign languages through real conversation (MVP).
SpeakLoop is a desktop application for practicing conversational foreign language with an AI partner. Hold Space to speak, release to get a response — the app transcribes your speech, sends it to an LLM, and reads the reply aloud.
- GUI — Tkinter
- STT — faster-whisper (Whisper small by default)
- LLM — local GGUF model via
llm_server/or LM Studio - TTS — Kokoro (hexgrad/Kokoro-82M)
- Python 3.11+
git clone https://github.com/yourusername/speakloop.git
cd speakloop
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txtFor the LLM server — separate dependencies:
pip install -r llm_server/requirements.txtFor CUDA-enabled llama-cpp-python, see llm_server/README.md.
All settings are in config.py:
# LLM backend selection
LLM_BACKEND = "local_server" # recommended
# LLM_BACKEND = "lm-studio" # if using LM Studio
# Path to the GGUF model file (for local_server)
EXTERNAL_MODEL_PATH = "models/llama-3.2-3b-instruct-q4_k_m.gguf"
# Language pair
NATIVE_LANGUAGE = "Russian"
TARGET_LANGUAGE = "English"python main.pyWith LLM_BACKEND = "local_server" the server starts automatically. With LLM_BACKEND = "lm-studio" start LM Studio first.
- Space (hold) — record speech
- ESC — quit
speakloop/
├── main.py — GUI, thread orchestration
├── stt.py — Speech-to-Text (Whisper)
├── llm.py — LLM client (OpenAI-compatible)
├── tts.py — Text-to-Speech (Kokoro)
├── config.py — all configuration
├── models/ — GGUF model files
└── llm_server/ — standalone process for local LLM
├── server.py
├── requirements.txt
└── README.md