# Wyoming Speech-to-Text (rhasspy/wyoming-whisper). # # Exposes the Wyoming protocol over TCP on port 10300 so Home Assistant's # Wyoming STT integration can stream audio and receive transcriptions. Uses # faster-whisper under the hood with the language pinned to Catalan (`ca`). # # These are lightweight CPU-only pods (no GPU), so they are NOT pinned to the # NUCBox via nodeSelector — k3s can schedule them on any amd64 node. Models are # cached in a local-path PVC (`/data`) so they survive pod restarts without # re-downloading. --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wyoming-whisper-data namespace: llamacpp labels: app: llamacpp component: stt spec: storageClassName: local-path accessModes: - ReadWriteOnce resources: requests: storage: 5Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: wyoming-whisper namespace: llamacpp labels: app: llamacpp component: stt spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: llamacpp component: stt template: metadata: labels: app: llamacpp component: stt spec: nodeSelector: kubernetes.io/arch: amd64 containers: - name: wyoming-whisper image: rhasspy/wyoming-whisper imagePullPolicy: IfNotPresent args: - --uri - tcp://0.0.0.0:10300 - --language # pin transcription language to Catalan - ca - --model # faster-whisper model (tune up to medium for accuracy) - small ports: - name: wyoming containerPort: 10300 resources: # faster-whisper `small` is ~244M params (fp16 ~500 MiB weights) # plus CTranslate2 runtime / workspace buffers during decode. # 1 GiB OOM-kills during model load; 2 GiB gives headroom. requests: cpu: "100m" memory: "512Mi" limits: cpu: "1000m" memory: "2Gi" volumeMounts: - name: data mountPath: /data volumes: - name: data persistentVolumeClaim: claimName: wyoming-whisper-data --- apiVersion: v1 kind: Service metadata: name: wyoming-whisper namespace: llamacpp labels: app: llamacpp component: stt spec: type: ClusterIP selector: app: llamacpp component: stt ports: - name: wyoming port: 10300 targetPort: 10300