Nodes/ComfyUI-AceStep_SFT/Load Reference Audio
ComfyUI Node

Load Reference Audio

The ACE-Step Voice Reference You Can Actually Switch Off

By jeankassio·Created 7 months ago·Updated 4 days ago· 62
Load Reference Audio
    • reference_audio
    ◄enabledfalse►
    ◄audio►

    What this node is actually for

    ComfyUI's stock Load Audio node has one personality: it needs a file. Wire it in and that file is a hard dependency - no file, no run. Annoying when you're feeding reference_audio on the AceStep SFT Generate node, because a voice reference is something you want to A/B against, not commit to.

    That's the whole job of Load Reference Audio. It's a small node with an on/off switch, and the off state is honest: it hands downstream None, so Generate behaves exactly like it would with the input unconnected. No silent waveform snuck into the conditioning, no validation refused because the dropdown is empty.

    Worth knowing why you'd want a reference at all. ACE-Step is the open Suno, and the community verdict is consistent: instrumentals are genuinely good, vocals and lyrics are the weak suit - the same complaint people have about Suno itself. A reference doesn't fix the lyrics, but it nudges the global acoustic picture, vocal timbre included, toward something you chose instead of something the model rolled. The author's own framing in the release thread was blunt about the scope: it gives you the musical style of that song, timbre and all.

    How it works under the hood

    It's about forty lines in nodes.py, which is what you want from a loader. Two required widgets: enabled (boolean, default false) and audio (a dropdown of files, plus an upload button). When enabled is false, the node returns (None,) - the source literally never touches the path, so a missing, deleted, or malformed file is not an error.

    Flip it true and it decodes through ComfyUI's own audio loader into a standard AUDIO payload (waveform plus sample rate), which is exactly the shape the diffusion side expects for a timbre reference. The dropdown isn't limited to .wav either - it lists audio and video files sitting in ComfyUI/input, so pointing it at an MP4 and letting the decoder pull the audio track works.

    Two details make it feel less like a stub. It hashes the selected file for change detection, so swapping references actually re-runs instead of serving stale cache; disabled, it reports a constant state, so the branch stays cached and costs nothing. A small frontend extension also drops an inline player onto the node, so you can audition the file while the switch is off.

    Inputs, output, and where the wire goes

    You set enabled, you pick audio. That's it - no hidden trim, gain, or sample-rate field. If your clip is quiet or noisy, fix it in a separate audio node first; the pack applies no automatic EQ or gain compensation to a reference.

    The single output is reference_audio (AUDIO). It connects to the reference_audio input on:

    • AceStep 1.5 SFT Generate, for a brand-new song with a voice reference and no source track at all
    • AceStep 1.5 SFT Generate Advanced, on every stage if you've split sampling
    • Cover / Remix, where an explicit reference overrides the automatic source-based timbre reference
    • Inpaint / Repaint, as an independent timbre reference for the regenerated region

    Installing it

    You're installing the pack, not one node. ComfyUI Manager → search "AceStep SFT" is the easy road; the manual route:

    cd ComfyUI/custom_nodes
    git clone https://github.com/jeankassio/ComfyUI-AceStep_SFT.git
    

    Then install the pack's requirements into the same Python that runs ComfyUI, restart, and refresh the browser. Windows portable goes through the embedded interpreter:

    .\python_embeded\python.exe -m pip install -r .\ComfyUI\custom_nodes\ComfyUI-AceStep_SFT\requirements.txt
    

    The requirements are modest - transformers>=4.52.0, torchaudio, librosa, soundfile, pyyaml, numpy. But the pack imports PyAV at the top of nodes.py and never lists it, assuming your ComfyUI already has it (the official install does). On a hand-built venv without av, the pack fails to import and the whole audio/AceStep SFT category vanishes, this node included. Generation needs the real models - the SFT or merged SFT+Turbo diffusion model, Qwen text encoders, ace_1.5_vae.safetensors - but the loader itself downloads nothing.

    When it fights you

    "Select a valid reference audio file when enabled is true." That's the node's validation firing because the switch is on and the dropdown resolved to nothing or a path that no longer exists. It's deliberately lenient in the other direction: leave the switch off and any garbage selection is ignored.

    Nothing changed after you disabled it on a Cover/Remix. That's usually not this node. Cover/Remix's preserve_singer_identity is on by default and quietly reuses the source song as a reference when you don't supply one - so killing your explicit reference leaves a source-derived one in place. Set preserve_singer_identity to false if you actually want the source timbre out of the picture. The author has flagged the same territory in the release thread, where users reported cover output not following their reference closely; "not exact voice cloning" is the honest expectation here, since Cover regenerates the full waveform.

    Muffled or unrecognisable results. Save Generate's audio directly and listen before blaming the reference - downstream stereo or loudness tools are as likely a culprit. Use a clean recording with decent level and little dead air, and compare against singing rather than a short spoken clip. Generate's reference_guidance_scale and reference_timbre_repeats exist if you want to push harder, but they're experimental: start at 1 and 1, change one at a time, expect artifacts before similarity.

    Housekeeping: the dropdown is a snapshot of the input folder taken when the node builds its inputs. Drop a new recording in and refresh the browser.

    Categoryaudio/AceStep SFT

    Inputs (2)

    NameTypeDefaultDescription
    enabledBOOLEANfalseTrue loads the selected reference. False returns no audio and does not read the file.
    audioCOMBOSelect or upload a reference voice. A file is only required when enabled is true.

    Outputs (1)

    NameTypeDescription
    reference_audioAUDIO—