Comfy UI Outpainting

Image

Comfy UI Outpainting

Quante volte ti è capitato di dover scartare un’immagine perché non aveva l’aspect ratio giusto e non c’era modo di ritagliarla senza rovinare tutto? Magari bastava davvero poco: un’inquadratura appena più larga, un po’ di “respiro” ai lati, qualche centimetro in più sopra la testa o sotto i piedi. È esattamente qui che entra in gioco l’outpainting: la capacità di un’AI di estendere un’immagine oltre i suoi confini originali, ricostruendo ciò che non c’era con coerenza visiva. In pratica, invece di tagliare e perdere informazioni, aggiungi spazio dove serve, mantenendo stile, luci e continuità della scena, come se lo scatto fosse nato così.

Dallo screenshot si vede un workflow ComfyUI costruito per fare outpainting (estensione dei bordi) tramite un modello della famiglia FLUX “fill” e una classica pipeline di inpainting, con alcuni accorgimenti per controllare meglio la generazione e la fusione con l’immagine originale.

Load models

All’inizio, nella sezione Step 1 – Load models, vengono caricati i componenti fondamentali. Il nodo Load Diffusion Model carica il modello di diffusione (nel tuo caso un flux…fill…dev.safetensors, quindi orientato a riempimento/ricostruzione coerente). Il nodo DualCLIPLoader carica i due encoder testuali (tipicamente CLIP-L e T5-XXL), che servono a trasformare il prompt in “condizionamento” utilizzabile dal modello. Infine Load VAE carica il VAE (qui un ae.safetensors), necessario per passare tra spazio latente e immagine RGB (decodifica finale e, in alcuni flussi, supporto alla preparazione/condizionamento dell’inpainting).

Load image

Nella sezione Step 2 – Load image, il nodo Load Image importa l’immagine sorgente. Subito dopo entra in gioco Pad Image for Outpainting, che è il cuore dell’estensione. Questo nodo crea una nuova “tela” più grande aggiungendo padding ai lati (nel tuo screenshot si vede un valore consistente, ad esempio 400 px su più lati) e applica anche una feathering (sfumatura del bordo, qui intorno a 24) per rendere meno netto lo stacco tra area originale e area da generare. Tecnicamente, questo passaggio produce due cose: i pixels (l’immagine espansa) e una mask che identifica la zona “vuota/da riempire” rispetto all’originale.

CLIP Text Encode

Sul fronte testuale, il nodo CLIP Text Encode (Positive Prompt) genera il condizionamento positivo a partire dal prompt (nel box si intravede un prompt breve, tipo “beautiful scenery”, ma l’importante è la funzione per convertire testo in embedding). A valle del prompt compaiono due nodi che servono a rifinire la guida del modello: FluxGuidance imposta un valore di guidance (nel nostro caso è alto, circa 30.0), cioè quanto il modello deve “seguire” la direzione del prompt; ConditioningZeroOut viene spesso usato per azzerare o normalizzare una parte del conditioning in specifiche pipeline FLUX, così da evitare sovra-influenze o per rendere più stabile l’interazione con l’inpainting (in pratica è un nodo di controllo che “ripulisce” o “neutralizza” un conditioning in un punto del flusso).

InpaintModelConditioning

Il nodo chiave che mette insieme immagine, maschera e condizionamenti è InpaintModelConditioning. Qui arrivano: il positive (dal ramo del prompt/guidance), l’eventuale negative (se presente nel flusso), il VAE, i pixels dell’immagine padded e la mask prodotta dal padding. Questo nodo prepara correttamente i tensori per l’inpainting, in pratica crea un latent_image coerente con la tela espansa e imposta l’area mascherata come regione su cui il sampler deve intervenire, mantenendo invece vincolata l’area non mascherata (quella originale). L’opzione noise_mask risulta impostata su false nello screenshot, il che significa che non stiamo usando una maschera del rumore “speciale”, ma una gestione standard del rumore nell’area da rigenerare.

Differential Diffusion

Sul ramo del modello, si vede anche Differential Diffusion applicato al modello stesso prima del campionamento. In termini pratici, questo nodo tende a migliorare l’outpainting/inpainting perché gestisce in modo più “differenziale” la transizione tra zone fissate e zone rigenerate, aiutando a mantenere continuità (texture, illuminazione, gradiente) e riducendo alcuni artefatti tipici lungo il confine della maschera.

KSampler

La generazione vera e propria avviene nel KSampler. Il sampler riceve il model (passato attraverso Differential Diffusion), i condizionamenti positive/negative e il latent_image preparato da InpaintModelConditioning. I parametri mostrati sono indicativi di un outpainting “pulito” e relativamente libero: steps ~20 (qualità/tempo bilanciati), sampler euler, scheduler normal, denoise 1.00 (rigenerazione completa della parte mascherata), e CFG ~1.0 (molto basso: con FLUX è frequente lavorare con CFG bassi per evitare look “forzati” e preservare naturalezza e coerenza). Il seed è impostato con controllo e possibilità di randomize, quindi puoi ottenere varianti mantenendo invariata la struttura del flusso.

VAE Decode

Una volta ottenuto il risultato in latente, VAE Decode converte il latente in immagine.

Save Image

Infine Save Image salva su disco con un filename_prefix (qui “ComfyUI”), producendo l’output finale.

Se l’articolo ti è piaciuto restiamo in contatto su linkedin a: https://www.linkedin.com/in/andreatonin/

Banner

Releated Posts

ComfyUI – Reference Conditioning

In ComfyUI (soprattutto con modelli come Flux) il Reference Conditioning è un nodo che permette di usare una…

DiByAndrea Tonin Apr 9, 2026

ComfyUI per generare anime: NewBie Image Exp0.1

NewBie Image (spesso indicato come NewBie-image-Exp0.1) è un modello text-to-image in stile anime/ACG pensato per generare illustrazioni con…

DiByAndrea Tonin Apr 9, 2026

Comfy UI: OpenPose

Quando si parla di “OpenPose” in giro per ComfyUI, spesso si intende una cosa molto concreta: prendere una…

DiByAndrea Tonin Apr 9, 2026

L’AI in Cooperativa come scelta organizzativa

Negli ultimi mesi sono stato molto impegnato con docenze in cooperative anche molto diverse tra loro. In aula…

DiByAndrea Tonin Apr 9, 2026