MiniMax Music 3 is a text-to-music model with lyrics conditioning. The audio.cpp port is packaged as a component GGUF directory containing the language model, RVQ depth decoder, condition encoder, flow transformer, vocoder, tokenizer files, and model configs.
Install the default GGUF package with the model manager:
python3 tools/model_manager_v2.py install minimax_music3_q4_0The default package uses the current balanced component mix:
MiniMax-Music3-GGUF/
config.json
config/
language_model.json
rvq_depth_decoder.json
condition_encoder.json
transformer.json
vocoder.json
tokenizer/
tokenizer.json
tokenizer_config.json
language_model_q4_0.gguf
rvq_depth_decoder_q8_0.gguf
condition_encoder.gguf
transformer_q4_0.gguf
vocoder.gguf
Pass the package directory as --model. Lyrics are required through the
lyrics request option.
CAPTION='A bright pop rock song with clean drums, crisp rhythm guitars, a clear female vocal, an energetic chorus, and polished studio production.'
LYRICS='[verse] City lights are shining low. I keep moving with the glow. [chorus] Turn it up and let it fly. Sing the melody tonight.'
audiocpp_cli \
--task gen \
--family minimax_music3 \
--model models/MiniMax-Music3-GGUF \
--backend cuda \
--text "$CAPTION" \
--request-option "lyrics=$LYRICS" \
--request-option duration_sec=30 \
--request-option num_inference_steps=30 \
--out music3.wav \
--metricsduration_sec is the autoregressive audio-frame budget, aligned with the
official Python model's max_new_tokens style control. It is not a hard output
duration cap: the final song can be shorter depending on prompt, lyrics, seed,
and sampling parameters. Larger budgets also increase memory use because the AR
and flow stages have to reserve enough room for longer generated sequences.
The model directory may contain multiple component GGUF precisions. Select a component by filename with session options:
audiocpp_cli \
--task gen \
--family minimax_music3 \
--model models/MiniMax-Music3-GGUF \
--backend cuda \
--session-option minimax_music3.language_model_gguf=language_model_q8_0.gguf \
--session-option minimax_music3.rvq_depth_decoder_gguf=rvq_depth_decoder_q8_0.gguf \
--session-option minimax_music3.flow_transformer_gguf=transformer_q8_0.gguf \
--text "$CAPTION" \
--request-option "lyrics=$LYRICS" \
--request-option duration_sec=30 \
--out music3-q8.wavDo not combine component GGUF selection with weight_type for the same
component. The GGUF file already determines the stored tensor precision.
Common request options:
| Option | Default | Notes |
|---|---|---|
lyrics |
required | Lyrics to sing. Tags such as [verse], [chorus], [bridge], and [outro] can be used in the text. |
duration_sec |
20 |
AR frame budget expressed in seconds. It affects maximum length, performance, and memory use, but is not a hard final audio duration. |
num_inference_steps |
30 |
Flow matching Euler steps per chunk. Lower values are faster. |
guidance_scale |
1.7 |
Flow transformer CFG scale; must be > 0. Set 1 to use the conditional prediction without guidance amplification. |
ar_guidance_scale |
1.5 |
Semantic/depth AR CFG scale; must be > 0. Set 1 to use conditional logits without guidance amplification. |
top_k |
50 |
Top-k sampling for semantic and residual code sampling. |
seed |
0 |
Generation seed. Try several seeds for diffusion-style music generation. |
Both scales use uncond + scale * (cond - uncond). Setting both to 1
removes CFG's effect, but the runtime still computes the unconditional branches;
this does not select a faster conditional-only path. Zero is rejected.
Common session options:
| Option | Default | Notes |
|---|---|---|
minimax_music3.language_model_gguf |
language_model_q4_0.gguf |
Language model component file relative to the model root. |
minimax_music3.rvq_depth_decoder_gguf |
rvq_depth_decoder_q8_0.gguf |
RVQ depth decoder component file relative to the model root. |
minimax_music3.flow_transformer_gguf |
transformer_q4_0.gguf |
Flow transformer component file relative to the model root. |
minimax_music3.graph_arena_mb |
32 |
Host graph-metadata arena size in MiB, not device workspace; legacy minimax_music3.graph_context_mb remains accepted. |
minimax_music3.weight_context_mb |
32 |
Weight context size in MiB. |
minimax_music3.mem_saver |
true |
Load large generation stages only while needed to reduce peak VRAM. |
minimax_music3.perf_mode |
off |
cuda_perf selects 256-row attention-prefix buckets. Explicit controls override the preset. |
minimax_music3.kv_cache_alignment |
1; 256 with cuda_perf |
Attention-prefix bucket size. 1 keeps full-capacity attention. |
Attention buckets retain all valid history, but numerical differences can change
sampled songs. The preset does not change weight precision, flow steps,
mem_saver, pipeline overlap, CFG reuse or chunk hops.
--session-option minimax_music3.perf_mode=cuda_perfThe loader always prepares only the 16,384 semantic-token head rows plus EOS, preserving the selected weight dtype. Already-compact GGUFs are unchanged; no checkpoint conversion is required.
Explicit minimax_music3.kv_cache_alignment=1 restores normal attention even
when the preset is selected.
Everything below is opt-in; the defaults reproduce the reference trajectory
exactly. The two cheapest wins that need no extra GGUFs are
flow_uncond_interval=3 and flow_chunk_hop_frames=150.
Request options:
| Option | Default | Notes |
|---|---|---|
flow_uncond_interval |
1 |
Evaluate the flow unconditional CFG branch only every N-th step and reuse the cached guidance delta in between. 2-3 measures flow -25..-40% at ~0.3 dB mel-L1. Values <= 1 disable guidance reuse. |
flow_uncond_warmup |
2 |
Initial steps in each chunk that evaluate both CFG branches before reuse. Nonpositive values add no warmup. |
flow_chunk_hop_frames |
0 |
Flow chunk hop in AR frames (~25/sec). 0 keeps the model config (100, 50% chunk overlap). Positive values are capped at the configured chunk size; 150 measures flow ~-35% with consistently rederived crops and carry. |
ensemble_takes |
1 |
Integer in [1, 16]. Generate K takes that share one batched AR pass. Named outputs (take_01..) are emitted only when K > 1; K = 1 returns the primary audio. Amortizes the AR stage across takes. |
ensemble_prefix_frames |
0 |
With ensembles: share a master AR prefix of this many frames across takes (intro-lock), then let takes diverge. |
Session options:
| Option | Default | Notes |
|---|---|---|
minimax_music3.pipeline_overlap |
false |
Overlap AR decoding with per-chunk denoise/vocode on a second, lower-priority CUDA stream. Combining with mem_saver=true is an error. Long requests and nondefault chunk hops use sequential execution. |
Optional component GGUFs: rvq_depth_decoder_q4_k.gguf (the depth stage is
weight-bandwidth-bound; measures depth about -24% against q8_0 with no
audible difference in our listening) can be selected with
minimax_music3.rvq_depth_decoder_gguf as shown above.
Environment variables (supported):
| Variable | Effect |
|---|---|
MM3_LEGACY_ROPE=1 |
Use the original split-table rope path instead of the fused native NEOX rope. |
MM3_LEGACY_GLU=1 |
Use the original slice+silu+mul GLU instead of the fused SwiGLU kernel. |
MM3_DEPTH_GPU_SAMPLE=1 |
Device philox top-k sampler for the depth stage (byte-exact, perf-neutral option). |
MM3_DEPTH_GPU_FRAME=1 |
Full GPU depth frame with device residual ids and hidden accumulation (byte-exact, perf-neutral option). |
The default package is intended to make the model practical on common GPUs, while higher-precision component combinations are useful for quality and performance experiments. Longer songs and higher precision settings may need substantially more VRAM.