Nodes/Krea Reason/Krea Reason (expand prompt + encode)
ComfyUI Node

Krea Reason (expand prompt + encode)

Your Krea 2 prompt enhancer that also reads reference images

By shootthesound·Created 2 months ago·Updated 2 months ago· 13
Krea Reason (expand prompt + encode)
  • clip
  • image
  • conditioning
  • generated_text
prompt
modeexpand
max_new_tokens220
temperature0.70
seed0
image_removepeople + main subject (keep the scene)
custom_image_instruction
image_megapixels1.0
instruction
top_p0.95
cond_boost1.0

Krea 2's text encoder is secretly the best prompt expander you already own. It's not a CLIP in the SD1.5 sense - it's a full Qwen3-VL-4B vision-language model with a working language head, sitting in your models/text_encoders/ folder whether you use it or not. Krea Reason (by shootthesound, an author with a decent track record of ComfyUI utility nodes) just points that model at your prompt before conditioning: it rewrites a short prompt into a rich one, or reads a reference image and writes the prompt from it, then encodes the result. No second LLM, no API, no key - the same model that conditions is the one doing the thinking.

It exists because Krea 2 rewards long, specific natural-language prompts, and because its standard image-reference flow hands you a black box you can't steer. This node breaks the reference into three visible steps you can edit, and it puts your prompt in charge of the subject.

How it works

The node drives the encoder's own LM head via ComfyUI's clip.generate()/decode() - genuine text generation, not a canned template - then encodes the result with the stock Krea 2 pipeline (tokenize + encode_from_tokens_scheduled). In expand mode, the rewritten prompt is what gets encoded, so the expansion hits hard. think mode instead keeps your original prompt and appends the generated text as <think> context; because Qwen is causal, that's a subtler nudge, and it's marked experimental for a reason.

Connect an image and you get a three-pass pipeline: the vision tower describes the image in full, a text pass filters out whatever image_remove picks, and a final text pass combines the leftovers with your prompt - your prompt leading. That describe→filter→combine split is more reliable than asking a vision model to "describe but ignore people," which it quietly fails at. Krea 2's DiT has no reference-latent slot, so this language-level route is the practical way to steal a reference's scene, style, or lighting.

The inputs that matter

  • mode - expand (default, impactful) vs think (subtler). Ignored when an image is connected.
  • prompt - your short prompt. Required unless an image is connected.
  • image + image_remove - the reference and what to strip. The flagship pick is people + main subject (keep the scene): it drops your subject into the reference's background. custom uses the custom_image_instruction box.
  • cond_boost - multiplies the output conditioning. Krea 2 Turbo is CFG-free, so this is your guidance knob; ~1.5–4× usually sharpens, and it saturates past ~6–8×. Sweep by eye.
  • temperature / seed / top_p - sampling for the text generation. temperature 0 = deterministic.

It returns two outputs: CONDITIONING (wire into the sampler) and generated_text (wire to any text preview so you can see exactly what became your prompt - the whole point).

Installing it

ComfyUI Manager (search "Krea Reason"), or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/shootthesound/ComfyUI-KreaReason

Then restart ComfyUI. There are no extra Python dependencies - it rides on ComfyUI's native Krea 2 support, so the real install cost is the models, all in the usual folders: a Qwen3-VL-4B encoder loaded via CLIPLoader with type krea2 (models/text_encoders/), the krea2_turbo_fp8_scaled diffusion model, and a Wan 2.1 VAE - not the Qwen-Image VAE, since Krea 2's latent format is Wan 2.1's.

Troubleshooting

Two gotchas will hit you. First: the encoder's safety training. The stock Qwen3-VL will sometimes refuse to describe an image or quietly soften what it writes - remember, the open Krea 2 weights got an alignment pass the hosted model never did, and this is where it bites, because the model's output becomes your prompt. The README's recommended fix is an abliterated encoder (Huihui-Qwen3-VL-4B-Instruct-abliterated) loaded the same way. It's a real quality upgrade for this node specifically.

Second: the vision path. If your encoder build can't run the vision tower, the node raises a clear error suggesting the bf16 encoder - trust it. And budget for speed: text mode is one generation plus an encode, but the image path is three generations, so it's a quality node, not a live dial.

If you just want Krea 2 to follow a longer prompt without a reference, this is the one-click fix - and unlike a second LLM doing the same job, it's running on the exact model that conditions, so what you see in generated_text is precisely what gets encoded.

CategoryShootTheSound/KreaReason

Inputs (13)

NameTypeDefaultDescription
clipCLIP
promptSTRING
modeCOMBOexpandexpand: encode the rewritten prompt (impactful). think: keep prompt, append the reasoning as context (subtle/experimental). Ignored when an image is connected
max_new_tokensINT22016–2048Length cap for each generation pass
temperatureFLOAT0.700–20 = deterministic (greedy). Higher = more varied phrasing
seedINT00–18446744073709550000Sampling seed (only matters when temperature > 0)
imageoptIMAGEOptional reference image — described, filtered, then combined with your prompt (3 passes). Vision works on bf16 and fp8_scaled encoders; if a build can't run vision you'll get a clear error
image_removeoptCOMBOpeople + main subject (keep the scene)What to REMOVE from the image description before combining with your prompt. e.g. remove people + subject to keep only the scene/background. 'custom' uses the box below. Ignored if no image
custom_image_instructionoptSTRINGUsed only when image_remove = 'custom'. Say what to remove (or keep), e.g. 'remove the sky and any text'
image_megapixelsoptFLOAT1.00.1–4Downscale cap for the reference image (megapixels). Lower = fewer vision tokens / faster
instructionoptSTRINGSystem instruction for text-only expansion (blank = built-in). Ignored when an image is connected (image_remove drives it)
top_poptFLOAT0.950–1
cond_boostoptFLOAT1.00–8Multiply the output conditioning (CFG-free guidance boost). 1.0 = off; ~1.5-4x often sharpens Krea 2; saturates past ~6-8x. Sweep by eye

Outputs (2)

NameTypeDescription
conditioningCONDITIONING
generated_textSTRING