Madow Unpack ⚪
Stop dragging twenty wires across your ACE-Step graph
- madow
- apg_eta
- apg_norm_threshold
- apg_momentum
- shift
- steps
- cfg
- sampler_name
- scheduler
- denoise
- seed
- prompt
- lyrics
- bpm
- duration
- timesignature
- language
- keyscale
- text_cfg_scale
- temperature
- top_p
- top_k
- min_p
- generate_audio_codes
- file_prefix
- file_name
- file_folder
- file_separator
- file_path
If you've met its sibling Madow Inputs, you know the deal: that node holds every ACE-Step generation parameter in one place and hands them down as a single madow bundle. This is the other half of the handshake. Madow Unpack takes that one bundle and fans it out into 28 typed outputs - the 27 parameters plus a derived file_path - so you can feed them to the nodes that actually do the generating.
Why bother? Because ACE-Step in ComfyUI is a multi-node affair, and the parameters that decide a take are needed at several places on the canvas at once. Without Madow Unpack you'd run a wire from a Madow Inputs output across the graph for every single parameter, and the canvas becomes spaghetti. With it, you drop one Unpack next to each node you're feeding - one beside the KSampler, one beside the text encoder - and each node gets its values from a local fan-out instead of a continent-spanning cable run. It's also repeatable and optional: wiring a couple of parameters by hand means you skip the node entirely, which is exactly why the split exists.
How it works
Madow Unpack is deliberately dumb, and that's a feature. It has no widgets, no validation, no configuration - everything it emits was decided upstream in Madow Inputs, so there's nothing here that can disagree with the context blob your logger recorded. Its one input, madow, is typed as the custom MADOW bundle, which ComfyUI treats as opaque: it only connects to a matching socket from Madow Inputs, so you can't accidentally wire it into a FLOAT.
The outputs carry the real ComfyUI types, which is the subtle bit that makes the graph connect at all. sampler_name and scheduler come out as the actual combo lists ComfyUI's sampler type-checker expects - a plain string there would be refused by KSampler. The ACE-Step domain combos (timesignature, language, keyscale) are typed the same way, so they connect to the text-encode node without coercion. If the bundle ever arrives incomplete - say, from a newer pack version with keys this build doesn't recognize - each key falls back to its table default rather than failing the queue. One less thing to kill a batch.
The outputs that matter
You won't wire all 28. The practical groupings:
- Into the KSampler:
steps,cfg,seed,sampler_name,scheduler,denoise. - Into the text side:
prompt,lyrics, plustext_cfg_scale,temperature,top_p,top_k,min_p,generate_audio_codes. - The musical frame:
bpm,duration,timesignature,language,keyscale. - The APG sampler node:
apg_eta,apg_norm_threshold,apg_momentum; andshiftfor the sampling-model helper. - File naming:
file_prefix,file_name,file_folder,file_separator, andfile_path- the last assembled upstream asfolder/prefix<separator>nameand carried through, not recomputed, so the parts and the whole can never disagree.
Install
Madow Unpack ships in the same pack, so there's nothing extra to fetch beyond what Madow Inputs needs. ComfyUI Manager → search "Nova Audio", or clone it directly:
cd ComfyUI/custom_nodes
git clone https://github.com/NovaFemme/ComfyUI-NovaAudioPlayer.git
Restart ComfyUI and you're done - no extra Python dependencies, and remember the ACE-Step nodes still need to be installed for the generation itself.
Where people trip
The most common mistake is treating Unpack as a source of truth. It isn't; it's a mirror. If a value downstream looks wrong, the problem is upstream in Madow Inputs or in a version mismatch between the two nodes - Unpack faithfully passes along whatever the bundle says. And note that the madow input is required, so an unwired socket means the node won't run at all; the per-key default fallback only kicks in once a bundle arrives that's missing a key or was made by a newer pack version. When a render comes out wrong and nothing on screen looks off, check that your Unpack is actually receiving a fresh bundle from Madow Inputs.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| madow | MADOW | The bundle from Madow Inputs. |
Outputs (28)
| Name | Type | Description |
|---|---|---|
| apg_eta | FLOAT | — |
| apg_norm_threshold | FLOAT | — |
| apg_momentum | FLOAT | — |
| shift | FLOAT | — |
| steps | INT | — |
| cfg | FLOAT | — |
| sampler_name | euler,euler_cfg_pp,euler_ancestral,euler_ancestral_cfg_pp,heun,heunpp2,exp_heun_2_x0,exp_heun_2_x0_sde,dpm_2,dpm_2_ancestral,lms,dpm_fast,dpm_adaptive,dpmpp_2s_ancestral,dpmpp_2s_ancestral_cfg_pp,dpmpp_sde,dpmpp_sde_gpu,dpmpp_2m,dpmpp_2m_cfg_pp,dpmpp_2m_sde,dpmpp_2m_sde_gpu,dpmpp_2m_sde_heun,dpmpp_2m_sde_heun_gpu,dpmpp_3m_sde,dpmpp_3m_sde_gpu,ddpm,lcm,ipndm,ipndm_v,deis,res_multistep,res_multistep_cfg_pp,res_multistep_ancestral,res_multistep_ancestral_cfg_pp,gradient_estimation,gradient_estimation_cfg_pp,er_sde,seeds_2,seeds_3,sa_solver,sa_solver_pece,ddim,uni_pc,uni_pc_bh2 | — |
| scheduler | simple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal | — |
| denoise | FLOAT | — |
| seed | INT | — |
| prompt | STRING | — |
| lyrics | STRING | — |
| bpm | INT | — |
| duration | FLOAT | — |
| timesignature | 2,3,4,6 | — |
| language | en,ja,zh,es,de,fr,pt,ru,it,nl,pl,tr,vi,cs,fa,id,ko,uk,hu,ar,sv,ro,el | — |
| keyscale | C major,C# major,Db major,D major,D# major,Eb major,E major,F major,F# major,Gb major,G major,G# major,Ab major,A major,A# major,Bb major,B major,C minor,C# minor,Db minor,D minor,D# minor,Eb minor,E minor,F minor,F# minor,Gb minor,G minor,G# minor,Ab minor,A minor,A# minor,Bb minor,B minor | — |
| text_cfg_scale | FLOAT | — |
| temperature | FLOAT | — |
| top_p | FLOAT | — |
| top_k | INT | — |
| min_p | FLOAT | — |
| generate_audio_codes | BOOLEAN | — |
| file_prefix | STRING | — |
| file_name | STRING | — |
| file_folder | STRING | — |
| file_separator | STRING | — |
| file_path | STRING | — |