Nodes/Nova Audio Player/Madow Unpack ⚪
ComfyUI Node

Madow Unpack ⚪

Stop dragging twenty wires across your ACE-Step graph

By NovaFemme·Created 6 days ago·Updated about 21 hours ago· 0
Madow Unpack ⚪
  • 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, plus text_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; and shift for the sampling-model helper.
  • File naming: file_prefix, file_name, file_folder, file_separator, and file_path - the last assembled upstream as folder/prefix<separator>name and 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.

Category▶️ Nova Audio

Inputs (1)

NameTypeDefaultDescription
madowMADOWThe bundle from Madow Inputs.

Outputs (28)

NameTypeDescription
apg_etaFLOAT
apg_norm_thresholdFLOAT
apg_momentumFLOAT
shiftFLOAT
stepsINT
cfgFLOAT
sampler_nameeuler,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
schedulersimple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal
denoiseFLOAT
seedINT
promptSTRING
lyricsSTRING
bpmINT
durationFLOAT
timesignature2,3,4,6
languageen,ja,zh,es,de,fr,pt,ru,it,nl,pl,tr,vi,cs,fa,id,ko,uk,hu,ar,sv,ro,el
keyscaleC 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_scaleFLOAT
temperatureFLOAT
top_pFLOAT
top_kINT
min_pFLOAT
generate_audio_codesBOOLEAN
file_prefixSTRING
file_nameSTRING
file_folderSTRING
file_separatorSTRING
file_pathSTRING