BD Lotus-2 Predict
Actually run Lotus-2 — and the one background mistake that ruins your depth
- model
- image
- mask
- map
- raw_linear
- colorized_preview
BD Lotus-2 Predict is the other half of the Lotus-2 pair: you feed it the LOTUS2_MODEL from BD Lotus-2 Model Loader plus an image, and it runs the diffusion denoising loop that produces your depth or normal map. If the loader is the expensive setup, this is the part that earns the setup - and it has a handful of settings where the defaults are right and exactly one trap that will ruin your output if you ignore it.
What comes out
Three outputs, and they're different in a way that matters:
map- the map in its natural encoding. For depth, that's a 3-channel image where the channels are nearly identical (the model outputs RGB-encoded depth); for normal, it's the normal map directly, with R=X, G=Y, B=Z mapped to [0,1].raw_linear- a [0,1]-normalized linear depth. This is the one you feed into anything that wants numeric depth -BD Depth To Shadow Map, displacement, or math.colorized_preview- the pretty one, for eyeballing.
The inputs that matter
num_inference_steps- defaults to 10 (from upstream), and the tooltip's right that quality plateaus around 10–15 for most images. The detail sharpener does the last few steps; cranking to 50 mostly buys you wait time.process_res- caps the longest image edge at this resolution before inference; output is resized back to input size afterward. 1024 is the model's training resolution. Going higher costs VRAM for marginal quality - leave it unless you have a specific reason.guidance_scale- 3.5 default, tune from there.mask+bg_fill- this pair is the whole ballgame, see below.
The trap: how you mask the background
The best-practice pattern, straight from the node's own tooltip: feed the full original image to image (so the model keeps scene context and detail and you don't get silhouette halos), and pass your subject mask (e.g. from background removal) in mask to clean the background after inference. Subject = 1, background = 0. Then bg_fill decides what happens to the masked-out area:
auto- the smart default: depth → black (far), normal → flat-facing #8080ff.black/white/normal_neutral- force that fill.transparent- RGBA output, alpha = your mask.keep- don't mask at all.
The warning that will save you an hour: never use white as the depth background, and never use black or white for normal - those are invalid far/flat values that downstream shaders and PBR derivation will faithfully propagate into garbage. That's why auto exists; it fills with the value each map type considers "empty."
Where it fits
In this pack, Lotus-2 depth is the recommended upstream for BD Derive PBR Maps and BD Depth To Shadow Map, and the README's character-parts pipeline runs a Lotus-2 depth pass for per-part depth ordering. It's also worth reusing one loaded model across many Predict calls - the loader's module-level cache means the second predict on the same task is dramatically faster.
Installing
Same pack install as always - ComfyUI Manager search "BrainDead" or clone + pip install -r requirements.txt. The real requirements are the ~24 GB FLUX.1-dev base and the Lotus-2 weights, both handled by BD Lotus-2 Model Loader. Note the map needs a decent GPU: the tooltip on the loader says ~35 GB peak without CPU offload, ~27 GB with it.
Bottom line: keep the defaults, feed the full image and mask it after, and Lotus-2 hands you depth/normal quality that feedforward estimators just don't reach. Ignore the background rule and you'll spend an evening wondering why your depth has a glowing white backdrop.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | LOTUS2_MODEL | — | |
| image | IMAGE | — | |
| num_inference_steps | INT | 101–50 | Detail sharpener denoising steps. Default 10 from upstream. Quality plateaus around 10-15 for most images. |
| process_res | INT | 1024512–2048 | Cap longest input edge at this resolution. Output is resized back to input size after inference. |
| guidance_scale | FLOAT | 3.50–10 | — |
| timestep_core_predictor | INT | 10–1000 | Core predictor stage's effective timestep (default 1). |
| maskopt | MASK | Optional subject mask (e.g. from BD Remove Background). BEST PRACTICE: feed the FULL original image to `image` (so the model keeps scene context + detail and avoids silhouette halos), and pass the subject mask here to clean the background AFTER. Subject=1, background=0. | |
| bg_fillopt | COMBO | auto | How to fill the background where mask=0: auto — DEPTH→black (far), NORMAL→#8080ff (flat, facing camera) black/white/normal_neutral — force that fill transparent — output RGBA (alpha=mask) keep — don't mask. (NEVER use white for depth bg, or black/white for normal — they're invalid far/flat values.) |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| map | IMAGE | — |
| raw_linear | IMAGE | — |
| colorized_preview | IMAGE | — |