Skip to content
Merged
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: Krea-2
description: Generate images with the Krea-2 text-to-image models (Turbo and Raw), including the GGUF / single-file workflow, the conditioning enhancers and training-free style reference.
lastUpdated: 2026-09-30
lastUpdated: 2026-10-16
sidebar:
order: 7
---
Expand All @@ -18,6 +18,13 @@ published checkpoints:
The variant is detected automatically on install, and selecting a Krea-2 model sets sensible defaults
(steps, CFG, 1024×1024) for that variant.

:::note[Image size and the noise schedule]
Raw puts more of its steps at high noise the larger the image, up to the area of 1280×1280 (about 1.6
megapixels). Larger images keep that schedule, which is also the one Turbo always uses. Without the limit, a
2048×2048 Raw image would spend about half of its steps above 90% noise, and a 4096×4096 one all of them.
To sample with a different schedule, set **Shift** on the **Denoise - Krea-2** node in a workflow.
:::

## License

Krea-2 Turbo and Raw are released under the **Krea 2 Community License**. Commercial use of the model and its images is allowed only for companies with less than $1M in annual revenue; above that, an Enterprise license is needed. Redistributed copies must add "Krea" to the model name. The full Diffusers repositories are gated: accept the license on the model's HuggingFace page and add your HuggingFace token under **API Keys** in the Model Manager. The quantized GGUF and NVFP4 copies are not gated, but the same license applies.
Expand Down
26 changes: 13 additions & 13 deletions docs/src/content/docs/Users Guide/04.Image Generation/upscale.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -19,37 +19,37 @@ The panel is split into sections, top to bottom:
- **Scale**: the output size is the source size multiplied by this value. The panel shows the resulting input and output size and warns when the output is large enough to need much more time and VRAM.
- **Treatment preset**, or **Creativity** and **Structure** directly. Higher Creativity invents more detail and gives the prompt more influence. Higher Structure keeps the source composition more strictly; it is only shown when a Tile ControlNet is in use.
- **Detail guidance**: the prompt. It is the project prompt shared with Generate. For upscaling, describe the medium, texture and style rather than new content.
- **Generation**: the **Main model** for the detail pass (**SD1.5**, **SDXL**, **FLUX.1**, **Z-Image** or **Anima**), steps, CFG scale, scheduler, seed, and LoRAs that match the main model. FLUX.1 and Z-Image always run **Euler**, so they show no scheduler.
- **Generation**: the **Main model** for the detail pass (**SD1.5**, **SDXL**, **FLUX.1**, **Z-Image**, **Anima** or **Krea-2**), steps, CFG scale, scheduler, seed, and LoRAs that match the main model. FLUX.1, Z-Image and Krea-2 always run **Euler**, so they show no scheduler.
- **Advanced**: the components the main model needs (see below), tile size and tile overlap, VAE and VAE precision, and CLIP skip for SD1.5.

## What each model family needs

| | SD1.5 / SDXL | FLUX.1 | Z-Image | Anima |
|---|---|---|---|---|
| Tile ControlNet | Required: a Tile or Union ControlNet for the same family, under **Advanced** | Not used; the Structure slider is hidden | Optional: **Z-Image ControlNet Tile**, under **Advanced**. The Union ControlNet has no tile mode and is not offered | Not used; the Structure slider is hidden |
| Negative prompt | Available | Not used; FLUX.1 ignores it, so it is hidden and not recorded | Used only when CFG is greater than 1 | Used only when CFG is greater than 1 |
| CFG scale | Kept as you set it; back to 2 when you switch from Z-Image or Anima | Kept as you set it, and used as guidance; back to 2 when you switch from Z-Image or Anima | Set to the model's default when you pick the model: 1 for Z-Image Turbo, 4 for Z-Image Base | Set to the model's default when you pick the model: 4.5, or 6 for Anima-3.8B |
| Other components | Taken from the main model | Every FLUX.1 model except an SDNQ pipeline needs a **T5 Encoder**, **CLIP Embed** and **VAE**, all under **Advanced**. SDNQ pipelines bring their own. FLUX Fill models cannot be used | A **Qwen3 Encoder** (the 4B) and a FLUX **VAE**, unless the model is a Diffusers or complete SDNQ install that brings its own | A **Qwen3 Encoder** (the 0.6B) and a Qwen-Image **VAE**; Anima-3.8B also a **Qwen3.5 Encoder** |
| Detail pass | Tile by tile | One pass over the whole image | One pass over the whole image | One pass over the whole image |
| | SD1.5 / SDXL | FLUX.1 | Z-Image | Anima | Krea-2 |
|---|---|---|---|---|---|
| Tile ControlNet | Required: a Tile or Union ControlNet for the same family, under **Advanced** | Not used; the Structure slider is hidden | Optional: **Z-Image ControlNet Tile**, under **Advanced**. The Union ControlNet has no tile mode and is not offered | Not used; the Structure slider is hidden | Not used; the Structure slider is hidden |
| Negative prompt | Available | Not used; FLUX.1 ignores it, so it is hidden and not recorded | Used only when CFG is greater than 1 | Used only when CFG is greater than 1 | Used only when CFG is greater than 1 |
| CFG scale | Kept as you set it; back to 2 when you switch from Z-Image, Anima or Krea-2 | Kept as you set it, and used as guidance; back to 2 when you switch from Z-Image, Anima or Krea-2 | Set to the model's default when you pick the model: 1 for Z-Image Turbo, 4 for Z-Image Base | Set to the model's default when you pick the model: 4.5, or 6 for Anima-3.8B | Set to the model's default when you pick the model: 1 for Turbo, 5.5 for Raw |
| Other components | Taken from the main model | Every FLUX.1 model except an SDNQ pipeline needs a **T5 Encoder**, **CLIP Embed** and **VAE**, all under **Advanced**. SDNQ pipelines bring their own. FLUX Fill models cannot be used | A **Qwen3 Encoder** (the 4B) and a FLUX **VAE**, unless the model is a Diffusers or complete SDNQ install that brings its own | A **Qwen3 Encoder** (the 0.6B) and a Qwen-Image **VAE**; Anima-3.8B also a **Qwen3.5 Encoder** | A **Qwen3-VL Encoder** (the 4B) and a Qwen-Image **VAE**, unless the model is a Diffusers install that brings its own |
| Detail pass | Tile by tile | One pass over the whole image | One pass over the whole image | One pass over the whole image | One pass over the whole image |

The panel says what is missing before you can queue, for example "Select a compatible Tile or Union ControlNet." or "This model needs a T5 encoder selected."

:::note[Output size]
FLUX.1 and Z-Image need sizes that are a multiple of 16. When the enlarged image is not, the panel shrinks it slightly to the nearest fitting size before the detail pass — for example 2040 px becomes 2032 px.
FLUX.1, Z-Image and Krea-2 need sizes that are a multiple of 16. When the enlarged image is not, the panel shrinks it slightly to the nearest fitting size before the detail pass — for example 2040 px becomes 2032 px.
:::

### Creativity on Z-Image and Anima
### Creativity on Z-Image, Anima and Krea-2

Z-Image and Anima count the start of the detail pass in steps rather than in noise level, so the same Creativity setting would add much more noise there than on FLUX.1. The panel translates Creativity for them: it starts the pass on the step whose noise level is closest to where FLUX.1 would start. A preset therefore means the same thing on all three, and the pass runs fewer steps than the Steps setting suggests. For example, **Balanced** at 30 steps runs the last 7 or 8, and both need at least 2 steps.
Z-Image, Anima and Krea-2 count the start of the detail pass in steps rather than in noise level, so the same Creativity setting would add much more noise there than on FLUX.1. The panel translates Creativity for them: it starts the pass on the step whose noise level is closest to where FLUX.1 would start. A preset therefore means the same thing on all four, and the pass runs fewer steps than the Steps setting suggests. For example, **Balanced** at 30 steps on a 2048 px result runs the last 7 or 8, and each needs at least 2 steps. Krea-2 Turbo and Raw both keep your Steps setting: Turbo, distilled for 8 steps, then runs the end of a 30-step schedule, and Raw, the undistilled model, gets the steps it needs.

The panel offers only schedulers that start where Creativity puts the pass: **Euler** on FLUX.1 and Z-Image, and **Euler**, **DPM++ 2M**, **DPM++ 2M SDE** and **ER-SDE** on Anima. Heun and LCM build their own noise schedule, so they would treat the enlarged image as pure noise or leave noise in it.
The panel offers only schedulers that start where Creativity puts the pass: **Euler** on FLUX.1, Z-Image and Krea-2, and **Euler**, **DPM++ 2M**, **DPM++ 2M SDE** and **ER-SDE** on Anima. Heun and LCM build their own noise schedule, so they would treat the enlarged image as pure noise or leave noise in it.

The Z-Image Tile ControlNet is optional because the detail pass runs over the whole image at once: there are no tile seams for it to hold together. Adding it lets **Structure** pull the result back toward the enlarged image, at the cost of a second network's memory and time.

## Memory

For SD1.5 and SDXL the detail pass works in tiles, so the output can be much larger than what the model generates in one go. Larger tiles can improve continuity but need more VRAM; more tile overlap reduces seams but costs time and memory.

For FLUX.1, Z-Image and Anima the detail pass runs over the whole image at once, so its memory use grows with the output size. There, **Tile size** only sets the tiles for the VAE encode and decode, and **Tile overlap** has no effect. Anima's decode picks its own tiles.
For FLUX.1, Z-Image, Anima and Krea-2 the detail pass runs over the whole image at once, so its memory use grows with the output size. There, **Tile size** only sets the tiles for the VAE encode and decode, and **Tile overlap** has no effect. Anima's decode picks its own tiles.

For all model families, encoding and decoding the enlarged image with the VAE runs in tiles. See [Low-VRAM mode](/configuration/optimization/low-vram-mode/) if you still run out of memory.
11 changes: 6 additions & 5 deletions invokeai/app/invocations/krea2/krea2_denoise.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ def log_summary(self) -> None:
title="Denoise - Krea-2",
tags=["image", "krea2", "krea-2"],
category="image",
version="1.3.0",
version="1.3.1",
classification=Classification.Prototype,
)
class Krea2DenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
Expand Down Expand Up @@ -172,7 +172,7 @@ class Krea2DenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
default=None,
description="Override the resolution-aware timestep shift (mu). Leave unset -- or 0, which is what "
"the node editor fills in for an untouched optional float -- to use the model default: mu=1.15 for "
"the distilled Turbo checkpoint, resolution-dependent for Raw.",
"the distilled Turbo checkpoint, resolution-dependent for Raw up to the area of 1280x1280 and held above it.",
)
style_reference: Optional[Krea2StyleReferenceField] = InputField(
default=None,
Expand Down Expand Up @@ -402,9 +402,10 @@ def _run_diffusion(self, context: InvocationContext):
elif self._is_distilled(context):
mu = KREA2_DISTILLED_MU
else:
# Resolution-aware shift. Honor the loaded scheduler's config so a Raw checkpoint that ships a
# customized scheduler_config.json is sampled with its own shift params, falling back to the
# Krea-2 defaults for the stock scheduler (and for any field the config omits).
# Resolution-aware shift, held at the end of its fit (see `calculate_shift`). Honor the loaded
# scheduler's config so a Raw checkpoint that ships a customized scheduler_config.json is sampled
# with its own shift params. A key that file omits takes the diffusers scheduler's own default,
# not Krea-2's; the Krea-2 defaults below apply only to the stock scheduler built above.
mu = calculate_shift(
image_seq_len,
base_image_seq_len=getattr(scheduler.config, "base_image_seq_len", KREA2_BASE_IMAGE_SEQ_LEN),
Expand Down
10 changes: 8 additions & 2 deletions invokeai/backend/krea2/sampling_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,20 @@ def calculate_shift(
base_shift: float = KREA2_BASE_SHIFT,
max_shift: float = KREA2_MAX_SHIFT,
) -> float:
"""Resolution-aware mu (linear interpolation by sequence length).
"""Resolution-aware mu: a line through the two config points, held at the last one.

Past ``max_image_seq_len`` (6400 tokens, 1280x1280 of area) the line would keep climbing: mu 2.2 at
2048x2048 puts about half of 28 steps above sigma 0.9, and mu 7.4 at 4096x4096 puts all of them
there, so an img2img start has no step near the sigma it asks for. Held with the stock config, Raw
ends at Turbo's fixed mu, which ComfyUI also uses for Krea-2 at every size; diffusers'
``Krea2Pipeline`` extrapolates.

NOTE: mu is fed straight into ``FlowMatchEulerDiscreteScheduler.set_timesteps(..., mu=mu)``;
the exponential time-shift happens inside the scheduler. Do NOT ``exp()`` this value.
"""
m = (max_shift - base_shift) / (max_image_seq_len - base_image_seq_len)
b = base_shift - m * base_image_seq_len
return image_seq_len * m + b
return min(image_seq_len, max_image_seq_len) * m + b


def build_sigmas(steps: int) -> List[float]:
Expand Down
4 changes: 2 additions & 2 deletions invokeai/frontend/api/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -62275,7 +62275,7 @@
}
],
"default": null,
"description": "Override the resolution-aware timestep shift (mu). Leave unset -- or 0, which is what the node editor fills in for an untouched optional float -- to use the model default: mu=1.15 for the distilled Turbo checkpoint, resolution-dependent for Raw.",
"description": "Override the resolution-aware timestep shift (mu). Leave unset -- or 0, which is what the node editor fills in for an untouched optional float -- to use the model default: mu=1.15 for the distilled Turbo checkpoint, resolution-dependent for Raw up to the area of 1280x1280 and held above it.",
"field_kind": "input",
"input": "any",
"orig_default": null,
Expand Down Expand Up @@ -62328,7 +62328,7 @@
"tags": ["image", "krea2", "krea-2"],
"title": "Denoise - Krea-2",
"type": "object",
"version": "1.3.0",
"version": "1.3.1",
"output": {
"$ref": "#/components/schemas/LatentsOutput"
}
Expand Down
2 changes: 1 addition & 1 deletion invokeai/frontend/api/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24360,7 +24360,7 @@ export type components = {
seed?: number;
/**
* Shift
* @description Override the resolution-aware timestep shift (mu). Leave unset -- or 0, which is what the node editor fills in for an untouched optional float -- to use the model default: mu=1.15 for the distilled Turbo checkpoint, resolution-dependent for Raw.
* @description Override the resolution-aware timestep shift (mu). Leave unset -- or 0, which is what the node editor fills in for an untouched optional float -- to use the model default: mu=1.15 for the distilled Turbo checkpoint, resolution-dependent for Raw up to the area of 1280x1280 and held above it.
* @default null
*/
shift?: number | null;
Expand Down
9 changes: 9 additions & 0 deletions invokeai/frontend/webv2/public/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -999,6 +999,12 @@
"Z-Image and Anima read your prompt with a Qwen3 text encoder: Z-Image with the 4B, Anima with the 0.6B. A bare checkpoint does not carry one, so it has to be selected here."
]
},
"qwen3VlEncoder": {
"heading": "Qwen3-VL Encoder",
"paragraphs": [
"Krea-2 reads your prompt with the Qwen3-VL 4B text encoder. A single-file or GGUF checkpoint does not carry one, so it has to be selected here."
]
},
"referenceImage": {
"heading": "Global Reference Image",
"paragraphs": ["Applies a reference image to influence the entire generation."]
Expand Down Expand Up @@ -2816,6 +2822,9 @@
"qwen35Encoder": "Qwen3.5 Encoder",
"qwen35EncoderRequired": "This model needs a Qwen3.5 encoder selected.",
"selectQwen35Encoder": "Select a Qwen3.5 encoder",
"qwen3VlEncoder": "Qwen3-VL Encoder",
"qwen3VlEncoderRequired": "This model needs a Qwen3-VL encoder selected.",
"selectQwen3VlEncoder": "Select a Qwen3-VL encoder",
"negativePromptCfgGated": "Used only when CFG is greater than 1.",
"vaeRequired": "This model needs a VAE selected.",
"tileControlNet": "Tile ControlNet",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ export {
isAnimaQwen3Encoder,
isBundledMainForBase,
isDiffusersMainForBase,
isKrea2Qwen3VlEncoder,
isNonAnimaQwen3Encoder,
isVaeAcceptedByBase,
isVaeCompatibleWithGenerateModel,
Expand Down
Loading
Loading