Nodes/ComfyUI-Woosh/Woosh Sampler
ComfyUI Node

Woosh Sampler

The actual sound generator — Woosh Sampler

By Saganaki22·Created 5 months ago·Updated 4 months ago· 130
Woosh Sampler
  • gen_model
  • text_conditioning
  • video
  • video_frames
  • audio
prompt
steps50
cfg4.5
seed0
latent_frames501
subprocesstrue
force_offloadfalse

This is the node that makes the sound. Everything else in the pack is setup; Woosh Sampler is the payoff. Wire a loaded model into gen_model, type "thunder crack with rain" into prompt, and you get a 48kHz audio clip out. Wire a video into video as well, and the same node silently becomes a video-to-audio foley generator - it auto-detects from what's connected, so there's no mode dropdown to get wrong.

Woosh is a flow-matching model - the same family as Flux and SD3, predicting a near-straight path from noise to audio instead of walking a curved diffusion schedule. If you've spent any time on the image side, this will feel familiar: it's exactly why the distilled variants run in four steps. The pack ships both a full ODE path (Flow/VFlow, 30-100 steps, best quality) and a FlowMap-distilled path (DFlow/DVFlow, 4 steps, roughly half the VRAM). The four-step models aren't a low-step version of the same weights; they're a different, distilled model - pick the checkpoint, the sampler figures out which solver to use.

Inputs that matter

  • prompt - describe the sound, don't caption it. "sportscar engine revving and driving away quickly" works; "epic" doesn't.
  • steps - default 50. For Flow models, 30-100. For DFlow/DVFlow, use 4; the node clamps you at 8 anyway.
  • cfg - classifier-free guidance, default 4.5. Higher sticks to the prompt, lower gets more creative. The distilled models like ~3.5.
  • latent_frames - the duration dial. 100 frames ≈ 1 second at 48kHz, so 501 ≈ 5s and 1001 ≈ 10s. In V2A mode the node auto-bumps the default to 801 (≈8s) to match the VFlow-8s models.
  • seed - 0 is random every run; set a number to reproduce a result.

The two switches worth understanding

subprocess defaults to ON, and it's this pack's most interesting quirk. ComfyUI changes global PyTorch state - attention backends, FP16 accumulation - that can silently corrupt Woosh's output. The symptom is sound that doesn't match the prompt, which you'll blame on yourself before you blame on your node graph. Running inference in an isolated worker process sidesteps all of it. The cost is about 15 seconds of model reload per run. If your generations sound right, leave it on and don't touch it. If you're iterating fast on a strong machine you can switch it off for speed - and flip it straight back the moment quality drops.

force_offload is the VRAM escape hatch. Enable it when the sampler OOMs on a small card: after each run it throws the model off GPU and CPU RAM, and the next run reloads from disk. Slower, but it turns "CUDA out of memory" into "runs, slowly." On a 6GB card with a distilled model this is the difference between usable and dead.

Outputs and where they go

audio is a native AUDIO tensor - plug it into a built-in preview or any audio save node and it just works. In V2A mode you also get video_frames (the input video as an IMAGE tensor), which you can feed to VideoCombine to mux the generated sound back onto the clip in a single file; grab ComfyUI-VideoHelperSuite for the muxing.

Install and models

ComfyUI Manager (search Woosh) or:

cd ComfyUI/custom_nodes
git clone https://github.com/Saganaki22/ComfyUI-Woosh.git
pip install -r ComfyUI-Woosh/requirements.txt

Then restart ComfyUI fully. For T2A grab Woosh-Flow and Woosh-DFlow; for V2A, Woosh-VFlow-8s and Woosh-DVFlow-8s - all into ComfyUI/models/woosh/ with config.yaml + weights.safetensors. Woosh-AE, TextConditionerA, and TextConditionerV are required no matter which generative model you run. VRAM roughly: Flow/VFlow ~8-12GB, distilled ~4-6GB, and with CPU offload the distilled models run in ~2-4GB.

Troubleshooting

OOM → turn on force_offload, switch to DFlow/DVFlow, and drop latent_frames (501→301 is a real memory win). Sound doesn't match the prompt → make sure subprocess is ON. "Error loading state_dict in strict mode" → ignore it, that's normal. And if the model never appears in the loader dropdown, check the woosh folder name, the config.yaml in each model folder, and restart ComfyUI completely.

CategoryWoosh/Sampling

Inputs (10)

NameTypeDefaultDescription
gen_modelWOOSH_GEN_MODELGenerative model (Flow/DFlow/VFlow/DVFlow)
promptSTRINGText prompt describing the sound to generate
stepsINT501–500Number of sampling steps. Flow models: 30-100 (default 50). FlowMap (DFlow/DVFlow): 4
cfgFLOAT4.50–15Classifier-free guidance scale. Higher = more prompt adherence, lower = more creative. Default 4.5 for T2A, 3.0 for DVFlow
seedINT00–4294967295Random seed for noise generation. 0 = random each time
latent_framesINT5011–2000Controls audio duration. 100 frames ≈ 1 second at 48kHz. T2A: 501≈5s, 1001≈10s. V2A: 801≈8s
subprocessBOOLEANtrueRun inference in an isolated subprocess. Use if the generated sound doesn't match the prompt — some ComfyUI environments modify global PyTorch state (attention backends, FP16 accumulation) that corrupts Woosh's output. Subprocess is slower (~15s model reload) but guaranteed correct.
force_offloadBOOLEANfalseAfter sampling, throw away model from GPU + CPU RAM. Next run reloads from disk
text_conditioningoptWOOSH_TEXT_CONDExternal text conditioner (from Text Encode node). If not connected, uses model's internal CLAP
videooptWOOSH_VIDEOVideo input for video-to-audio generation. If connected, auto-switches to V2A mode

Outputs (2)

NameTypeDescription
video_framesIMAGE
audioAUDIO