Skip to content

Licences

What we download, and the one piece we ship (macOS)

Section titled “What we download, and the one piece we ship (macOS)”

On Linux and Windows the speech worker fetches all of these on first use from the publishers’ own servers; on macOS the CrispASR runtime instead ships INSIDE the signed, notarized app bundle (Contents/Frameworks, put there by apps/desktop/scripts/build-macos-app.sh from the same pinned release asset, re-signed with our identity) and only the models are fetched. The worker checks each download against a pinned sha256 BEFORE it unpacks or loads it (apps/desktop/crates/etalk-crispasr: platform.rs, models.rs), keeps only the named files, and re-hashes every library before dlopen. A mismatch deletes the file and the voice backs off (1 min doubling to 1 h).

what version licence where from platforms
CrispASR runtime: libcrispasr + ggml (libggml*), plus libgomp (GCC Runtime Library Exception) and the reference BLAS on Linux v0.8.45 release assets MIT (its THIRD_PARTY_NOTICES.txt lists the rest; built without espeak-ng, the only GPL component it knows) github.com/CrispStrobe/CrispASR releases Linux x86_64 (CUDA) and Windows x86_64 (Vulkan): downloaded; macOS arm64 (Metal): shipped in the bundle
NVIDIA CUDA runtime (libcudart.so.12) and cuBLAS (libcublas.so.12, libcublasLt.so.12) 12.9.79 / 12.9.2.10 NVIDIA CUDA Toolkit EULA (proprietary, redistributable); its text is kept beside the files NVIDIA’s own wheels on PyPI (nvidia-cuda-runtime-cu12, nvidia-cublas-cu12) Linux x86_64 only
Qwen3-TTS 12 Hz 0.6B Base, F16 GGUF cstr/qwen3-tts-0.6b-base-GGUF @ 94072f5 Apache-2.0 Hugging Face all three
Qwen3-TTS 12 Hz tokenizer (codec), F16 GGUF cstr/qwen3-tts-tokenizer-12hz-GGUF @ 344e279 Apache-2.0 Hugging Face all three
NEW-78: CrispASR CPU-only runtime (libcrispasr + ggml; on Linux with libgomp (GCC Runtime Library Exception), OpenBLAS (BSD-3-Clause), libgfortran (GCC Runtime Library Exception) and libquadmath (LGPL-2.1)) v0.8.45 release assets MIT (+ the listed) github.com/CrispStrobe/CrispASR releases Linux x86_64 and Windows x86_64 without a GPU driver, for push to talk only
NEW-78: GNU OpenMP runtime libgomp.so.1 (inside both Linux CrispASR archives, the CUDA and the CPU-only one; unmodified, from Ubuntu 22.04’s gcc-12) as built into CrispASR v0.8.45 GPL-3.0-or-later WITH GCC-exception-3.1 (GCC Runtime Library Exception); corresponding source: apt-get source gcc-12, gcc.gnu.org, or the CrispASR maintainers (their THIRD_PARTY_NOTICES.txt) github.com/CrispStrobe/CrispASR releases Linux x86_64 only
NEW-78: Parakeet TDT 0.6B v3 (NVIDIA), Q8_0 GGUF cstr/parakeet-tdt-0.6b-v3-GGUF @ dff69b0 CC BY 4.0 (attribution + “converted and quantised by cstr” in the notices) Hugging Face all three
NEW-78: Silero VAD v6.2, ggml ggml-org/whisper-vad @ 9ffd54a MIT Hugging Face all three

Sizes of the first-use download: Linux ~2.97 GB (runtime 196 MB, cuBLAS 581 MB, model 1.83 GB, codec 358 MB), macOS ~2.19 GB (the models only; the bundle grows by ~25 MB), Windows ~2.28 GB.

On disk: Linux ~3.29 GB unpacked (runtime + cuBLAS 1.09 GB, models 2.19 GB, built-in clips 1 MB), macOS ~2.19 GB plus the ~25 MB in the bundle, Windows ~2.3 GB.

path what written by
crispasr-0.8.45/ the runtime libraries, their licences, one .<artifact id>.sha256 manifest per artifact (Linux, Windows; macOS reads Contents/Frameworks of the bundle instead) etalk_crispasr::artifact::ensure
crispasr-0.8.45-cpu/ NEW-78: the CPU-only runtime, where no GPU driver exists (Linux, Windows) same
models/ qwen3-tts-12hz-0.6b-base.gguf, qwen3-tts-tokenizer-12hz.gguf, NEW-78’s parakeet-tdt-0.6b-v3-q8_0.gguf (674 MB) and ggml-silero-v6.2.0.bin (0.9 MB), and their manifests same
voices/ builtin-<language>.wav, the built-in clips written out for CrispASR (rewritten when they differ) etalk_engine::builtin::materialize
no-gpu.txt the “this GPU and driver were too slow” verdict (fingerprint + time, 30 days) the speech worker
<artifact id>.part a download in progress (deleted on failure or after unpacking) etalk_crispasr::artifact::download
<file>.tmp a file being unpacked (renamed into place when complete) etalk_crispasr::artifact::write_kept

The NEW-53 kokoro-multi-lang-v1_0/ directory is deleted by the worker on start. #NEW-63: the IDE deletes the whole {data_dir}/talk/ once an account’s settings move its voice device away from this machine and no account signed in here still names it ({data_dir}/voice-device-claims.json), and sweeps leftover *.part / *.tmp files whenever the speech worker shuts down; both wait on the worker’s lock (etalk::SpeechClient::remove_voice_data, etalk::SpeechClient::remove_partial_downloads).

The built-in reference clips (apps/desktop/crates/etalk-engine/assets/, in the binary, ~0.9 MB) are our own output of Qwen3-TTS 0.6B CustomVoice (Apache-2.0), preset speaker ryan; no person’s voice is in them (see the README there). A member’s own reference clip never leaves the voice device.

Permitted, with attribution. MIT and Apache-2.0 allow use and redistribution; on Linux and Windows we redistribute none of it (the user’s machine fetches it), on macOS we redistribute the MIT CrispASR runtime inside the bundle, and the desktop notices reproduce CrispASR’s licence and third-party notices either way (“exponentialTalk’s voice runtime”). The NVIDIA libraries are fetched by the user’s machine from NVIDIA’s distribution under NVIDIA’s EULA, not shipped by Exponential. No GPL: CrispASR’s espeak-ng path is off in these builds and its phonemizer is not used by Qwen3-TTS. On macOS library validation stays ON (review of #1237, 2026-10-26): no disable-library-validation entitlement; the bundled dylibs carry our signature and are loaded by absolute path from the running bundle only. CrispASR watermarks every synthesized clip (an inaudible AI-content mark, EU AI Act Art. 50(2)); it stays on. NEW-78 (2026-10-26): Parakeet is CC BY 4.0, which permits use with attribution and a note of changes: the notices name NVIDIA, the licence, cstr’s GGUF conversion and Q8_0 quantisation; we change nothing and redistribute nothing (the voice device fetches it). Silero and its ggml conversion are MIT. The CPU-only runtime’s GCC runtime libraries are fetched by the user’s machine with CrispASR’s notices, not shipped by us. Re-check on every CrispASR or model bump: the pins, the release’s notices, and that no GPL component entered the prebuilt library.

A wake phrase with a model of its own (apps/desktop/crates/etalk-wakeword, models.rs; the first is spezl’s Hey spezl, never Hey Claude) is heard by openWakeWord’s pipeline instead of Parakeet. The speech worker fetches its files the first time the phrase is asked for, sha256-pinned like the voice models, into {data_dir}/talk/models/wakeword/; nothing is in the binary. They run on tract (MIT OR Apache-2.0, linked, listed by the notice generator with the other Rust crates): no ONNX Runtime is linked or downloaded.

what version licence where from
openWakeWord melspectrogram.onnx (a fixed torch melspectrogram) v0.5.1 release asset (byte-identical to livekit-wakeword 0.1.3’s copy) Apache-2.0 (openWakeWord’s code licence; livekit-wakeword redistributes the same file under Apache-2.0) github.com/dscripka/openWakeWord releases
openWakeWord embedding_model.onnx (Google’s speech_embedding, re-implemented) v0.5.1 release asset Apache-2.0 (Google’s TF Hub module) same
hey_spezl.onnx, the phrase’s classifier ours, trained by crates/etalk-wakeword/train/train.sh Apache-2.0 (ours) pinned in models.rs

The tests and the CPU example also fetch livekit-wakeword 0.1.3’s crate tarball (Apache-2.0) by sha256 for its hey_livekit.onnx and two WAVs; they never ship.

Training data (what the classifier learnt from)

Section titled “Training data (what the classifier learnt from)”

livekit-wakeword (Apache-2.0, pinned revision in train.sh) trains it from Piper VITS samples only (the en-us-libritts-high checkpoint it publishes; LibriTTS is CC BY 4.0), augmented with MUSAN noise (CC BY 4.0) and the MIT environmental impulse responses (CC BY 4.0), and with openWakeWord’s pre-computed ACAV100M speech features (~2,000 h) as negatives. No person’s recorded voice is a positive sample.

Permitted, with attribution (the desktop notices name openWakeWord, Google’s speech embedding, livekit-wakeword and tract). We never ship openWakeWord’s own PRE-TRAINED wake-word models: those are CC BY-NC-SA 4.0. The open point: openWakeWord gives exactly the ACAV100M negatives as the reason its pre-trained models are non-commercial (“datasets with unknown or restrictive licensing”); livekit-wakeword trains on the same features and publishes its hey_livekit model under Apache-2.0, and we follow it, but whether a classifier is a derived work of its training data is untested. Re-check before selling a model (spezl’s marketplace), and retrain without the ACAV100M features if the answer changes.