ComfyUI Node
Eric Krea2 Multi-Stage Ultra V2 (presets)
A ComfyUI node in Eric/Krea2 with 65 inputs and 9 outputs.
Eric Krea2 Multi-Stage Ultra V2 (presets)
- krea2_pipeline
- prompt_conditioning
- ref_latents
- init_latent
- sigmas
- upscale_vae
- decode_vae
- sweep
- image
- latent
- stage1_image
- stage2_image
- stage1_latent
- stage2_latent
- settings
- sweep_sheet
- sweep_manifest
◄prompt►
◄ultra_presetcustom►
◄ref_match_sizetrue►
◄negative_prompt►
◄cond_presetcustom►
◄cond_rebalancefalse►
◄cond_multiplier4.0►
◄cond_layer_weights1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.5,5.0,1.1,4.0,1.0►
◄cond_jitter0.000►
◄cond_jitter_seed-1►
◄seed0►
◄seed_modeoffset_per_stage►
◄crop_bottom0►
◄crop_overgentrue►
◄init_match_sizetrue►
◄width0►
◄height0►
◄aspect_ratio5:4 landscape►
◄s1_megapixels3.00►
◄s1_steps10►
◄s1_cfg1.9►
◄s1_schedulebeta57►
◄s1_samplerres_2m►
◄s1_noisewhite►
◄s1_eta0.10►
◄s1_start_step0►
◄s1_end_step0►
◄s1_s2_upscale_vaefalse►
◄upscale_to_stage23.0►
◄s2_steps20►
◄s2_cfg1.5►
◄s2_start_step7►
◄s2_end_step20►
◄s2_schedulelinear►
◄s2_samplereuler►
◄s2_noisewhite►
◄s2_eta0.10►
◄upscale_to_stage32.0►
◄s3_steps20►
◄s3_cfg1.3►
◄s3_start_step9►
◄s3_end_step20►
◄s3_schedulelinear►
◄s3_samplereuler►
◄s3_noisewhite►
◄s3_eta0.10►
◄turbo_guidanceoff►
◄upscale_vae_modedisabled►
◄preview_stagesfalse►
◄distilled_shiftfixed►
◄shift_mu_s11.15►
◄shift_mu_s21.15►
◄shift_mu_s31.15►
◄upscale_renormoff►
◄s1_hybrid_steps0►
◄s2_hybrid_steps0►
◄s3_hybrid_steps0►
CategoryEric/Krea2
Inputs (65)
| Name | Type | Default | Description |
|---|---|---|---|
| krea2_pipeline | KREA2_PIPELINE | — | |
| prompt | STRING | — | |
| ultra_presetopt | COMBO | custom | Load a saved recipe from ultra_presets.json and override the panel values for this run (partial presets only override the fields they contain). 'custom' = use the panel as-is. Use the ★ Save Preset button to add one; the dropdown refreshes after a graph reload. |
| prompt_conditioningopt | KREA2_CONDITIONING | Optional precomputed conditioning (from Eric Krea2 Vision Prompt), used INSTEAD of encoding 'prompt' as text. Lets image-grounded conditioning flow through every stage exactly like a text-only prompt would (same tensor shape). cond_rebalance still applies. 'prompt' is ignored for the positive side when this is connected, but still used for the negative side and console logging. | |
| ref_latentsopt | KREA2_REF_LATENTS | Optional reference latents (from Eric Krea2 Reference Latents). That node's edit_recipe picks the mechanism: ostris_t0 appends refs at t=0 modulation (style/reference LoRAs, ~0.4-0.5 strength - 1.0 is reported to break/fragment the image); edit_frame prepends the source on the target grid at shared timestep (identity/instruction edit LoRAs at 1.0, pixel-fit to this run's S1 size, conditions S1 only). ONLY does something useful with a matching edit-trained LoRA loaded; the base model ignores what it can't read. Turbo at guidance 0 for most use; edit_frame removals want Raw at CFG ~3 with an EMPTY negative. | |
| ref_match_sizeopt | BOOLEAN | true | ostris_t0 recipe only (edit_frame always pixel-fits + re-encodes at S1 size instead). Rescale ref_latents (in latent token space, no re-encode) to this run's resolved Stage 1 size before denoising. NOTE: the ostris node/training never matches refs to the target (own grid, <=1MP cap), so for the Style Reference LoRA try OFF first - ON deviates from the trained geometry and the token-space resample slightly softens the reference. ON remains available for the corner-bias failure mode (reference pasted in a shrunken corner / fragmented partial copy) if OFF misbehaves at your sizes. |
| negative_promptopt | STRING | — | |
| cond_presetopt | COMBO | custom | Preset library of rebalance profiles (from cond_presets.json). 'custom' uses the manual cond_multiplier + cond_layer_weights below; a named preset overrides both (only when cond_rebalance is ON). Edit the JSON + restart to add sets. |
| cond_rebalanceopt | BOOLEAN | false | Rescale the positive conditioning's 12 Qwen3-VL layer taps (per-layer gains x global multiplier) - the native equivalent of the community 'ConditioningKrea2Rebalance' node used to counter Krea2's built-in prompt dampening. Off = untouched conditioning. |
| cond_multiplieropt | FLOAT | 4.00–10000 | Global gain on the positive conditioning when cond_rebalance is on (reference default 4.0). |
| cond_layer_weightsopt | STRING | 1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.5,5.0,1.1,4.0,1.0 | Comma-separated per-layer gains for the 12 Qwen3-VL taps (applied before the global multiplier). Count must divide the conditioning width (12 for Krea2). Reference emphasizes taps 8/9/11. |
| cond_jitteropt | FLOAT | 0.0000–1 | Seeded Gaussian perturbation of the POSITIVE conditioning, as a fraction of its per-layer-tap std (0 = off). The 'text-encoder seed' diversity trick: distilled/Turbo models barely respond to init-noise changes but respond strongly to conditioning changes, so this restores seed-to-seed variety in conditioning space. Applied ONCE, identically for every stage (after cond_rebalance). Useful range ~0.01-0.10; high values drift off prompt. Negative conditioning is untouched. |
| cond_jitter_seedopt | INT | -1-1–18446744073709550000 | Seed for cond_jitter noise. -1 (default) = derived from the main seed (seed+777), so changing the main seed changes the jitter too - the diversity behaviour you usually want. >=0 = fixed independent seed: hold the jitter constant while sweeping noise seeds (or vice versa) to explore conditioning space and noise space separately. |
| seedopt | INT | 00–18446744073709550000 | — |
| seed_modeopt | COMBO | offset_per_stage | same_all_stages: one seed threaded through (reproducible). offset_per_stage: S2=seed+1, S3=seed+2 (reproducible, decorrelated). random_per_stage: S1 seeded, S2/S3 fresh random each run. |
| crop_bottomopt | INT | 00–96 | Crop N latent rows off the bottom of the FINAL executed stage to remove the boundary band the DiT re-forms on every denoise (1 latent row = 8 px at the final stage's resolution). 0 = off. Snapped to even (2x2 patch stride). Typical ~10-20 at final res; deeper S2/S3 sampling needs fewer. |
| crop_overgenopt | BOOLEAN | true | ON (recommended): the final stage makes disposable extra bottom rows (S1 generates taller; S2/S3 pad the upscaled latent) so the band forms in them and is trimmed - your target size/aspect is preserved and the real content is never stretched. OFF: trim the final latent directly (output ends up shorter by the crop). |
| init_match_sizeopt | BOOLEAN | true | img2img only: match Stage 1 size to the init latent's own dimensions (preserves source resolution/aspect). OFF = use aspect_ratio + s1_megapixels and resize the init to fit (can reframe/stretch if the aspect differs). |
| widthopt | INT | 00–8192 | Explicit Stage-1 width override (0 = derive from aspect_ratio + s1_megapixels). Wire the Eric Krea2 Resolution node here to size Stage 1 to a source image (img2img) or a fixed resolution. Both width AND height must be > 0 to take effect; rounded to /16. init_match_size still wins when an init_latent is connected. |
| heightopt | INT | 00–8192 | Explicit Stage-1 height override (0 = derive from aspect_ratio + s1_megapixels). See 'width'. Both must be > 0 to take effect. |
| aspect_ratioopt | COMBO | 5:4 landscape | 11 options: 21:9 ultrawide, 16:9 wide, 3:2 landscape, 4:3 landscape, 5:4 landscape, 1:1 square, +5 |
| s1_megapixelsopt | FLOAT | 3.000.25–16 | Stage-1 size in megapixels (dimensions derived from the aspect ratio). |
| s1_stepsopt | INT | 101–200 | — |
| s1_cfgopt | FLOAT | 1.90–20 | Guidance for this stage. Krea2 convention: this is 'g', where standard CFG = 1 + g (g=0 -> no guidance/CFG 1.0; g=0.2 -> CFG 1.2; g=3.5 -> CFG 4.5 for Raw). g>0 activates the negative prompt but adds an uncond pass (~2x slower this stage). On Turbo it's forced to 0 unless turbo_guidance. |
| s1_scheduleopt | COMBO | beta57 | 9 options: linear, balanced, karras, beta57, beta, bong_tangent, +3 |
| s1_sampleropt | COMBO | res_2m | Denoise solver. euler: 1st-order (fastest, A/B baseline). res_2m: RES 2nd-order exponential MULTIstep (sharper, same model-call cost as euler). res_2s: RES 2nd-order SINGLE-step predictor/corrector (strongest at low steps, ~2x slower). deis_3m: DEIS 3rd-order multistep, exact variable-step weights (very smooth, euler cost). abnorsett_3m / abnorsett_4m: Norsett exponential Adams-Bashforth 3rd/4th order, 1 call/step, FIXED uniform-step weights - bounded and stable on every schedule incl. linear_quadratic (the kreamania pass-2 style pick). lawson4_4s / etdrk4_4s: single-step exponential RK order 4, 4 calls/step, no history - the most noise-robust solvers here, stable everywhere; strong on refine windows. er_sde: ER-SDE-Solver-3 (ComfyUI-faithful port) - stochastic, re-injects scaled noise every step; strong at LOW step counts (community recipe: er_sde + simple schedule, 8 steps); eta ignored (own churn), noise type shapes the churn. All but euler honour a noisy early end_step. rk6_7s: 6th-order 7-stage explicit Runge-Kutta - highest solver accuracy, ~7x model calls per step (the kreamania finetuner pass-1 recipe with linear_quadratic sigmas). Recommended: res_2s + beta57 for Stage 1. lcm: full ancestral - every step jumps to x0 and fully re-noises to the next sigma (ignores eta, always seeded). The artifact-launderer: strongest choice for post-upscale refine windows (the native euler->lcm two-pass trick); too churny for Stage 1. lcm_hybrid: lcm churn for the first half of the window, then deis_3m for the second half - launders entry damage, then develops detail trajectory-faithfully (the detail-preserving alternative when plain lcm eats fine detail). |
| s1_noiseopt | COMBO | white | Shapes the SDE ancestral-churn noise only (eta>0, non-euler samplers) - NOT the primary init, which is always plain white. white is recommended; low_freq/high_freq/pink are a subtle stylistic lean, not a composition control (that's denoise strength / start_step). No effect at eta=0 or with sampler=euler. |
| s1_etaopt | FLOAT | 0.100–1 | SDE ancestral churn for Stage 1 (res_2m/res_2s/deis_* only; euler ignores it). 0 = deterministic ODE. S1 lays down composition, so keep it low (0-0.1); higher adds variation but can roughen structure. |
| init_latentopt | KREA2_LATENT | Optional img2img source (from Eric Krea2 VAE Encode, or any stage's KREA2_LATENT output). When connected, Stage 1 becomes an img2img pass: the init latent is re-noised at s1_start_step and denoised over [s1_start_step, s1_end_step] instead of generating from pure noise. Leave unconnected for normal text-to-image. | |
| s1_start_stepopt | INT | 00–199 | img2img only (needs init_latent): inject the init latent at this step of the s1_steps schedule = the re-noise / denoise-strength control. 0 = full noise (ignores the source, ~text-to-image); higher preserves more of the source (lighter change). No effect for text-to-image. |
| s1_end_stepopt | INT | 00–200 | img2img only: stop Stage 1 at this step of s1_steps. 0 (default) = run to the end (full denoise, recommended for the first stage). < s1_steps leaves the latent noisy for the next stage (res_2m only). |
| s1_s2_upscale_vaeopt | BOOLEAN | false | S1->S2 jump: use the trained 2x VAE (decode-2x + re-encode = real detail) instead of bislerp. Forces a 2x linear step (4x area), OVERRIDING upscale_to_stage2. Requires upscale_vae connected. Separate from upscale_vae_mode because using the VAE this early is a specialist move - it injects detail right after composition and the re-encode softening gets refined away by S2/S3 (unlike at the final stage, where it looks soft). |
| upscale_to_stage2opt | FLOAT | 3.00–8 | S1->S2 AREA upscale factor (0 = stop after S1). This is MEGAPIXELS, not linear: 2.0 = 2x the pixels ~= 1.41x per side; 4.0 = 2x per side. IGNORED for this jump when s1_s2_upscale_vae is on (the VAE forces a 2x linear step = 4x area). Auto-rounded to a multiple of 16px. |
| s2_stepsopt | INT | 201–200 | Length of the S2 sigma schedule. The stage runs only the [start_step, end_step] window of it (reference-workflow style). |
| s2_cfgopt | FLOAT | 1.50–20 | Guidance 'g' (standard CFG = 1 + g). g>0 enables the negative prompt and costs ~2x time this stage. Turbo: forced 0 unless turbo_guidance. |
| s2_start_stepopt | INT | 70–199 | Inject the upscaled latent at this step of the s2_steps schedule (re-noise level; replaces denoise-strength). Higher = preserves more S1 structure / lighter refinement. |
| s2_end_stepopt | INT | 201–200 | Stop S2 at this step. < s2_steps leaves the latent slightly noisy for S3 to continue (res_2m only; euler always runs to sigma 0). |
| s2_scheduleopt | COMBO | linear | 9 options: linear, balanced, karras, beta57, beta, bong_tangent, +3 |
| s2_sampleropt | COMBO | euler | Denoise solver for Stage 2 (see s1_sampler). Recommended for the refine pass: deis_3m or abnorsett_4m + bong_tangent schedule. |
| s2_noiseopt | COMBO | white | Shapes the SDE ancestral-churn noise only (eta>0, non-euler samplers) - NOT the primary re-noise. See s1_noise. |
| s2_etaopt | FLOAT | 0.100–1 | SDE ancestral churn for the Stage 2 refine (res_2m/res_2s/deis_* only; euler ignores it). 0 = clean deterministic refine (best for avoiding stray-hair / edge artifacts); ~0.1 adds a little fine detail. Keep low on refine passes - high eta re-injects high-frequency noise every step. |
| upscale_to_stage3opt | FLOAT | 2.00–8 | S2->S3 AREA upscale factor (0 = stop after S2). MEGAPIXELS, not linear: 2.0 = 2x the pixels ~= 1.41x per side. IGNORED when upscale_vae_mode does a plain 's2-s3' VAE jump (forced 4x area); but RESPECTED by the 's2-s3 with downsample' modes (VAE 2x detail resampled to THIS factor). Auto-rounded to a multiple of 16px. |
| s3_stepsopt | INT | 201–200 | Length of the S3 sigma schedule. The stage runs only the [start_step, end_step] window of it. |
| s3_cfgopt | FLOAT | 1.30–20 | Guidance 'g' (standard CFG = 1 + g). g>0 enables the negative prompt and costs ~2x time this stage. Turbo: forced 0 unless turbo_guidance. |
| s3_start_stepopt | INT | 90–199 | Inject the upscaled latent at this step of the s3_steps schedule (re-noise level). Lower = deeper final refinement. |
| s3_end_stepopt | INT | 201–200 | Stop S3 at this step. For the FINAL stage keep this = s3_steps so the image fully denoises to sigma 0; ending early leaves visible noise. |
| s3_scheduleopt | COMBO | linear | 9 options: linear, balanced, karras, beta57, beta, bong_tangent, +3 |
| s3_sampleropt | COMBO | euler | Denoise solver for Stage 3 (see s1_sampler). deis_3m / abnorsett_4m + bong_tangent works well for the final refine. |
| s3_noiseopt | COMBO | white | Shapes the SDE ancestral-churn noise only (eta>0, non-euler samplers) - NOT the primary re-noise. See s1_noise. Denoise strength (start/end step) is still the real detail control. |
| s3_etaopt | FLOAT | 0.100–1 | SDE ancestral churn for the Stage 3 final refine (res_2m/res_2s/deis_* only; euler ignores it). 0 = cleanest; small values (~0.1) add fine detail. High eta here re-introduces high-frequency artifacts on the final image. |
| turbo_guidanceopt | COMBO | off | Guidance on the Turbo/distilled checkpoint (no effect on Raw, which always uses its cfg). off: force all cfg=0 - no CFG, negative prompt ignored, fastest. s1_only: use s1_cfg for composition (where guidance matters most) and force s2_cfg=s3_cfg=0, so refinement stays single-pass/fast. RECOMMENDED. all_stages: use every per-stage cfg (negative active throughout; each guided stage ~2x slower). Krea2 cfg is g (standard CFG = 1+g); Turbo is distilled for g=0, so keep it LOW (g~0.1-0.3 == CFG 1.1-1.3). Any g>0 adds an uncond pass (~2x that stage). We use plain CFG, not CFG++. |
| sigmasopt | KREA2_SIGMAS | Optional per-stage sigma-curve shape (from Eric Krea2 Sigmas). Each enabled stage OVERRIDES that stage's schedule dropdown with its curve + detail_bias; disabled stages fall back to the panel dropdown. The shape is resolution-independent - it's realized at THIS node's own s1/s2/s3_steps. Leave unconnected to use the schedule dropdowns. | |
| upscale_vaeopt | UPSCALE_VAE | — | |
| upscale_vae_modeopt | COMBO | disabled | Trained 2x upscale VAE routing (requires upscale_vae connected). This dropdown covers the S2->S3 jump and the final decode ONLY - the S1->S2 jump has its own toggle (s1_s2_upscale_vae). disabled: bislerp latent interpolation + standard decode (no VAE). s2-s3: S2->S3 via VAE decode-2x + re-encode (real detail; forces 4x area, overrides upscale_to_stage3). Needs 3 stages. s2-s3 with downsample: same VAE detail, then resampled DOWN to your upscale_to_stage3 factor (respects the field instead of forcing 4x). final decode: final image via VAE 2x decode (2x larger output). final decode with downsample: VAE 2x decode then Lanczos ->native (supersample quality pass, same output size). both: s2-s3 (4x area) + final VAE 2x decode. both with downsample: s2-s3 downsampled + final downsampled. both with final decode downsample: s2-s3 (4x area) + final downsampled. |
| decode_vaeopt | KREA2_DECODE_VAE | Optional base Wan 2.1 (or other Wan-family) VAE for the 1x final decode and stage previews, instead of the Qwen VAE (natural grain vs 'plastic' skin). Ignored when upscale_vae_mode does the final 2x decode. | |
| preview_stagesopt | BOOLEAN | false | Also decode stage 1 and stage 2 to images (stage1_image / stage2_image outputs) for parameter tuning. Costs one extra 1x decode per stage; off by default. |
| distilled_shiftopt | COMBO | fixed | Per-stage flow-matching shift (mu) policy for DISTILLED/Turbo models (Raw is already resolution-aware and ignores this). fixed: mu=1.15 everywhere - Krea's distillation value, calibrated for <=2K. Above that the schedule is under-shifted and upscale error can survive as mottling/splotches on many fine tunes. resolution: keep 1.15 up to the ~1.6MP calibration band, extend mu automatically above it (recommended starting point). manual: dial each stage with shift_mu_s1/s2/s3 below. NOTE: fixed and resolution IGNORE the shift_mu fields below (manual only). Stages set to the euler sampler skip this policy entirely and run the stock diffusers flow-match shift instead. Rule of thumb: LOWER mu = more low-sigma time = more fine detail/texture (but mottling risk at high res); HIGHER mu = more high-sigma time = smoother, cleaner structure (too high = soft/waxy). |
| shift_mu_s1opt | FLOAT | 1.150.1–10 | Manual mu for Stage 1 - used ONLY when distilled_shift=manual (fixed/resolution ignore it, and euler stages ignore it too). 1.15 = Turbo default; usually leave it there for <=2MP S1. Lower = more detail, higher = smoother. |
| shift_mu_s2opt | FLOAT | 1.150.1–10 | Manual mu for Stage 2 - used ONLY when distilled_shift=manual (fixed/resolution ignore it, and euler stages ignore it too). Try 2.0-3.0 at 4-8MP if splotches persist. Lower = more fine detail/texture, higher = smoother/cleaner (too high = soft/waxy). |
| shift_mu_s3opt | FLOAT | 1.150.1–10 | Manual mu for Stage 3 - used ONLY when distilled_shift=manual (fixed/resolution ignore it, and euler stages ignore it too). Usually matches or slightly exceeds shift_mu_s2. Lower = more detail, higher = smoother. |
| upscale_renormopt | COMBO | off | Repair inter-stage latent statistics after each upscale hop. Latent interpolation is a lowpass that shrinks variance, and decoded variance IS contrast/saturation - each hop drains a little and stages compound it into progressive flattening / desaturation. per_channel: re-match each channel's mean/std to the pre-hop latent (strongest color+contrast hold; recommended). global: overall mean/std only. off: previous behavior. A telemetry line prints latent std pre-hop / post-hop / post-renorm in every mode, so the drain is measurable. |
| s1_hybrid_stepsopt | INT | 00–98 | lcm_hybrid / lcm_hybrid2 on Stage 1: EXACT number of lcm full-churn steps at the head of the stage's window before the tail sampler takes over (lcm_hybrid: deis_3m; lcm_hybrid2: res_2m). 0 = auto (half the window, ceil - the historical behavior). Clamped so both halves always run at least one step. Fewer lcm steps = more trajectory-faithful detail; more = more laundering. Ignored by every other sampler. |
| s2_hybrid_stepsopt | INT | 00–98 | Stage 2 hybrid handoff in exact lcm steps (0 = auto half). See s1_hybrid_steps. |
| s3_hybrid_stepsopt | INT | 00–98 | Stage 3 hybrid handoff in exact lcm steps (0 = auto half). See s1_hybrid_steps. |
| sweepopt | KREA2_SWEEP | Optional sweep plan (from Eric Krea2 Sweep Plan). When connected, this run executes EVERY combo in the plan inside one queue item (model + LoRA state stay loaded), saves metadata-stamped cell PNGs + a labeled contact sheet + sweep_manifest.json under output/sweeps/<id>/, and the image output becomes the batch of cells. Panel values are the base recipe; each combo overrides only its swept keys. |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| latent | KREA2_LATENT | — |
| stage1_image | IMAGE | — |
| stage2_image | IMAGE | — |
| stage1_latent | KREA2_LATENT | — |
| stage2_latent | KREA2_LATENT | — |
| settings | STRING | — |
| sweep_sheet | IMAGE | — |
| sweep_manifest | STRING | — |