ComfyUI Node

Geowizard Sampler

Depth and normals from one pass, if you can feed the VRAM

By kijai·Created 2 years ago·Updated 2 years ago· 127
Geowizard Sampler
  • geowizard_model
  • image
  • depth
  • normal
steps10
ensemble_size3
seed0
domainindoor
schedulerDDIMScheduler
keep_model_loadedtrue

This is the node that does the actual work in kijai's Geowizard pack: feed it an image plus the geowizard_model from the Model Loader, and you get a depth map and a surface-normal map out of the same run. Two outputs, one pass, no extra nodes. That's GeoWizard's whole pitch versus the Depth Anything family, which gives you depth and then makes you derive normals (or install a separate model) if you want them.

The trade, and it's a real one: this is a diffusion-based estimator, like Marigold, so it's slow and VRAM-hungry next to a discriminative model. In the community's 8-model depth comparison on a 4090, GeoWizard finished in well under a minute at ~1.4MP, but it wasn't the winner on plain depth quality - its niche is transparent/reflective objects and the free normals. Reach for it when those matter, not for every ControlNet preprocess.

How the diffusion actually runs

Under the hood the sampler runs the image through the GeoWizard denoising loop a few times and averages the results. That's what most of the inputs control:

  • domain (indoor / outdoor / object, default indoor) - this is not a prompt. It's a one-hot class embedding baked into the diffusion conditioning that tells the model what kind of scene it's looking at. Pick the wrong one and estimates get worse; for a random photo, indoor is the safe default.
  • ensemble_size (default 3) - how many denoising passes get averaged. More passes = smoother, more stable maps; fewer = faster. This is the first knob to turn down on a low-VRAM card, and the model handles it gracefully.
  • steps (default 10) - the denoising steps per pass. The pipeline caps timesteps at 10 internally, so going higher mostly costs time for little gain.
  • seed - reproducibility, plain and simple.
  • scheduler (default DDIMScheduler, six diffusers schedulers to pick from) - the sampler swaps it onto the loaded pipeline before inference. Leave it on DDIM unless you're experimenting; the defaults are the tested ones.
  • keep_model_loaded (default true) - keep the pipeline in VRAM between runs for fast iteration, or drop it back to CPU after each image if you're juggling memory with other nodes. If your workflow chains several jobs, flip this to false when VRAM is tight.

Batches are handled: give it a batch of images and it loops through them with a progress bar rather than blowing up the batch dimension.

Wiring the outputs

  • depth - a grayscale IMAGE where white is near and black is far. The node inverts the raw model output and clamps it, so you get the standard convention every depth ControlNet and parallax node expects. It's 3-channel (the grayscale repeated), so it previews cleanly and feeds straight into a depth ControlNet preprocessor input.
  • normal - a colored surface-normal IMAGE, the same kind you'd get from a dedicated normal estimator.

Both come back at your original input resolution (the pipeline works internally at a multiple of 8 and bicubic-upscales back), so no fiddly resizing between here and your ControlNet.

Getting it installed and unstuck

Same as the whole pack: ComfyUI Manager (search "Geowizard") or:

cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-Geowizard

Then restart and let the loader pull the ~4.7GB model on first queue. The usual failure mode is people running this on 8GB cards with defaults - if you're there, drop ensemble_size to 1 and steps to 6 before touching anything else. And if the output depth looks inverted or flat, double-check the domain before you blame the node; it's the setting people forget.

CategoryGeowizard

Inputs (8)

NameTypeDefaultDescription
geowizard_modelGEOWIZMODEL
imageIMAGE
stepsINT101–200
ensemble_sizeINT31–200
seedINT00–18446744073709550000
domainCOMBOindoor3 options: outdoor, indoor, object
schedulerCOMBODDIMScheduler6 options: DDIMScheduler, DDPMScheduler, DEISMultistepScheduler, PNDMScheduler, DPMSolverMultistepScheduler, EulerDiscreteScheduler
keep_model_loadedBOOLEANtrue

Outputs (2)

NameTypeDescription
depthIMAGE
normalIMAGE