ποΈ ThinkSound Sampler
The node where text becomes audio β and CoT is the whole game
- thinksound_model
- feature_utils
- video
- audio
This is the node you actually came for. The ThinkSound Sampler is where ThinkSound - FunAudioLLM's open-source text/video-to-audio model - turns your description into a 44.1kHz stereo audio clip inside ComfyUI. It's the payoff of the whole pack, and it works the way a diffusion sampler should: two loaders feed it a model and conditioning utilities, you give it a caption, and out comes an audio tensor you can wire into any ComfyUI audio output or save node.
ThinkSound's gimmick - and it's a real one, not marketing - is Chain-of-Thought reasoning. Instead of "dog barking," you write a short caption plus a detailed CoT description of how the sound should behave. That extra reasoning pass is what separates it from most TTA models and is genuinely why people bother with this pack over simpler alternatives. Community reviews are split on how well ThinkSound generalizes versus rivals like MMAudio, but the recurring take is that a good CoT prompt lifts quality noticeably. If your audio comes out wrong, your CoT description is the first suspect.
What the sampler does, step by step
It encodes your caption with MetaCLIP and your CoT description with T5, then - if you feed it a video - encodes frames with both CLIP and Synchformer so sound can sync to motion. Those features become conditioning for a diffusion pass (rectified-flow or v-prediction, depending on the checkpoint), the latents get decoded through the audio VAE, and the result is normalized and returned at 44100 Hz. On a mid-range card expect roughly a minute for 8 seconds of audio; the README's step-count guidance holds up: 12β16 steps for quick tests, ~24 for the sweet spot.
The inputs that matter
- caption - short, plain description ("dog barking", "ocean waves"). Think of it as the tagline.
- cot_description - the detailed Chain-of-Thought prompt. This is the whole game: describe the scene, the timing, the spatial feel ("3β4 distinct barks with realistic gaps, slight echo suggesting open space"). If it's blank, the node falls back to your caption.
- duration - 1β30 seconds (default 8). Start short while you're tuning; long clips eat VRAM fast.
- steps - 1β100 (default 24). More steps, better quality, slower. 12β16 for tests.
- cfg_scale - 1β20 (default 5). Higher = more faithful to the text, but too high gets harsh and artifacty.
- performance_mode -
balanced/quality/speed. This one is a blunt instrument:qualitysilently floors your steps at 32 and CFG at 7;speedcaps steps at 16 and CFG at 3. It overrides what you typed, which surprises people the first time. - seed - reproducibility. Set it, keep it.
- force_offload - on by default; shoves models back to CPU after generation so you don't OOM on the next node.
- video (optional) - an
IMAGEtensor of frames for video-to-audio. Wire in any video loader; the node resizes/processes internally and falls back to text-only if video processing fails, which it does gracefully.
The single output is audio (type AUDIO), a {waveform, sample_rate: 44100} dict - plug it into ComfyUI's audio preview or save nodes and you're done.
Installing and getting it running
The pack installs through ComfyUI Manager (search "ThinkSound") or cd ComfyUI/custom_nodes && git clone https://github.com/ShmuelRonen/ComfyUI-ThinkSound_Wrapper, then pip install -r requirements.txt - the pinned audio deps (alias-free-torch==0.0.6, descript-audio-codec==1.0.0, vector-quantize-pytorch==1.9.14) are mandatory. Models don't auto-download: the Google Drive bundle (thinksound_light.ckpt, vae.ckpt, synchformer_state_dict.pth) unzips into ComfyUI/models/thinksound/, and the bigger thinksound.ckpt from Hugging Face is the optional 24GB+ VRAM upgrade.
Gotchas
Keep precision on fp32 everywhere - the README's warning about fp16 tensor dimension errors is real. If the "ThinkSound source code not installed" error appears, the pack's vendored thinksound/ folder got lost; re-clone. And if your audio is technically fine but ignores the prompt, the Sampler is doing its job - your CoT description is probably too thin. Feed it the same detail you'd give a sound designer, not a search engine.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| thinksound_model | THINKSOUND_MODEL | β | |
| feature_utils | THINKSOUND_FEATUREUTILS | β | |
| duration | FLOAT | 8.01β30 | Duration of generated audio in seconds |
| steps | INT | 241β100 | Number of denoising steps (more = better quality, slower) |
| cfg_scale | FLOAT | 5.01β20 | Classifier-free guidance scale (higher = more faithful to text) |
| seed | INT | 00β18446744073709550000 | Random seed for reproducible results |
| caption | STRING | Short description of desired audio (e.g., 'dog barking', 'ocean waves') | |
| cot_description | STRING | Detailed chain-of-thought description for enhanced audio generation | |
| force_offload | BOOLEAN | true | Offload models after generation to save VRAM |
| performance_mode | COMBO | balanced | Generation performance profile |
| videoopt | IMAGE | Input video frames for video-to-audio generation (optional) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | β |