Extend the edges of a finished picture and keep the picture itself. Pad the canvas, fill the new border, paste the original back. Samples: a fisherman on a pier (sides), a terracotta courtyard from above (sides) and a lighthouse at dusk (top and bottom), each shown before and after.
Required models
- Diffusion model: RedCraft 3.0 Krea 2, the INT8 convrot build,
redcraft23_30Krea2_int8_convrot.safetensors, inmodels/diffusion_models. Plain Krea 2 and Krea 2 Turbo load too; RedCraft is what we tested. - Text encoder: the Qwen3-VL 4B text encoder from the Krea 2 downloads (see the Krea 2 guide on comfyui-wiki.com); we run a community int8 ConvRot build of it (
qwen3vl_4b_int8_convrot), and the bf16 or fp8 file works the same. It goes inmodels/text_encoders, loaded with CLIPLoader typekrea2. - VAE: the Qwen-Image VAE,
qwen_image_vae.safetensors, inmodels/vae, from Comfy-Org on Hugging Face.
Settings
- Steps
8. It is a distilled model, more steps do not help. - CFG
1.0, samplerer_sde, schedulersimple, denoise1.0 - Pad:
ImagePadForOutpaint, default256left and256right, top and bottom0, feathering160 DifferentialDiffusion(core node), strength1.0, on the model before the sampler. Keep it connected.- Decode:
VAEDecodeTiled, tile512, overlap64 - Negative: a
ConditioningZeroOut. At CFG 1.0 a negative prompt does nothing, so the graph does not pretend.
How to use it
- Load your picture. About 1 megapixel works best, because the padded canvas is what gets generated. Keep the padded total near 1 megapixel, 1.6 at most.
- Set left, top, right and bottom on the pad node, in pixels.
128to384per side per pass works. A bigger jump invents a different scene, so extend in several passes and feed each result back in. Multiples of 16 are safest. - Describe the whole extended scene in the prompt, not just the new strip: the subject, the setting, the light, and what continues past each edge. The model only sees the prompt and the picture, so a prompt about the strip alone draws a different picture there.
- Describe what is actually at the edge of the original. If the edge is pale sky, ask for more pale sky, not new objects; new content there makes a hard wall at the join.
- Feathering 160 with Differential Diffusion is what makes the join soft. Without it, soft masks make ghost panels.
- If a horizon or a big shape jumps at the join, try another seed; most seeds join cleanly.
- The graph generates the whole canvas and pastes it over the new border only, through the pad node's feathered mask. Your original stays as it was, except inside the feather band where the seam blends.
Tips we learned the hard way
- Density beats brevity. Write a full paragraph: who or what, where, the light, the camera. A short prompt gets you a short picture.
- Say what you want, never what you do not. No negative prompt, and no SDXL habits: weight brackets and the old separator keyword do nothing here. Write "alone in the frame, no other people" instead of a negative list.
- Name the medium. "Drawn in clean cel-shaded anime line art, drawn rather than photographed" holds a drawing; "semi-realistic" alone drifts to photo.
Tested on ROCm (a 7900 XTX). Core ComfyUI nodes only, so CUDA builds should run it as is.
If this worked for you, a thumbs-up here helps the next person find it.
Description
Extend the edges of a finished picture and keep the picture itself. Pad the canvas, fill the new border, paste the original back. Samples: a fisherman on a pier (sides), a terracotta courtyard from above (sides) and a lighthouse at dusk (top and bottom), each shown before and after.
Required models
- Diffusion model: RedCraft 3.0 Krea 2, the INT8 convrot build,
redcraft23_30Krea2_int8_convrot.safetensors, inmodels/diffusion_models. Plain Krea 2 and Krea 2 Turbo load too; RedCraft is what we tested. - Text encoder: the Qwen3-VL 4B text encoder from the Krea 2 downloads (see the Krea 2 guide on comfyui-wiki.com); we run a community int8 ConvRot build of it (
qwen3vl_4b_int8_convrot), and the bf16 or fp8 file works the same. It goes inmodels/text_encoders, loaded with CLIPLoader typekrea2. - VAE: the Qwen-Image VAE,
qwen_image_vae.safetensors, inmodels/vae, from Comfy-Org on Hugging Face.
Settings
- Steps
8. It is a distilled model, more steps do not help. - CFG
1.0, samplerer_sde, schedulersimple, denoise1.0 - Pad:
ImagePadForOutpaint, default256left and256right, top and bottom0, feathering160 DifferentialDiffusion(core node), strength1.0, on the model before the sampler. Keep it connected.- Decode:
VAEDecodeTiled, tile512, overlap64 - Negative: a
ConditioningZeroOut. At CFG 1.0 a negative prompt does nothing, so the graph does not pretend.
How to use it
- Load your picture. About 1 megapixel works best, because the padded canvas is what gets generated. Keep the padded total near 1 megapixel, 1.6 at most.
- Set left, top, right and bottom on the pad node, in pixels.
128to384per side per pass works. A bigger jump invents a different scene, so extend in several passes and feed each result back in. Multiples of 16 are safest. - Describe the whole extended scene in the prompt, not just the new strip: the subject, the setting, the light, and what continues past each edge. The model only sees the prompt and the picture, so a prompt about the strip alone draws a different picture there.
- Describe what is actually at the edge of the original. If the edge is pale sky, ask for more pale sky, not new objects; new content there makes a hard wall at the join.
- Feathering 160 with Differential Diffusion is what makes the join soft. Without it, soft masks make ghost panels.
- If a horizon or a big shape jumps at the join, try another seed; most seeds join cleanly.
- The graph generates the whole canvas and pastes it over the new border only, through the pad node's feathered mask. Your original stays as it was, except inside the feather band where the seam blends.
Tips we learned the hard way
- Density beats brevity. Write a full paragraph: who or what, where, the light, the camera. A short prompt gets you a short picture.
- Say what you want, never what you do not. No negative prompt, and no SDXL habits: weight brackets and the old separator keyword do nothing here. Write "alone in the frame, no other people" instead of a negative list.
- Name the medium. "Drawn in clean cel-shaded anime line art, drawn rather than photographed" holds a drawing; "semi-realistic" alone drifts to photo.
Tested on ROCm (a 7900 XTX). Core ComfyUI nodes only, so CUDA builds should run it as is.





