Nodes/Eric ERNIE-Image Real Diffusers/Eric ERNIE-Image UltraGen
ComfyUI Node

Eric ERNIE-Image UltraGen

The honest workaround for ERNIE's resolution ceiling

By EricRollei·Created 5 months ago·Updated 5 months ago· 3
Eric ERNIE-Image UltraGen
  • pipeline
  • prompt_embeds
  • s1_negative_embeds
  • s2_negative_embeds
  • final_image
  • stage1_preview
prompt
resolution5:4
seed0
use_pefalse
s1_initial_mp0.40
s1_denoise1.00
s1_steps6
s1_guidance_scale1.0
s1_sigma_schedulefixed shift
s1_shift_value6.0
scale_factor2.5
s2_denoise0.85
s2_steps9
s2_guidance_scale1.0
s2_sigma_schedulefixed shift
s2_shift_value5.0
max_final_mp8.0
upscale_methodbislerp
guidance_rescale0.00
vae_decode_fp32true
s1_negative_prompt
s2_negative_prompt

ERNIE-Image was trained up to 1024×1024, and above ~1.5 MP it falls apart - the community's measured verdict is that it "mangles bodies more than Z-Image" once you push past the ceiling. So how do you get a bigger, detail-rich image out of a model with a hard resolution cap? You don't ask it to draw big. You ask it to draw small, and then re-denoise.

Eric ERNIE-Image UltraGen is a two-stage hierarchical generator built around exactly that: Stage 1 lays down the composition at a small latent, then the latent is upscaled and Stage 2 re-denoises it to add detail. It's a hi-res-fix-style workflow, but done entirely in latent space - no external upscaler in the graph, no pixel-space tricks.

The two stages

Stage 1 (composition) runs a full text-to-image pass at a small resolution - s1_initial_mp defaults to 0.4 MP, and the tooltip recommends 0.3–0.5. This is where you want strong structure, so SFT users crank s1_guidance_scale to 6–9 and s1_shift_value to 6–8 (the tooltip notes that range "keeps all steps structural"). Turbo users stay at CFG 1.0 with 6–8 steps. The output is kept as latents, not decoded to pixels - except the node decodes a stage1_preview for you, which is genuinely useful for tuning S1 without waiting on S2.

Stage 2 (detail) upscales those latents by scale_factor (2.5× default - on 0.4 MP that lands you right at ~1 MP, squarely inside the training envelope) and re-noises them at s2_denoise before a partial-denoise pass. That knob is the dial between "light refinement that preserves S1's composition" (0.45) and "heavy re-generation with new detail" (0.65+) - at 1.0 it ignores S1 entirely. The noising uses the flow-matching form x_noisy = (1-σ)x + σ·noise, and the node matches the scheduler's actual sigma so the noise level lines up exactly.

The inputs that matter

  • s1_initial_mp - how small you start. 0.3–0.5 MP.
  • scale_factor - 2.5 on 0.4 MP ≈ 1 MP final. The tooltip is refreshingly blunt: "Higher risks body horror."
  • s2_denoise - the refinement/re-generation tradeoff above. 0.65–0.85 is the sensible band.
  • upscale_method - bislerp is the default and the author's pick: slerp-interpolation preserves latent vector norms and angular relationships, which reads as sharper and more coherent than bicubic. Trust it unless you have a reason not to.
  • s1_guidance_scale / s1_shift_value / s2_guidance_scale / s2_shift_value - the two stage profiles; the tooltips hand you the SFT vs Turbo numbers so you don't have to guess.
  • max_final_mp - caps the final output (8 MP default). Just because it goes to 8 doesn't mean ERNIE handles it well; the model's own ceiling still applies to the detail pass.

Outputs and wiring

Two image outputs: final_image and stage1_preview. Wire final_image to PreviewImage/SaveImage; the preview is optional but worth one look per workflow while you tune S1. It also accepts the pack's prompt_embeds and per-stage negative embeddings if you're using the Encode node.

The honest context

The community's verdict on ERNIE-Image is that it wins at one thing - structured layout and text-in-image (infographics, posters, multi-panel comics) - and that its cleanest use is Turbo at ~1.5 MP. UltraGen is the pack author's answer to the "I want more detail than a 1 MP preset" itch, and for the structured-layout pocket it's genuinely useful: two stages let you lock composition first, then refine, which is exactly what text-heavy layouts want. It is not the tool for photorealism - the KB is consistent that Z-Image reads as a photograph more often, and no amount of stage-splitting changes what ERNIE is. And if your S2 output starts repeating artifacts, that's the model's 2D RoPE going out of distribution, not a setting you missed - dial max_final_mp back toward the training ceiling.

Install is the pack's standard one-time setup: Manager search "Eric ERNIE-Image", or clone https://github.com/EricRollei/Ernie_Image_Real_Diffusers into custom_nodes, restart, and point the loader at a downloaded checkpoint.

CategoryEric ERNIE Image

Inputs (26)

NameTypeDefaultDescription
pipelineERNIE_PIPELINE
promptSTRINGIgnored when prompt_embeds connected.
resolutionCOMBO5:4Aspect ratio for both stages.
seedINT00–18446744073709550000
use_peBOOLEANfalse
s1_initial_mpFLOAT0.400.2–1Stage 1 megapixels. 0.3-0.5 MP recommended.
s1_denoiseFLOAT1.000.05–1Stage 1 denoise strength - fraction of σ=[1.0→0] covered. 0.15 → stops at σ=0.85 (just lays in composition).
s1_stepsINT65–100Stage 1 steps. 6-8 for Turbo, 20-30 for SFT.
s1_guidance_scaleFLOAT1.00–20Stage 1 CFG. 1.0 for Turbo, 6-9 for SFT.
s1_sigma_scheduleCOMBOfixed shift'fixed shift' with s1_shift_value 6-8 keeps all steps structural. 'karras'/'beta' add detail-range emphasis on top of shift.
s1_shift_valueFLOAT6.00.1–16Stage 1 shift. 6-8 recommended. 1.0 = uniform.
scale_factorFLOAT2.51–8Linear upscale factor. 2.5× on 0.4 MP ≈ 1 MP. Higher risks body horror.
s2_denoiseFLOAT0.850.1–1Noise level added to upscaled S1 latent before S2 denoise. 0.45 = 45% noise (light refinement, preserves S1 composition). 0.65+ = heavier re-generation with more new detail. 1.0 = full re-generation (ignores S1).
s2_stepsINT95–100Stage 2 detail steps. 6-10 for Turbo, 20+ for SFT.
s2_guidance_scaleFLOAT1.00–20Stage 2 CFG. 1.0 for Turbo, 2-3 for SFT.
s2_sigma_scheduleCOMBOfixed shift'fixed shift' with s2_shift_value for consistent noise schedule. 'beta' allocates more steps to fine-detail range. 'karras' emphasizes both extremes.
s2_shift_valueFLOAT5.00.1–8Stage 2 shift. 5.0 tested well with Turbo at 2.5× scale.
max_final_mpFLOAT8.00.5–16Megapixel cap on final output.
upscale_methodCOMBObislerpbislerp (slerp-interpolation) preserves latent vector norms and angular relationships — sharper and more coherent than bicubic.
guidance_rescaleFLOAT0.000–1Rescale CFG output toward unit variance. Reduces saturation at high guidance_scale. 0.0 = off. 0.5-0.7 recommended for S1 cfg 6-9. Applied to both stages.
vae_decode_fp32BOOLEANtrueUpcast VAE to float32 for decode. Prevents bf16/fp16 quantization of fine textures. Applies to both S1 preview and S2 final decode.
s1_negative_promptoptSTRINGStage 1 negative prompt.
s2_negative_promptoptSTRINGStage 2 negative. Leave empty to reuse Stage 1.
prompt_embedsoptERNIE_EMBEDSPre-computed positive embeddings.
s1_negative_embedsoptERNIE_EMBEDSPre-computed Stage 1 negative embeddings.
s2_negative_embedsoptERNIE_EMBEDSPre-computed Stage 2 negative embeddings.

Outputs (2)

NameTypeDescription
final_imageIMAGE
stage1_previewIMAGE