Repository navigation
Add Higgs Audio v3 TTS engine on Apple Silicon (MLX) - #1201
Open
delhalflorian-web wants to merge 1 commit into
Open
delhalflorian-web wants to merge 1 commit into
delhalflorian-web wants to merge 1 commit into
Conversation
Adds Boson AI's Higgs Audio v3 4B (bosonai/higgs-tts-3-4b) as the `higgs` engine, MLX only, through mlx-audio's higgs_audio_v3 port: zero-shot voice cloning across the 23 languages Voicebox lists, inline control tags, 24 kHz. - New backend backend/backends/higgs_mlx_backend.py, registered in the model registry only when the MLX backend is active; the factory refuses it elsewhere with a clear error. - `higgs` added to the API engine regex, the backend CLONING_ENGINES set (without it every profile generation was rejected) and the frontend engine lists. - mlx-audio 0.4.1 -> 0.5.9 (still --no-deps); mlx >= 0.31.1. 0.5.9 loses its higgs_multimodal_qwen3 remap for local snapshot paths, so the backend passes model_type="higgs_audio_v3". - MLX Whisper now decodes greedily: 0.5.9's temperature fallback turned short clips into multilingual gibberish after the first sentence. - PyInstaller hidden imports, a backend test, and an e2e matrix row. The community 4-bit MLX artifact (Reza2kn/Higgs-Audio-v3-TTS-4bit-MLX) only holds the quantized transformer layers, without the audio codec, so it cannot be loaded; the engine uses the 9.3 GB bf16 checkpoint. Weights are under Boson's research and non-commercial licence. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds Boson AI's Higgs Audio v3 4B (
bosonai/higgs-tts-3-4b) as a newhiggsengine, MLX only (Apple Silicon). It runs on mlx-audio'shiggs_audio_v3port: zero-shot voice cloning across the 23 languages Voicebox already lists, inline control tags (<|emotion:amusement|>,<|sfx:laughter|>…), 24 kHz output. On an M4 Max it renders at roughly realtime (RTF ≈ 0.9).Followed
.agents/skills/add-tts-engine/docs/.../tts-engines.mdx, Phases 0–5.Changes
backend/backends/higgs_mlx_backend.py, modelled onchatterbox_mlx_backend(deferred file-path voice prompt, shared MLX worker thread,model_load_progress). It is registered inbackends/__init__.py, and theModelConfigis only emitted whenget_backend_type() == "mlx". On other platforms the factory raises a clear error.higgsadded to the engine regex inmodels.pyand toCLONING_ENGINESinservices/profiles.py. Without the latter, every generation from a cloned profile is rejected.ENGINE_LANGUAGES,EngineModelSelector(options, description, cloning set),useGenerationForm(schema + model/display name),ModelManagement,ProfileForm,format.ts. Labelled "non-commercial".0.4.1 → 0.5.9(still--no-deps, injustfile,release.ymland therequirements-mlx.txtnote);mlx>=0.31.1. No new packages. Dockerfile is untouched (no MLX on Linux).mlx_audio.tts.models.higgs_audio_v3, which is loaded by name. The rest is already covered by--collect-submodules mlx_audio.backend/tests/test_higgs_mlx_backend.py(registry wiring + generate + clone + unload; skipped off MLX or without cached weights) and ahiggsrow in the e2e matrix.Things reviewers should know
load()gets a local snapshot path, thehiggs_multimodal_qwen3 → higgs_audio_v3remap is skipped, because the stage-2 name-part matching overrides it. The backend passesmodel_type="higgs_audio_v3"explicitly.MLXSTTBackendnow passestemperature=0.0, which matches the 0.4.1 output (verified with and withoutlanguage).Reza2kn/Higgs-Audio-v3-TTS-4bit-MLX): its safetensors header contains only the 756 quantizedbody.layers.*tensors (qweight/scales/biases). There is no audio codec, embeddings or final norm, and the index points at amodel.safetensorsthat isn't in the repo. It can't be loaded, so the engine downloads the 9.3 GB bf16 checkpoint.Testing (macOS 26, M4 Max, Python 3.12, transformers 4.57.3)
pytest backend/tests/test_higgs_mlx_backend.py: 2 passed.just build-server) throughtest_all_models_e2e.py --only higgs,qwen: higgs passed, qwen 1.7B passed.tsc --noEmitclean; Biome / Ruff introduce no new findings in touched lines (pre-existing ones left alone to keep the diff small)..appbundle built and launched locally.Not tested: download from a clean HF cache in the frozen build (the 9.3 GB model was already cached), Chatterbox MLX real generation, Windows/Linux (engine is MLX-only).
Pre-existing, unrelated: in the e2e run,
qwen 0.6B(not cached) fails withOfflineModeIsEnabledright after the cached 1.7B run. The same failure reproduces on a 0.6.0 build with mlx-audio 0.4.1, so it predates this PR (offline guard inhf_offline_patch). I'm investigating it separately.🤖 Generated with Claude Code