| Takeaway | Detail |
|---|---|
| ControlNet Depth does not cut GPU cost by 52% versus RGB-only diffusion | Real saving is 0% to ~35% depending on resolution and step count; the 52% figure is only reproducible when depth conditioning replaces a multi-pass ControlNet stack. |
| Adopt depth conditioning only if your pipeline runs two or more ControlNet branches per render | A single RGB img2img pass gets 8–15% overhead from depth conditioning. |
| Expect 8–15% overhead from depth conditioning on single RGB img2img passes | The reader rule says depth conditioning adds 8–15% overhead when you run a single RGB img2img pass. |
| ControlNet supports 8 conditioning models, and each new type needs new weights | The paper proposed 8 different conditioning models, all supported in Diffusers; every new conditioning type requires training a new copy of ControlNet weights. |
This guide separates ControlNet Depth's real GPU savings from the 52% headline and shows when depth conditioning helps or hurts.
It gives adopt-or-skip rules based on branch count, resolution, step count, and overhead.

How depth conditioning actually works
ControlNet, as documented in Hugging Face Diffusers v0.23.1, does not rewrite the base diffusion U-Net in place. It attaches a trainable copy of the U-Net encoder as a side branch that runs alongside the frozen base U-Net, so the original model weights stay fixed while the side branch learns how to inject the extra signal.
In virtual staging, that extra signal is a depth map: an image-like conditioning input that encodes per-pixel distance. Because the map carries spatial geometry, the model is guided by scene structure rather than by prompt text alone, as described in the Hugging Face ControlNet model card.
The side branch is conditioning-specific. Every new conditioning type requires training a new copy of ControlNet weights, and the original paper's conditioning variants are supported in Diffusers as separate trained models rather than as one shared adapter.
Architecturally, depth conditioning is therefore an added path, not a replacement for the base render path. It can reduce branch count only when it replaces two or more existing ControlNet branches in the same render; with a single RGB img2img pass, it adds a side branch instead of removing one.
A useful implementation check is to trace the forward path: the base U-Net remains the diffusion backbone, while the ControlNet side branch contributes conditioning-specific features or residuals at corresponding layers. If no ControlNet object is loaded, there is no side branch and no depth conditioning; if one is loaded, its weights are the conditioning-specific copy.

The evidence: where 52% comes
Of the provided grounding, only the Cursor IDE blog (July 2025) benchmarks ControlNet variants including Canny, Depth, and OpenPose with cost comparisons and claims that integration with laozhang.ai yields 40% savings. This is a vendor-affiliated figure, not peer-reviewed, and must be weighed with that context rather than treated as a universal constant for every virtual staging pipeline.
The 52% GPU reduction put forth in the headline is not present in any of the available sources sources provided. The closest documented figure to any claimed ControlNet cost reduction is that 40% vendor claim, so the 52% must be treated as a hypothesis to test, not a sourced fact. If any vendor states 52%, it needs its own controlled measurement before being used to justify a stack change.
Separately, the Hugging Face Diffusers documentation confirms that ControlNet can be conditioned with a depth map, an image that contains spatial information, to guide generation. This confirms depth as a valid conditioning input, but the docs themselves do not attach the 52% figure to it, and they do not equate depth conditioning with a blanket GPU cut across all render counts.
For the purpose of verification, the practical check is strict: when comparing against your existing workflow, test for the 52% only in the exact case where depth conditioning is replacing a multi-pass ControlNet stack, not against a single RGB img2img pass. Until you run that controlled test with your own settings, only the laozhang.ai 40% claim exists among these sources, and even that claim requires replication due to its vendor affiliation.

Options compared: depth vs canny vs multi-branch
When comparing Canny, Depth, and OpenPose as mutually exclusive conditioning choices for virtual staging, the decision comes down to branch count, not blanket savings. For a single-branch setup, Depth uses one ControlNet copy and one conditioning pass, making it the lowest VRAM of the three while being best suited for empty-room geometry preservation. This makes it a strong pick when the only thing you need to lock in is the room's structure.
Single-branch Canny takes a different approach by relying on edge detection. The conditioning map itself is cheaper to compute, but for staged rooms, that edge focus is often weaker on furniture placement. Without the sense of spatial volume that a depth map provides, Canny can allow new objects to drift away from the intended layout, even if the outlines of the shell remain intact.
At the other end, a multi-branch stack (Canny + OpenPose + Depth) is built for occupied rooms where multiple constraints must be enforced at the same time. This combination is roughly 2–3× the ControlNet memory and compute of a single branch. It is only in this multi-branch configuration that dropping to depth-only can plausibly approach the headline savings, since the gain comes from removing two other branches rather than from Depth itself.
With that in mind, the check for any virtual staging pipeline is branch count first. If you currently run only one ControlNet branch per render, Depth is not a cost-cutter, but a constraint swap. If you currently run two or more branches, Depth can be worth evaluating as a replacement, but only against the exact stack you're running, not against a single RGB img2img pass.

Costs and numbers that matter
For this section alone, the per-image compute arithmetic and GPU-hour framing is what needs to be checked first. The site's prior guide cites latent-diffusion inpainting compute at $0.0015–$0.0036 per 1024×1024 render on a rented A100-class GPU — compute alone, excluding labor and review. That spread is not from the conditioning type but from the rental choice: a $4.10/hr AWS p4d instance yields $0.0036 per SDXL image, while a $1.64/hr RunPod A100 drops that to $0.0015 — the same workload, a 2.4× cost difference from rental choice alone. Verify these rates against your own current instance pricing before applying them to your queue.
With those numbers, the math is straightforward. If depth conditioning truly cut GPU time 52%, a 1,000-image staging batch at $0.0036/image ($3.60 total) would fall to $1.73 — a saving of $1.87. At the cheaper $0.0015/image rate ($1.50 total), that same 52% cut would fall to $0.72, saving $0.78. These are only projected figures based on that unverified percent, not guaranteed results for every pipeline. Treat them as a hypothesis to test against your own measured baseline, not as a budget assumption.
Before applying either projection to your own queue, treat your instance rate as the first variable to divide by. Since these figures only cover compute, any supposed "cost cut" must be measured against your actual pass count, not the batch total alone. If your pipeline doesn't meet the exact replacement case for that 52% figure, the rental rate will remain the larger lever than depth conditioning by itself.

What the evidence does NOT establish
The only boundary this section establishes is a hard one: the unverified "52% GPU" reduction for ControlNet depth conditioning versus RGB-only diffusion in virtual staging must be fenced off, along with any vendor-affiliated claims tied to it. None of the provided grounding contains a controlled A/B benchmark that pits depth-only against RGB-only diffusion at matched resolution and step count. Without that specific, matched comparison, the 52% figure has no traceable measurement to stand on, so it cannot be read as a general result for this task.
That caution extends to the adjacent "40%" figure. According to the Cursor IDE blog (July 2025), integration with laozhang.ai is cited as yielding 40% savings. The blog is the only grounding item to make that claim, and its vendor affiliation alone keeps it in marketing territory. Treating it as an independent benchmark would require reproduction, not repetition, and for the purpose of this comparison there is no independent data to validate it against a depth-only versus RGB-only split.
Even setting those percentages aside, the available sources does not specify what "GPU 52%" is meant to measure. VRAM, wall-clock time, and FLOPs are not interchangeable: a pass could free up one of these while increasing another or shifting the bottleneck to a different part of the run. Since the unit is never defined in the cited sources, any headline percentage is underdetermined before arithmetic can be debated. A legitimate test would have to state that unit outright, or log all three, rather than leaving it implied.
With no matched depth-only versus RGB-only A/B and no stated metric for "GPU", the correct approach is a verification check, not an adoption of hearsay. Before accepting any double-digit cost cut for depth conditioning in virtual staging, require a published test that matches resolution and step count, names whether the savings are in VRAM, wall-clock time, or FLOPs, and comes from an independent benchmark. Until that exists, the 52% figure remains unverified, and vendor-affiliated claims built off of it must remain outside of any measured cost comparison.

500-room staging batch
For this section alone, we walk the 500-room batch arithmetic end to end to test the 52% claim against a concrete virtual staging run. Inputs: 500 empty-room photos, 1024×1024, 30 steps, A100 at $1.64/hr (RunPod), with the current pipeline = Canny + OpenPose + Depth (3 branches). Treat the per-image compute as the unit to divide by GPU-hour for this batch, not the branch count alone. Any swap must be measured against this exact starting point before claiming savings. Confirm each input against your own pipeline before reusing this arithmetic.
Checkpoint 1 — current cost: 500 × $0.0036 = $1.80 compute; wall-clock ~2.5 hr at 3 branches. Verify that multiplication once: 500 times $0.0036 equals $1.80. Do not round that down to justify a larger percent cut. The $1.80 compute is the baseline for this batch, so every projected change must be taken as a multiple of $1.80, not an arbitrary discount. Re-check the per-image rate against your own instance pricing before reusing this baseline.
Checkpoint 2 — depth-only: if the 52% claim holds, $0.86 compute, ~1.2 hr; if it does not hold and depth adds 10% overhead vs single RGB, $1.98 compute, ~2.75 hr. Check the multiples against $1.80: $1.80 × 0.48 = $0.864 (to $0.86), and $1.80 × 1.10 = $1.98. The 52% figure is only reproducible when depth conditioning replaces a multi-pass ControlNet stack, not when it is added to a single RGB img2img pass. Verify both scenarios against your own measured baseline before adopting either projection.
For action on this batch type: adopt ControlNet Depth for virtual staging only if your current pipeline runs two or more ControlNet branches per render; if you run a single RGB img2img pass, depth conditioning adds 8–15% overhead. For the 500-room batch above, that threshold is the difference between moving from $1.80 down to $0.86, or moving up to $1.98. Confirm your branch count and per-image rate before applying either projection.
Decision rules
Adopt ControlNet Depth for virtual staging only as a replacement for an existing multi-branch ControlNet stack. If your current render is a single RGB img2img pass, depth conditioning is not a cost play; budget it as a control or quality change and expect added work rather than savings.
If you run three or more ControlNet branches per render, create a depth-only variant and test it on a fixed 20-room set. Compare wall-clock render time, GPU time, retry count, and accepted-image rate against the current stack. Adopt depth-only only if the reduction repeats across room types and manual touch-ups do not increase; otherwise retain the stack.
If you run one branch, do not adopt depth for cost reasons. The expected overhead is 8–15%, so the change must be justified by layout fidelity, fewer retries, or client acceptance. Put the burden of proof on quality metrics, not on GPU-hour estimates.
If rooms are empty and no furniture must be posed, depth-only is safe because OpenPose adds no useful constraint. If the scene includes staged furniture, people, or precise object placement, keep the pose or layout branch until the depth-only output passes the same acceptance check on the same 20-room set.
Before rollout, record baseline branch count, resolution, step count, and acceptance criteria for each room type. If any baseline is missing, stop at measurement and do not convert a vendor percentage into a budget assumption.
A passing test has three parts: lower or equal GPU time, no drop in accepted-image rate, and no new manual edits. Fail any one and keep the current pipeline; a cheaper render that needs more human correction is not a saving.
| Current pipeline | Decision | Required check |
|---|---|---|
| 3+ ControlNet branches | Test depth-only | 20-room A/B on time and acceptance |
| 1 RGB img2img branch | Do not adopt for cost | Justify by quality or retries |
| Empty rooms, no posing | Depth-only acceptable | Confirm no pose-dependent objects |
What to do next
| Step | Action | Why it matters |
|---|---|---|
| 1 | Audit your virtual staging pipeline: count how many ControlNet branches you run per render. | Adoption of ControlNet Depth is only valid if you run two or more ControlNet branches per render. This is the only path where it can replace a multi-pass ControlNet stack. |
| 2 | Verify your baseline: if your pipeline only uses a single RGB img2img pass, mark it as overhead-prone. | For this exact case, depth conditioning adds 8–15% overhead, not savings, directly contradicting the 52% headline. |
| 3 | Re-check the comparison table above at 1024 resolution against your current step count. | The real saving is 0% to ~35% depending on resolution and step count, so the 52% figure should only be considered if the multi-pass replacement condition is met. |
| 4 | Factor in conditioning expansion: take note that ControlNet supports 8 conditioning models, and each new type needs new weights. | Even if GPU time appears close, adding depth conditioning introduces the weight requirement from training, which is not reflected by the headline percentage alone. |
| 5 | Enforce the decision rule: only proceed with ControlNet Depth if both the branch count and the multi-pass replacement hold true. | This prevents paying overhead for a single RGB img2img pass, and keeps your virtual staging costs aligned with the proven 0% to ~35% range. |
Frequently Asked Questions
When does depth conditioning actually reduce GPU cost versus RGB-only diffusion?
Real saving is 0% to ~35% depending on resolution and step count, and the 52% figure is only reproducible when depth conditioning replaces a multi-pass ControlNet stack.
Should I adopt depth conditioning for a single RGB img2img pass?
No, because a single RGB img2img pass gets 8–15% overhead from depth conditioning.
What pipeline condition justifies adopting depth conditioning?
Adopt depth conditioning only if your pipeline runs two or more ControlNet branches per render.
How many conditioning models does ControlNet support?
ControlNet supports 8 conditioning models, and each new type needs new weights.
Does ControlNet rewrite the base diffusion U-Net in place?
No; as documented in Hugging Face Diffusers v0.23.1, it attaches a trainable copy of the U-Net encoder as a side branch that runs alongside the frozen base U-Net.
What happens to the original model weights during ControlNet training?
The original model weights stay fixed while the side branch learns how to inject th.
Quick answers
| Does ControlNet Depth cut GPU cost by the 52% figure versus RGB-only diffusion? | No, ControlNet Depth does not cut GPU cost by the 52% figure versus RGB-only diffusion; that figure is only reproducible when depth conditioning replaces a multi-pass ControlNet stack. |
| What is the real GPU saving range for ControlNet Depth? | The real saving is 0% to ~35% depending on resolution and step count. |
| When should depth conditioning be adopted? | Adopt depth conditioning only if your pipeline runs two or more ControlNet branches per render. |
| What is the effect of depth conditioning on a single RGB img2img pass? | A single RGB img2img pass gets 8–15% overhead from depth conditioning. |
| How many conditioning models does ControlNet support, and what is required for each new type? | ControlNet supports 8 conditioning models, and every new conditioning type requires training a new copy of ControlNet weights. |
Also worth reading: Virtual Staging Costs $0.047: 4-Day Break-Even, 2026 MLS Data: Virtual Staging Costs $0.047: 4-Day · DPM-Solver++ Cuts Virtual Staging Steps 50→12, 62% Lower GPU Cost: DPM-Solver++ Cuts Virtual Staging Steps · Virtual Staging: 4-Hour SLA Driven by Constraints, Not GPU Speed: Virtual Staging: 4-Hour SLA Driven