Nodes/DOGMA Nodes/DOGMA TileUnpack v56.7
ComfyUI Node

DOGMA TileUnpack v56.7

Get the Tiles Back, In Order, With Every Caption on One Page

By axior·Created 4 months ago·Updated 3 days ago· 1
DOGMA TileUnpack v56.7
  • bundle
  • tiles
  • prompts
  • preview

The other half of the clip

DOGMA TileUnpack v56.7 is the only node in the pack that can open a DOGMA_TILE_BUNDLE. Its twin, DOGMA TileBundle v56.7, wrapped your tile crops, per-tile prompts and per-tile VLM captions into one opaque object so they could travel down a single wire through a memory-cleanup barrier without losing sync. TileUnpack takes that object apart again on the far side and hands you the three things you actually need: the crop list to feed the sampler, the prompt list, and one string that prints every caption next to its prompt so you can read what your vision model thought it saw.

Two outputs are the payload; the third is the piece people underrate. In a per-tile restore pipeline the failure that costs you a run isn't a crash - it's a VLM that described a partial facade as a complete building, which becomes a prompt asking for a complete building on a tile where almost nothing was visible. The preview is your chance to catch that before the diffusion pass, not after.

How it works

unpack() does three dictionary lookups. tiles and prompts come straight back out of the bundle as the same list objects that went in - no copying, no CPU shuffling, no model calls. The third output, preview, is built by zipping the reports against the prompts and joining them into one block per tile:

TILE 1
CAPTION: <the VLM report for tile 1>
PROMPT: <the prompt built for tile 1>

That ordering is the whole point: the list index is the only thing binding a caption to a crop, and everything downstream trusts it.

Inputs and outputs

There is exactly one input - bundle (DOGMA_TILE_BUNDLE) - and nothing to configure. No widgets, no optional sockets, no thresholds.

The outputs are the interesting part:

  • tiles (IMAGE, list) - one image per list item, back to the sampler.
  • prompts (STRING, list) - one prompt per tile, aligned by index with tiles.
  • preview (STRING, not a list) - every tile's caption and prompt in one text block, tile 1 first.

Note that tiles and prompts come out as proper ComfyUI lists, which means ordinary nodes wired downstream run once per tile - ComfyUI maps non-list-native nodes over lists. That's what you want for a per-tile masked img2img pass: each crop gets its own prompt and its own denoise. It's also the mechanism that bit this pack in the 1.0.6 era, when an ordinary captioning node sitting on a list with unload_after=True reloaded an 8B vision model once per item; DOGMA's fix was a node that takes the list whole and reuses one worker. Keep an eye on which side of the wire your model loaders live on - a list output turns any naive loader into N reloads.

The preview output is deliberately a single string rather than a list. Wire it to Show Text or Preview Any and you get one page you can scroll through - genuinely the fastest way to sanity-check a tile batch before committing GPU time. If you leave it unwired, nothing complains; you just lose the only human-readable view of the bundle.

Install

Same pack as the bundle. Manager → search DOGMA Nodes; or:

cd ComfyUI/custom_nodes
git clone https://github.com/axior/ComfyUI-DOGMA-Nodes
pip install -r ComfyUI-DOGMA-Nodes/requirements.txt

That last line matters more than the README suggests. The README states no extra Python dependencies are required, but requirements.txt pins scipy>=1.10, and dogma_semantic_v567.py imports from scipy import ndimage at import time - this module won't load without it. Manager installs it automatically, which is why most users never see the problem. Straight git clone users do. No model files are needed for this node; it's plumbing.

Where it goes wrong

An empty output that isn't an error. The bundle's only check is that the three lists match in length, and zero equals zero equals zero. An empty tile list packs fine, unpacks fine, and hands your sampler nothing - ComfyUI maps over an empty list, so downstream nodes simply don't execute and nothing appears in the queue. If a Klein stage seems to silently do nothing, check whether the crop list arrived empty before you go hunting for a sampler bug.

Captions and tiles shifted by one. TileUnpack preserves list order faithfully, so misalignment never starts here. If the prompt for tile 2 is describing tile 3, the shift happened in the crop node or the captioner, and the bundle wouldn't have caught it - it compares counts, not content. Reading the preview output is how you find out which.

The preview isn't per-tile. It's one concatenated string, so wiring it into a node that expects to map over a list gives you a single execution with everything in it, not N executions. That's intended, but it surprises people who assume every socket on this node behaves like the other two.

Feeding the bundle anywhere else. Only this node accepts DOGMA_TILE_BUNDLE - anything else throws a missing/failed input error, because the type is opaque by design. Bundle out, tile sampler in, prompt list to whatever consumes the per-tile instruction. That's the whole shape of the pair.

CategoryDOGMA/v56.7

Inputs (1)

NameTypeDefaultDescription
bundleDOGMA_TILE_BUNDLE

Outputs (3)

NameTypeDescription
tilesIMAGE
promptsSTRING
previewSTRING