kroko-stt-wyoming

kroko-stt-wyoming

Docker app from Marco T's Kroko's Repository

Overview

Kroko STT Wyoming: lokale mehrsprachige Streaming-Spracherkennung fuer Home Assistant mit Rust, sherpa-onnx und Wyoming. CPU-only, linux/amd64, standardmaessig ein Thread. NEUINSTALLATION: Community-128 belassen, persistenten Modellordner schreibbar nach /models einbinden und starten. Nur wenn das ausgewaehlte Community-Modell fehlt, wird ausschliesslich das zur gewaehlten Sprache und Variante passende, gepinnte Originalpaket direkt von Banafo geladen, per SHA256 geprueft und einmalig bytegenau vorbereitet. Neue Modelle liegen unter /models/Sprache/Modell. Nach vollstaendiger Vorbereitung wird das freie Community-Paket entfernt; Komponenten und Pruefmetadaten bleiben persistent. Neustarts verwenden vorhandene gepruefte Dateien ohne Download. Erstinstallation kann je nach Verbindung mehrere Minuten dauern. Classic bleibt lokal-only: KROKO_MODEL=classic verwendet bestehende gepruefte Dateien ohne Download oder Migration. Community-64 ist optional; eigene ONNX-Modelle sind je Sprache mit custom/name und lokalem Manifest moeglich. Freie lokale .data-Pakete koennen mit custom/name und einem exakten CUSTOM_MODEL_PATH ausgewaehlt werden. Ungueltige vorhandene Dateien werden niemals automatisch ersetzt. Modellgewichte bleiben im Appdata-Volume und ausserhalb des Images. Modelllizenzen gelten separat; die Community-CC-BY-SA-Version ist vom Anbieter nicht eindeutig spezifiziert. Vor Start freien Hostport waehlen. Keine Weboberflaeche, GPU oder Audioaufzeichnung. Wyoming nur im vertrauenswuerdigen LAN verwenden. LOG_LEVEL=warn reduziert Sprachinhalte in Logs. Ab v0.3.0: sprachgetrennte Modellverwaltung. Bestehende gespeicherte Classic-Konfiguration beim Update beibehalten; kein automatischer Modellwechsel.

Modelle: Sprache, Installation und Migration

Ab v0.3.0: sprachgetrennte Modellverwaltung. Bestehende deutsche v0.2.0- Installationen werden ohne erzwungene Migration weiterverwendet.

Auswahl und unterstützte Kombinationen

LANGUAGE und KROKO_MODEL bilden eine Identität. MODEL ist ein gleichwertiger Alias; beide Variablen dürfen nicht widersprüchlich gesetzt sein.

LANGUAGE=en
MODEL=community-128
MODEL_DIR=/models

Die Instanz verwendet genau dieses Modell. Kein automatisches Erkennen der Audiosprache und kein Laden aller Varianten. Ein Modell-/Sprachwechsel erfordert geänderte Containerumgebung und Neuerstellen des eigenen Containers. Persistente Gewichte bleiben erhalten; ein bloßer Neustart ändert die Umgebung nicht.

Der eingebettete Katalog enthält ausschließlich geprüfte Dateinamen, Größen und Paket-SHA256 vom offiziellen Banafo-Repository, Revision d45212aeb212dd66083dd22710c9954f40ff8cc1:

LANGUAGE Sprache Community-64 Community-128
de Deutsch angeboten angeboten
en Englisch angeboten angeboten
es Spanisch angeboten angeboten
fr Französisch angeboten angeboten
it Italienisch angeboten angeboten
he Hebräisch, Anbieter-Dateicode IW angeboten angeboten
nl Niederländisch angeboten angeboten
pt Portugiesisch angeboten angeboten
sv Schwedisch angeboten nicht angeboten
tr Türkisch angeboten angeboten

Dies ist eine Angebots-/Katalogmatrix, keine Genauigkeitsgarantie und keine Behauptung, dass jedes Modell bereits nativ getestet wurde. Tatsächlich geprüfte Kombinationen sind im lokalen Testbericht ausgewiesen. Nicht im Katalog vorhandene Kombinationen, insbesondere en + classic oder sv + community-128, werden abgewiesen. Niemals stillschweigender Rückfall auf Deutsch oder eine andere Variante.

Primäre zweistellige Sprachcodes werden kleingeschrieben. Regionale Aliase wie de-DE oder en-US verwenden dieselbe primäre Modellidentität. iw wird nach he normalisiert. Das erzeugt keine regional spezialisierten Modelle. LANGUAGE ist unabhängig von der Sprache der Benutzeroberfläche.

Persistente Ablage und erster Start

/models/
  de/
    community-128/
      encoder.onnx
      decoder.onnx
      joiner.onnx
      tokens.txt
      model.json
      installation.json
    community-64/
    classic/
    custom/
      example/
  en/
    community-128/
    community-64/
    custom/

Manuell gelieferte Community-Pakete und zunächst leere dedizierte Modellordner können Komponenten auch unter .runtime/<paket-sha256>/ innerhalb dieses sprachgebundenen Modellordners vorbereiten. Sprache bleibt Teil des Elternpfads. Verschiedene Sprachen verwenden keine gemeinsame Cache-Ablage, selbst wenn Dateinamen oder Komponentenbytes ähnlich sein sollten.

Für eine Neuinstallation mit dem v0.3.0: Sprache und Modell wählen, einen persistenten Modellordner schreibbar für UID 99/GID 100 nach /models einbinden und starten. MODEL_AUTO_DOWNLOAD=true lädt nur ein fehlendes, ausgewähltes Community-Paket aus dem offiziellen gepinnten Katalog. Keine erfundenen URLs, keine Drittanbieter-Mirrors, keine vorsorglichen Downloads von Community-64 bei gewähltem Community-128.

Die Vorbereitung prüft Paket-SHA256, Größe, freien Header und Sprache, Blockgrenzen, Komponenten, Tokenformat und ONNX-Hülle. Die Export-Metadaten des Encoders liefern die tatsächliche Schrittweite; keine Ableitung aus 64 oder 128 im Namen. Der automatische Pfad unterstützt die nachgewiesene Zipformer2- Exportform Version 1 mit decode_chunk_len=128/256 und T=Schritt+13. Für diese Formen gilt der bereits validierte Silence-Tail von Schritt+16 Featureframes. Andere Exportformen benötigen ein explizites Custom-Manifest. Die interne Modell-Schrittweite wird nicht durch Konfiguration verändert.

Neue Pakete und Komponenten entstehen zunächst in einem privaten Staging-Ordner. Nur vollständige geprüfte Ergebnisse werden atomar ohne Ersetzung veröffentlicht. Danach werden die Komponenten erneut verifiziert und erst dann das freie Community-Paket entfernt. model.json hält gemessene Komponenten-Hashes und Exportparameter fest; installation.json bindet Sprache, Modell und Paket-SHA. Bei späteren Starts werden diese Dateien wiederverwendet: kein Download und keine erneute Extraktion.

Bei fehlgeschlagener Vorbereitung nach einem abgeschlossenen Download bleibt das Paket im privaten Staging-Bereich zur Untersuchung erhalten. Es gilt niemals als installiertes Modell. Eine Fehlermeldung nennt den Ort. Unterbrochene/unvollständige Downloads werden nicht als fertige Pakete veröffentlicht. Kein automatisches Überschreiben, Löschen oder Reparieren bestehender Komponenten.

v0.2.0 wiederverwenden

Bestehende deutsche Modelle werden ohne obligatorische Migration erkannt:

  • /models/community-128/ und /models/community-64/;
  • /models/classic/;
  • das bisherige lange Classic-Exportverzeichnis;
  • flache Classic-Komponenten direkt in MODEL_DIR;
  • /models/custom/<name>/ mit deutschem Manifest.

Diese Legacy-Suche gilt nur für Deutsch. Bei Englisch wird niemals ein altes deutsches Modell als vorhandenes englisches Modell behandelt. Eine vorhandene neue sprachgetrennte Ablage hat Vorrang; ist sie ungültig, wird nicht heimlich auf ein anderes Modell zurückgegriffen. Ohne explizite Auswahl bleibt vorhandenes deutsches Classic vorrangig. Eine gewählte Sprache wird nicht automatisch gewechselt.

Gültige alte ONNX-Komponenten werden direkt verwendet; kein neuer Download und kein Verschieben nötig. Ein zusätzliches korrekt identifiziertes freies Community- Paket kann nach Verifizierung entfernt werden, wenn das Modellverzeichnis schreibbar und nicht durch einen anderen Nutzer gesperrt ist. Bei read-only oder belegtem Verzeichnis bleibt diese redundante Kopie erhalten; der Start bleibt möglich. Ungültige zusätzliche Pakete werden nicht gelöscht.

Classic bleibt nur de, lokal/manuell, ohne automatischen Download. Die bekannten Classic-SHA256 bleiben unverändert. Eine neue Version benennt vorhandene Container, Mounts oder gespeicherte Unraid-Templates nicht selbst um.

Offline und read-only

MODEL_AUTO_DOWNLOAD=false verhindert automatische Downloads beim Serverstart. Ein vollständiges lokales Modell startet unabhängig davon ohne Internet. Nach erfolgreicher Vorbereitung funktionieren Komponenten mit read-only Modellmount. Die erste Vorbereitung benötigt Schreibrechte. Diagnosebefehle schreiben nichts. Der Container läuft weiterhin als UID 99/GID 100, CPU only, normalerweise ein Thread. Keine automatische globale Rechte-Reparatur und kein chmod 777.

Custom Models

Vorbereitete Modelle: /models/<sprache>/custom/<name>/model.json und die darin benannten Komponenten. Beispiel: Custom-Manifest. language muss zu LANGUAGE passen. Vier Rollen: Encoder, Decoder, Joiner und Tokens; relative sichere Pfade und optional SHA256. German-spezifische Beispiele sind Beispiele, kein globaler Sprachzwang. Symlinks und Traversal werden abgewiesen.

Freie lokale Kroko-Pakete ausdrücklich auswählen:

LANGUAGE=de
MODEL=custom/local-package
CUSTOM_MODEL_PATH=/models/Kroko-DE-Community-128-L-Streaming-001.data

Es wird nur diese Datei verwendet, auch wenn weitere .data-Dateien vorhanden sind. Bekannte katalogisierte Pakete übernehmen verifizierte Parameter; andere freie Exporte benötigen ein sprachlich passendes Manifest. Keine manuelle Komponentenextraktion durch den Benutzer. Der Cache liegt sprachgetrennt unter /models/<sprache>/custom/<name>/.runtime/<paket-sha256>/.

Manuelle Custom-Originale bleiben erhalten und werden beim Neustart zur Validierung benötigt. Der automatische Community-Cleanup löscht sie nicht. CUSTOM_MODEL_PATH muss für normale Built-in-Profile und bereits vorbereitete ONNX-Custom-Modelle leer sein. Ein Dateipfad muss innerhalb MODEL_DIR liegen; ein Hostpfad oder Verzeichnis genügt nicht. Mehrere Dateien werden nie automatisch erraten. Unbekannte Backends werden diagnostiziert, aber nicht automatisch gestartet.

Nemotron 3.5 als vorbereitetes Custom-Modell

Ab v0.3.0 können die offiziellen multilingualen sherpa-onnx-Nemotron-3.5-Streaming-INT8-Exporte über dasselbe Custom-Manifest verwendet werden. Dies ist kein automatischer Nemotron-Installer. Die vier Dateien bleiben unverändert unter ihren Originalnamen im ausgewählten Custom-Ordner:

/models/de/custom/nemotron-560/model.json
/models/de/custom/nemotron-560/encoder.int8.onnx
/models/de/custom/nemotron-560/decoder.int8.onnx
/models/de/custom/nemotron-560/joiner.int8.onnx
/models/de/custom/nemotron-560/tokens.txt

LANGUAGE=de-DE, MODEL=custom/nemotron-560 und MODEL_AUTO_DOWNLOAD=false auswählen; CUSTOM_MODEL_PATH bleibt leer. Die Modellwurzel bleibt /models. Für 1120 ms einen separaten Custom-Namen und den entsprechenden Export verwenden. Quellen und angebotene Exporte: offizielle sherpa-onnx-Anleitung.

Zusätzlich zu den bisherigen Manifestfeldern werden benötigt:

{
  "model_type": "nemo_transducer",
  "feature_dim": 128,
  "stream_language": "de-DE",
  "tail_samples": 4800
}

Dies ist ein Ausschnitt, kein vollständiges Manifest. Backend und Format bleiben sherpa-onnx-transducer und onnx-transducer. Die vier Rollen verweisen auf die Originaldateien; SHA256 und die tatsächliche Modelllizenz separat eintragen. nemo_transducer bezeichnet hier unser Manifestprofil. Die native CPU-Runtime erkennt die NeMo-Familie selbst; sie bekommt keine erzwungene Zipformer-Kennung.

Der Manager prüft tatsächliche Encoder-Metadaten, Featurezahl, Vocabulary-Größe und Sprach-Prompt. Der NeMo-Blank liegt am Vokabularende; er wird nicht auf null umgeschrieben. stream_language wird vor dem ersten Audioblock am Stream gesetzt. Der Encoder dieses Exports überschreitet 512 MiB; nur das explizite NeMo-Profil hat deshalb ein Dateilimit von 1 GiB. Kroko-Paketlimits bleiben unverändert.

Alte Manifeste behalten standardmäßig 80 Features und keine NeMo-Sprachoption. Die interne Chunk-Konfiguration stammt aus dem jeweiligen Modell, nicht aus der Größe der eingehenden Audioblöcke. Keine beliebigen Chunkwerte erzwingen. Audio bleibt 16-kHz-Mono-PCM16, CPU-only, standardmäßig ein Thread und Greedy. Die Wyoming-Schnittstelle bleibt unverändert und liefert weiterhin finale Texte; interne Streaming-Partials sind keine ausgelieferten Wyoming-Partials.

Erfolgreiche technische Tests sind keine pauschale N100-Geschwindigkeitsempfehlung. Nemotron benötigt erheblich mehr RAM und Rechenzeit als Kroko; der vollständige lokale Vergleich wird getrennt ausgewertet. Keine Nemotron-Gewichte werden im Repository oder Image mitgeliefert. Andere NeMo-/Parakeet-Exporte werden durch dieses gezielte Profil nicht automatisch als kompatibel freigegeben.

CLI und sichere Entfernung

Die Variablen des Containers gelten auch für die CLI:

docker exec YOUR_CONTAINER /usr/local/bin/model-manager list
docker exec YOUR_CONTAINER /usr/local/bin/model-manager status
docker exec YOUR_CONTAINER /usr/local/bin/model-manager verify community-128
docker exec YOUR_CONTAINER /usr/local/bin/model-manager install community-128

list, status, verify verändern nichts und laden nichts herunter. install erlaubt ausdrücklich die Installation des gewählten Modells; es lädt kein Custom-Modell aus einer Manifest-URL. Für eine andere Sprache in einem separaten Verwaltungsaufruf LANGUAGE explizit setzen. source im Manifest ist nur Herkunftsinformation. runtime_compatible ist deklarativ; erst ein nativer Serverstart bestätigt tatsächliche Inferenz-Kompatibilität.

model-manager remove community-128 --yes entfernt ausschließlich das gewählte Modell der konfigurierten Sprache, wenn es nicht aktiv verwendet wird und keine unbekannten Dateien enthält. Andere Sprachen, Modelle und Appdata bleiben erhalten. Keine pauschalen Löschbefehle. Flache gemeinsame Classic-Ablagen und neue manuelle Custom-Paket-Caches werden konservativ nicht automatisch entfernt. Ein entferntes Community-Modell wird bei weiterhin gewählter Variante und aktivem Auto-Download später erneut installiert; vorher die Auswahl bewusst ändern.

Namen und Lizenz

Der neutrale Projekt- und neue Containername ist kroko-stt-wyoming. Kanonisches Repository, GHCR-Image und neue CA-Vorlage heißen ab v0.3.1 kroko-stt-wyoming. Neue Appdata-Verzeichnisse verwenden diesen Namen. Bestehende Container, Appdata-Mounts und gespeicherte Unraid-Templates werden nicht automatisch umbenannt oder geändert. Vorhandene deutsche Modelle werden weiter ohne Download und ohne erzwungene Migration wiederverwendet. Ein bisheriger Hostpfad mit kroko-stt-german-wyoming bleibt gültig.

Community: CC-BY-SA, Versionsnummer vom Anbieter nicht spezifiziert. Classic-Rechte bleiben ungeklärt. Gewichte sind weder im Git-Repository noch im Containerimage enthalten. Details.

Bestehende Unraid-Installation auf den neuen Image-Namen umstellen

Optional nur die Image-Referenz auf ghcr.io/marco-taylor/kroko-stt-wyoming:0.3.1 ändern. Den vorhandenen Host-Modellpfad, die Sprache, Modellauswahl und das Host-Port-Mapping übernehmen. Ein alter Hostpfad muss nicht umbenannt werden. Die gespeicherte Benutzer-Vorlage wird nicht automatisch umgeschrieben. Die bisherigen versionierten GHCR-Images bleiben verfügbar; ein Repository-Redirect bei GitHub benennt ein GHCR-Paket nicht automatisch um.

Requirements

linux/amd64. Persistentes /models-Volume fuer UID 99/GID 100 schreibbar, wenn automatische Installation gewuenscht ist. Vollstaendige lokale Modelle funktionieren auch read-only. Keine Gewichte im Image. Hostport darf keinen bestehenden Dienst verdraengen.

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/marco-taylor/kroko-stt-wyoming:latest
Last Updated2026-11-06
First Seen2026-11-06

Runtime arguments

Network
bridge
Privileged
false
Extra Params
--user=99:100 --read-only --cap-drop=ALL --security-opt=no-new-privileges --restart=unless-stopped

Template configuration

Wyoming-STT-PortPorttcp

Freier Host-TCP-Port fuer Home Assistant. Standard 10321; interner Container-Port bleibt 10321. Bestehende Dienste nicht ersetzen.

Target
10321
Default
10321
Value
10321
Persistente Kroko-ModellePathrw

Persistenter Modellordner. Schreibrechte fuer UID 99/GID 100 ermoeglichen den einmaligen Community-Download. Vorhandene Modelle bleiben erhalten. Updates loeschen dieses Volume nicht. Bestehenden Hostpfad beim Update beibehalten, auch wenn er noch den alten Projektnamen traegt.

Target
/models
Default
/mnt/user/appdata/kroko-stt-wyoming/models
Value
/mnt/user/appdata/kroko-stt-wyoming/models
Kroko-ModellVariable

Standard bei Neuinstallation: community-128. Optional community-64, classic oder custom/name. Classic und Custom sind lokal-only. Vorhandene Dateien werden zuerst geprueft und nie automatisch ersetzt. Aenderungen erfordern Neuerstellen.

Target
KROKO_MODEL
Default
community-128
Value
community-128
Fehlende Community-Modelle ladenVariable

true erlaubt Download nur bei fehlendem Community-Modell. false startet strikt lokal/offline. Gueltige vorhandene Modelle benoetigen in beiden Faellen kein Internet.

Target
MODEL_AUTO_DOWNLOAD
Default
true|false
Value
true
CPU-ThreadsVariable

Standard 1, fuer Intel N100 empfohlen. Erlaubt 1 bis 4; keine GPU erforderlich.

Target
NUM_THREADS
Default
1
Value
1
SpracheVariable

Sprache und Modell bilden eine Identitaet, z.B. en/community-128. Classic nur de; Schwedisch (sv) nur Community-64. Nicht angebotene Kombinationen brechen ohne Sprachfallback ab.

Target
LANGUAGE
Default
de|en|es|fr|it|he|nl|pt|sv|tr
Value
de
LogstufeVariable

info protokolliert finale Transkripte, debug zusaetzlich interne Partials. warn oder error reduzieren Sprachinhalte in Logs. Audio wird nicht gespeichert.

Target
LOG_LEVEL
Default
info|warn|error|debug
Value
info
ZeitzoneVariable

Standard Europe/Berlin.

Target
TZ
Default
Europe/Berlin
Value
Europe/Berlin
Custom-.data-Datei im ContainerVariable

Optional, nur mit Model custom/name: exakte lokale .data-Datei unter /models, z.B. /models/Kroko-DE-Community-128-L-Streaming-001.data. Leer fuer normale Modelle und ONNX-Manifeste. Kein Verzeichnis, keine automatische Dateiauswahl. Original bleibt erhalten; freie Custom-Pakete werden einmalig sprachgetrennt persistent vorbereitet; manuelle Custom-Originale bleiben erhalten. Unbekannte freie Exporte brauchen ein Manifest.

Target
CUSTOM_MODEL_PATH