FunPack Studio
The Refiner, the LoRA pipeline, the samplers, and the rating — in one node
- model
- clip
- advisor_clip
- positive_conditioning
- negative_conditioning
- clip_vision_output
- source_image
- lora_stack
- latent
- model
- modified_positive
- negative
- seed
- high_pass_sampler
- high_pass_sigmas
- low_pass_sampler
- low_pass_sigmas
- loss_graph
- status
- training_info
- encoded_prompts
- video_latent
FunPack Studio is the whole pack in one node. Where a classic graph wires together Refinement Key Loader → Apply LoRA Weights → LoRA Loader → Video Refiner V2 → Conditioning Adjust as five nodes, Studio does all of it internally behind a tabbed popup editor. On the node face you see exactly one widget - rating - and an "Open Studio" button. Everything else lives in the popup, and everything else is a lot.
What the popup holds
The tabs map one-to-one onto the standalone nodes, which remain fully functional if you prefer them:
- Session - the refinement key linking all memory to a named file on disk.
- Shortcuts - global prompt expansions (activation phrases → replacement phrases), shared with the Refiner and stored outside keys.
- Refiner - all Refiner V2 settings: mode, advisor mode, prompt repair, I'm Feeling Lucky, negative prompt, feedback, split-by-transitions.
- Advisor - the internal HuggingFace CausalLM advisor (same model cache as the standalone Advisor LLM node).
- LoRA - the full Apply Weights + Loader chain run internally, with model type (ltx2/wan), per-block, and a LoRA list.
- Sampler - two independent sampler outputs, High Pass and Low Pass, each picking its own sampler type (Hybrid Euler 2S, Distilled Flow, or plain KSampler) and sigma schedule.
- Batch Training - the RLHF cycle: run N variants with everything frozen except per-variant noise seed, rate them all, train the value function on the batch.
- Vision - with a Gemma3-12B CLIP loaded via DualCLIPLoader, Studio fuses the source image's SigLIP vision tokens into the conditioning so the model sees the actual reference pixels.
- Adjustments - the phrase-direction blending of FunPack Conditioning Adjust.
That's a small control room, not a node.
The inputs that matter
The optional inputs are where the wiring happens: model and clip (the base model + text encoder), positive_prompt/negative_prompt (text, encoded via CLIP), advisor_clip (overrides the internal advisor LLM), source_image (for vision conditioning and change detection), clip_vision_output, lora_stack (external stack bypasses the LoRA tab entirely), refinement_key_input, latent (creativity masking), feedback_prompt, and user_intent_prompt.
Outputs: model (patched), modified_positive (refined conditioning - one entry per scene when split), negative, seed (wire it to your sampler; connected, Studio learns successful seeds for the key), high_pass_sampler/high_pass_sigmas and low_pass_sampler/low_pass_sigmas, loss_graph, video_latent, plus status, training_info, encoded_prompts.
There's also a genuine value-function system underneath: every rated run trains a small MLP that predicts reward from conditioning, and value guidance (on by default) moves the conditioning by gradient ascent toward higher predicted reward before sampling, displacement-capped against reward hacking.
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; skip hpsv3.
The honest take
Studio is the intended hub of the graph-based pipeline - in 3.x the Cutting Room browser editor is the flagship surface, and the classic nodes (Studio included) get bugfix-only attention. If you live in graphs, Studio is the cleanest way to run the whole learning loop: one node, one rating widget, two sampler outputs, and the batch-training panel when you want variance-reduced RLHF without hand-wiring. It auto-saves every field to the node widget, so your config survives a browser refresh. If you ever feel Studio is a lot, you're right - but it's the same machinery as five separate nodes, with less to get wrong.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| rating | COMBO | Missing action | 25 options: -Just forget it-, Perfect, Nailed it, Missing details, Missing action, Missing quality, +19 |
| studio_settings | STRING | {} | JSON managed by the Studio popup editor. Do not edit manually. |
| adjustments | STRING | [] | Conditioning adjustment phrase list. Managed by the Studio popup. |
| modelopt | MODEL | — | |
| clipopt | CLIP | — | |
| advisor_clipopt | CLIP | Pre-loaded text generator for advisor. Overrides the LLM configured inside Studio. | |
| positive_conditioningopt | CONDITIONING | — | |
| negative_conditioningopt | CONDITIONING | Negative conditioning passed through unchanged to the output. | |
| clip_vision_outputopt | CLIP_VISION_OUTPUT | — | |
| source_imageopt | IMAGE | — | |
| lora_stackopt | FUNPACK_LORA_STACK | External LoRA stack. Bypasses Studio's internal LoRA management entirely when connected. | |
| positive_promptopt | STRING | Positive prompt. Ignored when Scene Builder mode is not Pass-through. | |
| negative_promptopt | STRING | Negative prompt text. Encoded via CLIP and output as negative conditioning. Skipped when negative_conditioning is connected. | |
| user_intent_promptopt | STRING | — | |
| feedback_promptopt | STRING | Feedback about the previous output. Overrides the feedback set inside Studio. | |
| refinement_key_inputopt | STRING | — | |
| 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. |
Outputs (13)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| modified_positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| seed | INT | — |
| high_pass_sampler | SAMPLER | — |
| high_pass_sigmas | SIGMAS | — |
| low_pass_sampler | SAMPLER | — |
| low_pass_sigmas | SIGMAS | — |
| loss_graph | IMAGE | — |
| status | STRING | — |
| training_info | STRING | — |
| encoded_prompts | STRING | — |
| video_latent | LATENT | — |