Nodes/Kinburg-Nodes/Siren Section (Audio Window) 🧜
ComfyUI Node

Siren Section (Audio Window) 🧜

Mark a stretch of an AceStep audio latent as the part to regenerate β€” a section retake β€” or grow the latent to extend the track. Edges can snap to the bar/beat grid and are crossfaded so the join doesn't click. The mask is written to the latent's standard 'noise_mask', so the output works with the stock samplers too; Siren (Music Sampler) just also reports what it found.

By KinburgΒ·Created 2 months agoΒ·Updated 3 days agoΒ· 1
Siren Section (Audio Window) 🧜
  • latent
  • section
  • vae
  • latent
  • section
  • report
β—„moderetakeβ–Ί
β—„start_sec0.00β–Ί
β—„end_sec0.00β–Ί
β—„extend_sec15.00β–Ί
β—„extend_atendβ–Ί
β—„fade_sec0.35β–Ί
β—„snapbarβ–Ί
β—„bpm120β–Ί
β—„beats_per_bar4β–Ί
β—„grid_origin_sec0.00β–Ί
β—„latent_fps25.00β–Ί
CategoryKinburg-Nodes/Bestiary/Siren

Inputs (14)

NameTypeDefaultDescription
latentLATENTThe audio latent to mark up. For a RETAKE this is the latent of a take you already have (decode it once to hear where the section you want to replace actually sits); for EXTEND it is the take to grow.
modeCOMBOretakeβ€’ retake β€” mark the stretch between 'start_sec' and 'end_sec' as free to regenerate; everything else is frozen. The latent's length does not change. β€’ extend β€” GROW the latent by 'extend_sec' seconds and mark only the new part as free. The existing take is frozen but still visible to the model (attention runs over the whole strip), so the new part is written to follow on from it.
start_secFLOAT0.000–2000'retake' only: where the section starts, in seconds from the top of the track.
end_secFLOAT0.000–2000'retake' only: where the section ends, in seconds. 0 = run to the end of the track (handy for 'redo everything from the last chorus on').
extend_secFLOAT15.000–2000'extend' only: how many seconds to add. IMPORTANT: the 'duration' you gave TextEncodeAceStepAudio1.5 describes the WHOLE track and is baked into the tokens, so after extending you should raise it to the new total and re-encode β€” otherwise the model is being told the song is shorter than the strip it is writing on. The sampler prints the new length so you have the number to enter.
extend_atCOMBOend'extend' only: which end to grow. 'start' prepends (an intro) and shifts every section marked earlier in the chain later by the same amount, so their timings stay on the music.
fade_secFLOAT0.350–10Crossfade at each edge of the section, in seconds. The ramp lies OUTSIDE the window, so the range you named is rewritten in full and the join is spread into the neighbouring audio. This is the difference between a seamless replacement and an audible CLICK: in an image a hard mask edge is just a visible line, in audio it is a transient. 0.2-0.5 s is a good range; 0 for a hard cut.
snapCOMBObarQuantize the section's edges to the musical grid built from 'bpm' / 'beats_per_bar'. β€’ bar (recommended) β€” cut on the bar line. Replacing a section that starts mid-bar is the usual reason a retake refuses to sit in the groove. β€’ beat β€” finer, for fills and pickups. β€’ off β€” exactly the seconds you typed.
bpmINT1200–300Tempo for the snap grid β€” use the same value you gave TextEncodeAceStepAudio1.5. 0 disables snapping regardless of the 'snap' setting.
beats_per_barINT41–16Beats per bar for the snap grid (the 'timesignature' on TextEncodeAceStepAudio1.5). One bar at 120 bpm in 4/4 is 2 s = exactly 50 latent frames.
grid_origin_secFLOAT0.000–2000Where bar 1 begins, in seconds. Leave at 0 unless the track opens with a pickup or a bit of silence β€” then the grid is offset from the file start and snapping to 0 would land between bars.
latent_fpsFLOAT25.001–1000Latent frames per second, used to turn seconds into frame indices. 25 is correct for AceStep 1.5 (the VAE maps one frame to 1920 samples at 48 kHz = 40 ms). Wire the 'vae' input instead of touching this β€” it reads the true rate from the model and covers AceStep 1.0, which is different.
sectionoptKINBURG_SIREN_SECTIONWire a PREVIOUS Siren Section here to chain them β€” several sections marked at once (two retakes, or an extend plus a retake of the tail). Each node adds its own window and rebuilds the mask over all of them, so overlapping windows merge cleanly.
vaeoptVAEThe audio VAE, used ONLY to read the true latent frame rate (sample rate Γ· samples per frame) instead of trusting 'latent_fps'. Nothing is encoded or decoded here. Recommended: it makes the seconds exact on any audio model.

Outputs (3)

NameTypeDescription
latentLATENTβ€”
sectionKINBURG_SIREN_SECTIONβ€”
reportSTRINGβ€”