FFMPEG Agent
Describe the edit, get an ffmpeg pipeline — and you don't even need an LLM
- images_a
- image_a
- audio_a
- mask
- images
- audio
- video_path
- command_log
- analysis
- mask_overlay_path
- mask_points
- image_path
- mask
FFMPEG Agent is the flagship node of the ComfyUI-FFMPEGA pack, and it does the thing that sounds fake until you try it: you type "add a cinematic letterbox, fade in, then compress for web at 720p" and it builds and runs the actual ffmpeg command chain. It's a natural-language front end over one of the most obtuse CLIs ever written - 200+ skills mapped to ffmpeg filters, from brightness and vignette up to Whisper subtitles and SAM3 masking.
Here's the part people miss: the name is a lie, or at least an aspiration. The agent doesn't call any API by default and needs no key. llm_model defaults to none, and no_llm_mode defaults to manual - meaning the node can execute an Effects Builder pipeline directly with zero AI involved. The LLM is a mode, not a requirement. That's the right design, honestly: an LLM guessing at ffmpeg filter syntax is a genuinely dicey proposition, and the manual path is how the pack stays deterministic.
The inputs that matter
video_path- absolute path to the source video. Used as the ffmpeg input unless you connect frames viaimages_a.prompt- the natural-language instruction ("Speed up 2x, keep the audio pitch"). Not needed in manual mode.llm_model-none(no-LLM), local Ollama models (qwen3:8b, llama3.3, etc.), CLI tools (gemini-cli, claude-cli - no API key, but they need Node.js 18+), or cloud APIs (gpt-, claude-, gemini-* - those wantapi_key). Orcustomto type any model name.no_llm_mode- what to do whenllm_modelisnone:manual(Effects Builder pipeline), or the direct AI modes -sam3_masking,transcribe,karaoke_subtitles,generate_audio,lip_sync,animate_portrait,video_depth,flux_klein,minimax_remover,ai_upscale,rembg.quality_preset- draft → lossless;crfandencoding_presetoverride it if you know what you're doing.pipeline_json- where the Effects Builder connects. In manual mode it's executed directly; with an LLM it serves as skill hints.
You'll also want preview_mode (quick 480p/10s check before committing to a full render), save_output, use_vision (embeds frames as images for vision models - costs more tokens), and verify_output, which makes the agent re-inspect its render and auto-correct if it didn't match intent. Outputs: images, audio, the rendered video_path, plus command_log (the actual ffmpeg command - great for learning) and analysis.
Installing it
ComfyUI Manager → search ComfyUI-FFMPEGA → Install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/AEmotionStudio/ComfyUI-FFMPEGA.git
cd ComfyUI-FFMPEGA
pip install -r requirements.txt
Restart ComfyUI. Requirements: ffmpeg on PATH (ffmpeg -version), Python 3.10+. Ollama is optional (for local models - ollama pull qwen2.5:8b), Node.js 18+ only for the CLI model connectors. The AI modes auto-download their models on first use - SAM3 ~300 MB, Whisper up to ~3 GB, MuseTalk, LivePortrait, and the big one, FLUX Klein 4B at ~15 GB. allow_model_downloads on the node turns that off.
Common issues
If nothing runs, it's almost always ffmpeg not on PATH. Ollama models failing usually means the server isn't running (ollama serve) or the model isn't pulled. Empty LLM responses are often a still-loading model or a prompt too long for the context window - retry or swap models. The README's best practical advice is worth taking seriously: one task per run. Chain ten edits into one prompt and the agent's attention splits; do the trim, save, then load the result and do the color grade. On low VRAM, same rule for model-loading tasks - one per run, because SAM3 + Whisper in one pass will OOM a 12 GB card.
One more thing, with the pack's own framing in mind: this is an LLM-driven node, and LLM-driven nodes are exactly the category the community has learned to be careful with (the ComfyUI_LLMVISION malware incident ran on the same "downloads its own model" trust model). This one is open source, GPLv3, from an author with multiple established packs - but if you don't need the LLM, the manual path is genuinely the safer, cheaper default anyway. On the frontier of "describe it in English," you're paying for convenience, not capability.
Inputs (240)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Natural language instruction describing the desired edit. Examples: 'Add a cinematic letterbox', 'Speed up 2x', 'Apply a vintage VHS look'. | |
| video_path | STRING | Absolute path to the source video file. Used as the ffmpeg input unless images are connected. | |
| llm_model | COMBO | none | AI model for interpreting your prompt. CLI models (gemini-cli, claude-cli, etc.) use locally installed CLI tools — no API key needed. Ollama models run locally via the Ollama server. Select 'custom' to type any Ollama model name manually. Select 'none' to skip the LLM entirely and use no_llm_mode instead (manual pipeline, SAM3, Whisper, or MMAudio). |
| no_llm_mode | COMBO | manual | What to do when llm_model is 'none'. 'manual' runs the Effects Builder pipeline directly (no AI). 'sam3_masking' uses the prompt as a SAM3 text target. 'transcribe' runs Whisper speech-to-text and burns SRT subtitles. 'karaoke_subtitles' runs Whisper and burns word-by-word karaoke subtitles. 'generate_audio' uses MMAudio to synthesize audio from video/prompt. 'generate_music' uses AudioX to generate music from video/prompt (CC-BY-NC). 'foundation1' uses Foundation-1 to generate BPM/key-aware music loops from prompt. 'fish_speech' uses Fish Speech S2 Pro for text-to-speech with voice cloning and emotion control (80+ languages). 'audio_inpaint' uses AudioX to inpaint/complete audio (CC-BY-NC). 'audio_separate' uses SAM-Audio to isolate specific sounds from audio — prompt describes what to isolate (e.g. 'drums', 'vocals'). 'lip_sync' uses MuseTalk to sync lip movements to connected audio_a. 'animate_portrait' uses LivePortrait to animate a face — connect driving video to video_a. 'marigold' runs Marigold dense vision analysis (depth/normals/intrinsics) — choose output via marigold_output_type. 'normalcrafter' runs NormalCrafter for temporally-consistent video surface normals — choose res via normalcrafter_max_res. 'video_depth' runs Video Depth Anything for temporally-consistent depth — choose encoder via video_depth_encoder. 'sapiens2' runs Meta Sapiens2 human-centric vision — choose task via sapiens2_task (pose/seg/normal/pointmap/matting/pretrain) and model size via sapiens2_size (⚠️ Meta Proprietary license: no surveillance/biometric/deepfake use). 'flux_klein' runs FLUX Klein editing directly — prompt is the edit instruction, works on images and videos (full-frame, no mask needed). 'rembg' removes the video background using AI segmentation — choose model via rembg_model and background via rembg_background. 'video_matting' runs MatAnyone2 temporal video matting — uses SAM3 for auto-mask or connect mask to image_a. Choose output via matting_output (⚠️ non-commercial license). 'onion_skin' applies temporal ghosting (onion skin) — adjust blend mode, opacity, and trail decay in advanced options. 'svi' runs SVI 2.0 Pro (Stable Video Infinity) to generate infinite-length videos — connect reference image to image_a, prompts are newline-separated (one per clip). 'sharp' runs Apple SHARP for single-image 3D Gaussian view synthesis — connect image to image_a, renders a camera trajectory video in <1s (⚠️ research license). 'phyfps' runs Visual Chronometer to predict the physical frame rate (PhyFPS) of the video — choose action via phyfps_action. 'comparison' creates a comparison video from two inputs (before/after) — connect video_a as the 'after' video. Styles: swipe, split, side_by_side, diagonal, circular_reveal, difference. |
| quality_preset | COMBO | standard | Output quality level. 'draft' is fast/low quality, 'standard' is balanced, 'high' is slow/best quality, 'lossless' preserves full quality. |
| seed | INT | 00–18446744073709550000 | Change this value to force re-execution with the same prompt. Use the randomize control to auto-increment between runs. |
| images_aopt | IMAGE | Video input as image frames (e.g. from Load Video Upload). Connect additional video inputs and more slots appear automatically (images_b, images_c, ...). Used for concat, split screen, and multi-video workflows. | |
| image_aopt | IMAGE | Extra image/video input. Connect additional inputs and more slots appear automatically (image_b, image_c, ...). Used for multi-input skills like grid, slideshow, overlay, concat, and split screen. | |
| audio_aopt | AUDIO | Audio input. Connect additional audio and more slots appear automatically (audio_b, audio_c, ...). Used for muxing audio into video, lip sync, or for multi-audio skills like concat. | |
| video_aopt | STRING | File path to an extra video for concat, split screen, grid, or xfade. Uses zero extra memory vs tensor inputs. Connect and more slots appear (video_b, video_c, ...). Connect a primitive STRING node or any node that outputs a file path. | |
| image_path_aopt | STRING | File path to an image for overlay, grid, slideshow, or multi-image skills. Uses zero memory vs IMAGE tensor. Connect and more slots appear (image_path_b, image_path_c, ...). Use Load Image Path (FFMPEGA). | |
| text_aopt | STRING | Text input for subtitles, overlays, watermarks, or title cards. Connect an FFMPEGA Text node or any STRING source. More slots appear automatically (text_b, text_c, ...). | |
| pipeline_jsonopt | STRING | Connect the output from the FFMPEGA Effects Builder node here. The agent will inject the selected effects as hints into your prompt. | |
| mask_pointsopt | STRING | JSON-encoded point selection data from the Load Image/Video Path node's Point Selector. Guides SAM3 masking with click-to-select points instead of relying on text prompts alone. | |
| crop_dataopt | STRING | JSON-encoded crop rectangle from the Load Video Path or Frame Extract node's Crop Selector. Format: {"x":N, "y":N, "w":N, "h":N}. Crops the input video before processing. | |
| maskopt | MASK | Optional upstream MASK pass-through. When connected, this binary mask tensor is forwarded to the mask output for downstream compositing. | |
| save_outputopt | BOOLEAN | false | When On, saves video and a workflow PNG to the output folder. Turn Off when a downstream Save node handles output to avoid double saves. Note: downstream nodes may re-encode with their own settings (format, quality, resolution), so the final saved file may differ from FFMPEGA's output. |
| output_pathopt | STRING | Custom output file or folder path. Leave empty to save to ComfyUI's default output directory. | |
| ollama_urlopt | STRING | http://localhost:11434 | URL of the Ollama server for local LLM inference. Default: http://localhost:11434. |
| custom_modelopt | STRING | When 'custom' is selected in llm_model, type the exact Ollama model name here — useful for models the dropdown doesn't list, such as ones on a remote server set via ollama_url. | |
| use_visionopt | BOOLEAN | false | When On, embeds video frames as images for vision-capable models (uses more tokens). When Off, uses numeric color analysis instead (cheaper, works with all models). |
| verify_outputopt | BOOLEAN | false | When On, the agent inspects the output video after rendering and auto-corrects if it doesn't match intent. Adds one extra LLM call (more tokens/time). Best for complex edits like overlays, color grading, or animations. |
| advanced_optionsopt | BOOLEAN | false | Show advanced options: preview, encoding, SAM3/Whisper tuning, FLUX smoothing, MMAudio mode, SAM-Audio model, batch processing, and usage tracking. |
| preview_modeopt | BOOLEAN | false | When enabled, generates a quick low-res preview (480p, first 10 seconds) instead of a full render. |
| subtitle_pathopt | STRING | Direct path to a subtitle file (.srt or .ass). Alternative to using text_a with subtitle mode. | |
| crfopt | INT | -1-1–51 | Override CRF (Constant Rate Factor) for output quality. 0 = lossless, 23 = default, 51 = worst. Set to -1 to use quality_preset value. |
| encoding_presetopt | COMBO | auto | Override x264/x265 encoding speed preset. Slower = better compression. 'auto' uses the quality_preset value. |
| whisper_deviceopt | COMBO | cpu | Device for Whisper transcription model. 'gpu' is faster but uses ~3 GB VRAM (frees ComfyUI models first). 'cpu' is slower but avoids VRAM pressure — best for low-VRAM GPUs or intensive workflows. |
| whisper_modelopt | COMBO | large-v3 | Whisper model size for transcription. 'large-v3' is most accurate (~3 GB VRAM). Smaller models use less memory: medium (~1.5 GB), small (~1 GB), base (~150 MB), tiny (~75 MB). Models auto-download on first use. |
| sam3_max_objectsopt | INT | 21–20 | Maximum number of objects SAM3 will track per frame. Lower values reduce VRAM usage. Objects are ranked by detection confidence — lowest-confidence detections are dropped first. |
| sam3_det_thresholdopt | FLOAT | 0.700–1 | Minimum detection confidence for SAM3 to track a new object (0.0–1.0). Higher values = fewer objects tracked = less VRAM. Default 0.7 filters out low-confidence detections. |
| mask_output_typeopt | COMBO | black_white | Mask preview output format. 'black_white' outputs a raw B&W mask video (white = detected object) for use in external compositing. 'colored_overlay' composites colored SAM3-style regions + contours onto the video. |
| use_sam3opt | BOOLEAN | false | Enable SAM3 pre-masking for no-LLM modes. When ON, the prompt text is used as a SAM3 target to mask specific objects before the effect runs. The effect is then composited onto the original via the mask. Works with: lip_sync, animate_portrait, marigold, normalcrafter, video_depth, flux_klein, minimax_remover, ai_upscale, rembg, onion_skin, comparison. |
| use_flux_kleinopt | BOOLEAN | false | Enable FLUX Klein 4B for AI-powered object removal (auto_mask:effect=remove) and text-guided editing (auto_mask:effect=edit). OFF by default to avoid high VRAM usage (~8–15 GB). When OFF, removal falls back to MiniMax-Remover (if enabled) or LaMa (~200 MB) and editing uses lightweight FFmpeg filter approximations. |
| flux_smoothingopt | COMBO | none | Temporal smoothing for FLUX Klein effects (remove/edit). 'none' = no smoothing (fastest, least VRAM). 'gaussian' = Gaussian blur across time (reduces flicker, +700 MiB RAM). 'adaptive' = per-pixel deviation check, only smooths outlier frames (+700 MiB RAM). |
| flux_image_sourceopt | BOOLEAN | false | When On, use the first connected image (image_a or image_path_a) as the source to edit. Subsequent images (image_path_b, etc.) become style references. When Off, the source comes from video_path as usual. Only used when no_llm_mode = 'flux_klein'. |
| flux_klein_stepsopt | INT | 41–50 | Number of denoising steps (used in 'flux_klein' no_llm_mode). 4 = fast (~2s/frame), 20+ = higher quality but slower. Klein is distilled so low step counts work well. |
| flux_klein_guidanceopt | FLOAT | 1.00–10 | Classifier-free guidance scale (used in 'flux_klein' no_llm_mode). 1.0 = creative/natural. 4.0+ = strict prompt adherence. Klein is distilled so guidance_scale=1.0 is typically optimal. |
| flux_klein_seedopt | INT | 420–2147483647 | Random seed for reproducibility (used in 'flux_klein' no_llm_mode). Different seeds produce different edit variations. |
| flux_klein_widthopt | INT | 1024256–2048 | Output width in pixels (used in 'flux_klein' no_llm_mode). Must be divisible by 32. Result is resized back to input dimensions after editing. |
| flux_klein_heightopt | INT | 1024256–2048 | Output height in pixels (used in 'flux_klein' no_llm_mode). Must be divisible by 32. Result is resized back to input dimensions after editing. |
| flux_klein_modelopt | COMBO | 4b | FLUX Klein model size (used in 'flux_klein' no_llm_mode and auto_mask remove/edit when FLUX is enabled). '4b' = ~15 GB, fast (default). '9b' = ~35 GB bf16, higher quality but slower. '9b_fp8' = 9B with FP8 transformer from ComfyUI/models/diffusion_models/flux-2-klein-9b-fp8.safetensors (must be present locally). Weights download on first use into ComfyUI/models/flux_klein/ (4b) or flux_klein_9b/ (9b/9b_fp8). |
| use_kiwi_editopt | BOOLEAN | false | Enable Kiwi-Edit 5B for AI-powered video editing (auto_mask:effect=edit). Provides native video-level editing with temporal consistency. Takes priority over FLUX Klein for edit effects when both are enabled. OFF by default to avoid high VRAM usage (~10–16 GB). |
| kiwi_modelopt | COMBO | auto | Kiwi-Edit model variant (used in 'kiwi_edit' no_llm_mode). 'auto' = auto-select based on inputs (prompt → instruct, ref image → reference, both → instruct_reference). 'instruct' = text instruction only. 'reference' = reference image only. 'instruct_reference' = both text + reference image. |
| kiwi_precisionopt | COMBO | auto | Kiwi-Edit weight precision. 'auto' = prefer FP8 if available, fall back to BF16 (~10 GB). 'fp8' = FP8 scaled (~5 GB, half VRAM). 'bf16' = full BF16 precision (~10 GB). Run scripts/convert_kiwi_edit_fp8.py to create the FP8 model. |
| kiwi_resolutionopt | COMBO | 640 | Kiwi-Edit output resolution. 'auto' = match input resolution (capped at 720p). '480p' = 480×640 (fast, lower VRAM). '512' = 512×512 (fast, square). '640' = 640×640 (balanced, recommended). '720p' = 720×1280 (highest quality, high VRAM). 'custom' = use kiwi_width/kiwi_height values. |
| kiwi_widthopt | INT | 640128–1920 | Custom width for Kiwi-Edit output (only used when kiwi_resolution='custom'). Must be a multiple of 16. |
| kiwi_heightopt | INT | 640128–1920 | Custom height for Kiwi-Edit output (only used when kiwi_resolution='custom'). Must be a multiple of 16. |
| kiwi_max_framesopt | INT | 00–161 | Maximum frames per Kiwi-Edit processing chunk. 0 = auto (match input video frame count). Higher = more temporal context but more VRAM. Lower = faster with less VRAM. |
| kiwi_stepsopt | INT | 501–100 | Number of inference steps for Kiwi-Edit. Default 50. Lower = faster but lower quality. |
| kiwi_guidanceopt | FLOAT | 5.01–20 | Classifier-free guidance scale for Kiwi-Edit. Default 5.0. Higher = stronger prompt adherence. |
| kiwi_block_swapopt | INT | 00–40 | Kiwi-Edit BlockSwap: number of transformer blocks to offload to CPU. 0 = disabled (keep on GPU). 4-16 = saves VRAM for lower-end cards. |
| kiwi_long_videoopt | BOOLEAN | false | Enable chunked processing for videos longer than kiwi_max_frames. Splits into overlapping chunks, processes each, and stitches with crossfade blending. |
| kiwi_seedopt | INT | 00–2147483647 | Random seed for Kiwi-Edit. 0 = random seed each run. Set a fixed value for reproducible results. |
| kiwi_flow_shiftopt | FLOAT | 5.01–15 | Flow matching shift for the UniPC scheduler. Default 5.0. Higher values = more aggressive denoising (stronger edits). Lower values = subtler, more conservative changes. |
| kiwi_task_typeopt | COMBO | auto | Override automatic task type detection for prompt enhancement. 'auto' = detect from keywords in prompt. 'global_style' = style/aesthetic changes (e.g. 'make it look like a painting'). 'local_change' = change a specific object (e.g. 'change shirt to red'). 'background_change' = change background only. 'local_remove' = remove an object. 'local_add' = add a new object. |
| kiwi_scheduleropt | COMBO | unipc | Scheduler (sampler) for Kiwi-Edit denoising. 'unipc' = UniPC predictor-corrector (default, fast convergence at 30 steps). 'euler' = Flow Match Euler (original model default, needs ~50 steps). 'heun' = Flow Match Heun (higher quality per step, 2x cost). 'dpm++' = DPM++ Multistep (alternative fast solver). |
| use_minimax_removeropt | BOOLEAN | false | Enable MiniMax-Remover for high-quality video object removal (auto_mask:effect=remove). Uses a purpose-built DiT model (~2.5 GB, ~5–8 GB VRAM). Takes priority over FLUX Klein for removal when both are enabled. When OFF, removal falls back to FLUX Klein (if enabled) or LaMa (~200 MB). |
| use_dreamid_omniopt | BOOLEAN | false | ⚠️ EXPERIMENTAL / WORK IN PROGRESS — Quality may be poor on low-VRAM GPUs. Enable DreamID-Omni for identity-preserving video generation with speech. Generates video where subjects speak with their voice and face identity preserved. Heavy model (~15+ GB VRAM). OFF by default for low-VRAM GPUs. Requires face image(s) on image_a and reference audio on audio_a. |
| dreamid_precisionopt | COMBO | auto | DreamID-Omni model precision. 'auto' = prefer FP8 if available (~12 GB), else BF16 (~23 GB). 'fp8' = FP8 quantized (fastest, lowest VRAM, requires converted checkpoint). 'bf16' = BFloat16 (best quality, higher VRAM). |
| dreamid_resolutionopt | COMBO | auto | DreamID-Omni output resolution (used in 'dreamid_omni' no_llm_mode). 'auto' = pick based on available VRAM (~30+ GB → 1280x704, else 992x512). '992x512' = standard quality, lower VRAM (~20 GB). '1280x704' = high quality, higher VRAM (~30+ GB). |
| dreamid_stepsopt | INT | 501–100 | Number of diffusion sampling steps for DreamID-Omni. Default 50. Lower = faster but lower quality. |
| dreamid_seedopt | INT | 1000–2147483647 | Random seed for DreamID-Omni. Set a fixed value for reproducible results. |
| dreamid_solveropt | COMBO | unipc | Solver for DreamID-Omni denoising. 'unipc' = UniPC predictor-corrector (default, fast). 'euler' = Flow Match Euler. 'dpm++' = DPM++ Multistep. |
| dreamid_video_cfgopt | FLOAT | 3.01–10 | Video classifier-free guidance scale. Higher = stronger prompt adherence. Default 3.0. |
| dreamid_video_ref_cfgopt | FLOAT | 1.50–5 | Video reference (face identity) guidance scale. Higher = stronger identity preservation. Default 1.5. |
| dreamid_audio_cfgopt | FLOAT | 4.01–10 | Audio classifier-free guidance scale. Higher = stronger audio guidance. Default 4.0. |
| dreamid_audio_ref_cfgopt | FLOAT | 2.00–5 | Audio reference guidance scale. Higher = stronger voice identity preservation. Default 2.0. |
| scail2_widthopt | INT | 51232–2048 | Output width in px (used in 'scail2' no_llm_mode). Snapped to a multiple of 32. |
| scail2_heightopt | INT | 89632–2048 | Output height in px (used in 'scail2' no_llm_mode). Snapped to a multiple of 32. |
| scail2_lengthopt | INT | 815–100000 | Number of frames to generate (used in 'scail2' no_llm_mode). SCAIL-2 is trained on 81-frame chunks (4n+1); values above 81 are generated chunk-by-chunk (extend), each anchored on the previous chunk's tail for coherence. Limited by the driving video length. |
| scail2_pose_extendopt | COMBO | pingpong | When length exceeds the driving video, how to keep guiding motion past where the pose runs out (used in 'scail2' no_llm_mode). 'pingpong' bounces the motion forward/back (smoothest); 'loop' repeats from the start; 'hold_last' freezes on the final pose; 'none' lets the model freely hallucinate the tail. No effect when length ≤ driving frames. |
| scail2_stepsopt | INT | 61–100 | Diffusion sampling steps (used in 'scail2' no_llm_mode). 6 suits the distill-LoRA fast path; raise for full-step quality. |
| scail2_cfgopt | FLOAT | 1.01–15 | Classifier-free guidance scale (used in 'scail2' no_llm_mode). 1.0 for the distill-LoRA fast path. |
| scail2_shiftopt | FLOAT | 5.00–100 | ModelSamplingSD3 shift (used in 'scail2' no_llm_mode). Default 5.0. |
| scail2_seedopt | INT | 00–2147483647 | Random seed (used in 'scail2' no_llm_mode). 0 = first seed. |
| scail2_sampleropt | COMBO | euler | Sampler (used in 'scail2' no_llm_mode). 'euler' matches the reference SCAIL-2 workflow. |
| scail2_scheduleropt | COMBO | simple | Scheduler (used in 'scail2' no_llm_mode). 'simple' matches the reference SCAIL-2 workflow. |
| scail2_denoiseopt | FLOAT | 1.000–1 | Denoise strength (used in 'scail2' no_llm_mode). 1.0 = full denoise. |
| scail2_replacement_modeopt | BOOLEAN | false | Replacement vs Animation mode (used in 'scail2' no_llm_mode). False = Animation (drive the reference character with the video's pose). True = Replacement (swap the masked subject into the driving scene). |
| scail2_sort_byopt | COMBO | left_to_right | Palette assignment order across the colored masks (used in 'scail2' no_llm_mode). Keeps each identity the same color in the reference and pose-video masks. |
| scail2_object_indicesopt | STRING | Comma-separated subject indices to keep, e.g. '0,2' (used in 'scail2' no_llm_mode). Empty = all detected subjects. | |
| scail2_composite_directionopt | COMBO | horizontal | How multiple reference images (image_b, image_c, …) are composited into the single SCAIL-2 reference (used in 'scail2' no_llm_mode). Only matters with 2+ references. |
| scail2_main_referenceopt | COMBO | last | Which connected reference is the 'main' one — it's CLIP-vision encoded, so it drives identity most strongly (used in 'scail2' no_llm_mode). 'last' matches the workflow convention that the last/closest reference is the strongest. |
| scail2_color_matchopt | BOOLEAN | false | On long extends (length > 81), color-match each chunk to the previous chunk's last frame (Reinhard) to stop slow exposure/hue drift (used in 'scail2' no_llm_mode). No effect on single-chunk (≤81-frame) runs. |
| scail2_blockswap_blocksopt | INT | 00–40 | Wan 2.1 transformer blocks (of 40) worth of weights kept in CPU RAM during sampling (block swap). 0 = disabled. Higher = less VRAM, slower. Try 4-8 if you hit OOM. Only used when no_llm_mode = 'scail2'. |
| scail2_tiled_vaeopt | BOOLEAN | false | Decode video latents with tiled VAE to reduce VRAM spikes during decode. Use if VAE decode OOMs. Only used when no_llm_mode = 'scail2'. |
| scail2_subjectopt | STRING | person | What SAM 3.1 should segment for the mask (used in 'scail2' no_llm_mode) — a SHORT noun like 'person', 'bear', 'dog'. Keep this separate from the animation prompt: a full sentence makes SAM over-detect, giving splotchy multi-colored masks. For mixed subjects, separate with ';' (e.g. 'man; dog') — each is detected as its own identity/color. Ignored when mask_points are supplied. |
| scail2_max_objectsopt | INT | 11–6 | How many subjects (identities) SAM 3.1 tracks (used in 'scail2' no_llm_mode). 1 = single character (mask is solid blue, the most stable). Raise for multi-person; each identity gets its own color. Auto-raised to the number of reference images you connect. |
| scail2_detection_thresholdopt | FLOAT | 0.500–1 | SAM 3.1 new-object detection confidence (used in 'scail2' no_llm_mode). Higher = fewer/cleaner detections (less likely to pick up spurious extra subjects). Matches SAM3 Video Track. |
| scail2_detect_intervalopt | INT | 21–30 | How often (in frames) SAM 3.1 re-runs detection for NEW objects (used in 'scail2' no_llm_mode). Higher = more stable identities / less color flicker; lower = catches subjects that appear later. Matches SAM3 Video Track (default 2). |
| scail2_point_src_widthopt | INT | 00–8192 | Override the coordinate-space WIDTH of mask_points (used in 'scail2' no_llm_mode). 0 = auto (taken from the point selector's image_width). Set only if your points come from a source that doesn't report its dimensions. |
| scail2_point_src_heightopt | INT | 00–8192 | Override the coordinate-space HEIGHT of mask_points (used in 'scail2' no_llm_mode). 0 = auto (taken from the point selector's image_height). |
| scail2_lora_aopt | COMBO | none | LoRA slot A for SCAIL-2 (used in 'scail2' no_llm_mode). Select a LoRA file (e.g. lightx2v distill, DPO). Selecting a value reveals the next slot. |
| scail2_lora_bopt | COMBO | none | LoRA slot B for SCAIL-2 (used in 'scail2' no_llm_mode). Select a LoRA file (e.g. lightx2v distill, DPO). Selecting a value reveals the next slot. |
| scail2_lora_copt | COMBO | none | LoRA slot C for SCAIL-2 (used in 'scail2' no_llm_mode). Select a LoRA file (e.g. lightx2v distill, DPO). Selecting a value reveals the next slot. |
| scail2_lora_dopt | COMBO | none | LoRA slot D for SCAIL-2 (used in 'scail2' no_llm_mode). Select a LoRA file (e.g. lightx2v distill, DPO). Selecting a value reveals the next slot. |
| scail2_lora_strength_aopt | FLOAT | 1.000–2 | Strength for SCAIL-2 LoRA slot A (used in 'scail2' no_llm_mode). 1.0 = full strength. |
| scail2_lora_strength_bopt | FLOAT | 1.000–2 | Strength for SCAIL-2 LoRA slot B (used in 'scail2' no_llm_mode). 1.0 = full strength. |
| scail2_lora_strength_copt | FLOAT | 1.000–2 | Strength for SCAIL-2 LoRA slot C (used in 'scail2' no_llm_mode). 1.0 = full strength. |
| scail2_lora_strength_dopt | FLOAT | 1.000–2 | Strength for SCAIL-2 LoRA slot D (used in 'scail2' no_llm_mode). 1.0 = full strength. |
| sam_audio_modelopt | COMBO | base | SAM-Audio model variant for audio_separate mode. 'base' = 3.6 GiB BF16 (default). 'base-fp8' = 1.8 GiB FP8 scaled (half VRAM, ~same quality). 'large-fp8' = 3.5 GiB FP8 scaled (large quality at base VRAM — recommended). 'large' = 6.9 GiB BF16 (best quality, needs 12+ GB VRAM). Models auto-download on first use. |
| marigold_output_typeopt | COMBO | depth | Marigold output type (used in 'marigold' no_llm_mode or agentic mode). 'depth' = monocular depth map. 'normals' = surface normals. 'appearance' = albedo + roughness + metallicity. 'lighting' = albedo + shading + residual. |
| marigold_colormapopt | COMBO | Spectral | Depth map colormap (used in 'marigold' no_llm_mode, depth output only). 'Spectral' = standard red-to-blue depth map. 'gray' = B&W depth (for ControlNet/compositing). Others are artistic colormaps for creative visualization. |
| normalcrafter_max_resopt | COMBO | auto | NormalCrafter max resolution (used in 'normalcrafter' no_llm_mode). 'auto' = auto-detect GPU VRAM and pick the safest resolution (~12 GB → 768, ~8 GB → 512). '1024' = highest quality (needs ~12+ GB VRAM). '768' = balanced quality/VRAM (~8–12 GB). '512' = lowest VRAM (~6 GB). |
| video_depth_encoderopt | COMBO | vits | Video Depth Anything model size (used in 'video_depth' no_llm_mode or agentic mode). 'vits' = Small (~7 GB, fastest). 'vitb' = Base (~12 GB). 'vitl' = Large (~24 GB, best quality). |
| video_depth_colormapopt | COMBO | gray | Depth map colormap (used in 'video_depth' no_llm_mode). 'gray' = standard B&W depth (for ControlNet/compositing). Others are artistic colormaps for creative visualization. |
| sapiens2_taskopt | COMBO | pose | Sapiens2 task (used in 'sapiens2' no_llm_mode). 'pose' = 308-keypoint top-down pose (body+face+hands+feet) — needs DETR detector (auto-downloaded). 'seg' = 29-class human body-part segmentation overlay. 'normal' = per-pixel surface normals. 'pointmap' = 3D pointmap (z-channel visualized via turbo colormap). 'matting' = human matting (alpha composited on green; 1B only). 'pretrain' = raw backbone features (PCA-visualized RGB). |
| sapiens2_sizeopt | COMBO | 1b | Sapiens2 model size (used in 'sapiens2' no_llm_mode). '0.4b' = ~1–2 GB VRAM, fast. '0.8b' = ~2–4 GB VRAM. '1b' = ~3–6 GB VRAM, balanced (recommended default). '5b' = ~10 GB fp16 / ~20 GB fp32 (auto-picks fp8 on RTX 40-series+), best quality. '5b (fp8)' = quantized 5B, ~5 GB VRAM, needs fp8-capable GPU (compute cap >= 8.9, RTX 40-series+); auto-downloads the pre-converted *_fp8.safetensors from the mirror (dense tasks only — pose/pretrain ignore it). Note: matting task only ships in 1B. |
| sapiens2_seg_alphaopt | FLOAT | 0.500–1 | Segmentation overlay opacity (0=invisible, 1=opaque). Only used when sapiens2_task = 'seg'. |
| sapiens2_pose_kpt_thropt | FLOAT | 0.300–1 | Pose keypoint visualization threshold (only keypoints with score >= threshold are drawn). Only used when sapiens2_task = 'pose'. |
| sapiens2_pose_radiusopt | INT | 61–32 | Keypoint marker radius in pixels. Only used when sapiens2_task = 'pose'. |
| sapiens2_pose_thicknessopt | INT | 41–32 | Skeleton line thickness in pixels. Only used when sapiens2_task = 'pose'. |
| upscale_modelopt | COMBO | realesrgan_x4plus | AI upscaler model (used in 'ai_upscale' no_llm_mode). 'realesrgan_x4plus' = fast general-purpose. 'realesrgan_x4_anime' = anime/cartoon. 'hat_x4' = SOTA quality (Real-HAT-GAN). 'dat_x4' = balanced (DAT-2). 'swinir_x4' = classical SR. 'seedvr2_3b_int8' = INT8 diffusion upscaler, recommended 3B — fastest and smallest (~6-9 GB VRAM). 'seedvr2_7b_int8' = INT8 diffusion upscaler, recommended 7B — highest quality (~10-14 GB VRAM, use blockswap_blocks under 16 GB). 'seedvr2_3b_fp8' = diffusion upscaler, great quality (~8-12 GB VRAM). 'seedvr2_3b_gguf' = diffusion upscaler, lowest VRAM (~6-8 GB). 'seedvr2_7b_fp8' = highest quality diffusion upscaler (~16-24 GB VRAM). 'seedvr2_7b_fp8_mixed' = 7B with fp16 last block, fixes 7B seam/grid artifacts (recommended 7B, ~16-24 GB VRAM). 'seedvr2_7b_gguf' = highest quality diffusion upscaler, quantized (~8-12 GB VRAM). 'flashvsr_full' = FlashVSR one-step diffusion, best quality (~12-16 GB VRAM). 'flashvsr_tiny' = FlashVSR fast mode with TCDecoder (~8-12 GB VRAM). 'flashvsr_tiny_long' = FlashVSR streaming for long videos, low VRAM (~8-12 GB). 'rtx_vsr' = NVIDIA RTX Video Super Resolution (hardware-accelerated, RTX GPU required). |
| upscale_scaleopt | COMBO | 4 | AI upscale factor (used in 'ai_upscale' no_llm_mode). '4' = 4× resolution. '2' = 2× resolution. |
| seedvr_resolutionopt | COMBO | 1080 | SeedVR2 target output resolution (shortest edge, in pixels). '1080' = 1080p (default, recommended). '720' = 720p (faster, lower VRAM). '1440' = 1440p/2K (higher quality). '2160' = 4K (highest quality, high VRAM). Only applies when a SeedVR2 upscale model is selected. |
| blockswap_blocksopt | INT | 0-1–32 | BlockSwap: number of DiT blocks to offload to CPU during inference (applies to SeedVR2 and FlashVSR diffusion upscalers). Streams model WEIGHTS only — does not reduce activation/decode memory. 0 = disabled (default, manual). -1 = auto (size from free VRAM; FlashVSR only). 4-30 = stream that many DiT blocks. For SeedVR2, -1 behaves the same as 0 (disabled). |
| flashvsr_processingopt | COMBO | whole | FlashVSR memory/quality strategy (bounds ACTIVATION/decode memory, the real OOM limiter). 'whole' = one whole-frame pass, best quality (use the 'flashvsr_tiny_long' model for long clips — it streams over time). 'temporal' = slide over frames in windows of flashvsr_frame_window (no spatial tiling; keeps spatial quality). 'spatial' = split each frame into tiles (lowest quality, seams; uses the VAE tile size). Only applies to FlashVSR models. |
| flashvsr_frame_windowopt | INT | 00–200 | FlashVSR temporal window: frames processed per pass when flashvsr_processing='temporal'. 0 = whole clip. Smaller = less VRAM, more passes. Minimum effective window is 21 frames. Ignored for 'flashvsr_tiny_long' (it streams internally). |
| flashvsr_color_fixopt | BOOLEAN | true | FlashVSR AdaIN/wavelet color correction (matches output color to the low-res input). On = stable colors; can flatten enhancement. Off = raw model output (matches the reference workflow, often sharper/more contrasty). Only applies to FlashVSR models. |
| flashvsr_decode_tileopt | INT | 5120–2048 | FlashVSR decoder spatial tile size in pixels (tiny / tiny_long). The decode step is the usual OOM point at high resolution; tiling it is near-lossless (unlike tiling the DiT). 512 fits ~12 GB at 1024². 0 = whole-frame decode (may OOM). Smaller = less VRAM. |
| rtx_qualityopt | COMBO | ULTRA | RTX VSR quality preset (used when 'rtx_vsr' upscale model is selected). ULTRA/HIGH/MEDIUM/LOW = upscale quality levels. DENOISE_* = same-resolution denoising. DEBLUR_* = same-resolution deblurring. Requires NVIDIA RTX GPU with Tensor Cores. |
| vae_tilingopt | BOOLEAN | true | Tiling for diffusion upscalers (SeedVR2 / FlashVSR). On (default) = spatial tiling, lower VRAM, slight seams possible (needed at high scale even with block-swap — it bounds activation memory, which block-swap does not). Off = whole-frame, best quality/no seams, but may OOM at high scale (FlashVSR auto-falls-back to tiles if it does). Only applies when a SeedVR2 or FlashVSR upscale model is selected. |
| vae_tile_presetopt | COMBO | auto | Tile size preset (used when tiling is on). 'auto' = pick by VRAM (SeedVR2) / model default 384px (FlashVSR). A number = square tile of that pixel size (larger = fewer seams, more VRAM). 'custom' = use vae_tile_size / vae_tile_overlap below. |
| vae_tile_sizeopt | INT | 51264–2048 | Custom VAE tile size in pixels (used when vae_tile_preset = 'custom'). |
| vae_tile_overlapopt | INT | 640–512 | Custom VAE tile overlap in pixels for blending (used when vae_tile_preset = 'custom'). |
| rembg_modelopt | COMBO | bria-rmbg | Rembg model (used in 'rembg' no_llm_mode). 'bria-rmbg' = BRIA RMBG (SotA quality, recommended). 'birefnet-general' = BiRefNet high quality. 'birefnet-general-lite' = BiRefNet fast. 'isnet-general-use' = ISNet general. 'u2net' = U²-Net classic. 'silueta' = Silueta (fastest, lightweight). |
| rembg_backgroundopt | COMBO | transparent | Background replacement (used in 'rembg' no_llm_mode). 'transparent' = alpha channel (outputs VP9/WebM). 'green' = green screen for compositing. Other colors fill the background with a solid color. |
| matting_outputopt | COMBO | foreground | MatAnyone2 output type (used in 'video_matting' no_llm_mode). 'foreground' composites subject on chosen background color. 'alpha' outputs grayscale alpha matte video. 'both' outputs foreground + alpha as separate videos. 'green_screen' is an alias for foreground with green background. |
| matting_backgroundopt | COMBO | green | Background color for MatAnyone2 foreground output (used in 'video_matting' no_llm_mode). Choose a solid color for compositing. |
| matting_max_sizeopt | INT | 00–4096 | Resolution cap for MatAnyone2 processing (used in 'video_matting' no_llm_mode). 0 = no limit (process at original resolution). Set to e.g. 512 or 720 to reduce VRAM usage on high-res videos. |
| audio_output_modeopt | COMBO | auto | How to combine AI-generated audio with existing audio. Applies to all audio-generating modes: generate_audio (MMAudio), generate_music (AudioX), foundation1 (Foundation-1), fish_speech (Fish Speech TTS), audio_inpaint (AudioX), audio_separate (SAM-Audio), ace_step. 'auto' lets the LLM decide in agentic mode; defaults to 'replace' in no-LLM modes. 'replace' replaces existing audio entirely. 'mix' blends generated audio with the original track. 'save_only' generates the audio file without muxing it into the video. |
| audio_resample_rateopt | COMBO | off | Resample the audio output to this sample rate. Enable this if your audio effects (e.g. clean_audio with loudnorm) produce non-standard sample rates (like 96kHz) that ComfyUI's Save Audio MP3 node can't handle. 'off' = pass through original sample rate. '44100' = CD quality, universal MP3 compatibility. '48000' = studio quality, universal compatibility. |
| onion_blend_modeopt | COMBO | screen | Blend mode for onion skin ghosting (used in 'onion_skin' no_llm_mode). 'screen' = classic light-table look. 'addition' = bright additive glow. 'difference' = motion-diff visualization. |
| onion_opacityopt | FLOAT | 0.500–1 | Ghost trail opacity (used in 'onion_skin' no_llm_mode). 0.0 = invisible, 1.0 = fully opaque. |
| onion_decayopt | FLOAT | 0.9700.9–0.999 | Temporal decay rate for ghost trails (used in 'onion_skin' no_llm_mode). Higher values = longer, more persistent trails. 0.90 = very short. 0.97 = medium. 0.999 = long persistence. |
| comparison_styleopt | COMBO | swipe | Comparison style (used in 'comparison' no_llm_mode). 'swipe' = animated divider sweeps left-to-right. 'split' = static 50/50 with divider line. 'side_by_side' = full frames side by side. 'diagonal' = diagonal split. 'circular_reveal' = expanding circle reveals 'after'. 'difference' = pixel difference visualization. |
| comparison_labelsopt | COMBO | false | Show Before/After text labels on the comparison output (used in 'comparison' no_llm_mode). |
| comparison_label_aopt | STRING | Before | Label for the main video (left / before) in comparison mode. |
| comparison_label_bopt | STRING | After | Label for the video_a input (right / after) in comparison mode. |
| phyfps_actionopt | COMBO | analyze_only | Action for PhyFPS mode (used in 'phyfps' no_llm_mode). 'analyze_only' predicts the physical frame rate without modifying the video. 'correct' re-times the video so playback speed matches the detected PhyFPS. |
| sharp_trajectoryopt | COMBO | rotate_forward | Camera trajectory type for SHARP 3D view synthesis (used in 'sharp' no_llm_mode). 'rotate_forward' = orbit with zoom, 'swipe' = left-to-right, 'shake' = horizontal + vertical, 'rotate' = full orbit. |
| sharp_num_framesopt | INT | 6010–300 | Number of frames in the SHARP trajectory video (used in 'sharp' no_llm_mode). More frames = smoother/longer video. |
| sharp_max_disparityopt | FLOAT | 0.080.01–0.5 | Lateral camera movement range for SHARP (used in 'sharp' no_llm_mode). Higher = wider camera sweep. |
| sharp_max_zoomopt | FLOAT | 0.150–1 | Zoom intensity for SHARP camera trajectory (used in 'sharp' no_llm_mode). Higher = more forward/backward motion. |
| sharp_save_plyopt | COMBO | false | Export the 3D Gaussian splat as a .ply file (used in 'sharp' no_llm_mode). PLY files are compatible with Luma, Nerfstudio, and other 3DGS viewers. Saved to the standard outputs folder. |
| sharp_deviceopt | COMBO | auto | Device for SHARP inference (used in 'sharp' no_llm_mode). Prediction works on all devices; video rendering requires CUDA. |
| wan_animate_modeopt | COMBO | animate | Wan-Animate mode (used in 'wan_animate' no_llm_mode). 'animate' = transfer motion to reference character. 'replace' = replace person in driving video with reference character. |
| wan_animate_stepsopt | INT | 201–100 | Number of denoising steps (used in 'wan_animate' no_llm_mode). Higher = better quality but slower. 15-30 typical. |
| wan_animate_guidanceopt | FLOAT | 1.00–20 | Classifier-free guidance scale (used in 'wan_animate' no_llm_mode). 1.0 = no guidance (fastest). Higher = more prompt adherence. |
| wan_animate_seedopt | INT | 420–2147483647 | Random seed for reproducibility (used in 'wan_animate' no_llm_mode). |
| wan_animate_num_framesopt | INT | 815–161 | Number of output frames (used in 'wan_animate' no_llm_mode). Must be 4n+1 for Wan 2.2 (e.g. 33, 49, 81, 121). If fewer driving frames exist, uses the driving frame count. |
| wan_animate_heightopt | INT | 480128–1080 | Output height in pixels (used in 'wan_animate' no_llm_mode). Must be divisible by 16. |
| wan_animate_widthopt | INT | 832128–1920 | Output width in pixels (used in 'wan_animate' no_llm_mode). Must be divisible by 16. |
| wan_animate_pose_strengthopt | FLOAT | 1.000–2 | Pose conditioning strength (used in 'wan_animate' no_llm_mode). 1.0 = normal. Higher = stronger pose adherence. |
| wan_animate_face_strengthopt | FLOAT | 1.000–2 | Face conditioning strength (used in 'wan_animate' no_llm_mode). 1.0 = normal. Higher = stronger face identity preservation. |
| wan_animate_lora_aopt | COMBO | none | LoRA slot A for Wan-Animate (used in 'wan_animate' no_llm_mode). Select a LoRA file. Selecting a value reveals the next slot. |
| wan_animate_lora_bopt | COMBO | none | LoRA slot B for Wan-Animate (used in 'wan_animate' no_llm_mode). Select a LoRA file. Selecting a value reveals the next slot. |
| wan_animate_lora_copt | COMBO | none | LoRA slot C for Wan-Animate (used in 'wan_animate' no_llm_mode). Select a LoRA file. Selecting a value reveals the next slot. |
| wan_animate_lora_dopt | COMBO | none | LoRA slot D for Wan-Animate (used in 'wan_animate' no_llm_mode). Select a LoRA file. Selecting a value reveals the next slot. |
| wan_animate_lora_strength_aopt | FLOAT | 1.000–2 | Strength for LoRA slot A (used in 'wan_animate' no_llm_mode). 1.0 = full strength. |
| wan_animate_lora_strength_bopt | FLOAT | 1.000–2 | Strength for LoRA slot B (used in 'wan_animate' no_llm_mode). 1.0 = full strength. |
| wan_animate_lora_strength_copt | FLOAT | 1.000–2 | Strength for LoRA slot C (used in 'wan_animate' no_llm_mode). 1.0 = full strength. |
| wan_animate_lora_strength_dopt | FLOAT | 1.000–2 | Strength for LoRA slot D (used in 'wan_animate' no_llm_mode). 1.0 = full strength. |
| svi_num_clipsopt | INT | 101–200 | Number of clips to generate (used in 'svi' no_llm_mode). Each clip is ~81 frames. More clips = longer video. Only used when no_llm_mode = 'svi'. |
| svi_heightopt | INT | 480128–1080 | Video height in pixels (used in 'svi' no_llm_mode). Only used when no_llm_mode = 'svi'. |
| svi_widthopt | INT | 832128–1920 | Video width in pixels (used in 'svi' no_llm_mode). Only used when no_llm_mode = 'svi'. |
| svi_fpsopt | INT | 151–60 | Frames per second (used in 'svi' no_llm_mode). Only used when no_llm_mode = 'svi'. |
| svi_cfg_scaleopt | FLOAT | 4.01–20 | Classifier-free guidance scale (used in 'svi' no_llm_mode). Higher = more prompt adherence, lower = more creative. Only used when no_llm_mode = 'svi'. |
| svi_overlap_framesopt | INT | 50–20 | Overlap frames between clips for smooth transitions (used in 'svi' no_llm_mode). Only used when no_llm_mode = 'svi'. |
| svi_seed_multiplieropt | INT | 420–2147483647 | Seed multiplier — seed = clip_index × this value (used in 'svi' no_llm_mode). Only used when no_llm_mode = 'svi'. |
| svi_stepsopt | INT | 301–100 | Number of inference/sampling steps per clip. Higher = better quality but slower. 20-40 typical. |
| svi_high_model_ratioopt | FLOAT | 0.500–1 | Fraction of steps using the HIGH-noise model (0-1). At this ratio of total steps, generation switches from high-noise LoRA to low-noise LoRA. Lower = more detail refinement by low-noise model. |
| svi_frames_per_clipopt | INT | 8117–161 | Frames generated per clip. Must be 4n+1 for Wan 2.2 (e.g. 33, 49, 81, 121). More frames = longer clips but more VRAM. |
| svi_variantopt | COMBO | pro | SVI variant: 'pro' has redesigned anchor + latent conditioning (better quality), 'standard' is the original SVI 2.0 (used in 'svi' no_llm_mode). Only used when no_llm_mode = 'svi'. |
| svi_model_highopt | COMBO | auto | HIGH NOISE Wan 2.2 I2V-A14B model for SVI (used in 'svi' no_llm_mode). 'auto' = auto-discover from ComfyUI model directories. Select the HighNoise variant (e.g. Wan2.2-I2V-A14B-HighNoise-Q3_K_S.gguf). Only used when no_llm_mode = 'svi'. |
| svi_model_lowopt | COMBO | auto | LOW NOISE Wan 2.2 I2V-A14B model for SVI (used in 'svi' no_llm_mode). 'auto' = auto-discover from ComfyUI model directories. Select the LowNoise variant (e.g. Wan2.2-I2V-A14B-LowNoise-Q3_K_S.gguf). Only used when no_llm_mode = 'svi'. |
| svi_lora_highopt | COMBO | SVI_Wan2.2-I2V-A14B_high_noise_lora_v2.0_pro.safetensors | SVI HIGH-noise LoRA (used in 'svi' no_llm_mode). Auto-downloads from HuggingFace if not present. Only used when no_llm_mode = 'svi'. |
| svi_lora_lowopt | COMBO | SVI_Wan2.2-I2V-A14B_low_noise_lora_v2.0_pro.safetensors | SVI LOW-noise LoRA (used in 'svi' no_llm_mode). Auto-downloads from HuggingFace if not present. Only used when no_llm_mode = 'svi'. |
| svi_extra_lora_highopt | COMBO | none | Optional extra LoRA applied to the HIGH-noise model (stacked on top of SVI LoRA). Select any LoRA from your loras folder, or 'none' to skip. Only used when no_llm_mode = 'svi'. |
| svi_extra_lora_lowopt | COMBO | none | Optional extra LoRA applied to the LOW-noise model (stacked on top of SVI LoRA). Select any LoRA from your loras folder, or 'none' to skip. Only used when no_llm_mode = 'svi'. |
| svi_vaeopt | COMBO | auto | VAE model for SVI. 'auto' finds Wan2.1_VAE.safetensors automatically. Select a specific VAE from your vae folder. Only used when no_llm_mode = 'svi'. |
| svi_text_encoderopt | COMBO | auto | Text encoder for SVI (T5/UMT5). 'auto' finds best text encoder automatically. Select a specific model (safetensors, GGUF, etc.) from text_encoders or clip folders. Only used when no_llm_mode = 'svi'. |
| svi_sampleropt | COMBO | euler | Sampler for SVI denoising. Default: euler. Only used when no_llm_mode = 'svi'. |
| svi_scheduleropt | COMBO | normal | Noise scheduler for SVI denoising. Default: normal. Only used when no_llm_mode = 'svi'. |
| svi_blockswap_blocksopt | INT | 00–40 | Wan 2.2 transformer blocks (of 40) worth of weights kept in CPU RAM during sampling (block swap). 0 = disabled. Higher = less VRAM, slower. Try 4-8 if you hit OOM. Only used when no_llm_mode = 'svi'. |
| svi_tiled_vaeopt | BOOLEAN | false | Decode video latents with tiled VAE to reduce VRAM spikes during decode. Use if VAE decode OOMs. Only used when no_llm_mode = 'svi'. |
| ace_negative_promptopt | STRING | Negative prompt for ACE-Step music generation. Describes what to avoid in the output. Only used when no_llm_mode = 'ace_step'. | |
| ace_cover_strengthopt | FLOAT | 0.500–1 | Cover/repaint strength for ACE-Step (0.0–1.0). Lower values (0.2–0.4) keep more of the original audio (mild enhancement). Higher values (0.7–1.0) give ACE-Step more creative freedom. Only used in repaint/cover mode when no_llm_mode = 'ace_step'. |
| ace_stepsopt | INT | 81–50 | Number of diffusion steps for ACE-Step. 4 = fast draft, 8 = turbo default, 16+ = higher quality. Only used when no_llm_mode = 'ace_step'. |
| ace_cfg_scaleopt | FLOAT | 7.01–20 | Classifier-free guidance scale for ACE-Step. Higher values follow the prompt more closely. Only used when no_llm_mode = 'ace_step'. |
| ace_bpmopt | STRING | Target BPM (beats per minute) for ACE-Step music. Leave empty for automatic. Only used when no_llm_mode = 'ace_step'. | |
| ace_keyopt | STRING | Target musical key/scale for ACE-Step. Leave empty for automatic. Only used when no_llm_mode = 'ace_step'. | |
| ace_time_sigopt | STRING | Target time signature for ACE-Step. Leave empty for automatic. Only used when no_llm_mode = 'ace_step'. | |
| f1_presetopt | COMBO | none | Built-in timbre preset for Foundation-1. Provides structured instrument/timbre tags. Combine with a text prompt for customization. Only used when no_llm_mode = 'foundation1'. |
| f1_instrumentopt | COMBO | none | Instrument family to guide Foundation-1 generation. Appended to prompt automatically. 'none' = let the prompt decide. Only used when no_llm_mode = 'foundation1'. |
| f1_fxopt | COMBO | none | FX processing applied to Foundation-1 output. 'dry' = minimal processing, other options add specific effects. Only used when no_llm_mode = 'foundation1'. |
| f1_structureopt | COMBO | none | Musical structure/notation tag to guide phrasing. Controls melodic motion, rhythmic behavior, and harmonic feel. Only used when no_llm_mode = 'foundation1'. |
| f1_negative_promptopt | STRING | Negative prompt describing what to avoid in Foundation-1 output. Only used when no_llm_mode = 'foundation1'. | |
| f1_bpmopt | COMBO | auto | Target BPM. Foundation-1 supports specific BPM denominations. 'auto' = let the model decide. Only used when no_llm_mode = 'foundation1'. |
| f1_barsopt | COMBO | auto | Number of bars for the loop. Foundation-1 supports 4 or 8 bars. 'auto' = let the model decide. Combined with BPM for precise duration. Only used when no_llm_mode = 'foundation1'. |
| f1_keyopt | STRING | Musical key and mode. Supports all keys and modes. Leave empty for automatic. Only used when no_llm_mode = 'foundation1'. | |
| f1_durationopt | FLOAT | 0.00–60 | Duration in seconds. 0 = auto-calculate from BPM/bars (or default 10s). Max 60s. Only used when no_llm_mode = 'foundation1'. |
| f1_stepsopt | INT | 10010–250 | Number of diffusion steps. Higher = better quality but slower. 100 is a good default. Only used when no_llm_mode = 'foundation1'. |
| f1_cfg_scaleopt | FLOAT | 7.01–15 | Classifier-free guidance scale. Higher = follows prompt more closely. 7.0 is a good default. Only used when no_llm_mode = 'foundation1'. |
| f1_style_transferopt | BOOLEAN | false | Enable audio style transfer mode. When on, Foundation-1 takes connected audio_a input and re-styles it based on the text prompt — like img2img but for audio. Requires audio_a to be connected. Only used when no_llm_mode = 'foundation1'. |
| f1_noise_levelopt | FLOAT | 0.700–1 | Style transfer strength. 0.0 = keep original audio (no change), 0.3 = subtle variation, 0.7 = strong restyling (default), 1.0 = fully regenerate (ignore source). Only used when f1_style_transfer is enabled. |
| fish_model_variantopt | COMBO | bf16 | Fish Speech model precision. 'fp8' = FP8 quantized (~12 GB VRAM, recommended). 'bf16' = full BF16 precision (~24 GB VRAM). Only used when no_llm_mode = 'fish_speech'. |
| fish_voiceopt | STRING | Voice reference for cloning. Enter a name from the voice library (models/fish_speech/voices/) or a path to a .wav file (10-30s). Leave empty for default voice. Only used when no_llm_mode = 'fish_speech'. | |
| fish_emotionopt | COMBO | (none) | Emotion/prosody tag prepended to the text. Fish Speech supports 15K+ inline tags — including free-form descriptions like '[whisper in small voice]' or '[professional broadcast tone]'. Type tags directly in the prompt for fine-grained control. Only used when no_llm_mode = 'fish_speech'. |
| fish_temperatureopt | FLOAT | 0.800.1–1 | Sampling temperature for Fish Speech. Lower = more deterministic, higher = more varied. Only used when no_llm_mode = 'fish_speech'. |
| fish_top_popt | FLOAT | 0.800.1–1 | Top-p (nucleus) sampling for Fish Speech. Only used when no_llm_mode = 'fish_speech'. |
| fish_repetition_penaltyopt | FLOAT | 1.101–2 | Repetition penalty for Fish Speech. Higher values reduce repetitive patterns. Only used when no_llm_mode = 'fish_speech'. |
| lp_rotate_pitchopt | FLOAT | 0.0-20–20 | Head pitch (nod up/down). Only for animate_portrait mode. |
| lp_rotate_yawopt | FLOAT | 0.0-20–20 | Head yaw (turn left/right). Only for animate_portrait mode. |
| lp_rotate_rollopt | FLOAT | 0.0-20–20 | Head roll (tilt left/right). Only for animate_portrait mode. |
| lp_blinkopt | FLOAT | 0.0-20–5 | Eye blink (negative=close, positive=open). Only for animate_portrait mode. |
| lp_eyebrowopt | FLOAT | 0.0-10–15 | Eyebrow raise/lower. Only for animate_portrait mode. |
| lp_winkopt | FLOAT | 0.00–25 | Wink intensity. Only for animate_portrait mode. |
| lp_pupil_xopt | FLOAT | 0.0-15–15 | Pupil horizontal (negative=left). Only for animate_portrait mode. |
| lp_pupil_yopt | FLOAT | 0.0-15–15 | Pupil vertical (negative=up). Only for animate_portrait mode. |
| lp_aaaopt | FLOAT | 0-30–120 | Mouth open (aaa shape). Only for animate_portrait mode. |
| lp_eeeopt | FLOAT | 0.0-20–15 | Mouth eee shape. Only for animate_portrait mode. |
| lp_wooopt | FLOAT | 0.0-20–15 | Mouth woo/pucker shape. Only for animate_portrait mode. |
| lp_smileopt | FLOAT | 0.00-0.3–1.3 | Smile intensity. Only for animate_portrait mode. |
| lp_retargeting_eyesopt | FLOAT | 1.000–1 | Eye retargeting (0=ignore driver eyes, 1=full). Only for animate_portrait mode. |
| lp_retargeting_mouthopt | FLOAT | 1.000–1 | Mouth retargeting (0=ignore driver mouth, 1=full). Only for animate_portrait mode. |
| lp_crop_factoropt | FLOAT | 1.61–3 | Face crop expansion (larger=more context). Only for animate_portrait mode. |
| lp_expression_presetopt | COMBO | none | Load a saved expression preset. Overrides expression sliders with stored values. Only for animate_portrait mode. |
| lp_save_expressionopt | STRING | Type a preset name and run to save current expression slider values. Only for animate_portrait mode. | |
| lp_sample_imageopt | STRING | Sample face image whose expression will be transferred to the source. Only for animate_portrait mode. | |
| lp_sample_ratioopt | FLOAT | 1.000–1 | Expression transfer blend ratio (0=source expression, 1=full sample expression). Only for animate_portrait mode. |
| lp_sample_partsopt | COMBO | all | Which parts to transfer: all, mouth_only, eyes_only, or rotation_only. Only for animate_portrait mode. |
| batch_modeopt | BOOLEAN | false | When enabled, processes all matching videos in video_folder with the same prompt. Uses a single LLM call and applies the pipeline to every file. |
| video_folderopt | STRING | Path to a folder containing videos to batch process. Only used when batch_mode is on. | |
| file_patternopt | COMBO | *.mp4 | File pattern to match videos in the folder. '*.mp4 *.mov *.avi' matches multiple formats. '*.*' matches all files. Only used when batch_mode is on. |
| max_concurrentopt | INT | 41–16 | Maximum number of videos to process simultaneously in batch mode. Higher values use more CPU/GPU. |
| track_tokensopt | BOOLEAN | true | When On, prints token usage summary (prompt tokens, completion tokens, LLM calls) to the console after each run. Useful for monitoring costs with paid APIs. |
| log_usageopt | BOOLEAN | false | When On, appends a JSON entry to usage_log.jsonl for each run. Useful for tracking cumulative token spend over time. |
| allow_model_downloadsopt | BOOLEAN | true | When On (default), AI models (SAM3, LaMa, Whisper) auto-download on first use. Turn Off to prevent any automatic downloads — runs requiring a missing model will fail with a clear message and a link to download manually. |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | Image frames from the output video. Returns ALL frames automatically when connected to a downstream node (e.g. VHS Video Combine). Returns only a thumbnail when unconnected (zero-memory preview). |
| audio | AUDIO | Audio extracted from the output video (or passed through from audio_a) in ComfyUI AUDIO format. |
| video_path | STRING | Absolute path to the rendered output video file. |
| command_log | STRING | The ffmpeg command that was executed. |
| analysis | STRING | LLM interpretation, estimated changes, pipeline steps, and any warnings. |
| mask_overlay_path | STRING | Path to a mask overlay preview video with SAM3-style colored contours. Connect to Save Video (FFMPEGA) to view the visual overlay. |
| mask_points | STRING | Pass-through of upstream mask_points JSON data for downstream nodes. Contains click coordinates and labels. |
| image_path | STRING | Absolute path to the output image file when the node produces a single image (e.g. Flux Klein single-image edit). Empty for video outputs. |
| mask | MASK | Raw binary MASK tensor for downstream compositing (MatAnyone2, inpainting, etc.). Upstream mask passthrough or empty mask if no mask source. |