Skip to main content

EchoAct

EchoAct reads Korean and English text aloud on your own computer. Nothing you type is sent anywhere: the model runs on your CPU, and once it is downloaded the app works with no network connection at all.

  • Read a document, follow along. The sentence being played is marked on screen. The mark is drawn as an outline around the letters rather than as a heavier weight, so the text never shifts under you while you read.
  • Playback starts before generation finishes. The first sentence is spoken as soon as it is ready, and the rest follows.
  • It stays out of the way. You choose how much processor and memory the app may use, and it stays inside that while you work on something else.
  • Automations can use it too. A local HTTP service on the loopback address, and an MCP server for tools that speak that protocol. Both are the same engine, the same limits, and the same one job at a time.

Windows 11 and macOS 14 (Apple Silicon). No Python, Node, or database server to install.

Run it with one command

With uv installed, no checkout or venv needed:

uvx echoact

uv fetches EchoAct into an isolated environment and starts the app. The MCP server is the same package: uvx --from echoact echoact-mcp.

Running it from a checkout

uv sync
uv run python -m echoact

The first launch offers to download the speech model (about 385 MB) and shows its licence terms before it does. Generation works offline afterwards.

Local service

The service is on by default and listens only on 127.0.0.1:8765. It always requires a credential; one is created for you on first launch and is shown in the app under Settings. It cannot be reached from another machine, and there is no way to configure it to be.

Turn it off in Settings if you do not want it. The app, generation, playback and the library all work exactly the same with it off.

Base http://127.0.0.1:8765/api/v1
Auth Authorization: Bearer <credential>
Discovery GET /status, GET /models
Before committing POST /estimate — validates, counts segments, estimates length, says whether the slot is free
Generate POST /jobs — needs a duplicate-prevention key; may ask to wait up to 10 s
Follow GET /jobs/{id}, GET /jobs/{id}/segments, POST /jobs/{id}/cancel
Collect GET /jobs/{id}/audio, GET /jobs/{id}/result

One generation runs at a time across the app and every client, so a second request is refused with a retry-after hint rather than queued.

MCP

Off by default; enable it in Settings. The MCP server is a small process your MCP client starts, which talks to the local service over loopback with a credential you issue for it. It adds nothing the HTTP service does not already do, and its permissions are exactly that credential's.

Connect an app in the header writes the configuration for you: a tab each for Claude Desktop, Claude Code, Codex CLI, VS Code and Cursor, with the right key name and file path for each, the command this particular installation actually uses, and a Copy button. Issue a credential from that screen and it goes straight into the snippet — the only moment it can, since the app keeps only a verifier.

Tools: list_models, estimate_speech, create_speech, get_speech_job, cancel_speech_job, list_speech_segments, get_speech_result, list_speech_history.

Your data

Documents and generation history are saved only when you ask. Results from a one-off job are cleaned up when they are replaced or when the app exits, and a result produced for an integration stays retrievable for an hour. Logs contain no text and no audio. Nothing is uploaded, and there is no telemetry.

Repository

docs/design.md    The requirements baseline. Every behaviour traces to an
                  identifier in it; Appendix A records what was measured.
echoact/          The application.
spikes/           Standalone measurements that settled open questions.
tests/            pytest. `-m engine` needs the model; the rest does not.

CLAUDE.md is the contributor's short version.

Author

Huijae Lee (ZeroAct) — lhj56822@gmail.com — github.com/ZeroAct

Licence

The application code is MIT (see LICENSE). The speech model is downloaded separately and carries its own licence with use restrictions, which the app presents for acceptance before it prepares the model for the first time. Being able to run it locally is not a right to redistribute it.

Metadata

Release files for echoact 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for echoact 0.1.2
File Size Uploaded
echoact-0.1.2.tar.gz 777.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for echoact 0.1.2
File Interpreter ABI Platform
echoact-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / echoact-0.1.2.tar.gz

Download URL echoact-0.1.2.tar.gz
Size 777.2 kB
Tags Source
SHA-256 checksum
How to use checksums
5469b2ae5c19a87dca6705930f5e89dc18cbac66736fa9d9f6aa77c1d5cb042f
BLAKE2b-256 checksum
How to use checksums
3d4de2a60d26d744f51f5bae22af16890a7e320b02692301cc0b1e2a6cae3c5f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / echoact-0.1.2-py3-none-any.whl

Download URL echoact-0.1.2-py3-none-any.whl
Size 474.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bc32218bca2da58d84db5b10ea0e5c57bc2b9fe8760c06e264f393d1ee14f923
BLAKE2b-256 checksum
How to use checksums
8a08fcd7953eb2fb000675ec306dbc7a1218fadd0d86a1bf50691fe95ea58aaa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page