ASID Captioner (Video Inverse Prompt)
The video node that listens while it looks
- text
Most caption nodes look at an image and ignore everything else. ASID Captioner is the odd one in this pack because it doesn't - it watches a video and, by default, listens to its audio track too, then writes a prompt describing what happened. That makes it the right tool for a job the Qwen nodes can't do: turning a clip into a text-to-video prompt that captures motion, and, if the clip has speech or sound, the dialogue and soundscape as well. If you've been manually writing Wan or LTX video prompts from source clips, this is the node that automates the boring half.
It ships in WingeD123/ComfyUI_QwenVL_PromptCaption, but it's a different beast under the hood. Where the Qwen nodes use Qwen3VLForConditionalGeneration or similar, ASID uses Qwen2.5-Omni - the omnimodal variant that takes audio plus vision. The actual model comes from Hugging Face's AudioVisual-Caption org: ASID-Captioner-3B or -7B.
How it works
You hand it a video_path. It extracts frames and, if use_audio is on, pulls the audio track, and runs the whole thing through the captioner with the pack's prompt-inversion instruction. To decode audio and video it leans on librosa and imageio-ffmpeg - the pack even symlinks the imageio_ffmpeg binary into its own folder and puts it on PATH so ffmpeg is found without you installing anything separately. That's the kind of dependency babysitting that usually bites people, and they did it for you. It keeps the same keep_model_loaded / unload_other_models / dtype machinery as the Qwen nodes, plus a result cache keyed on video path, max_side, and the audio toggle.
The inputs that matter
- video_path - path to the video file. This is your input instead of an IMAGE tensor; the node reads from disk, so feed it a real file path.
- use_audio - default True. This is the "listen while it looks" switch. If your video has no audio track at all and this is True, the source code itself warns it can error - so flip it off for silent footage.
- max_side - frame long-edge pre-scale, default 504, stepping in 28s (the Qwen2.5 tile convention, since this rides on Qwen2.5-Omni).
- lang -
中文orEnglish. - dtype / keep_model_loaded / unload_other_models - same semantics as the Qwen nodes.
- instruction - optional override for the caption prompt.
Output: a single text STRING with the generated prompt.
Install and model setup
ComfyUI Manager (search "ComfyUI_QwenVL_PromptCaption") or:
cd ComfyUI/custom_nodes
git clone https://github.com/WingeD123/ComfyUI_QwenVL_PromptCaption
then restart. Dependencies include transformers>=5.2.0, accelerate, peft, bitsandbytes, plus librosa and imageio-ffmpeg for the media side. Download ASID-Captioner-3B or -7B from Hugging Face and place it in ComfyUI/models/text_encoders - no auto-download, as always with this pack. The 7B is noticeably better on dense scenes and clear dialogue, but the 3B is the pragmatic pick on 8GB cards.
Troubleshooting
The most common stumble is use_audio left on for a video with no audio - the node can throw. If it does, set use_audio to False for that clip. A "Failed to load model" return means the model isn't in text_encoders or transformers is too old for the Qwen2.5-Omni classes. And don't expect ASID to be fast: processing video frames plus audio is heavier than a single-image caption, so batch long clips in smaller pieces rather than one giant file. Keep max_side modest unless you need frame detail - video VRAM adds up fast.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| model_path | COMBO | 0 options: | |
| dtype | COMBO | auto | 3 options: auto, 4bit, 8bit |
| keep_model_loaded | BOOLEAN | false | — |
| unload_other_models | BOOLEAN | true | — |
| lang | COMBO | 中文 | 2 options: 中文, English |
| video_path | STRING | — | |
| use_audio | BOOLEAN | true | — |
| max_side | INT | 504252–2240 | — |
| instructionopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |