Skip to content

Releases: yu314-coder/WhisperKit

Speech models v1

Choose a tag to compare

@yu314-coder yu314-coder released this 15 Oct 03:11

Weights for the Transcribe tab's NVIDIA engines, downloaded by the app:

  • Canary 1B v2 (NVIDIA, CC BY 4.0), 8-bit MLX conversion by Mediform — canary_*
  • Nemotron 3.5 ASR Streaming 0.6B (NVIDIA, OpenMDW 1.1), 8-bit MLX conversion by mlx-community — nemotron_*

Redistributed unchanged; see canary_NOTICE.txt and nemotron_LICENSE.txt.

Image models — DreamShaper, SANA-Sprint, FLUX.2 klein (v1)

Choose a tag to compare

@yu314-coder yu314-coder released this 11 Oct 00:15

Image models for WhisperKit (v1)

Format conversions for the app's Image tab, nothing retrained. Built by the
scripts in ports/imagegen/; verification in ports/README.md.

Files Contents Licence
sd_text_encoder.mlmodelc.aar, sd_unet.mlmodelc.aar, sd_vae_decoder.mlmodelc.aar, clip_vocab.json, clip_merges.txt DreamShaper 8 with ByteDance's Hyper-SD 4-step LoRA fused, Core ML for the Neural Engine (text encoder and UNet 8-bit palettized, VAE float16) and CLIP's tokenizer (convert_sd.py) CreativeML OpenRAIL-M (DreamShaper 8, Stable Diffusion 1.5); CreativeML OpenRAIL++-M (Hyper-SD)
sana_gemma_q8.part{1,2}.safetensors, gemma_bpe.bin Gemma 2 2B, SANA's prompt encoder, 8-bit for MLX, and its tokenizer as integer tables (export_sana_mlx.py) Gemma Terms of Use and Prohibited Use Policy
sana_transformer.mlmodelc.aar, sana_extras.safetensors, sana_decoder_head.safetensors, sana_decoder_tail.mlmodelc.aar SANA-Sprint 0.6B 1024 px: transformer (Core ML, 8-bit palettized), caption projection and fixed-schedule modulation, DC-AE decoder split between MLX and Core ML (convert_sana.py, export_sana_mlx.py) Apache 2.0
flux_text_q8.part{1,2}.safetensors, flux_vocab.json, flux_merges.txt Qwen3-4B, FLUX's prompt encoder — its first 27 of 36 layers — 8-bit for MLX, and its tokenizer (export_flux_mlx.py) Apache 2.0
flux_transformer_q8.part{1,2,3}.safetensors, flux_vae.safetensors FLUX.2 [klein] 4B transformer, 8-bit (bfloat16 scales), and the VAE decoder, float16 (export_flux_mlx.py) Apache 2.0
safety_checker.mlmodelc.aar Falconsai's nsfw_image_detection ViT, Core ML 8-bit palettized: the check every picture passes before it is shown (convert_safety.py) Apache 2.0

Against each upstream diffusers pipeline with the same noise, the app's
Swift drew the same pictures: SANA-Sprint 32.7 / 28.1 dB and FLUX.2 klein
30.8 / 20.5 dB PSNR on the two reference prompts.

ACE-Step 1.5 — full-precision planner and encoders (v4)

Choose a tag to compare

@yu314-coder yu314-coder released this 27 Sep 16:01

ACE-Step 1.5 — full-precision planner and encoders for WhisperKit (v4)

Format conversions of ACE-Step 1.5 (MIT), nothing retrained. Built by
ports/acestep/convert_full.py. They replace the int8 planner, condition
encoder and hints of acestep-v2; its text encoder, audio decoder, silence
latent and tokenizer are unchanged.

File Contents
ace_lm_bf16.part{1,2}.safetensors The 1.7B planner (acestep-5Hz-lm-1.7B) exactly as published, bfloat16
ace_cond_f16.safetensors Condition encoder: lyric and timbre stacks, text projection, float16
ace_hints_f16.safetensors FSQ codebook (float32) and detokenizer (float16)
ace_xl_cond_f16.safetensors The encoder tensors ACE-Step 1.5 XL retrained, float16

Against the int8 set, with the app's planner fix (build 1.2 (24)), seven
prompts at 81 s matched their own prompt at CLAP 0.594 against 0.551, by a
margin of 0.140 against 0.062.

Licence: MIT, as upstream.

Stable Audio 3 — MLX weights v2 (aligned for mapping)

Choose a tag to compare

@yu314-coder yu314-coder released this 27 Sep 06:22

Stable Audio 3 (Small-Music and Medium) — MLX weights for WhisperKit, v2

These files are format conversions of weights published by Stability AI at
https://huggingface.co/stabilityai/stable-audio-3-optimized. Nothing was
retrained or altered: the MLX .npz archives were rewritten as safetensors,
which is the only container MLX Swift can read, and the tokenizer and three
conditioner tensors were extracted from those same archives.

v2 contains the same tensors as sa3-small-weights-v1, rewritten so every
tensor starts on a 64-byte boundary (ports/stable-audio-3/align_weights.py).
The app maps these files instead of reading them into memory, which takes
Medium from 3.5 GB to about 0.6 GB while generating.

File Contents
t5gemma_f16.safetensors T5Gemma text encoder
dit_sm-music_f16.safetensors Diffusion transformer, small-music
dit_medium_f16.part1/2.safetensors Diffusion transformer, medium (sharded: 2.9 GB exceeds the 2 GB asset cap)
same_s_decoder_f32.safetensors SAME-S audio decoder
sa3_conditioner_*.safetensors Conditioner tensors from each DiT archive
t5gemma_tokenizer.model SentencePiece tokenizer from the T5Gemma archive

Licensing

Both apply unchanged to these conversions. The Swift pipeline that loads them is
adapted from https://github.com/kellyvv/StableAudio3-IOS (MIT).

Stable Audio 3 Small-Music — MLX weights

Choose a tag to compare

@yu314-coder yu314-coder released this 18 Sep 04:35

Stable Audio 3 Small-Music — MLX weights for WhisperKit

These files are format conversions of weights published by Stability AI at
https://huggingface.co/stabilityai/stable-audio-3-optimized. Nothing was
retrained or altered: the MLX .npz archives were rewritten as safetensors,
which is the only container MLX Swift can read, and the tokenizer and three
conditioner tensors were extracted from those same archives.

File Contents
t5gemma_f16.safetensors T5Gemma text encoder
dit_sm-music_f16.safetensors Diffusion transformer, small-music
same_s_decoder_f32.safetensors SAME-S audio decoder
sa3_conditioner_sm-music.safetensors Conditioner tensors from the DiT archive
t5gemma_tokenizer.model SentencePiece tokenizer from the T5Gemma archive

Licensing

Both apply unchanged to these conversions. The Swift pipeline that loads them is
adapted from https://github.com/kellyvv/StableAudio3-IOS (MIT).

ACE-Step 1.5 — Neural Engine and XL weights (v3)

Choose a tag to compare

@yu314-coder yu314-coder released this 27 Sep 11:18

ACE-Step 1.5 — Neural Engine and XL weights for WhisperKit (v3)

Format conversions of ACE-Step 1.5 (MIT): https://huggingface.co/ACE-Step/Ace-Step1.5,
https://huggingface.co/ACE-Step/acestep-v15-xl-turbo and
https://huggingface.co/ACE-Step/acestep-5Hz-lm-4B. Nothing retrained.
These add to release acestep-v2, whose text encoder, condition encoder,
hints, audio decoder, silence latent and tokenizer every version still uses.

ACE-Step 1.5 on the Neural Engine

Built by ports/acestep/convert_neural_engine.py.

File Contents
ace_dit_ane_c{0..3}.mlmodelc__* The 2B turbo transformer's 24 layers as four compiled Core ML programs of six, float16. Asset names stand for paths: __ is /.
ace_dit_outer_f16.safetensors What surrounds the layers — timestep embeddings, patch projections, conditioning projection, output norm — float16, run in MLX

Core ML runs fixed shapes on the Neural Engine, so each program carries one
function per length (384 to 5,760 positions, up to 7:40 rendered) and per
conditioning size (512 or 2,368 tokens), sharing one copy of the weights.
Padding is masked out of every attention. The sliding-window layers attend
in blocks of 128 queries against 384 keys instead of the whole sequence.
Against PyTorch float32 on real weights, one six-layer program agrees to
cosine 0.99999.

ACE-Step 1.5 XL

Built by ports/acestep/convert_large.py. Int8 projections (group size 64),
float16 otherwise; parts because a release asset is capped at 2 GB.

File Contents
ace_xl_decoder_q8.part{1..3}.safetensors The 4B XL turbo transformer: 32 layers, width 2,560
ace_xl_cond_q8.safetensors The condition-encoder tensors XL retrained — its two input embeddings and norms, the timbre token and the text projection. The other 192 encoder tensors are bit-identical to the 2B's and are read from ace_cond_q8
ace_lm4b_q8.part{1..3}.safetensors The 4B planner (acestep-5Hz-lm-4B)

Licence: MIT, as upstream.

ACE-Step 1.5 — MLX weights v2 (per stage, mapped)

Choose a tag to compare

@yu314-coder yu314-coder released this 27 Sep 04:48

ACE-Step 1.5 — MLX weights for WhisperKit (v2)

Format conversions of https://huggingface.co/ACE-Step/Ace-Step1.5 (MIT).
Nothing retrained. Built by ports/acestep/convert_weights.py in this repo.

One file per pipeline stage, so the app maps only the stage that is running:

File Contents
ace_qwen_f16.safetensors Qwen3-Embedding-0.6B text encoder, float16
ace_cond_q8.safetensors Condition encoder: lyric and timbre stacks, text projection
ace_decoder_q8.safetensors Diffusion transformer, 24 layers
ace_vae_f16.safetensors Oobleck VAE decoder, 48 kHz stereo (upsampling weights stored as in × taps × out)
ace_silence_full.safetensors Silence latent, 10 minutes at 25 Hz, frames-first
ace_vocab.json, ace_merges.txt Qwen3 byte-level BPE (shared by the text encoder and the planner)
ace_lm_q8.safetensors The 1.7B planner (acestep-5Hz-lm-1.7B), int8
ace_hints_q8.safetensors FSQ codebook and detokenizer: planner tokens to the 25 Hz guide

In the _q8 files, 2-D projections are int8 (group size 64) and everything
else is float16. Every tensor starts on a 64-byte boundary.

Why this precision. Against the float32 pipeline over eight steps, final
latent cosine: 0.983 as shipped. The text encoder stays float16 because at
int8 it was the largest single source of drift (0.960). The transformers stay
at int8 because below it the output degrades audibly (velocity cosine: 6-bit
0.9826, 4-bit 0.7465).

The planner writes each song out as five music tokens per second before
the diffusion transformer renders it. Without it the transformer often ended
songs early and left the rest silent; with it, requested lengths are filled.

What is omitted. The FSQ audio encoder side (it turns supplied audio
into tokens; here the planner supplies them) and the VAE encoder.

Licence: MIT, as upstream.

ACE-Step 1.5 — int8 MLX weights

Choose a tag to compare

@yu314-coder yu314-coder released this 18 Sep 19:42

ACE-Step 1.5 — int8 MLX weights for WhisperKit

Format conversions of https://huggingface.co/ACE-Step/Ace-Step1.5 (MIT).
Nothing retrained: the projection matrices are quantized to int8 with group
size 64, everything else is fp16, and the layout is rearranged for MLX.

File Contents
ace_dit_q8.part1/2.safetensors Diffusion transformer, 24 layers (sharded: 2.69 GB exceeds the 2 GB asset cap)
ace_qwen_q8.safetensors Qwen3-Embedding-0.6B text encoder
ace_vae_f16.safetensors Oobleck VAE decoder, 48 kHz stereo
ace_silence.safetensors Silence latent bed, 60 s at 25 Hz

Why int8 and not smaller. Measured against the fp32 reference on the same
input, cosine similarity of the predicted velocity: int8 0.9989, 6-bit 0.9826,
4-bit/group-32 0.8583, 4-bit/group-64 0.7465. Below 8 bits the output degrades
audibly, so int8 is the floor.

What is omitted. The 1.7B planner (3.71 GB) is not included: its hints are
optional and the generation path passes none. The FSQ tokenizer and
detokenizer are also absent — they condition on supplied audio rather than
produce it, and this is the text-only path.

Licence: MIT, as upstream.