Flux.2 Klein ONE STUDIO (TJ)
A whole editing suite hiding behind one node
- pipe
- image
Flux.2 Klein is the model that quietly became the default local image editor of 2026, and Flux.2 Klein ONE STUDIO (TJ) is what it looks like when somebody wraps that model in a single node you never have to wire. Text-to-image, img2img, multi-reference editing, inpaint, outpaint, faceswap and SeedVR2 upscale - all inside one panel, switched from a menu instead of a node graph.
Klein's the right model for this treatment. Black Forest Labs shipped the "small" FLUX.2 line - 9B and 4B, distilled variants doing 4 steps at CFG 1 with the euler_sde sampler - and the whole point was that editing, which used to take a mask plus a ControlNet plus an adapter, now happens in one checkpoint: give it a picture and a sentence. The 4B is Apache 2.0 (commercially usable, runs comfortably on 8–10GB VRAM), the 9B carries the non-commercial FLUX license and needs you to log into HuggingFace and accept it. Both do the editing trick, and the 9B is a bit better.
How it works
Like every node in this pack, the heavy lifting happens in the browser. The Python class is a thin output wrapper - it reads the last image the node generated out of an internal store and returns it as IMAGE. The actual generation is the JavaScript loading a prebuilt workflow for the mode you selected (edit, paint, faceswap…), injecting your settings, and queueing it without ever showing you the graph.
That's why the README is so insistent: you generate with the node's own ▶ Generate button, not ComfyUI's RUN. RUN just re-emits the last result through the output slot. First-time users click RUN, get a blank grey image, and assume it's broken. It's not - there's just nothing to output yet.
The inputs and outputs that matter
The only wired input is prompt_override, a multiline STRING that gets prepended to the prompt you type in the panel. Connect a Primitive (String) - or TJ_NODE's Prompt Studio - here and you can drive the node from outside. The single output is image (IMAGE); the node is flagged as an output node, so you can pipe the result to a preview or save it yourself, though the built-in gallery already does that.
Everything else is in the panel: resolution, steps (4 is the recommended starting point), CFG (1), sampler, the three-LoRA stack, denoise for I2I (0.5–0.75 keeps structure, 0.8–1.0 changes it hard), up to five reference images in EDIT mode, and the mask canvas in PAINT.
Installing it
ComfyUI Manager → Install Custom Nodes → search ComfyUI-TJ_NODE_STUDIO_ONE, or:
cd ComfyUI/custom_nodes
git clone https://github.com/designloves2/ComfyUI-TJ_NODE_STUDIO_ONE.git
Restart, then install the pack's dependencies. Klein specifically needs ComfyUI-KJNodes (for ImagePadKJ and the Flux KV-cache path) and ComfyUI_FaceAnalysis plus insightface for the faceswap mode. The bundled install_requirements.sh / install_requirements.bat handles all of it; restart again after.
Models: the Klein checkpoint to models/diffusion_models/ (the 9B and 4B have different text encoders - grab the matching one from the Comfy-Org "vae-text-encorder-for-flux-klein" repos), the VAE, and the BFS faceswap LoRA to models/loras/ if you want that mode. If your diffusion model filename contains kv, the node auto-enables the Flux KV-cache path.
Where people get stuck
The 9B license dance is the most common wall - if your download fails or the model never shows in Settings, you haven't accepted the non-commercial license on HuggingFace. The README's bug history also records the family's embarrassing phase: outpainting used to generate a brand-new image instead of extending the one you had, because the padding wasn't being read back at the right resolution. That's fixed in current versions, but if you ever see outpainting "ignore" your reference, update KJNodes first - the fix relies on a current ImagePadKJ.
Two honest caveats before you fall in love. First, this node family's history is a little spicy: it's a derivative of yanokusnir's one-node-flux-2-klein, and the credit dispute played out in the launch thread before the README added the acknowledgement. Second, you're trading away the visible graph - if a mode fails, you're debugging a black box, and you can't easily lift Klein's edit pipeline into your own workflow. For a beginner who wants Klein as a tool rather than a tinkering project, that's a fair trade. For someone who lives in the graph, it's a reason to stay with stock ComfyUI.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt_overrideopt | STRING | External prompt override — prepended before the internal prompt. | |
| pipeopt | TJ_PROMPT_PIPE | PromptDB pipe (TJ_NODE). At generation, fields present in the pipe override this node's settings; missing fields keep the node's own values. The node's UI is never changed. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |