martossien/transcria-audio-preflight

Space

Will your meeting audio transcribe well?

0

stars

2

commits

4

linked in READMEs

Aug 16, 2026

updated

asr
audio
dnsmos
kroko
onnxruntime-web
quality-assessment
sherpa-onnx
speech
static
transcription

README

Will your meeting audio transcribe well?

Every transcription tool lets you discover after the GPU hours that your recording was unusable. This Space runs the acoustic preflight step of TranscrIA, a self-hosted meeting transcription portal, and gives you the verdict firstentirely in your browser:

  • deterministic signal metrics — SNR, clipping, bandwidth, silence ratio;
  • DNSMOS P.835 perceptual scores (SIG/BAK/OVRL), running as WebAssembly via onnxruntime-web;
  • a per-window difficulty timeline showing where the recording will hurt;
  • and since the verdict deserves a proof: speech-to-text in your browserKroko-ASR community models (English and French, CC-BY-SA) running on one CPU core via sherpa-onnx compiled to WebAssembly. These are the exact same model files TranscrIA ships as its zero-VRAM kroko backend — the ones measured in its public benchmark on real meetings, where they land near the big GPU models. Around 7× real time on a desktop CPU, in the browser.

Your audio never leaves your browser. No upload, no server, no API — this is a static page; decoding (WebAudio), metrics (JavaScript) and the neural model (WASM) all run client-side. Fitting, for a project whose whole point is data sovereignty.

Faithfulness to the real pipeline

js/preflight.js and js/dnsmos.js are line-by-line ports of TranscrIA's transcria/audio/preflight.py and dnsmos_scorer.py (same formulas, same thresholds, same flag names), validated by automated comparison against the Python outputs on the bundled examples (SNR within 0.1 dB, DNSMOS within 0.01 MOS). Browser-edition differences, on purpose:

  • audio is decoded/resampled to 16 kHz mono by WebAudio (the Python ffmpeg fallback path does exactly the same);
  • SQUIM (STOI/PESQ/SI-SDR, a PyTorch model) cannot run in a browser — the difficulty timeline is carried by per-window DNSMOS, SNR and clipping instead. The full version in TranscrIA adds SQUIM on top.

The transcription demo follows the same discipline: js/kroko.js is a port of the container parser from TranscrIA's transcria/stt/kroko_transcriber.py, the recognizer uses the same sherpa-onnx parameters as the validated Python backend, and the browser output was validated against the native backend on the bundled examples (bag-of-words F1 ≥ 0.99). The WASM runtime is our own build of sherpa-onnx v1.13.5 without the usual preloaded model (see build/build-sherpa-wasm.sh) — models download on demand (~156 MB per language, cached by your browser for next time), and the demo transcribes the first 2 minutes. Raw single-pass output, on purpose: no punctuation model, no speakers, no LLM correction — that is exactly what TranscrIA's pipeline adds on top.

What happens after the verdict?

In TranscrIA, this preflight gates a full pipeline on your own hardware: speech-to-text, speaker diarization, human-validated LLM correction, structured summaries and Word minutes — self-hosted, GDPR audit trail included.

Licenses and attributions

  • Code: Apache-2.0 (see LICENSE).
  • DNSMOS model dnsmos_sig_bak_ovr.onnx (Microsoft DNS-Challenge): CC-BY-4.0 — see models/DNSMOS_MODEL_LICENSE.txt.
  • Kroko-ASR community models (Banafo): CC-BY-SA, redistributed unmodified — see models/kroko/KROKO_MODEL_LICENSE.txt (sha256 matching upstream).
  • sherpa-onnx: Apache-2.0 — WASM runtime built by build/build-sherpa-wasm.sh (v1.13.5 pinned), wrapper vendor/sherpa/sherpa-onnx-asr.js unmodified.
  • onnxruntime-web: MIT (bundled in vendor/ort/).
  • Examples: clean_speech.mp3 — excerpt from a LibriVox recording (public domain); archival_1939.mp3 — Lou Gehrig, "Farewell to Baseball" (1939, public domain); degraded_speech.mp3 — the LibriVox excerpt artificially degraded (noise, band-limiting, clipping).

Contributors

MA
Martossien

2 commits

martossien/transcria-audio-preflight

Space

Will your meeting audio transcribe well?

0

stars

2

commits

4

linked in READMEs

Aug 16, 2026

updated

asr
audio
dnsmos
kroko
onnxruntime-web
quality-assessment
sherpa-onnx
speech
static
transcription

README

Will your meeting audio transcribe well?

Every transcription tool lets you discover after the GPU hours that your recording was unusable. This Space runs the acoustic preflight step of TranscrIA, a self-hosted meeting transcription portal, and gives you the verdict firstentirely in your browser:

  • deterministic signal metrics — SNR, clipping, bandwidth, silence ratio;
  • DNSMOS P.835 perceptual scores (SIG/BAK/OVRL), running as WebAssembly via onnxruntime-web;
  • a per-window difficulty timeline showing where the recording will hurt;
  • and since the verdict deserves a proof: speech-to-text in your browserKroko-ASR community models (English and French, CC-BY-SA) running on one CPU core via sherpa-onnx compiled to WebAssembly. These are the exact same model files TranscrIA ships as its zero-VRAM kroko backend — the ones measured in its public benchmark on real meetings, where they land near the big GPU models. Around 7× real time on a desktop CPU, in the browser.

Your audio never leaves your browser. No upload, no server, no API — this is a static page; decoding (WebAudio), metrics (JavaScript) and the neural model (WASM) all run client-side. Fitting, for a project whose whole point is data sovereignty.

Faithfulness to the real pipeline

js/preflight.js and js/dnsmos.js are line-by-line ports of TranscrIA's transcria/audio/preflight.py and dnsmos_scorer.py (same formulas, same thresholds, same flag names), validated by automated comparison against the Python outputs on the bundled examples (SNR within 0.1 dB, DNSMOS within 0.01 MOS). Browser-edition differences, on purpose:

  • audio is decoded/resampled to 16 kHz mono by WebAudio (the Python ffmpeg fallback path does exactly the same);
  • SQUIM (STOI/PESQ/SI-SDR, a PyTorch model) cannot run in a browser — the difficulty timeline is carried by per-window DNSMOS, SNR and clipping instead. The full version in TranscrIA adds SQUIM on top.

The transcription demo follows the same discipline: js/kroko.js is a port of the container parser from TranscrIA's transcria/stt/kroko_transcriber.py, the recognizer uses the same sherpa-onnx parameters as the validated Python backend, and the browser output was validated against the native backend on the bundled examples (bag-of-words F1 ≥ 0.99). The WASM runtime is our own build of sherpa-onnx v1.13.5 without the usual preloaded model (see build/build-sherpa-wasm.sh) — models download on demand (~156 MB per language, cached by your browser for next time), and the demo transcribes the first 2 minutes. Raw single-pass output, on purpose: no punctuation model, no speakers, no LLM correction — that is exactly what TranscrIA's pipeline adds on top.

What happens after the verdict?

In TranscrIA, this preflight gates a full pipeline on your own hardware: speech-to-text, speaker diarization, human-validated LLM correction, structured summaries and Word minutes — self-hosted, GDPR audit trail included.

Licenses and attributions

  • Code: Apache-2.0 (see LICENSE).
  • DNSMOS model dnsmos_sig_bak_ovr.onnx (Microsoft DNS-Challenge): CC-BY-4.0 — see models/DNSMOS_MODEL_LICENSE.txt.
  • Kroko-ASR community models (Banafo): CC-BY-SA, redistributed unmodified — see models/kroko/KROKO_MODEL_LICENSE.txt (sha256 matching upstream).
  • sherpa-onnx: Apache-2.0 — WASM runtime built by build/build-sherpa-wasm.sh (v1.13.5 pinned), wrapper vendor/sherpa/sherpa-onnx-asr.js unmodified.
  • onnxruntime-web: MIT (bundled in vendor/ort/).
  • Examples: clean_speech.mp3 — excerpt from a LibriVox recording (public domain); archival_1939.mp3 — Lou Gehrig, "Farewell to Baseball" (1939, public domain); degraded_speech.mp3 — the LibriVox excerpt artificially degraded (noise, band-limiting, clipping).

Contributors

MA
Martossien

2 commits