Architektur
Natives anweisungsgesteuertes TTS
Die native SDK-Unterstützung aus dem main-Quellcode bauen. Homebrew und andere vorgefertigte CLI-Versionen enthalten diese Engines möglicherweise noch nicht.
Implementierung (PR #541): main
Veröffentlichte MLX-Bundles: aufklarer/FireRedTTS3-Instruct-MLX-fp32 · aufklarer/MOSS-VoiceGenerator-MLX-bf16
FireRedTTS3-Instruct — FireRedTTS3TTS: FireRedTTS3-Instruct behält Float32-Modell- und Decodergewichte. Audio wird vollständig gepuffert zurückgegeben: --stream weglassen. --language akzeptiert englische und chinesische Aliase. Ein Generierungslimit führt zu einem Fehler statt zu abgeschnittenem Erfolg.
MOSS-VoiceGenerator — MossVoiceGeneratorTTS: MOSS-VoiceGenerator behält BF16-Sprachgewichte und den FP32-Synthesecodec. --stream liefert inkrementelles PCM. --language weglassen und Sprachanforderungen in --instruct setzen. Vor Abschluss werden alle sechzehn Codebücher geleert.
Text und Anweisung sind jeweils auf 32.768 UTF-8-Bytes begrenzt. Der vollständig gerenderte Eingabeprompt einschließlich Vorlage darf 4.096 Tokens nicht überschreiten. Eingaben oberhalb einer dieser Grenzen werden abgewiesen.
Die Anweisungsbefolgung ist unbewertet. Kurztextmessungen beschreiben den getesteten Aufbau; die Latenz-Regressionsprüfung bestehender Modelle bleibt ohne eindeutiges Ergebnis.
Breeze TTS 2 · BreezeTTS
Englische und chinesische Sprachsynthese mit Stimmdesign, Klonen und Steuerung einer Referenzstimme sowie Audiostreaming (MLX BF16/8-bit, 24 kHz; nur Forschung und nichtkommerzielle Nutzung).
speech speak "The quick brown fox jumps over the lazy dog." --engine breeze \
--instruct "A clear, calm English narrator." --stream -o design.wav--breeze-model-id:aufklarer/Breeze-TTS-2-MLX-8bit--breeze-bundle-dir--breeze-cache-limit-mib--breeze-reference-text--breeze-temperature:0.9--breeze-top-k:50--breeze-top-p:1--breeze-cfg-scale:4--breeze-max-frames:750--breeze-seed:42--first-chunk-frames:3--chunk-frames:25
Native Laufzeit für Apple · PocketTTS
PocketTTS ergänzt speech-swift um native CoreML-Sprachausgabe. Alle Stufen verwenden standardmäßig nur die CPU. Die englische Stimme Alba liefert jeweils 1.920 Samples mit 24 kHz, also 80 ms pro Audioblock.
speech-swift ist als modulares Swift-Paket organisiert mit gemeinsamen Protokollen, unabhängigen Modellmodulen und einer einheitlichen CLI. Die gesamte Inferenz läuft auf dem Gerät über MLX (Metal-GPU) oder CoreML (Neural Engine).
Modul-Abhängigkeitsgraph
┌──────────┐
│ AudioCLI │ (Einstiegspunkt)
└────┬─────┘
│
┌──────┴──────┐
│ AudioCLILib │ (Befehle)
└──────┬──────┘
│
┌─────────┬───────┼───────┬──────────┬──────────────┐
│ │ │ │ │ │
┌────┴───┐ ┌──┴──┐ ┌──┴──┐ ┌─┴────┐ ┌───┴────┐ ┌──────┴───────┐
│Qwen3ASR│ │Qwen3│ │Cosy │ │Perso-│ │Speech- │ │ Speech- │
│Parakeet│ │ TTS │ │Voice│ │naPlex│ │ VAD │ │Enhancement │
└────┬───┘ └──┬──┘ └──┬──┘ └──┬───┘ └───┬───┘ └──────┬───────┘
│ │ │ │ │ │
└────────┴───────┼───────┴─────────┘ │
│ │
┌──────┴──────┐ │
│ Qwen3Common │ (gemeinsame Schichten)│
└──────┬──────┘ │
│ │
┌──────┴──────┐ │
│ AudioCommon │ ◄──────────────────────┘
└─────────────┘ (Protokolle, Audio-I/O)Speicherbudget für den MLX-Puffercache
MLX-Modelle teilen vom Laden der Gewichte bis zum Ende ihrer Lebensdauer eine Standardgrenze von min(2 GiB, physical RAM / 4) für wiederverwendbare Puffer. Niedrigere Budgets des Aufrufers, einschließlich MLX.Memory.cacheLimit = 0, und bestehende modellspezifische Budgets bleiben erhalten. Die Grenze gilt für ungenutzte Puffer; aktive Gewichte, KV-Caches und der gesamte Prozessspeicher können sie überschreiten. MLX bereinigt den Cache bei Speicherzuweisungen. Der zuletzt freigegebene Puffer kann ihn deshalb bis zur nächsten Zuweisung vorübergehend über das Budget heben.
unload() gibt die Registrierung des Modells frei; Laufzeiten ohne diese Methode geben sie bei der Freigabe des Objekts zurück. Der letzte Besitzer stellt das Budget des Aufrufers wieder her. Frühere Entladevorgänge erhalten die Grenzen der übrigen Modelle. Reine CoreML-Pfade registrieren kein MLX-Budget.
MOSS Transcribe Diarize
MossTranscribe liefert Segmente mit Sprecherzuordnung und Zeitstempeln über native CoreML- und MLX-Backends. CoreML nutzt für kurze Aufnahmen einen festen Zustand mit 1.024 Tokens. MLX verwendet einen dynamischen Kontext mit 131.072 Tokens, affine INT5/INT8-Decodergewichte und optionale FP16/INT8-KV-Caches. Beide Laufzeiten arbeiten offline und autoregressiv, nicht als Streaming-Modell.
VoiceChat 11B
Aufgabe und Referenz: Duplex-Speech-to-Speech; SALM-Duplex: Efficient and Direct Duplex Modeling for Speech-to-Speech Language Model (Interspeech 2025), zitiert in NVIDIAs Upstream-VoiceChat-Modellkarte.
Vollständige Laufzeit, M5 Pro 48 GB, Release, 80-ms-Live-Takt: INT5 mit geschützten Heads erreicht etwa 8.69 GB Peak-RSS; drei kontrollierte Gesamtpfad-RTF-Ergebnisse waren 0.96, 0.96 und 0.99. Die optimierte INT8-Leistung wurde noch nicht neu gemessen.
VoiceChat implementiert den vollständigen nativen MLX-Audio-zu-Audio-Pfad: kausale FastConformer-Wahrnehmung, Nemotron-H-Duplex-Text-/Funktionskanäle, einen eigenständigen textkonditionierten EAR-TTS-Decoder mit acht MaskGIT-Iterationen und einen neuronalen 22,05-kHz-Codec. Das Streaming hält begrenzte Attention- und kausale Faltungs-Caches pro Schicht; das stabile Acht-Frame-Live-Codec-Fenster nutzt einen kompilierten Graphen. Jeder 80-ms-Eingangsframe erzeugt eine Sprachentscheidung, 31 RVQ-Codes und genau 1.764 Ausgabesamples. Der Loader verlangt ein vollständiges encoder/ + llm/ + tts/-Bundle und lehnt ältere reine Verständnis-Exporte ab. INT5 hält auf dem getesteten M5 Pro nun den durchschnittlichen RTF unter 1, obwohl der p95-Spielraum pro Frame knapp bleibt.
Inferenz-Backends
| Backend | Hardware | Modelle |
|---|---|---|
| MLX | Metal-GPU | Qwen3-ASR, Qwen3-TTS, Breeze TTS 2, CosyVoice3, IndexTTS2, Qwen3.5-Chat, PersonaPlex, VoiceChat 11B, Omnilingual ASR (300M / 1B / 3B / 7B), Cohere Transcribe 2B, Voxtral Mini 3B, Pyannote, Silero VAD, WeSpeaker, MOSS Transcribe Diarize, SpeechBrain ECAPA LID, Nemotron 3 Diarization, FireRedTTS3-Instruct, MOSS-VoiceGenerator |
| CoreML | CPU / GPU / Neural Engine (ANE) | Qwen3-ASR-Encoder (Hybrid), Parakeet TDT, Parakeet EOU Streaming, Omnilingual ASR 300M, Kokoro-82M, Qwen3.5-Chat (optional), Sortformer-Diarisierung, DeepFilterNet3, Silero VAD (optional), WeSpeaker (optional), MOSS Transcribe Diarize, SpeechBrain ECAPA LID, Nemotron 3 Diarization |
| Accelerate | CPU (SIMD) | Audio-Vorverarbeitung (STFT, Mel, FFT), Signalverarbeitung |
Modell-Gewichtsformat
MLX-Modelle verwenden das Format safetensors mit 4-Bit- oder 8-Bit-Quantisierung (Gruppengröße 64). CoreML-Modelle verwenden das kompilierte Format .mlmodelc. Konvertierungsskripte in scripts/ konvertieren aus PyTorch-Checkpoints.
Cohere und Voxtral bieten zusätzlich affine MLX-INT5-Pakete. MLX unterstützt kein affines INT7; INT8 ist die unterstützte Option mit höherer Qualität.
| Modell | Parameter | Quantisierung | Größe auf Disk |
|---|---|---|---|
| Qwen3-ASR 0.6B (MLX) | ~600M | 4-Bit / 8-Bit | 680 MB / 1,0 GB |
| Qwen3-ASR 0.6B (CoreML) | ~186M (Encoder) | INT8 | ~180 MB |
| Qwen3-ASR 1.7B (MLX) | ~1,7B | 4-Bit / 8-Bit | 2,1 GB / 3,2 GB |
| Parakeet-TDT 0.6B (CoreML) | ~600M | INT8 | 500 MB |
| Whisper Large-v3 Turbo (CoreML) | 809M | FP16 | 1.6 GB |
| MOSS Transcribe Diarize 0.9B (MLX) | 908.5M | FP16 audio + INT5 / INT8 decoder | 987.0 MiB / 1,200.1 MiB |
| MOSS Transcribe Diarize 0.9B (CoreML) | ~900M | FP16 / INT8 block-32 | 1.7 GB / 1.2 GB |
| Parakeet-EOU 120M (CoreML) | ~120M | INT8 | ~120 MB |
| Omnilingual-ASR-CTC 300M (CoreML) | 326M | INT8 | 312 MB |
| Omnilingual-ASR-CTC 300M (MLX) | 326M | 4-Bit / 8-Bit | 193 MB / 342 MB |
| Omnilingual-ASR-CTC 1B (MLX) | 1,01B | 4-Bit / 8-Bit | 549 MB / 1006 MB |
| Omnilingual-ASR-CTC 3B (MLX) | ~3B | 4-Bit / 8-Bit | 1,71 GB / 3,16 GB |
| Omnilingual-ASR-CTC 7B (MLX) | ~7B | 4-Bit / 8-Bit | 3,55 GB / 6,63 GB |
| Cohere Transcribe 2B (MLX) | 2B | FP16 / INT5 / INT8 | 3.85 / 1.62 / 2.25 GiB |
| Voxtral Mini 3B 2507 (MLX) | 3B | FP16 / INT5 / INT8 | 8.71 / 3.77 / 5.18 GiB |
| Qwen3-ForcedAligner 0.6B (MLX) | ~600M | 4-Bit / 8-Bit | 979 MB / 1,4 GB |
| Qwen3-ForcedAligner 0.6B (CoreML) | ~600M | INT4 / INT8 | 630 MB / 1,0 GB |
| Qwen3-TTS 0.6B (MLX) | ~600M | 4-Bit / 8-Bit | 1,7 GB / 2,4 GB |
| Qwen3-TTS 1.7B (MLX) | ~1,7B | 4-Bit / 8-Bit | 3,2 GB / 4,8 GB |
| CosyVoice3 0.5B (MLX) | ~500M | 4-Bit-LLM | ~1,2 GB |
| IndexTTS2 expanded bundle (MLX) | 1.5B-class | FP16 + auxiliary models | ~4.8 GB |
| Kokoro-82M (CoreML) | 82M | INT8 (1 Bucket) | ~89 MB |
| Qwen3.5-Chat 0.8B (MLX) | ~800M | INT4 | 418 MB |
| Qwen3.5-Chat 0.8B (CoreML) | ~800M | INT8 | 981 MB |
| PersonaPlex 7B (MLX) | ~7B | 4-Bit / 8-Bit | 4,9 GB / 9,1 GB |
| VoiceChat 11B (MLX) | ~11B | INT5 / INT8 | 8.56 GB / 12.11 GB |
| Pyannote VAD (MLX) | ~1,49M | float32 | ~5,7 MB |
| Silero VAD v5 | ~309K | float32 | ~1,2 MB (MLX & CoreML) |
| p99 turn-1-mini | 5.3M | Float32 | 22 MB (CoreML) |
| VAP (otoSpeech) | 5.8M | Float32 | 39 MB (CoreML) / 40 MB (ONNX) |
| WeSpeaker ResNet34 | ~6,6M | float32 | ~25 MB (MLX & CoreML) |
| SpeechBrain ECAPA VoxLingua107 | 21.25M | FP16 | ~40.6 MiB (MLX) / ~40.8 MiB (CoreML) |
| ReDimNet2-B6 | 12,3M | float16 | ~25 MiB (CoreML) |
| Pyannote Community-1 (CoreML) | 8.35M | float32 + native VBx | ~32 MB |
| Nemotron 3 Diarization (CoreML / MLX) | 100M | INT8 | ~100 MB per backend |
| Sortformer (CoreML) | — | float16 | ~50 MB |
| DeepFilterNet3 (CoreML) | ~2,1M | FP16 | ~4,2 MB |
| LocalVQE v1.4-AEC (CoreML + C++) | 200K + 2.742 | FP16 + FP32 | ~732 KB |
Initialisierung von MLX-Modellen
QuantizedLinear.preQuantized erstellt mit Nullen belegte Platzhalter für quantisierte lineare Schichten, deren Gewichte aus einem Checkpoint geladen werden. Dadurch entfallen zufällige Gewichte und ihre temporären Quantisierungsgraphen. withThrowawayRandomState trennt die später verworfene Gleitkomma-Initialisierung von der Zufallsschlüsselkette des Aufrufers. Bei zusammengesetzten Modellen wird jede Komponente separat gekapselt: T5 und EnCodec in MAGNeT, T5Gemma und SAME-L in Stable Audio 3 sowie der Mimi-Codec in CSM. Die quantisierten Embeddings von CSM verwenden weiterhin den Upstream-Initialisierer und behalten dessen bekannte Einschränkung bei der Lebensdauer des Initialisierungsgraphen.
Leistungsoptimierungen
- MLX compile() — Kernel-Fusion für autoregressive Schleifen. Talker verwendet
compile(shapeless: true), Code-Predictor verwendetcompile(shapeless: false)mit festen Cache-Größen. - Metal-Shader-Bibliothek — Vorab kompilierte metallib vermeidet ~5-fachen JIT-Kompilierungsoverhead. Erstellt über
scripts/build_mlx_metallib.sh. - Chunked Codec Decode — Der TTS-Decoder verarbeitet Audio in 25-Frame-Chunks mit 10-Frame-Kontextüberlappung, um GPU-Timeouts zu vermeiden.
- Batch-doppeltes CFG — CosyVoice3 DiT halbiert Flow-Matching-Durchläufe, indem es bedingte + unbedingte zusammen batcht.
- Fused RoPE — Verwendet
MLXNN.RoPEauf Basis eines Metal-Kernels statt manueller Rotation. - BN-Fusion — WeSpeaker-Batch-Normalisierung wird zur Konvertierungszeit in Conv2d-Gewichte fusioniert.
Audio-Verarbeitung
Alle Audio-I/O verwenden Float32-PCM. Internes Resampling übernimmt die Formatkonvertierung:
| Modell | Erwartete Rate | Format |
|---|---|---|
| Qwen3-ASR | 16 kHz | Mono Float32 |
| Cohere Transcribe 2B | 16 kHz | Mono Float32 |
| Voxtral Mini 3B | 16 kHz | Mono Float32 |
| Qwen3-TTS | 24 kHz Ausgabe | Mono Float32 |
| CosyVoice3 | 24 kHz Ausgabe | Mono Float32 |
| Kokoro-82M | 24 kHz Ausgabe | Mono Float32 |
| PersonaPlex | 24 kHz I/O | Mono Float32 |
| Pyannote VAD | 16 kHz | Mono Float32 |
| Silero VAD | 16 kHz | Mono Float32 |
| WeSpeaker | 16 kHz | Mono Float32 |
| SpeechBrain ECAPA LID | 16 kHz | Mono Float32 |
| ReDimNet2-B6 | 16 kHz | Mono Float32 |
| DeepFilterNet3 | 48 kHz | Mono Float32 |
Quellstruktur
Sources/
AudioCommon/ Gemeinsame Protokolle, Audio-I/O, Systemausgabe-
Erfassung (SystemAudioTap), HuggingFace-
Downloader, SentencePieceModel (Protobuf-Reader)
MLXCommon/ MLX-Hilfsprogramme: Gewichtsladen, QuantizedLinear-Helfer,
SDPA-Multi-Head-Attention-Helfer, Metal-Budget
Qwen3Common/ Gemeinsame Modellkomponenten (KV-Cache, RoPE, Quantisierung)
Qwen3ASR/ Qwen3-ASR Sprache-zu-Text
ParakeetASR/ Parakeet TDT Sprache-zu-Text (CoreML)
ParakeetStreamingASR/ Parakeet EOU 120M Streaming-Diktat (CoreML)
OmnilingualASR/ Meta wav2vec2 + CTC, 1.672 Sprachen
(CoreML 300M + MLX 300M / 1B / 3B / 7B)
CohereTranscribeASR/ Cohere Transcribe 2B speech-to-text (MLX)
VoxtralASR/ Voxtral Mini 3B speech-to-text (MLX)
Qwen3TTS/ Qwen3-TTS Text-zu-Sprache
FireRedTTS3TTS/ FireRedTTS3-Instruct (MLX, Float32)
MossVoiceGeneratorTTS/ MOSS-VoiceGenerator (MLX, BF16 + FP32)
CosyVoiceTTS/ CosyVoice3 Text-zu-Sprache
KokoroTTS/ Kokoro-82M Text-zu-Sprache (CoreML)
Qwen3Chat/ Qwen3.5-0.8B LLM-Chat auf dem Gerät (MLX + CoreML)
PersonaPlex/ PersonaPlex Sprache-zu-Sprache
SpeechVAD/ VAD (Silero + Pyannote), Diarisierung, Sprechereinbettungen
SpeechLanguageID/ Identifikation der gesprochenen Sprache (SpeechBrain ECAPA, MLX + CoreML, 107 Labels)
SpeechEnhancement/ DeepFilterNet3 Rauschunterdrückung (CoreML)
SourceSeparation/ Open-Unmix HQ / UMX-L + HTDemucs (Demucs v4) music source separation (MLX, 4 stems)
MAGNeTMusicGen/ MAGNeT text-to-music generation (MLX, 30 s @ 32 kHz, INT4/INT8)
VoxCPM2TTS/ VoxCPM2 text-to-speech (MLX, 48 kHz, voice cloning + voice design)
IndexTTS2TTS/ IndexTTS2 voice cloning (MLX, semantic GPT + emotion/tempo/pause control + S2Mel + BigVGAN)
VibeVoiceTTS/ VibeVoice long-form / multi-speaker TTS (MLX, EN/ZH)
MADLADTranslation/ MADLAD-400 many-to-many translation (MLX, 400+ languages)
GLiNER/ GLiNER2.5-Decide classification + entity spans (MLX, INT8/FP16/FP32)
AudioCLILib/ CLI-Befehlsimplementierungen
AudioCLI/ CLI-Einstiegspunkt
scripts/ Modellkonvertierung (PyTorch → MLX/CoreML), Benchmarking
Tests/ Unit- und Integrationstests
Examples/ Demo-Apps (PersonaPlexDemo, SpeechDemo)GLiNER2.5-Decide: native MLX-Klassifikation und Entitäten-Spans (Gewichte in INT8, FP16 oder FP32); zur Inferenz wird kein Python benötigt.
⚠ Translation out of date — English guide. The new Clef section below awaits translation.
Clef-flash: development preview of local text decisions (9B, affine 4-bit MLX), with a joint schema head and a separate output-embedding prior.
MOSS-TTS-Nano
Streaming-Sprachsynthese und Stimmklonen mit CoreML, 48 kHz Stereo und 80-ms-Blöcken.
MossTTSNanoModel serialisiert Anfragen und erzeugt pro Äußerung einen neuen CoreML-Zustand. synthesize und synthesizeStream erhalten Stereo; SpeechGenerationModel liefert eine Mono-Mischung. language: nil übergeben. Streams enden mit einer leeren Abschlussmarkierung.
macOS 15+ / iOS 18+; vier kompilierte Modelle mit insgesamt 367,6 MB. Prompt, Referenz und angeforderte Frames teilen sich 1.024 Kontextzeilen. Überlauf und maxFrames vor dem natürlichen Sprachende lösen Fehler aus. Standard ist CPU; gpu erlaubt CPU+GPU. PCG64-Seeds sind NumPy-kompatibel; numerische Backend-Unterschiede können die Ausgabe dennoch ändern.
Optionale Modellverwaltung
SpeechRuntime bietet gemeinsames Laden, abbrechbare FIFO-Zulassung und serielle Ausführung. Qwen3ASRRuntime wählt MLX oder vollständiges CoreML über explizite Deskriptoren; native APIs und CLI-Optionen bleiben verfügbar.
Der Server hält eine Ausführungsfreigabe während der gesamten Anfrage einschließlich Streaming-Ausgabe und lässt bis zu 32 Anfragen warten. ASR-Fehler ergeben HTTP-Fehler oder WebSocket-Fehlerereignisse; gültige leere Transkripte bleiben erfolgreich. Die Wiedergabe behält überzählige Samples. Modelle im Cache und wartende Audiodaten belegen weiterhin Speicher.
Voxtral TTS
Voxtral 4B TTS 2603 läuft über das Modul VoxtralTTS lokal auf Apple Silicon: 20 voreingestellte Stimmen, neun Sprachen und Mono-Sprache mit 24 kHz.
VoxtralTTS → 26-layer LM → 3-layer acoustic transformer → 24 kHz PCMNur vorgegebene Stimmen; das Klonen anhand von Referenzaudio ist nicht verfügbar. SDK, CLI, WebSocket und HTTP PCM geben Audio während der Erzeugung aus. Der Eingabetext muss zu Beginn vollständig vorliegen. Die Modellgewichte stehen unter CC BY-NC 4.0.
Fish Audio Drama 3
Experimentelle native MLX-Unterstützung für Drama 3 steht über FishAudioDrama3Model bereit. Ein MoE-Modell mit 35 Milliarden Parametern, hybrider Aufmerksamkeit, zeitlichem Audiodecoder und Fish DAC erzeugt Mono-Audio mit 44,1 kHz. Der 4-Bit-Checkpoint bestand auf Apple M5 Pro die Audio- und unabhängigen ASR-Tests für Spracherzeugung aus Text, Stimmklonen mit Referenz und CLI-Ausgabe. 8-Bit und BF16 sind noch ungeprüft.
Der Standardmodus balanced gibt an Phasengrenzen ungenutzte MLX-Puffer oberhalb von 512 MiB frei. Zusätzlich gilt die gemeinsame Cache-Grenze während der Modelllebensdauer; niedrigere Aufruferbudgets bleiben erhalten. Beide Maßnahmen begrenzen nicht den gesamten Prozessspeicher. --fish-drama3-memory-mode unrestricted oder memoryOptions: .unrestricted lädt Gewichte vorab und überspringt die Phasenbereinigung, behält aber die Lebensdauergrenze bei.
Bei reiner Textsynthese werden 794.4 MiB Referenzencoder-Gewichte erst später geladen. Die erste Referenzkodierung lädt und behält sie; halten Sie codec.safetensors bis dahin verfügbar. Vorab berechnete Referenzcodes benötigen den Encoder nicht.
FishAudioTTS: FishAudioDrama3Model · backbone.model.* · semantic_head.* · tower.* · codec.safetensors
Mit Fish Audio erstellt. Die Pakete enthalten die Community License und NOTICE.
PCM-Streaming ist über generateStreaming, generateStream und --stream verfügbar. Ein Chunk enthält standardmäßig 3 Codec-Frames, etwa 139 ms Audio. Automatische Aufteilung langer Texte und schrittweise Texteingabe werden noch nicht unterstützt.
Jedes Codebuch des Audioturms verwendet 4.096 Tokenwerte. Sowohl die gepufferte als auch die gestreamte Fish-DAC-Dekodierung begrenzt Residualcodes auf die Residualcodebücher des Codecs mit 1.024 Einträgen. Zurückgegebene Codebücher behalten die ursprünglichen Werte des Audioturms.
Ungültige Rotary-Dimensionen werden vor dem Laden der Modellgewichte abgewiesen.