English | 简体中文
Your words, out loud. A personal speech studio and language practice room that runs on your own computer.
Write something you want to say, turn it into speech, and practice one sentence at a time. Sayloop uses Kokoro-82M; no paid speech API or account is required. Sayloop is open source; personal materials and recordings are never included.
- Import UTF-8
.txtor.mdfiles, or paste text directly. - Explore 54 voices across nine language/accent options, including nine American male voices.
- Preview up to 25 seconds before generating a full recording.
- Adjust speaking pace and pauses; download MP3, WAV, or a ZIP of recordings and text.
- Practice with synchronized sentence highlighting and automatic scrolling.
- Choose continuous listening, Listen & speak (pause after each sentence), or sentence looping.
- Enter an immersive listening room with large text, muted surrounding sentences, and keyboard controls.
- Keep your work on disk. Drafts and interface preferences stay in browser storage.
Speech generation does not translate text. Select the language already used in your material. Voice quality varies; Kokoro does not expose an emotion-intensity slider. English sentence timing comes from the model's token durations; other languages currently use synthesis passages.
Screenshots use synthetic demonstration text, never personal learning materials.
Your material library — keep your own writing ready for practice.
Speech studio — choose a voice, adjust pacing, preview, then generate.
Immersive practice — follow the current sentence, pause, speak, and continue.
Mobile-sized practice view
Verified in Chrome mobile emulation; physical iOS/Android devices are not yet acceptance-tested.
Tested on Apple Silicon with Python 3.11. Install uv and FFmpeg first (brew install ffmpeg on macOS).
git clone https://github.com/BillLucky/sayloop.git
cd sayloop
./scripts/setup.sh
.venv/bin/python scripts/serve.pyOpen http://127.0.0.1:8765. On macOS, double-click start.command for background startup and browser launch. The Python environment is isolated to .venv; Node is only needed for development checks.
Setup reuses the Hugging Face cache before downloading weights. First-time setup also installs the English language model and Japanese dictionary (the dictionary download is about 526 MB). After setup, all nine language options were exercised successfully with HF_HUB_OFFLINE=1.
# Background service
.venv/bin/python scripts/serve.py --background
# Stop this project's idle background service
.venv/bin/python scripts/stop.py
# Import your own directory; originals are copied, not removed
.venv/bin/python scripts/import_materials.py /path/to/your/texts
# Generate nine US male previews and full recordings
.venv/bin/python scripts/generate_library.py --voice am_fenrir
# Create friendly filenames and a local audio ZIP
.venv/bin/python scripts/export_library.pydocker compose build
docker compose run --rm sayloop python scripts/download_model.py
docker compose up -d --waitOpen the same local URL. The library starts empty; import your own material. Weights download separately into a persistent volume. See Docker setup, offline use, backup and restore. No prebuilt image, personal text, or recordings are published.
| Action | Control |
|---|---|
| Pause / continue; advance after a Listen & speak pause | Space |
| Previous / next sentence | ← / → |
| Replay current sentence | R |
| Enter / leave immersive mode | F / Esc |
| Pause at every sentence | Listen & speak |
| Repeat one sentence | Loop sentence |
| Keep the active text visible | Auto-follow |
Shortcuts do not intercept typing, input controls, or IME composition. Clicking a sentence seeks to it. At the end of a recording, Space starts again; R repeats the final sentence. Listening time is a convenience counter, not a measurement of speaking practice.
npm ci --ignore-scripts
npm test && npm run check && npm run format:check
.venv/bin/python -m pytest -q
.venv/bin/ruff check app scripts tests
.venv/bin/ruff format --check app scripts tests
npx playwright install chromium
npm run test:browser
python3 scripts/privacy_check.py --history- Open-source readiness and dependency updates
- Architecture and implementation
- Operation, backup, migration, and packaging
- User guide / 中文使用说明
- Delivery checklist / 交付索引
- Verification record
- Contributing, privacy boundaries, changelog
Native and Docker installation instructions are provided. See the validation record for the exact tested platforms. The application is single-user and loopback-only by default, with no authentication layer.
Application code: Apache-2.0. Kokoro weights and third-party packages retain their own licenses; see third-party notices. The practice workflow is inspired by Li Xiaolai's 1000 Hours, especially its kick-off task: prepare meaningful personal text, listen, speak, and repeat. Thank you to the author and the everyone-can-use-english / Enjoy community for sharing their work. Sayloop is an independent implementation, with no implied affiliation or endorsement. See acknowledgements.
Use private Tailscale HTTPS to practice from your phone at home or on walks. Practice room → Save on this device stores complete recordings in that browser and reuses them on later visits. Keep the same website address on Wi-Fi and cellular; library loading still needs the server. Optional trusted LAN access is also available. See setup, caching, and privacy instructions.


