MiniMax Music3 Text Encode
The text encoder that writes your song before the diffusion model hears about it
- clip
- CONDITIONING
- seconds
This is the node that turns your prompt into a song in MiniMax Music 3, and it's not like the CLIP encoders you already know. A normal text encoder is passive: it shoves your prompt through a transformer once and hands the hidden states to the sampler. This one runs an autoregressive language model - an 8B global LLM plus a 0.6B local one - that generates the acoustic conditioning sequence for your whole track before the diffusion model ever starts. That's why it takes a seed, a duration, and sampling settings. It's not encoding your text; it's composing to it.
So the practical thing to know up front: this node is the slow, heavy part of the pipeline. On a mid-range GPU it can take longer than the diffusion pass itself, and it's why Comfy-Org repackages the text encoder as an INT8 pruned file. Budget for it, and don't panic when the run "stalls" on this step - that's the song being planned.
How it works
Your caption and lyrics get wrapped in special tokens - <|caption_start|> … <|lyrics_start|> … <|audio_start|> - and fed to the Music3 autoregressive model. For sampling it builds an unconditioned copy of the prompt (the tokens between the audio tags get replaced with a dedicated <|audio_cfg|> token), which is where cfg_scale comes in: it's classifier-free guidance for the autoregressive pass, not for the diffusion sampler. top_k and seed are AR sampling controls too. The hidden states it emits become the CONDITIONING output, and the node force-sets conditioning_scale to all ones for you.
Inputs that matter
- caption - the music description. MiniMax's format is three sections: Global Metadata (genre, BPM, key, mood, production), Vocal Details, and Arrangement. Be specific; the model follows the musical development you describe.
- lyrics - the words to sing, with structural tags like
[Intro],[Verse],[Chorus],[Bridge],[Instrumental],[Outro]. Tags are the executable structure; the lyric text just conveys mood. The node strips markdown formatting from both fields for you. - max_duration - target length in seconds (default 120, hard cap 360). The model may legitimately end the song early.
- seed - this one actually matters, because it controls the AR generation. Same seed, same song; change it for a different take.
cfg_scale (default 1.5) and top_k (default 50) are tucked behind the "advanced" toggle. The defaults are fine - most people never touch them.
Outputs
- CONDITIONING - wires into the MiniMax Music3 diffusion model sampler.
- seconds - the actual generated length (the model can finish before
max_duration). Feed this into EmptyMiniMaxMusic3LatentAudio so your empty latent matches the conditioning, then decode with the DAV VAE and save as MP3.
Getting it
It ships with ComfyUI core, but it only landed in August 2026 - you need a recent nightly or the latest stable, not a year-old install. Model files come from the Comfy-Org/MiniMax-Music-3 Hugging Face repo: the text encoder goes in models/text_encoders/, the DiT in models/diffusion_models/, and the DAV (audio VAE) in models/vae/. The search for "MiniMax Music 3" in the Template Library gives you the whole working graph.
Where people get burned
- Prompt too long. The AR model caps prompts at 5000 tokens; a maximalist caption plus full lyrics will hit it. Keep the caption structured and the lyrics tight.
- VRAM. This is an 8B+0.6B LLM doing generation. Use the INT8 text encoder, the INT8 DiT, and enable tiled VAE decode for long songs. Even then, 4+ minute tracks on 8GB cards will be rough.
- Expecting audio in. The Music3 DAV cannot encode - it raises
MiniMax Music3 DAV cannot encode audioif you try to feed it audio. This is text-to-music, not a remixer. - The first run looks hung. Loading that text encoder plus the AR prefill takes a while on one pass; it's not frozen.
The name undersells it. Most "Text Encode" nodes are plumbing. This one is a composer wearing a text encoder's coat.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| caption | STRING | — | |
| lyrics | STRING | — | |
| seed | INT | 00–18446744073709550000 | — |
| max_duration | FLOAT | 120.000.04–360 | Maximum duration in seconds; the model can end the song earlier. |
| cfg_scale | FLOAT | 1.50–100 | — |
| top_k | INT | 501–16384 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |
| seconds | FLOAT | — |