Gabor Harmonic Transfuser (S42)
Putting one track's harmonics onto another's rhythm
- guide_audio
- source_audio
- morphed_audio
- gabor_spiral_viz
- harmonic_delta
S42_GaborHarmonicTransfuser is the "what if I could just hand this vocal's sound to that melody" node. It takes two audio tracks - a guide_audio and a source_audio - and transplants the timbre (harmonic character) of one onto the rhythm and envelope of the other. The classic use: keep your source's words and phrasing, but give them the tonal character of a different voice or instrument. That's a genuinely cool idea, and for a ComfyUI node it's impressively close to delivering.
One caveat up front so you set expectations right: the "Gabor" in the name is branding. There's no actual Gabor transform here - the mechanism is a classic STFT source-filter decomposition, which is a well-understood technique. Fine by me; the name is flavor, the results are real.
How it works
The node STFTs both tracks, then splits each magnitude spectrum into an envelope (a smoothed average that carries the loudness/rhythm) and an excitation (the leftover detail that carries the harmonic texture - think of it as the "voice" inside the shape). Then it recombines them across tracks:
- Flow (Source Words, Guide Melody) - source envelope × guide excitation. Your words keep their timing; they get the guide's harmonic voice.
- Morph (Source Flow, Guide Voice) - the mirror: guide's envelope, source's excitation. Guide's rhythm, your voice.
- Hybrid Blend - a weighted mix of both, controlled by
hybrid_blend_pct. - Helical Resonance - a straight magnitude blend plus a phase nudge from the guide, for a more "drunk on harmonics" effect.
harmonic_strength blends how much of the transplanted result vs. the original source magnitude you keep, and dry_wet_mix is the usual safety blend.
Inputs
guide_audio,source_audio- which is which depends on the mode you pick. The output uses the guide's sample rate, so keep them consistent.transfusion_mode- the four above.harmonic_strength(0.85),helical_warp(1.0, 0.1–2),hybrid_blend_pct(0.5),dry_wet_mix(1.0).
Outputs
morphed_audio- the result.gabor_spiral_viz- an IMAGE: a log-magnitude heatmap of the transfused spectrum. Handy for seeing what changed, and it doubles as a neat visualization to stash on a monitor.harmonic_delta- a FLOAT, the mean magnitude difference between guide and source. It's a rough "how different were these tracks" number.
Installing it
Part of S42 CutFlow - ComfyUI Manager (search "S42 CutFlow") or git clone https://github.com/GeekyGhost/S42-CutFlow into ComfyUI/custom_nodes/, install requirements, restart. Needs torchaudio (bundled with the portable build) and torch STFT - both standard.
Gotchas
Both inputs get truncated to the shorter track's length, so mismatched durations lose the tail of the longer one - trim them first. There's no sample-rate conversion; if one track is 44.1kHz and the other 48kHz the output inherits the guide's rate and the envelope/excitation math gets approximate. And the 2048-sample FFT means low-frequency material can smear. This is a "play with it on short clips and A/B" node, not a "throw a full mix at it" node.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| guide_audio | AUDIO | — | |
| source_audio | AUDIO | — | |
| transfusion_mode | COMBO | Flow (Source Words, Guide Melody) | 4 options: Flow (Source Words, Guide Melody), Morph (Source Flow, Guide Voice), Hybrid Blend, Helical Resonance |
| harmonic_strength | FLOAT | 0.850–1 | — |
| helical_warp | FLOAT | 1.000.1–2 | — |
| hybrid_blend_pct | FLOAT | 0.500–1 | — |
| dry_wet_mix | FLOAT | 1.000–1 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| morphed_audio | AUDIO | — |
| gabor_spiral_viz | IMAGE | — |
| harmonic_delta | FLOAT | — |