Sources. Model cards and counters via the HuggingFace API (multiple reads; download counters are batch-updated aggregates). HOT-Step’s GGUF shelf read from its cards; the Music3 LM GGUF header parsed directly (GGUF v3, 399 tensors, general.architecture=qwen3). Whistle measured first-party tonight on the M3 Ultra: installed from the official package, test audio synthesized with macOS TTS at 16 kHz mono, engine JSON timings read from the tool itself. pplx-decider numbers are Perplexity’s own runs on their API plus the public jev-decision-index space, re-runnable.
A cozy cartoon music lounge: a large glowing jukebox labeled GGML spins a vinyl record for a circle of small dancing robots, while three cloud-shaped subscription jukeboxes with price tags sit behind velvet ropes beside the window.
The Model Manager fetches the GGUFs silently. That’s why the counter climbs and the likes sleep.

Here is an adoption riddle. MiniMaxAI/MiniMax-Music3 — a complete song generator: lyrics in, five-minute song with verses and choruses out, vocals included — has sat on HuggingFace since August 7 at 7,040 downloads / 1,423 likes. Nice, unremarkable. Its GGUF conversion, scragnog/MiniMax-Music3-GGUF, sits at 101,513 downloads / 6 likes. Fourteen times the parent, with essentially nobody visiting the page. That inversion is the tell: nobody is browsing to this repo. They’re being sent to it, silently, by an app.

The app is HOT-Step-CPP — “Turn dials. Summon bangers!” — a local music-generation desktop app with a native C++/GGML engine, built by extending ServeurpersoCom’s acestep.cpp, the portable C++ rewrite of ACE-Step. When you pick the MiniMax-Music3 backend, its Model Manager fetches the GGUFs in the background; that’s where the hundred thousand pulls live, and why the likes counter never woke up. (Compare Bonsai 2’s 2.2M downloads with 2.5k likes: that was page-visited distribution. This is appliance distribution.)

What MiniMax built, briefly: an 8B Global LLM initialized from Qwen3-8B that predicts the first of eight RVQ codebooks frame by frame — that’s the long-range song structure — plus a 0.6B Local LLM for the seven acoustic codebooks inside each frame, a 2.4B flow-matching DiT and a 123M Flow-VAE decoder, fused at the hidden states instead of decoded from tokens. About 11B total. You feed it lyrics with [Verse]/[Chorus] tags and a structured caption (genre, BPM, key, vocal details, arrangement), and it holds themes, vocal identity and arrangement across minutes. The official paths are diffusers (~22–24 GB of VRAM in bf16, CUDA-only) or SGLang-Omni. The license is the usual MiniMax community asterisk: free to run, but a commercial product has to badge “MiniMax-Music3” and ask permission.

Five modules, zero llama.cpp

The GGUF tag on the shelf implies a thing it can’t deliver, and the card says so plainly: these files are not usable with llama.cpp alone. The LM file is structurally a stock Qwen3 GGUF — I read the header: GGUF v3, 399 tensors, general.architecture=qwen3 — and llama.cpp will happily load it as a text model that can do precisely nothing musical, because generation requires the full five-module pipeline (LM → RVQ depth decoder → condition encoder → flow-matching DiT → vocoder) implemented in HOT-Step’s engine. It’s the Bonsai lesson inverted: there the file loaded and lied; here the file loads and just stands there.

What HOT-Step ships around that engine is the most fidelity-literate quant shelf I’ve read this month. One file per module, each with its own ladder up to MXFP4/NVFP4, and printed combos: everything f16 (~24 GB), the recommended LM/DiT/depth q8_0 (~13 GB), the balanced headline LM q8_0 + DiT Q4_K_M (~12 GB), NVFP4 for RTX 50 cards. And the quality map is explicit: “Audio-code LMs degrade audibly below Q5 — the sub-Q5 LM files exist for experiments, not listening”, with Q8_0 the validated floor for the depth decoder. Their parity claim, self-measured: per-module correlation ≥ 0.9999 against the fp32 diffusers reference, full-pipeline replay 0.9988. Hold it as their claim — but this is what every quant card should look like: a size, a floor, and a reason.

The second half is the reason this stack is sticky: a training studio. The app trains MM3 LoRAs on your own tracks, and since MiniMax never released the official audio tokenizer, the codes stage runs on a community reimplementation — PurpleOrc’s 169M RVQ encoder trained from scratch on a 53k-track corpus — with the honest caveat that codes are encoder-specific, so an adapter trained on these codes keeps using this encoder. A bf16 LM file exists purely to make training steps 1.4× faster on 40 GB+ cards. And in the v1.3.4–1.3.6 releases (24–29 Sep) the app absorbed YuE2 — batched generation, joint training, AMD and Vulkan paths. One desktop app now hosts the three open music models this feed has covered piecemeal, plus training on top. The method-repo outliving the models, again — except this one never got the coverage.

Verdict: a real deployment option for the local music lane — the first open vocal-song generator with a complete native engine and a training loop attached. On Macs the measured artifact today is ddalcu’s MLX 8-bit pack for mlx-serve (754 pulls, from the mlx-serve author); the GGML engine should make Metal and CUDA-in-principle both true, and a 128 GB Spark could hold the 12–24 GB combos on paper — but nobody has measured that rig, so treat it as on-paper.

Measured: 16.9 MB of ears

Cactus — the needle3 people, whose 121M tool-caller got the “real deployment option for the sub-1B tier” here three weeks ago — shipped whistle on 30 Sep: speech-to-text as a single 16.9 MB file (measured: 16,919,407 bytes), Apache-2.0, seven languages, word-level timestamps from the decoder’s own attention, a speech-embedding mode for retrieval without decoding, and keyword biasing — running on the same .cact container and C++/WASM engine as Needle. One binary, both models. 1,887 downloads so far.

Their benchmark chart (their runs for whistle over 86,174 utterances; published figures for the competitors): WER 4.31 on LibriSpeech test-clean against Whisper-base’s 10.49 and Moonshine-tiny-v2’s — at 16.9 MB against Whisper’s 145.3 and Moonshine’s 41.9, first token in 11.1 ms against 73.2 and 22.8, decoding 1,319 tokens/s against 266 and 262 on an M4 Pro. Tonight I ran it here on the M3 Ultra (defaults, while the machine serves other things): a 13.9-second clip transcribed in 1.92 seconds, first token at 17.3 ms, decode 1,078 tokens/s — the same class as their claims. On clean TTS audio it took 43 of 43 words, each with a start, an end and a probability. Four seconds of pure silence returns {"text":"","language":""} — an empty transcript, exactly as the card promises, not an invented sentence.

The demo that matters is one command with both models loaded:

needle --model whistle.cact --model needle3.cact --tools tools.json --audio cmd.wav — I fed it 3.9 seconds of speech (“turn off the kitchen lights and then deploy the build to staging”) and got back one JSON object with both tool calls correct ({room: kitchen, state: off}, {target: staging}), a reasoning line, ungrounded-argument and negation checks, confidence 0.54 — in 123 ms wall, 139.6 MB peak RAM, no GPU. That is a voice agent’s front door in a process small enough for a browser tab, because the engine ships as WebAssembly too.

Honest rows: keyword biasing works through the Python API and works eerily well — both fictional product names in my test clip (“Hanniflow”, “Zorblox”) were mangled without it (“Hanaflow”, “pings or blocks”) and exactly restored with it — but the C binary’s --keywords flag ignored mine entirely; I can’t tell if my syntax was wrong or the flag is unimplemented there. The pip package needs Python 3.10+ (this Mac’s stock 3.9 died quietly on type syntax), the combined demo needs the platform binary rather than the wheel alone, the embed API wants float samples or a path (raw int16 bytes get rejected with an error that doesn’t say so), and one model per process — not thread-safe.

Verdict: not for the Ultra — for everywhere else. A real deployment option for the edge tier: dictation, voice commands, robot ears, a listening browser tab. If you build agent stacks, the part to steal is the one-call speech-to-tools JSON: audio in, validated calls out, no transcription round-trip.

Perplexity takes the Decision Index lead

The decision lane pulled in its biggest name yet. perplexity-ai/pplx-decider-v1-27b (1 Oct, 1,507 downloads, Apache-2.0, Qwen3.8-27B base — first Perplexity coverage in this log) landed just under Jev on the public jev-decision-index (56.4 vs 57.9); the v1.1 update five days later lifts that to 61.56 — past Jev and past everything else measured on that index in this log, Clef included. Their 11-bench table says 85.71% overall vs Jev’s 84.51 and the bare base’s 74.76 — vendor-run through their own API, with the index rows public and re-runnable.

Two details make it more than a scoreboard row. The v1.1 gain comes mostly from lifting the causal mask — the full-attention layers run noncausal — and the card is blunt about the consequence: default causal inference does not reproduce the evaluated setup. Serve it as an ordinary causal fine-tune and you get a different, worse model than the table. The head is also a separate BF16 readout (255×5120) with a calibration temperature, not an lm_head, so chat-style serving needs an export that maps readout rows onto token ids and preserves the attention mode. Engine-completeness, again: llama.cpp grew native support in #30044 the same week. About 49 GiB of bf16 means a 128 GB Spark holds it on paper; no measured recipe yet.

The prompt expander became a product

Quietly, on 20 Sep, Qwen split a piece off its image pipeline and shipped it as models of their own: Qwen-Image-2.1-PE-I2I and PE-T2I — a fine-tuned Qwen3.5-VL 9B whose whole job is taking your vague instruction (“make the sky sunset”) plus the input image and rewriting it into the precise prompt the DiT actually wants. The 21 Sep post covered the DiT wave and missed these; they landed the day before that scan.

The ecosystem treated them like a main model immediately: GGUF ladders at 60k and 35k pulls, Heretic-abliterated GGUFs at 57k and 54k — uncensoring the prompt rewriter, the same move the abliteration post caught one pipeline-stage earlier — plus an MTP build and 0.8B/2B Pocket distills. Roughly a quarter-million downloads across the family in two weeks, about twelve times the two official repos. The system lesson stands: a local image stack is now at least three models — DiT, VLM encoder, prompt expander — and every stage grows its own quant economy.

The harness week

Ollama v0.40.0 final: MLX-by-default on Apple Silicon now includes the decision models (nimble, tev1, clef, clef-flash) and its first MLX embedding model, embeddinggemma-2 — which, on its own repo, has 364 downloads and 661 likes. People are bookmarking an embedder at nearly twice the rate they run it; unsloth’s GGUF appeared yesterday, and llama.cpp #30054 (6 Oct) wired text + vision + audio support. Plumbing is arriving ahead of measured demand, which is how embedders usually go.

llama.cpp: #29535 adds K2-Horizon dense and MoVA support — the “wait for serving” condition from 4 Sep half-firing; #26610 adds -sm tensor to RPC, i.e. tensor-parallel splitting across machines over the network — the multi-box lever for model-parallel fleets that this log has been missing; #30042 removes the GLM-5.3-Flash sparse-attention gather path; SYCL gets MKL flash attention for GLM MLA prefill.

oh-my-pi v18.7.0 + v18.8.0 (6–7 Oct): Mistral Large 4 enters the catalog with a 1M-token context and reasoning; interrupted turns now persist their message boundaries so a crashed run can be recovered; and the thinking-loop detector stops discarding valid Gemini, DeepSeek and Grok output just because the answer contains repetitive SVG, JSON or code. nativ v0.4.0: per-chat Git worktrees with recovery, agent terminals that survive backgrounding, NVFP4 drafter pairing.

The tape, one line each: ISTA’s GSQ-RCO Coder shelf passed 478k; abenzerps’s uncensored Qwen-Image GGUF 1.72M; the NVFP4 build of yesterday’s GEV decision family cleared the gate at 9.3k. The decision lane and the image lane compound in public. The music lane, it turns out, has been compounding the whole time — just somewhere the feeds don’t look. Now it’s on mine.

Reader Q&A

Answered when the model and I get to it. A few of these get answered; most don't.

Answers are drafted by an AI and reviewed by me.