Nodes/AsymFLUX2/AsymFLUX2 Apply Adapter
ComfyUI Node

AsymFLUX2 Apply Adapter

One node turns stock FLUX.2-klein into a pixel-space model

By Nynxz·Created 4 months ago·Updated 3 months ago· 13
AsymFLUX2 Apply Adapter
  • model
  • model
adapter
shift17.0
adapter_strength1.00
orthogonal_guidance1.00
clamp_denoisedtrue

This is the node the whole pack is built around. Feed it a stock FLUX.2-klein-base-9B MODEL and a ~707 MB adapter file, and it hands you back a patched model that denoises a 3-channel Oklab image directly in pixel space. No VAE anywhere in the stack. The name on the tin: AsymFLUX.2, from the Asymmetric Flow Models paper (arXiv 2605.12964), and it's a fine-tune of Klein - so the clever part is that you don't download a new 9B checkpoint. You keep your base model and bolt the adapter on.

That's also why this pack exists. When the model dropped in May 2026, the first ComfyUI wrapper for it just wrapped the whole diffusers pipeline, and the top comment told the author exactly what the room wanted: "Make an adapter bro." asymflux2.ApplyAdapter is that adapter - a hand-rolled ModelPatcher surgery job that reuses ComfyUI's native FLUX.2-klein implementation instead of running a second copy of the model. Worth knowing before you commit: the model authors have since shipped the official Lakonik/ComfyUI-piFlow pack, and this repo's own README points you there first. This one stays up as the alternative, and it works fine.

How it works

The adapter is a rank-256 LoRA plus a set of direct weight overwrites, and the pack installs everything via ModelPatcher.add_object_patch. That matters more than it sounds: your base Klein model is never mutated, so any other workflow holding the same MODEL socket is safe. The surgery swaps img_in and final_layer for the 3-channel pixel-space Linears, drops guidance_in to identity (AsymFLUX.2 trains with guidance off), exposes a low-rank proj_buffer, and wraps forward with the AsymFlow calibration (k = 1/(s + (1-s)·σ)) and velocity math. It also installs a 3-channel latent pass-through so the KSampler doesn't try to inflate your latent to stock Flux's 128 channels.

Inputs that matter

You'll set maybe three of the five:

  • model - from a stock Load Diffusion Model, loaded with the base 9B checkpoint, not the distilled one.
  • adapter - dropdown of everything in ComfyUI/models/loras/. Pick the AsymFLUX.2-klein safetensors.
  • shift (default 17.0) - flow shift in paper convention; the node converts it to comfy's mu = log(shift) internally. The README notes upstream uses a dynamic shift that lands around 20 at 960×1280, so if you're chasing the HF Space exactly, try 20.
  • adapter_strength (1.0) - LoRA strength on the rank-256 LoRA.
  • orthogonal_guidance (1.0) - AsymFlow's velocity-space CFG. 0.0 just gives you standard CFG.
  • clamp_denoised (True) - per-step Oklab gamut clamp, stops color drift. The node's own tooltip says "disable if using uni_pc - see README." The nuance: the shipped workflow runs uni_pc at ~20 steps with the clamp on; the problem is step count. Push a multistep solver much past ~25 steps and the clamp's non-linearity compounds in the extrapolation.

Output is one model socket. It feeds a stock KSampler, whose latent input should come from AsymFLUX2 Empty Pixel Latent and whose output should go through AsymFLUX2 Oklab Decode. The example workflow ships uni_pc + simple, ~20 steps, CFG 4, at 960×1280.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-AsymFLUX2

No extra Python deps. You need three downloads: FLUX.2-klein-base-9B safetensors (in models/diffusion_models/), the AsymFLUX.2-klein adapter (diffusion_pytorch_model.safetensors, in models/loras/), and the Qwen3 8B text encoder via a single CLIPLoader with type=flux2. Accept both FLUX.2-klein and AsymFLUX.2-klein licenses on Hugging Face. This pack is written against ComfyUI's newer native-node API, so a stale install will show a missing node - update ComfyUI first. It's in the Comfy registry, so Manager can install it too.

Where people get burned

  • Wrong checkpoint. Load the base 9B, not the distilled one - the adapter was trained on the base.
  • Wrong adapter file. If the node errors with missing tensors (x_embedder, proj_out, proj_buffer, scale_buffer), you picked something that isn't the AsymFLUX.2-klein-9B adapter.
  • Adapter on an external drive. The loader deliberately reads safetensors directly rather than through comfy's mmap path, which has been seen to segfault on USB filesystems. If it fails to read, copy the file to local disk.
  • Over-stepping. More steps isn't more quality here. 15-25 at uni_pc is the sweet spot; past ~25 it degrades.

Community reception of the model itself is honest-to-goodness mixed - "blobby" small details, no edit capability, but genuinely realistic skin. Iterate on seeds and batch, don't blame the node.

CategoryAsymFLUX2/loaders

Inputs (6)

NameTypeDefaultDescription
modelMODELFLUX.2-klein-base-9B from a stock Load Diffusion Model node.
adapterCOMBOAsymFLUX.2-klein adapter safetensors (in models/loras/).
shiftFLOAT17.00.1–100Flow shift (paper convention; converted to comfy mu = log(shift) internally).
adapter_strengthFLOAT1.00-2–2LoRA strength applied to the rank-256 LoRA. 1.0 = full strength.
orthogonal_guidanceFLOAT1.000–2AsymFlow orthogonal CFG bias strength. 1.0 = upstream demo default. 0.0 = standard CFG.
clamp_denoisedBOOLEANtruePer-step Oklab gamut clamp on the x0 estimate. Prevents color drift across the sampling loop. Disable if using uni_pc — see README.

Outputs (1)

NameTypeDescription
modelMODEL