CI Report:
https://ci-tests.linuxserver.io/linuxserver/faster-whisper/v3.8.0-ls4/index.html
LinuxServer Changes:
Full Changelog: v3.7.0-ls3...v3.8.0-ls4
Remote Changes:
-
Add optional
--vad-endpointing SECONDSserver-side command endpointing, based
on speech-to-phrase's Silero VAD segmenter. It sends the transcript after the
configured post-speech silence instead of waiting foraudio-stop, advertises
that external VAD is not required while enabled, and remains independent of
the transcription-time--vad-filterand--vad-clipoptions -
Models that are already downloaded now load without contacting Hugging Face, so a server with no route to the internet starts instead of boot-looping (#93 by @schuylermartin45, #92)
- Loading is cache-first by default: each backend is built with
local_files_onlyand only retried as a download when a file is genuinely missing. The hub check is what fails without internet, not the model load, and on a network that drops outbound traffic rather than refusing it — a Docker bridge markedinternal— it stalled for the full TCP timeout on every start --local-files-onlystill means what it says: no fallback, so a model that isn't cached is an error rather than a surprise download. It had no effect at all on faster-whisper, the default backend, which never received the flag- FunASR ignored
--download-direntirely, putting its ~900 MB of models in~/.cache/huggingfaceinstead, and reported a failed download asmodel ... is not registeredseveral steps later. Its model directory is now resolved before FunASR is handed the model - Sherpa models, which come from GitHub releases rather than the hub, are covered too
- Loading is cache-first by default: each backend is built with
-
Both Docker images set
HF_HOME,XDG_CACHE_HOME, andMODELSCOPE_CACHEto/dataso the caches that no command-line option reaches also land on the volume- The Xet chunk cache used during hub downloads (
$HF_HOME/xet) is the big one: several GB, previously written to the container's filesystem - It also fixes the unwritable
/.cachethat a container running as a uid with no passwd entry would hit, since$HOMEis unset there
- The Xet chunk cache used during hub downloads (
-
Add a Docker health check to both images, matching the one in wyoming-piper 2.4.3 (#119 by @netsho)
- It sends the server a
Describeand requires anInfowith an ASR program back, rather than only opening a socket: the port is bound by the OS, so a connect-only check stays green even when the event loop is wedged, while a round trip proves the accept loop and the event handler are both still running --start-periodis 5 minutes, since the server only starts listening once the model is loaded — which means downloading it on first run — and it takes 3 consecutive failures to turn the container unhealthy, because transcription runs on the event loop and a check can time out behind a long request- The URI to check follows
WYO_WHISPER_URI(or its_FILEform) when the container sets it, with a listen-everywhere host like0.0.0.0rewritten to loopback. A--uripassed todocker runinstead is invisible to it, so pass the same one topython3 -m wyoming_faster_whisper.health_check --uri ...
- It sends the server a
-
Warn at startup when
--initial-promptor--hass-tokenis used with a Distil-Whisper model, and document that these models are not compatible with prompting (#118 by @jfoxwoosh)- Distil-Whisper was distilled without previous-text conditioning, so a prompt never helps it.
distil-small.enis actively damaged: from about 52 prompt tokens on,avg_logprobdrops below faster-whisper's -1.0 threshold, every temperature fails, and output that was correct unprompted comes back truncated (Start a timer for 25 minutes→Start a timer.) or looping (Add Hot Dog, Hot Dog, Hot Dog, …). Whether the transcript ends up wrong or empty then depends onno_speech_probfor that utterance distil-large-v3is inert rather than broken — stable at every prompt size, but with no biasing effect either, still returningEcoBewithEcobeein the prompt- The prompt is still sent, since the damage is size-dependent and a short
--initial-promptmay be harmless. Standard Whisper models are unaffected:small.enis steady through a 97-token prompt and biasing works as intended there
- Distil-Whisper was distilled without previous-text conditioning, so a prompt never helps it.