Fresco
Draw the layout as boxes, then give each box its own prompt, references and LoRAs
- scene
- inputs
- fresco
Fresco is the editor half of this pack's region system. You get a canvas, you drag boxes onto it, and each box becomes a place in the picture with its own prompt, its own reference images and its own LoRAs. The node next door, Fresco Apply, then turns that scene into something you can actually sample.
Reach for it when "one prompt, one LoRA loader" has stopped being enough. Two characters in one frame is the classic case, and it's the one everyone hits: the model blends them, invents a third face that's an average of the two, or loses track partway through. Prompting harder doesn't fix it, and neither does loading both character LoRAs, because a LoRA is a weight patch - merge two of them and both deltas fire on every token in the image. Fresco's whole design is a reaction to that: each layer's LoRA runs as a live side branch that only touches that layer's tokens, never the other layer's.
What the node actually is
It's mostly a widget node: there's no per-layer socket to wire, the layers live on the node's own canvas. That's why this pack builds a Vue frontend rather than just registering Python classes.
The scene input is that editor state, as one value - canvas size, the boxes you drew, any shape you painted inside a box (brush, erase, feather), each layer's prompt, its reference images with a strength and fit each, its influence, its LoRA rows, its denoise, plus the Scene row pinned underneath. The Scene row is worth knowing before you start drawing: it holds the scene prompt (which becomes the positive conditioning downstream), the background - everything no layer covers, with its own prompt, references, LoRAs and denoise - and the two scene settings, overlap (cover or share) and ref detail (the resolution references are read at). Upper layers cover lower ones, like paint.
The inputs input takes either a Krea 2 CLIP, or the pack's Fresco Inputs node, which bundles the same text encoder together with an optional photo to trace and edit, its VAE, and a SAM3 checkpoint. Same socket, two shapes. Wire the plain CLIP if you're generating from scratch; wire Fresco Inputs the moment you want to segment layers by text or click, or edit a photo.
One output: fresco, into Fresco Apply. The node is flagged as an output node in ComfyUI, which sounds odd for something that outputs a value - the reason is that pressing run sends Fresco Inputs' photo back under your canvas so you can draw over it. Only Fresco executes; nothing downstream fires.
References: meaning or look
Each layer's references are read by the text encoder alongside that layer's prompt, so their vision tokens sit inside the layer's own copy of the prompt and only that layer reads them. That's the default, read as: Meaning - Krea 2 takes what the reference is ("a red floral summer dress") more than its exact pixels.
Switch a layer to read as: Look and you get the in-context edit recipe Krea 2's edit LoRAs were trained on. Each reference is fitted onto the output's grid in pixel space, VAE-encoded, and added as clean tokens that only that layer's area reads - no other layer, no background, not the plain prompt. The layer's prompt is then encoded through Qwen3-VL with the images in view. Put the edit LoRA in the layer's LoRA rows so it runs on those reference tokens too, as it did in training. This path needs the VAE, and it's the one that gives a real likeness instead of a vibe.
Installing it
Search Nynxz in ComfyUI Manager, or from a shell:
comfy node install comfyui-nynxz-nodes
From source, with the frontend build - this is not optional for Fresco:
cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-NynxzNodes
cd ComfyUI-NynxzNodes
pnpm install && pnpm build
Then restart ComfyUI. No Python dependencies - the pack's pyproject.toml declares an empty dependency list and leans on the torch and numpy ComfyUI already has. But the built web/ folder is gitignored and only ships in the registry package, so a bare clone gives you Python classes and a node with no editor. That's the main way people bounce off this pack.
Where people get burned
Fresco Apply is Krea 2 only and says so loudly - it identifies the model by its txtfusion stack, and refuses anything else rather than quietly doing nothing. Load a Krea 2 checkpoint and its krea2 text encoder.
The other trap is wiring: Fresco Apply already is Regions Apply underneath. Don't chain another Regions Apply after it - regions applied twice break each other, and the node now refuses an already-patched model. If you need Regions Apply's own knobs, feed it the plain un-patched model and take only positive and latent from Fresco Apply.
And if references aren't landing, don't rewrite the prompt first - raise the layer's influence, which is the dial for "follow my reference against the rest of the picture".
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| scene | NYNXZ_FRESCO_SCENE | [object Object] | — |
| inputs | CLIP,NYNXZ_FRESCO_INPUTS | The text encoder (Krea 2's), or Fresco Inputs to bring a photo, its VAE and SAM3 along with it. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| fresco | NYNXZ_FRESCO | Into Fresco Apply. |