Checked, not fully reviewed
Read English aloud and see which words were wrong. Checked, not fully reviewed: the judging half runs against a stand-in, the ASR half needs a GPU.
Good for
- A self-hosted alternative to a subscription pronunciation app
- One request for a whole sentence's worth of word verdicts
Watch out for
- Checked, not fully reviewed: the ASR half needs about 12 GB of VRAM
- The decision goes to a ZenMux gateway by default, not to TypeSafe
Tested Sep 27, 2026 at 1bacff4a0755 · node:24-slim in Docker: its own tests, and its Jev module driven against a stand-in that logged the request; the 12 GB-GPU ASR half was not run
Checked, not fully reviewed. The speech half needs a self-hosted ASR model and about 12 GB of VRAM, which this machine does not have. We ran its tests and drove its decision module against a stand-in; we did not speak to it.
You read a sentence aloud, the words light up as the streaming recogniser catches them, wrong ones turn red as you go, and a score appears at the end — the pitch is an open replacement for a per-minute subscription app, with everything on your own card. Six tests pass (lib/align.test.js, the alignment between what you read and what was heard).
The Jev half is one module, and it is the tidy part: one request carries a question per word, so a whole sentence’s verdicts are a single round trip rather than one call per word. Driven against our stand-in, the request is exactly what you would hope:
body keys: ['state', 'model', 'questions'] state: "CANARY-SPOKEN-TEXT the quick brown fox"
The transcript text and the questions, nothing else. What leaves the machine is therefore what you said, and where it goes is worth reading twice: the default endpoint is not TypeSafe but a ZenMux gateway (zenmux.ai/api/v1/systemone), with JEV_ENDPOINT and JEV_API_KEY overriding it. A comment explains a nicety we appreciated — JEV_API_KEY is checked before ZENMUX_API_KEY precisely because another project’s gateway key may already be in your shell.
Chinese documentation. The proxy handling in the same module is a small piece of real-world engineering: Node’s global fetch ignores https_proxy, so it falls back to undici’s proxy agent with an explicit TLS servername, “because without SNI the local Clash drops the connection”.
For the same one-request-many-questions shape without a GPU, see Shapeshift; for another self-hosted audio boundary, call-coach-ai.
See how it compares with other tools in Best Jev tools, tested hands-on.
Review updated Sep 27, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.