ekko-tiny-browser / README.md
emilstabil's picture
Deploy Ekko v1 Tiny + PnC browser demo
896db0d verified
|
Raw History Blame Contribute Delete
3.24 kB
metadata
title: Ekko Tiny + PnC — Danish speech to text in your browser
emoji: 🎙️
colorFrom: blue
colorTo: green
sdk: static
app_file: index.html
pinned: false
short_description: On-device Danish speech recognition and punctuation

Ekko v1 Tiny browser demo

This Space's code is MIT licensed. The Tiny and PnC model weights have separate terms in their Hugging Face model repositories.

The Ekko STT source code is on GitHub.

This static demo transcribes Danish speech locally in the browser with Ekko v1 Tiny int8, sherpa-onnx WebAssembly, and Silero VAD. Ekko PnC loads separately and adds punctuation and capitalization without changing word timestamps. Audio and transcripts are never sent to an inference server. The most recent 20 transcript sessions are saved in the browser's local storage; audio is not saved.

The model URLs and checksums are pinned in model-config.json. The browser downloads Tiny's runtime configuration and ONNX files, then PnC's files, directly from their Hugging Face model repos. Verified model files are kept in browser storage for later visits when storage is available; every load still verifies their checksums and initializes the WebAssembly runtime. The small third-party Silero VAD file is bundled with the Space for browser access. Microphone access requires a secure origin and the browser's permission prompt, shown after the app's introductory mic dialog. Browser support remains a preview while physical-device and mobile checks are completed.

The browser and Python CLI pin the same PnC v2 int8 artifact. The Python downloader also verifies the accompanying legal files from that revision.

Local preview

From the repository root, use the checksum-verified local model cache:

uv sync --locked
uv run --no-sync python demo/ekko-tiny-browser/serve_local.py

The PnC v2 files must already be in the Hugging Face cache, or pass a local directory explicitly:

uv run --no-sync python demo/ekko-tiny-browser/serve_local.py \
  --pnc-dir /path/to/ekko-pnc-v2

The preview checks all PnC file sizes and hashes before serving them.

Build and deploy

demo/ekko-tiny-browser/build.sh

The build pins sherpa-onnx v1.13.6, Emscripten 4.0.23, and ONNX Runtime Web 1.29.0. It writes a static site to demo/ekko-tiny-browser/dist/; model weights are downloaded by the browser and are not committed. Set EKKO_WASM_BUILDER=docker to use the pinned container image instead of a local Emscripten installation.

The GitHub workflow builds the Space for demo pull requests and pushes to main. On pushes to main, it also deploys to RyeAI/ekko-tiny-browser when the repository variable HF_SPACE_DEPLOY_ENABLED is true. A manual workflow run can deploy as well. Deployment requires the HF_TOKEN secret and anonymously accessible model URLs. The upload mirrors dist/, including deletions of old generated files.

The JavaScript behavior checks can be run with:

node tests/browser_live_chunking.mjs
node tests/browser_pnc_sentence_casing.mjs
node tests/browser_space_signed_assets.mjs
node tests/browser_tiny_runtime_config.mjs
node tests/browser_model_cache.mjs