ACE-Step 1.5 Semantic Extractor β‘π ‘π π £π
Turn a track into structure the Cover Guider can follow
- model
- source_latents
- semantic_hints
This node is small on the surface - two required inputs, one output - but it's the piece that makes ACE-Step 1.5's cover workflow actually work. It listens to a source track and pulls out what the song is - melody, structure, arrangement - separate from what it sounds like. That separation is what lets the Cover Guider keep a song recognizable while completely changing its instrumentation or voice.
How it works
Point it at a MODEL and a source_latents (the latent-encoded version of your source track), and it runs the model's own understanding of that audio to produce semantic_hints - a compact representation of the musical content, independent of timbre. You then feed that directly into the ACE-Step 1.5 Cover Guider, whose semantic_hints input exists specifically to receive this node's output. There's no config here beyond the two required connections - this is a pure extraction step, not something with knobs to tune.
The inputs and outputs that matter
model(MODEL, required) - the same ACE-Step model you're using for generation.source_latents(LATENT, required) - your source track, already encoded to latent space (via the same pipeline you'd use to feed any of the ACE-Step guiders).- Output -
semantic_hints(typeSEMANTIC_HINTS), which only has one real destination in this pack right now: the Cover Guider'ssemantic_hintsinput.
How to install it
Via ComfyUI Manager, search "RyanOnTheInside," install, restart. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside.git
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt
then restart ComfyUI. As with the rest of the ACE-Step 1.5 pipeline, the first run in a given ComfyUI install auto-downloads "silence latents" from HuggingFace, so have network access ready the first time you run any of these nodes.
Common issues & troubleshooting
Cover generations sound generic even after wiring this in. Confirm source_latents is actually the track you want to cover, and not a leftover latent from an earlier step in your graph - it's an easy wire to get crossed once a graph has multiple audio branches. Also confirm the output is actually landing on the Cover Guider's semantic_hints input rather than dangling unconnected; ComfyUI won't error on an unused output, it'll just silently not affect anything.
Wondering why this exists as its own node instead of being baked into the Cover Guider. It's a deliberate split: extraction is a one-shot, deterministic pass over your source audio, while the guider runs per-sample during denoising. Keeping them separate means you can extract hints once and reuse them across multiple cover attempts (different reference latents, different cfg values) without re-running extraction every time - worth wiring your graph so this node only fires once per source track rather than re-triggering it on every generation.
Nothing downstream of this node exists yet besides Cover. The extract and lego task types are visible in the Task Text Encode node's dropdown, and the pack's author has talked publicly about building dedicated guiders for both - this extractor's semantic_hints output is a reasonable bet for feeding those once they land, but as of now the Cover Guider is the only consumer.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | β | |
| source_latents | LATENT | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| semantic_hints | SEMANTIC_HINTS | β |