Every time this comes up the replies turn into a hunt for the right workflow file, which is the wrong hunt. The graph is not the hard part. The control signal is, and understanding where it comes from settles most of the confusion in one read.
The control signal is the whole point
When you push a finished render back through a diffusion model to sharpen it, add planting, fix a sky, the model wants to be helpful and will happily move your building while it works. A window becomes three. A cantilever grows a column. ControlNet is the leash. You feed it a structural map of the scene, a depth map or an edge map or both, and it holds the new pixels to that structure while the style changes on top.
So the enhancement stands or falls on the map. A good structural map keeps the building yours. A wrong one holds the image to a shape that was never there. Everything below is about getting a map you can trust, and knowing when you cannot.
The pass you should have exported
Here is the part most architects skip. Your render engine already knows the depth of every pixel exactly, because it built the scene in three dimensions to make the image. Enscape, D5, V-Ray, Corona, Twinmotion, all of them can write a depth pass, a normal pass, and an object mask as separate render elements, often called AOVs. That depth is measured, not inferred. It is correct to the millimeter because it came straight out of the geometry.
If the scene is still open, this is the move. Turn on the depth and normal elements, re-render, and you have a control map that is exactly true to the model you built. Two minutes of setup buys you a leash that never lies. The reason nobody does it is that the passes are off by default and the enhancement happens days later in a different program, by which point the scene is closed and the only artifact left is a JPG.
Your engine measured the depth once. Most people throw it away and estimate it back.
When the pass is gone, you rebuild it
This is the real case: a flat image, no scene, no elements. A client sent it. It is an old export. It came off someone else's machine. You reconstruct the control maps from the pixels.
Canny is the easy half. It is edge detection running on the image itself, so it always works, on any picture, with no model involved. It gives you hard outlines: window frames, floor lines, the silhouette of the massing. It says nothing about what is near and what is far.
Depth is the half that needs a model, because a single flat photo does not contain distance, it has to be estimated. For years that meant MiDaS, and it was rough. The current default is Depth Anything 3, released by ByteDance in November 2025, which produces a far cleaner monocular depth map from one image and runs on modest hardware, with a streaming build that fits under twelve gigabytes of VRAM. Drop its preprocessor node in front of your depth ControlNet and you get a plausible depth map out of a picture that never carried one. In most ComfyUI node packs it appears as a Depth Anything preprocessor you select in place of the old MiDaS one.
Estimated depth is a guess, and the guess has a shape
A recovered depth map is inference. The model looks at the image and predicts distance from shading, perspective and learned priors. It is usually good and it is never measured, and the places it goes wrong are exactly the places architecture lives.
Glass reads as solid or as whatever is reflected in it, so a curtain wall can come back as a lumpy surface at the depth of the sky it mirrors. Large flat planes, a white wall, a still floor, give the model little to anchor on and drift in depth. Thin elements, mullions, railings, pergola slats, get smeared into the plane behind them. And a real depth pass from your engine has none of these problems, because it never guessed. This is the same failure family behind why enhancement hallucinates in the first place, moved one step upstream into the map itself.
Native versus recovered, at a glance
| Exported pass (AOV) | Recovered from flat render | |
|---|---|---|
| Source | the engine's own geometry | estimated from one image |
| Accuracy | exact, metric | plausible, relative |
| Glass and reflections | correct | often wrong |
| Thin elements | held | smeared |
| Needs the scene open | yes | no |
| Setup cost | two minutes, once | one node, always available |
How we would actually wire it
If you still have the scene, export the depth and normal passes and use them. Nothing beats a measured map and it is nearly free.
If all you have is the flat image, stack the two recovered maps instead of trusting one. Canny to pin the hard edges the depth model smears, Depth Anything 3 for the near-and-far the edges cannot express, each on its own ControlNet at moderate strength. Then keep the denoise low. The whole point is a light pass that changes finish and keeps form, and as we said in the denoise question nobody answers, the denoise value is the dial that actually decides whether the building survives. High denoise with a shaky recovered depth map is how you get a confident, beautiful render of a building you did not design. Combined with a fixed seed, this is repeatable enough to run across a set.
Our take
Recovering a control map from a flat render is a genuinely good trick and it belongs in every architect's ComfyUI kit, because most of the images you will want to improve arrive as flat files with the scene long gone. Depth Anything 3 makes the recovered version better than it has ever been. Just hold the right expectation: it is a strong guess standing in for a number your engine already knew. Trust it on the massing, watch it on the glass, and when the stakes are high and the scene is still on your disk, go back and export the pass you were always able to.
The best depth map is the one you did not have to imagine.
Written from the 23 July 2026 intel sweep. Depth Anything 3 details are as published by its authors (ByteDance, released November 2025) and node availability varies by ComfyUI preprocessor pack. This is a technique note, not a tested benchmark of any single workflow; validate on your own images before relying on it for client work. ArchiGen AI carries no sponsored placements.