Nodes/ComfyUI-EditUtils/EditUtils: Flux3Klein Model Config lrzjason
ComfyUI Node

EditUtils: Flux3Klein Model Config lrzjason

Telling EditUtils You're Running FLUX.3

By lrzjason·Created 9 months ago·Updated 3 days ago· 256
EditUtils: Flux3Klein Model Config lrzjason
    • model_config
    ◄instruction►
    ◄flow_mapfalse►

    Flux3KleinModelConfig_EditUtils has no model input, no model output, and two optional widgets. It looks like the least important node in the pack. It's actually the one that decides which encoding route the whole graph takes.

    Its single output, model_config, is a dict. EditUtils' encoder reads it and picks a pipeline: which VAE downsample factor to pad to, which tokenizer template to build, whether references are spliced into a vision sequence or carried as pure latents. Get the route wrong and nothing crashes - you just get nonsense, or a graph that hangs on shape mismatches.

    Why FLUX.3 needs its own config node

    Worth being precise here, because the naming invites a bad assumption: FLUX.3 klein is not a rename of FLUX.2 klein. It's a different architecture, and the config node exists because the numbers differ.

    FLUX.3 uses per-mode transformer blocks plus joint single blocks over three token modes (image, image_cond, text), rather than FLUX.2's double/single-stream MMDiT. Its text encoder is Qwen3-VL, with eight stacked hidden states producing a 20480-wide joint attention dimension and the text window right-padded to a multiple of 80 tokens. References are distinguished on the l position axis with negative coordinates. And the VAE is the FLUX.2 packed autoencoder - 32 latent channels, 8x downscale, 2x2 patchify - so one latent token covers 16 pixels.

    That last one is why the config sets vae_unit = 16: it's the padding alignment unit. Set it as if FLUX.3 were an 8x VAE and your references land half a token off, which shows up as a subtle misregistration you'll spend an hour blaming on the prompt.

    The 2026-10 timing is also worth knowing: BFL announced FLUX.3 in July 2026 with open weights promised rather than shipped, and the community was still asking whether a Klein variant would exist at all. This route assumes both arrived. You need a ComfyUI build with native FLUX.3 support - the pack defers to core's own implementation rather than shipping the architecture, so older builds simply won't load the checkpoint.

    The two widgets

    instruction is a multiline string, default empty. Empty is the trained path - FLUX.3's tokenizer builds its own instruct template, so there's nothing to fill in. Typing something turns it into a custom system prompt via the pack's system-prompt helper, which is supported but off-distribution. If your edits are behaving strangely and this box has text in it, clear it before you change anything else.

    flow_map is a boolean and it's informational only - the author says so in the tooltip. It records whether your checkpoint is the step-distilled variant, and ComfyUI detects that from the checkpoint itself. Setting it to false does not turn guidance back on, and setting it to true doesn't make a base model sample in 4 steps. It's a note to yourself, and to anything downstream that reads the config.

    Output: model_config, a DICT, wired into the encoder's model_config socket.

    Where it wires

    UNETLoader ────────────────────────────────────────────────► KSampler
    CLIPLoader (type flux3) ┐
    VAELoader (flux2-vae) ──┼──► EditTextEncode_EditUtils ──► positive + latent
    Flux3KleinModelConfig ──┤
    Flux3KleinConfigPreparer chain (configs) ─┘
    

    Notice the encoder here is the generic EditTextEncode_EditUtils, not the Flux3KleinEditTextEncode_EditUtils shortcut - the wrapper builds its own config internally and has no model_config socket at all. If you're on the simple path you don't need this node; add it the moment you move to the config chain.

    Install

    Manager → search ComfyUI-EditUtils → install → restart, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/lrzjason/ComfyUI-EditUtils
    

    There are no pip dependencies and this node downloads nothing. The real requirements are the three model files - flux3_image_klein_sd_int8_convrot.safetensors for the UNET, qwen3vl_4b_fp8_scaled.safetensors loaded with CLIP type flux3, and flux2-vae.safetensors - plus a ComfyUI recent enough to know what a flux3 model is. The CLIP type is the classic mistake: qwen_image will load the same file and produce a graph that fails in a much less obvious place.

    Where people get burned

    Assuming the config node is optional. On the chain path it isn't. The encoder falls back to a non-FLUX.3 route without it, and references stop meaning what you think they mean.

    Setting flow_map and expecting it to steer sampling. It doesn't. Steps and CFG live in your sampler and your negative; the example graph's 8 steps at CFG 1.0 with a zeroed negative is a choice, not something this node enforces.

    Custom instructions as a creative tool. They're allowed, they're just not what the model was trained on. Use the prompt for creative direction.

    Categoryadvanced/conditioning

    Inputs (2)

    NameTypeDefaultDescription
    instructionoptSTRING—
    flow_mapoptBOOLEANfalseTrue for the step-distilled (flow-map) checkpoint: 4-16 steps, no CFG. Informational only — ComfyUI detects flow_map from the checkpoint itself.

    Outputs (1)

    NameTypeDescription
    model_configDICT—