Donut Edit Studio
Two reference slots, one crop, no API key
- model
- reference_a
- reference_b
- edit_mode
- width
- height
- grounding_px
- edit_model
- edit_prompt
Krea 2 shipped in June 2026 with a head start nobody had counted on: it was trained with a Qwen3-VL text encoder, which means it can look at an image as well as read a prompt. The catch is that "look at an image" is not a checkbox in ComfyUI - you need to hold onto the reference, size it correctly, crop it to the ratio you're actually generating, and decide whether the identity-edit LoRA is in play. Donut Edit Studio is that bookkeeping in one node.
What it really is
It's not a sampler and it doesn't call anything. It's a front panel: two persistent reference slots, the crop and output-sizing controls, a prompt box, and the LoRA attach - all of which it turns into six wires that the rest of the graph actually consumes.
Think of it as the crop-edit-stitch hybrid people settled on for instruction editing, except the cropping happens before the model ever sees the frame.
How the mechanism works
Reference images are uploaded through the node itself (paste, drag, or file picker) and stored on disk under ComfyUI/user/donut/edit_references/, named by the SHA-256 of the PNG bytes - donutref:<hash>. The slot widget holds that ID string, not the image. Which means your workflow JSON is tiny and portable, and also means it's not self-contained: copy the reference folder along with the JSON or every slot comes back broken.
The crop is the part worth understanding. It takes the largest region of the source whose aspect matches your target, anchors it with an x/y fraction (0.5 = centred), crops, then resizes to exactly the target dimensions. resolution_mode decides what "target" means - a preset aspect at a megapixel budget, Reference A's aspect at a megapixel budget, Reference A cropped down to the nearest smaller grid size with no scaling, or explicit width/height. multiple picks the grid (16, 32 or 64) and every dimension is snapped to it.
The edit LoRA attaches only when enabled is true - that's what the optional model input's tooltip means, and it's why the input is lazy: with editing off, Edit Studio never asks the graph for a model at all. lora_name auto-selects krea2_identity_edit_v1_2.safetensors if it's in your loras folder; lora_strength is a normal -20 to 20 weight.
The handful of fields you actually set
enabled- the master switch. Off means blank slots are fine.image_a/image_banduse_reference_b- the two slots. These are STRING widget fields, not IMAGE inputs; wiring an IMAGE node into them does nothing.prompt- the edit instruction. It runs through the pack's wildcard expansion usingtext_seed, so a fixed seed keeps your choices repeatable.resolution_mode+aspect_ratio+megapixels- orwidth/height, if you pick Custom.crop_a_x/crop_a_y(and the_bpair) - 0.5 is centre; nudge these instead of pre-cropping in another tool.lora_name/lora_strength- identity-edit LoRA strength. 1.0 is the default and a reasonable place to start.
grounding_px (1088 by default) is the grounded-encoder resolution Krea 2 uses for the reference pass - leave it alone unless you're chasing detail on a small subject.
Outputs and where they go
reference_a and reference_b (IMAGE) feed the Krea 2 reference conditioning. edit_mode (BOOLEAN) is the "am I editing right now" flag the sampler and the detailers read. width and height go to your empty-latent or size node - do not hand-type these, that's how you end up with a crop that doesn't match the canvas. grounding_px passes through as an INT. edit_model is your base model with the LoRA applied, and it goes into the sampler's model input. edit_prompt (STRING) is the expanded instruction, and it goes into conditioning.
Installing it
Same pack as the rest of DonutNodes:
cd ComfyUI/custom_nodes
git clone https://github.com/DonutsDelivery/ComfyUI-DonutNodes.git donutnodes
cd donutnodes
python -m pip install -r requirements.txt
Build dependencies are small and wheel-based - opencv-python-headless, scipy, matplotlib, psutil, tqdm, requests. The models are not small. You need krea2_turbo_bf16.safetensors (~26 GB) in models/diffusion_models, qwen3vl_4b_fp8_scaled.safetensors in models/text_encoders, qwen_image_vae.safetensors in models/vae, and krea2_identity_edit_v1_2.safetensors (~1.8 GB) at models/loras/krea2/. Missing the text encoder is the classic mistake - it's a separate download and Krea 2 won't load without it.
Editing specifically also wants the comfyui-krea2edit nodes installed, per the pack's own node guide. Restart after installing or updating them.
Where people get burned
- "Add reference A in Edit Studio, or turn editing off." That's the node validating itself. With
enabledon, empty or missing slots are a hard error, by design. - "Connect a Krea2 model to Edit Studio." Editing on, no
modelwired. - Ghosting and mush. The community thread on the identity-edit LoRA is blunt about it: keep resolutions on clean multiples, and note that edits can blur badly if the model is being asked to move too much per pass. Edit Studio defaults
multipleto 64 for exactly this reason. - References that vanish when you move machines. Copy
ComfyUI/user/donut/edit_references/and save the workflow after picking images or changing crops - the slot only records what was there when you last saved.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| enabled | BOOLEAN | false | — |
| image_a | STRING | — | |
| image_b | STRING | — | |
| use_reference_b | BOOLEAN | false | — |
| prompt | STRING | — | |
| resolution_mode | COMBO | Preset | 4 options: Preset, Reference A · megapixels, Reference A · crop only, Custom |
| aspect_ratio | COMBO | 4:3 Standard | 10 options: Auto · Reference A, Auto · Reference B, 1:1 Square, 2:3 Portrait, 3:2 Photo, 3:4 Portrait, +4 |
| megapixels | FLOAT | 1.00.1–16 | — |
| width | INT | 115216–16384 | — |
| height | INT | 89616–16384 | — |
| multiple | COMBO | 64 | 3 options: 16, 32, 64 |
| grounding_px | INT | 10880–4096 | — |
| lora_name | STRING | None | — |
| lora_strength | FLOAT | 1.00-20–20 | — |
| crop_a_x | FLOAT | 0.5000–1 | — |
| crop_a_y | FLOAT | 0.5000–1 | — |
| crop_b_x | FLOAT | 0.5000–1 | — |
| crop_b_y | FLOAT | 0.5000–1 | — |
| modelopt | MODEL | Base model; the edit LoRA is applied only when editing is enabled. | |
| text_seedopt | INT | 0 | — |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| reference_a | IMAGE | — |
| reference_b | IMAGE | — |
| edit_mode | BOOLEAN | — |
| width | INT | — |
| height | INT | — |
| grounding_px | INT | — |
| edit_model | MODEL | — |
| edit_prompt | STRING | — |