MD: Audio Auto Master Pro
One node from raw AI audio to broadcast-ready
- audio
- audio
- analysis_details
- yaml_config
- waveform_before
- waveform_after
- spectrum_plot
- dynamics_plot
- lufs_history_plot
AI-generated audio comes out of the model raw - fine if you're prototyping, useless if you're shipping. MD_AutoMasterNode is the pack's attempt to do in one node what usually takes a mastering chain: hit a target loudness, fix the spectrum, tame the harsh AI vocal resonances, and leave you with something that doesn't clip or sound like it was generated underwater. Given the pack grew up around ACE-Step music generation, this is the "make it presentable" step at the end of that pipeline.
How it works
It's an iterative mastering engine: analyze the incoming audio with FFT, apply adaptive EQ toward a target spectral profile, run de-essing, multiband compression, stereo widening, and a final brickwall limiter, then normalize to a target LUFS. "Iterative" is the operative word - the max_iterations_eq control (default 5) runs multiple analysis/adjustment passes to converge on the balance.
The one knob that matters most is profile, which sets dozens of DSP parameters at once. Ten profiles ship:
- Standard - balanced all-purpose.
- Diffusion Repair (Clean) - the one the tooltip recommends for raw AI generation output; it's aimed at the specific noise and resonance artifacts ACE-Step leaves behind.
- Podcast (Clarity), Aggressive, Gentle (Tame), Mastering (Transparent), Full Bass (Electronic), Auto-Detect Genre, Custom, and AI Co-Pilot (Ollama).
target_lufs defaults to -14 (streaming standard), -23 for broadcast.
The AI co-pilot
The controversial feature is enable_ai_helper (default True): it queries a local Ollama instance - default http://localhost:11434, default model qwen2.5:14b - and asks it to suggest EQ tweaks based on the analysis, then applies them. A genre_hint text field steers the suggestions. The name is a lie in the best way: it's fully local, no API key, no cloud. The catch is the dependency - if Ollama isn't running, the co-pilot path fails, and you should either start it or turn the helper off and rely on the DSP. For deterministic batch work, disable it; for creative experimentation it's genuinely fun to watch.
Inputs that matter, and what comes out
audio (standard AUDIO dict) goes in. Below the big knobs are surgical controls if you want them: spectral_tilt (macro EQ, ±0.05 is already noticeable - it's extremely sensitive), vocal_tamer_strength (cuts harsh 1–3kHz AI-voice resonances), harmonic_exciter_drive (tube-style warmth, use 0.05–0.20 max), fix_sub_mud_db, fix_kick_thump_db, EQ targets, MBC crossovers/thresholds/ratios, limiter ceiling, stereo_width, and a global mix dry/wet.
Outputs: audio (the mastered result, or the Delta/difference if you set output_mode), plus analysis_details and yaml_config strings, and five plot images - waveform_before, waveform_after, spectrum_plot, dynamics_plot, lufs_history_plot. If you like a result, flip export_yaml and paste it back into yaml_config later to reproduce it exactly.
The honest take
It's a lot of node. The default path (Diffusion Repair + target LUFS) genuinely helps raw ACE-Step output, and the plots make it easy to see what happened. But the profile system is where the value lives - hand-tuning all 30+ parameters is a rabbit hole, and the AI helper is a gimmick until it isn't. Start with the profiles, trust the limiter, and only go manual when the preset doesn't fit.
Installing
It's in MD Nodes:
cd path/to/ComfyUI/custom_nodes
git clone https://github.com/MDMAchine/ComfyUI_MD_Nodes.git
cd ComfyUI_MD_Nodes && pip install -r requirements.txt
Or via ComfyUI Manager (search MD Nodes), then restart. The audio stack in requirements (librosa, soundfile, pyloudnorm, pedalboard) is precisely what this node needs, so for once the heavy install is justified.
Inputs (44)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | AUDIO INPUT • Purpose: Unprocessed audio waveform to master. • Requirement: Standard ComfyUI AUDIO dict. | |
| target_lufs | FLOAT | -14.0-30–-6 | TARGET LOUDNESS • Purpose: The final perceived loudness target (LUFS). • Options: -14.0 (Streaming), -23.0 (Broadcast). ⭐ Recommended: -14.0 |
| profile | COMBO | Standard - Balanced all-purpose mastering | MASTERING PROFILE • Purpose: Automatically sets dozens of DSP parameters. • Options: 'Standard', 'Diffusion Repair' (fixes AI noise), 'Podcast'. ⭐ Recommended: 'Diffusion Repair' for raw audio generation outputs. |
| output_modeopt | COMBO | Mastered Audio | OUTPUT MODE • Purpose: Defines what audio is sent to the output node. • Options: 'Mastered' (Final result) or 'Delta' (Only what was changed). ⭐ Recommended: Mastered Audio. |
| enable_ai_helperopt | BOOLEAN | true | AI CO-PILOT • Purpose: Queries a local Ollama LLM to fine-tune EQ based on analysis. • Requirement: Ollama must be running locally. ⭐ Recommended: True for experimental/creative runs. |
| genre_hintopt | STRING | GENRE HINT • Purpose: Text clue to help the AI Co-Pilot make better EQ decisions. | |
| ollama_urlopt | STRING | http://localhost:11434 | OLLAMA URL • Purpose: Endpoint for the local LLM API. |
| ollama_modelopt | STRING | qwen2.5:14b | AI MODEL • Purpose: Model used for Co-Pilot reasoning. |
| debug_modeopt | COMBO | 1 - Info | LOGGING VERBOSITY • Controls console logging and AI explanation detail. |
| enable_profilingopt | BOOLEAN | false | ENABLE PROFILING • Track execution time of LLM vs DSP stages. |
| yaml_configopt | STRING | YAML CONFIG • Purpose: Paste exported settings here to override all GUI controls. | |
| export_yamlopt | BOOLEAN | false | EXPORT YAML • Purpose: Outputs the final computed settings as YAML text for saving. |
| input_gain_dbopt | FLOAT | 0.0-36–36 | INPUT GAIN (dB) • Pre-processing volume adjustment. |
| spectral_tiltopt | FLOAT | 0.00-12–12 | SPECTRAL TILT • Extremely sensitive macro EQ. • +0.05 = Brighter, -0.05 = Warmer. |
| vocal_tamer_strengthopt | FLOAT | 0.000–2 | VOCAL TAMER • Purpose: Dynamically cuts harsh 1-3kHz resonances common in AI voices. |
| harmonic_exciter_driveopt | FLOAT | 0.000–2 | HARMONIC EXCITER • Purpose: Tube-style saturation for warmth. Use sparingly (0.05 - 0.20). |
| fix_sub_mud_dbopt | FLOAT | 0.0-36–0 | FIX SUB MUD • Purpose: Low shelf cut (75Hz) to remove boominess. |
| fix_kick_thump_dbopt | FLOAT | 0.00–12 | FIX KICK THUMP • Purpose: Targeted narrow boost (90Hz) to restore punch. |
| highpass_freqopt | FLOAT | 00–1000 | HIGHPASS FILTER • Cut frequencies below this point (Hz). |
| lowpass_freqopt | FLOAT | 00–22000 | LOWPASS FILTER • Cut frequencies above this point (Hz). |
| do_eqopt | BOOLEAN | true | ENABLE ADAPTIVE EQ • Auto-balance the spectrum to targets using Librosa FFT analysis. |
| eq_bass_targetopt | FLOAT | 9.50–20 | EQ BASS TARGET • Desired low-end energy distribution. |
| eq_high_targetopt | FLOAT | 5.50–20 | EQ HIGH TARGET • Desired high-end energy distribution. |
| eq_adaptiveopt | BOOLEAN | true | ADAPTIVE MODE • Dynamically scale EQ adjustments based on input deviation. |
| max_iterations_eqopt | INT | 51–20 | EQ ITERATIONS • How many analysis/adjustment passes to reach perfect balance. |
| do_deessopt | BOOLEAN | true | ENABLE DE-ESSER • Dynamically reduces harsh 'S' sounds in the 7kHz range. |
| deess_amount_dbopt | FLOAT | -10.0-60–0 | DE-ESS AMOUNT (dB) • Maximum intensity of sibilance reduction. |
| do_mbcopt | BOOLEAN | true | ENABLE MULTIBAND COMPRESSOR • Enables independent 3-Band dynamics processing. |
| mbc_crossover_lowopt | FLOAT | 30040–1000 | MBC CROSSOVER LOW • Frequency split point between Bass and Mids. |
| mbc_crossover_highopt | FLOAT | 30001000–16000 | MBC CROSSOVER HIGH • Frequency split point between Mids and Highs. |
| mbc_crossover_orderopt | INT | 82–8 | CROSSOVER SLOPE • Higher numbers create sharper frequency separation. |
| mbc_low_thresh_dbopt | FLOAT | -24.0-60–0 | LOW BAND THRESHOLD • Level at which bass compression engages. |
| mbc_low_ratioopt | FLOAT | 2.51–20 | LOW BAND RATIO • Severity of bass compression. |
| mbc_mid_thresh_dbopt | FLOAT | -22.0-60–0 | MID BAND THRESHOLD • Level at which mid compression engages. |
| mbc_mid_ratioopt | FLOAT | 2.51–20 | MID BAND RATIO • Severity of mid compression. |
| mbc_high_thresh_dbopt | FLOAT | -20.0-60–0 | HIGH BAND THRESHOLD • Level at which treble compression engages. |
| mbc_high_ratioopt | FLOAT | 2.01–20 | HIGH BAND RATIO • Severity of treble compression. |
| do_limiteropt | BOOLEAN | true | ENABLE LIMITER • Engages the final brickwall lookahead limiter to prevent clipping. |
| limiter_threshold_dbopt | FLOAT | -1.0-24–0 | LIMITER CEILING • Maximum allowed True Peak level (-1.0 is standard safety margin). |
| soft_clip_driveopt | FLOAT | 1.000.8–1.5 | SOFT CLIP DRIVE • Pre-limiter saturation gain. Higher = Louder/Dirtier, Lower = Clean. |
| stereo_widthopt | FLOAT | 1.000–2.5 | STEREO WIDTH • 1.0 = Original, >1.0 = Wider (Haas effect), <1.0 = Narrower. |
| fast_modeopt | BOOLEAN | false | FAST MODE • Skips intermediate LUFS normalization passes for a speed boost. |
| skip_initial_analysisopt | BOOLEAN | false | SKIP PRE-ANALYSIS • Skips initial chart generation to save time. |
| mixopt | FLOAT | 1.000–1 | GLOBAL MIX • Final Dry/Wet blend parameter (1.0 = 100% Processed). |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| analysis_details | STRING | — |
| yaml_config | STRING | — |
| waveform_before | IMAGE | — |
| waveform_after | IMAGE | — |
| spectrum_plot | IMAGE | — |
| dynamics_plot | IMAGE | — |
| lufs_history_plot | IMAGE | — |