DOGMA v39 Context-First Tile Prompt
Say what era this is before you say what to restore
- prompt
- clean_report
Most of the composers in this pack lead with the tile's contents and append the project context as a qualifier at the end. v39 inverts that: the period lock is the first thing in the prompt, and the tile inventory comes after it.
Why the order changed
On an LLM-encoded model, the opening of a prompt behaves like the first sentence of an instruction. Lead with "RESTORE ONLY THE EXISTING CONTENT IN THIS EXACT TILE" and that's your framing - everything after is detail. Lead with the period lock and the instruction becomes contextualised from token one: you're telling the model what kind of photograph this is before telling it what to fix, so "improve the detail on the cars" arrives pre-loaded with which cars.
The prompt is four clauses, in this order:
RESTORE ONLY THE EXISTING CONTENT IN THIS EXACT TILE. PROJECT CONTEXT / PERIOD LOCK: <context>- The ground-truth sentence - source tile is geometric ground truth, context constrains appearance of objects that already exist and is never permission to add one.
- The preservation list - exact count, positions, silhouettes, perspective, occlusions, lighting, exposure, haze, composition; never modernize an existing object.
- The negative hallucination list, which is unusually specific: never convert blur, reflection, shadow, foliage texture, asphalt texture, haze or an indistinct shape into a new vehicle, person, building or subject.
That fourth clause names asphalt texture and foliage texture deliberately. Texture is what a detail pass is supposed to sharpen and what a confused model turns into objects - asphalt grain becomes gravel, leaf noise becomes a bush, and now your archive photo has new content in it. Then the tile inventory goes in as TILE INVENTORY: <report>, followed by the micro-detail instruction: improve photographic micro-detail only on content already supported by the source, uncertain regions stay uncertain.
Inputs and outputs
tile_report and project_context, both STRING with forced inputs. Both get whitespace-collapsed and fence-stripped, and both are capped at 900 characters - the report in this generation is allowed to be an actual paragraph rather than a parsed field list, which is the main structural difference from v36.
Outputs prompt and clean_report.
Install
ComfyUI Manager → search DOGMA Nodes, or:
cd ComfyUI/custom_nodes && git clone https://github.com/axior/ComfyUI-DOGMA-Nodes
Restart ComfyUI. No dependencies - the pack's requirements.txt is literally # No external dependencies. - no model files, no network calls. The pack's README describes only the WAN VACE nodes and the DOGMA samplers, so this node has no upstream documentation; the class is short enough to read in a minute.
Where it bites
Empty context degrades quietly. If project_context is blank you get "PROJECT CONTEXT / PERIOD LOCK: " and the model reads an instruction with a hole in it. Always wire a real context string - even "preserve the source era exactly" is better than nothing.
Long reports get chopped at 900 characters, mid-thought. v39 doesn't parse fields, so there's no graceful degradation: whatever your VLM wrote last is gone. If you're using a verbose report, put the important clause first in your VLM instruction.
Period lock is the sharpest knife in the family and it can cut both ways. A wrong context string - say, a modern era on a vintage frame - will actively push the reconstruction in the wrong direction, and it will do it before the preservation clauses have said anything. This is the one node in the family where a bad input looks like a model failure.
It's still one of six near-identical composers. v39's distinguishing feature is prompt ordering, not capability. If a tile is hallucinating content, the ordering isn't your problem - the mask, the model, or the tile crop is.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| tile_report | STRING | — | |
| project_context | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| clean_report | STRING | — |