FunPack Video Refiner V2
The Refiner that learns your taste — rate a clip, and the next one is closer
- clip
- advisor_clip
- positive_conditioning
- lora_stack
- clip_vision_output
- source_image
- model
- latent
- modified_positive
- status
- training_info
- loss_graph
- encoded_prompts
- model
- video_latent
FunPack Video Refiner V2 is the heart of the pack's self-improving loop, and it's unlike anything you'll find in most custom node packs. It takes a prompt, encodes it through your CLIP, and learns from your ratings - "Missing action", "Wrong details", "Perfect" - then rewrites the prompt and steers the conditioning so the next generation gets closer to what you actually wanted. It's a feedback loop where your thumb is the training signal.
How it works
The required inputs are the two you'll touch every run: positive_prompt (the text to encode and refine) and rating (the 25-option feedback enum - the samples show the real labels: Perfect, Nailed it, Missing details, Missing action, Missing quality, Wrong details, Wrong action, Wrong appearance, -Just forget it-). The docs spell out the mapping: Missing details nudges detail phrases, Missing action boosts action/character phrases, Wrong appearance means the video got polluted by remembered character traits that weren't requested, Perfect reinforces what worked.
mode picks how much of the machinery runs: Refine (apply learned prompt shaping + conditioning adaptation - the default), Prompt only (shape the prompt, pass conditioning vectors through untouched), or Learning (record and update memory but pass everything through unchanged - the safe way to build memory before it starts steering).
advisor_mode (default Off) is the LLM advisor: Off, Only diagnostics, Only prompt, or Full. Full runs two passes - first analyze what's wrong, then repair the prompt - using the advisor_clip model (from FunPack Advisor LLM). The advisor gets four explicit inputs: original user intent, last prompt, your rating, and the feedback history. feedback_prompt is the "highest priority" override: "he was supposed to hold her hand, not her head" gets obeyed exactly, bypassing the axis logic.
The outputs that matter
- modified_positive (CONDITIONING) - the refined conditioning. This is what feeds your sampler.
- model (MODEL) - optional input/output: with an LTX-2/LTXAV model connected it does attn2 direction injection and temporal RoPE tricks. Wire it to a non-LTX model like Wan and it passes through unchanged - this feature is LTX-only.
- loss_graph (IMAGE), training_info (STRING), encoded_prompts (STRING) - diagnostics.
encoded_promptsshows the exact prompt used plus advisor output, and is where you see "Advisor suggestion (applied)". - video_latent, status, steer_mode/absolute_strength - steer_mode
relative(default) finds the best conditioning for this prompt;absolutepulls toward a global learned taste;bothlayers them.
The details that matter
split_by_transitions (default off) is the scene-chain bridge: it detects transition words in the prompt and returns one conditioning entry per scene for FunPack LTXAV Scene Chain Sampler. Keep the character description before the first transition - it becomes the shared anchor prepended to every scene. im_feeling_lucky composes a prompt from the learned phrase memory instead of using your text. temporal_style (natural/auto/accelerate/decelerate/loop/freeze/pulse) manipulates frame-rate RoPE to change perceived motion timing - a genuinely unusual control. reset_session wipes the key's state.
Install
It's part of ComfyUI-FunPack:
cd ComfyUI/custom_nodes
git clone https://github.com/olivv-cs/ComfyUI-FunPack
pip install -r requirements.txt
or ComfyUI Manager → search "ComfyUI-FunPack". Needs transformers >= 5.0; avoid the optional hpsv3 package, which pins an older transformers and breaks the advisor.
The honest take
V2 replaced the original FunPack Video Refiner and keeps fresh state - no migration, old histories are gone. It also dropped sigma/latent refinement and scheduler controls in favor of the automatic streak logic (good streaks make it gentler, bad streaks push harder). It's the most powerful single node in this pack and the most opinionated: read encoded_prompts when a result surprises you, keep one refinement key per project, and expect the first few runs to be mostly learning before the loop visibly pays off.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| positive_prompt | STRING | — | |
| rating | COMBO | Missing action | 25 options: -Just forget it-, Perfect, Nailed it, Missing details, Missing action, Missing quality, +19 |
| mode | COMBO | Refine | Refine applies learned prompt and conditioning changes. Prompt only shapes the prompt but passes conditioning vectors through unchanged. Learning records observations and ratings while passing everything through unchanged. |
| advisor_mode | COMBO | Off | CLIP text-generation advisor. Full: repair prompt + show diagnostic. Only prompt: repair prompt silently. Only diagnostics: report advice without changing the prompt. Off: disabled. |
| clipopt | CLIP | Optional text encoder. When connected, V2 encodes the prompt itself. | |
| advisor_clipopt | CLIP | Optional separate CLIP/Gemma text generator for Advisor. If disconnected, Advisor falls back to the main CLIP. | |
| positive_conditioningopt | CONDITIONING | Optional pre-encoded Gemma3/LTX2 conditioning. Used only when CLIP is not connected. | |
| reset_sessionopt | BOOLEAN | false | — |
| lora_stackopt | FUNPACK_LORA_STACK | Optional stack from FunPack LoRA Loader. V2 writes prompt-specific suggested weights. | |
| clip_vision_outputopt | CLIP_VISION_OUTPUT | Optional CLIP Vision output describing the source image. Stored as advisory context; it is not blended into positive conditioning. | |
| source_imageopt | IMAGE | Optional original/source image or frame batch. V2 stores size, aspect ratio, and a simple fingerprint to notice changed inputs. | |
| modelopt | MODEL | Optional model. LTX-2 / LTXAV family only - attn2 direction injection, attention temperature, temporal RoPE, and anchor transfer all require LTX transformer internals. Connecting a non-LTX model (e.g. WAN) passes it through unchanged. Connect the model output to your sampler. | |
| refinement_key_inputopt | STRING | Optional linked refinement key, for example from FunPack Refinement Key Loader. Overrides the refinement_key widget when connected. | |
| user_intent_promptopt | STRING | Optional raw user/request prompt. V2 can use this as an intent source to repair missing action/detail/quality phrases if an enhancer omits them. | |
| im_feeling_luckyopt | BOOLEAN | false | Compose a learned prompt from V2 phrase memory, then encode it through the connected CLIP. |
| advisor_thinkingopt | BOOLEAN | true | Let compatible CLIP text generators use thinking mode for advisor diagnostics and prompt repair. |
| feedback_promptopt | STRING | Optional user feedback describing what was specifically wrong with the previous output (e.g. 'he was supposed to hold her hand, not her head'). Has highest priority in the advisor system prompt. | |
| temporal_styleopt | COMBO | natural | Controls how the model perceives motion timing via frame_rate RoPE manipulation. natural=no change, auto=per-scene director picks motion energy from each scene's prompt (needs the Scene Chain Sampler), accelerate=faster motion, decelerate=heavier motion, loop=circular temporal coords, freeze=highly compressed time, pulse=repeated ease-down motion holds per scene (needs the Scene Chain Sampler), rapid_start=speeds up just the beginning of each scene then settles to natural, rapid_end=natural then speeds up just the ending, rapid_start_end=speeds up both ends with natural motion in the middle. |
| split_by_transitionsopt | BOOLEAN | false | Detect transition words and return one conditioning entry per scene for FunPack LTXAV Scene Chain Sampler. Leave off for normal single-conditioning workflows. |
| latentopt | LATENT | Optional video latent for creativity masking. Takes priority over any saved latent for this key. Connect your i2v or previous KSampler output here. | |
| steer_modeopt | COMBO | relative | Relative: per-prompt steering (finds the best conditioning for THIS prompt — default). Absolute: pull conditioning toward the global learned taste, regardless of prompt. Both: layer them. |
| absolute_strengthopt | FLOAT | 0.600–2 | How hard Absolute mode pulls toward the global taste direction. 0.6 is visible but non-destructive; raise for stronger override of the prompt. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| modified_positive | CONDITIONING | — |
| status | STRING | — |
| training_info | STRING | — |
| loss_graph | IMAGE | — |
| encoded_prompts | STRING | — |
| model | MODEL | — |
| video_latent | LATENT | — |