Nodes/radiance/Regional Grid
ComfyUI Node

Regional Grid

Two characters, four prompts, one canvas — the grid way

By FXTD-Studios·Created 8 months ago·Updated about 18 hours ago· 246
Regional Grid
  • base_cond
  • clip
  • conditioning
  • grid_info
◄grid_prompts["subject in left area", "background on right"]►
◄columns2►
◄rows1►
◄cell_strength1.00►
◄global_strength0.30►

Regional Grid splits the canvas into a rows × columns grid and gives each cell its own prompt. It exists for the single oldest problem in image prompting: you describe two people and the model smears their hair colours, clothes and poses into each other. That's not a prompting failure you can fix by rewording - conditioning applies to the whole canvas, and it always has. The KB's regional-prompting panel tracks this demand running steadily at 20–40 threads a month since 2023, which is what an unfixed, genuinely wanted technique looks like.

Radiance's version is the grid flavour: you don't draw boxes, you pick a topology and list prompts in order.

How you drive it

Four things are required and they're all obvious once you see the shape.

base_cond is your CONDITIONING for the whole frame - the global prompt: style, lighting, the scene. clip is the text encoder used to encode each cell's own prompt; the same CLIP you fed your base_cond, pretty much always. grid_prompts is a JSON array of strings, one per cell, in row-major order - so for columns: 2, rows: 2 you're listing top-left, top-right, bottom-left, bottom-right, in that order. Get that order wrong and you get a silent, plausible wrong image, which is the worst kind of bug. The placeholder default is ["subject in left area", "background on right"] so you can see the format.

Then the shape: columns (1–8, default 2) and rows (1–8, default 1). Eight by eight is 64 cells, which is not a good idea but is your right.

The two strength knobs are where the actual work happens. cell_strength (default 1) weights each region's own prompt; global_strength (default 0.3) weights the global conditioning that's blended in at every step. The default pairing is telling: a relatively light global and a full-strength cell, i.e. let the regions drive. If your cells come back looking like the global prompt with decoration, your global is too strong. If the composition falls apart into unconnected patches, your global is too weak - and cells with no prompt at all inherit only the global, which is how you leave a region deliberately unspecified.

Outputs

conditioning, which goes into the sampler's positive input exactly where your normal prompt conditioning went, and grid_info, a STRING describing the grid you just built. You'll want that for the same reason you want any of Radiance's report strings: when the result is almost right, it's the fastest way to confirm the prompts landed where you think they did. The node itself is pure conditioning work - no images in, no images out, no model runs.

When the grid is the wrong tool

If your regions aren't a neat rectangular partition - a person here, a logo there, a background everywhere else - the grid forces you to fight it. Overlapping and irregular regions are Regional Prompt's job, which takes explicit x/y/w/h boxes or a mask and can be chained. Reach for the grid when the layout genuinely is a grid; reach for Regional Prompt when you have a mental image of where things go.

Also worth knowing where the field is heading, from that same KB panel: better text encoders have slowly reduced how often you need this, and newer models trained with spatial grounding in the caption schema need it less. It hasn't gone away, and on the models people are actually running today it still works.

Install

Ships with Radiance. ComfyUI Manager → search Radiance → install → restart → refresh. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/fxtd-studios/radiance.git
cd radiance
python -m pip install -r requirements.txt

No extra models, and the only real dependency is the text encoder you already have. Note that Radiance ships 147 nodes, most of them about HDR and colour - you're installing all of that to get a conditioning node, which is a slightly silly trade unless you wanted the rest. You probably will.

Where people get burned

  • Row-major order. Again: it's the one thing that silently ruins output.
  • Malformed JSON. grid_prompts is parsed as JSON, so it's double quotes and square brackets, not a comma-separated list. A parse failure gives you a warning and no cells rather than a crash, so if your regions do nothing at all, look at the string.
  • Both strengths cranked. Conditioning weights above ~1.5 don't make the model obey harder; they push the conditioning out of distribution and you get burned, oversaturated mush. Start at the defaults.
  • Expecting a seam-free result. Regional conditioning is a soft blend over latent space, not a paste. Edges between regions are gradients, and the model will happily invent continuity across them.
CategoryFXTD STUDIOS/Radiance/Generate

Inputs (7)

NameTypeDefaultDescription
base_condCONDITIONINGGlobal positive conditioning for the whole frame, passed through with its strength set to global_strength. Cells with no prompt get only this.
clipCLIPText encoder used to encode each cell's prompt from grid_prompts.
grid_promptsSTRING["subject in left area", "background on right"]JSON array of prompts, one per grid cell, row-major order.
columnsINT21–8Number of columns in the regional prompt grid.
rowsINT11–8Number of rows in the regional prompt grid.
cell_strengthFLOAT1.000–2Conditioning strength for each individual region cell. Higher values make the model follow regional prompts more closely.
global_strengthFLOAT0.300–2Conditioning strength for the global (full-image) prompt. Blended with cell conditioning at each step.

Outputs (2)

NameTypeDescription
conditioningCONDITIONING—
grid_infoSTRING—