Skip to content
BillLuckyPublic

About

Local-first speech studio and sentence-by-sentence language practice with Kokoro.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Sayloop

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.

What you can do

  • Import UTF-8 .txt or .md files, 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.

A look inside

Screenshots use synthetic demonstration text, never personal learning materials.

Your material library — keep your own writing ready for practice.

Sayloop material library

Speech studio — choose a voice, adjust pacing, preview, then generate.

Sayloop speech studio

Immersive practice — follow the current sentence, pause, speak, and continue.

Sayloop immersive practice

Mobile-sized practice view Sayloop at a mobile browser width

Verified in Chrome mobile emulation; physical iOS/Android devices are not yet acceptance-tested.

Run locally

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.py

Open 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.py

Docker

docker compose build
docker compose run --rm sayloop python scripts/download_model.py
docker compose up -d --wait

Open 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.

Practice controls

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.

Development and documentation

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

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.

Credits and license

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.

Phone access and saving audio

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.

About

Local-first speech studio and sentence-by-sentence language practice with Kokoro.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages