Nodes/ComfyUI-ReShot/ReShot Depth Map
ComfyUI Node

ReShot Depth Map

How to copy a shot's blocking without copying its actors

By maosika-ai·Created 12 days ago·Updated 11 days ago· 9
ReShot Depth Map
  • images
  • depth
qualityfast
fit_tonone
invertfalse
clip_percent0.0
gamma1.00

You have a clip where the fight, the dance or the camera move is exactly right. Feed it to a video model as a reference and you also get its faces, clothes, lighting and set - and if there are real people in it, the content check may refuse the upload. Describe the moves in a prompt instead and you get a slightly different fight every time.

ReShot Depth Map splits the two apart. It takes your video frames and returns them as a grey depth map - near is white, far is black, consistent across the clip. Who stands where, how big they are relative to each other, how they move, where the cuts fall and how the camera travels all survive. Faces, wardrobe, lighting and colour are gone. You describe the people and the look in your prompt instead.

Why a video depth model, and not the depth preprocessor you already have

This is the interesting bit, and it's where the KB has been saying the same thing for two years: depth estimation is an image job, and video needs a video-native model or it flickers. Run Depth Anything V2 frame by frame over a clip and consecutive frames resolve edges slightly differently; the fine texture shimmers and it reads to a generator as motion. Tencent's DepthCrafter was the community's answer to exactly that.

ReShot's answer is Video Depth Anything Small, the video sibling of the Depth Anything family the KB traces to TikTok/ByteDance research: it predicts relative inverse depth on overlapping 32-frame windows and aligns them, so the greys stay consistent rather than flickering per frame. The result is normalised once over the whole batch you passed to 8-bit grey, then upsampled back to your source size. Relative, not metric - which is what you want: for conditioning, edge clarity beats real-world distance, the lesson of the old MiDaS-beats-ZoeDepth comparison.

Community signal on Video Depth Anything is thin - about nine reddit threads in two years - so the mechanism above comes from the pack's source rather than folklore.

Inputs that matter

  • images - the frames as one IMAGE batch [T, H, W, 3], from Get Video Components, VHS Load Video, or a batched Load Image.
  • quality - fast (the model looks at 644×364 for 16:9, ~3 GB VRAM) or full (924×518, ~11 GB, 2.5× slower, sharper fine silhouettes). Leave it on fast. The output is your source resolution either way; quality only sets how big the picture the model gets to look at. The author's own measurement on a 294-frame clip puts the two within 5.3 grey levels of each other on average.
  • fit_to - center-crops to a model's frame-size multiple: h3 is ×32, seedance and wan are ×16. Drop it into an H3 Fun ControlNet and you'll want h3.
  • You'll rarely touch: invert (far is white - for tools that expect the opposite), clip_percent (trim that percent off each end of the range; 0.5–1 rescues a clip where a fist at the lens crushed everything else to near-black), gamma (>1 spreads the near range out).

One rule isn't optional: pass the whole clip in one batch. Normalisation happens over the batch you hand it, so chunks each get their own scale and the grey jumps at every seam.

Output: depth, an IMAGE batch of the same frame count - grey replicated to three channels so any node that takes IMAGE will take it.

Wiring it up

Load Video ─▶ Get Video Components ─images─▶ ReShot Depth Map (fit_to: h3) ─depth─▶ Apply MiniMax H3 Fun ControlNet
                                                                                     control_video   (condition: depth)

Same output feeds Wan's WanVaceToVideo control_video input and any SD or SDXL depth ControlNet. In VACE, know the tradeoff: depth "will confine the alterations to exactly the boundary of the depth map," so a bikini-to-flowing-dress change doesn't work - the dress wants to go outside the silhouette depth handed you.

Install

ComfyUI Manager → ComfyUI-ReShot, or:

cd ComfyUI/custom_nodes
git clone https://github.com/maosika-ai/ComfyUI-ReShot
python -m pip install -r ComfyUI-ReShot/requirements.txt

Restart. The first execution downloads video_depth_anything_vits.pth (111 MB) into your Hugging Face cache (~/.cache/huggingface/hub/models--depth-anything--Video-Depth-Anything-Small/). In China that download hangs unless you set the mirror before starting ComfyUI:

export HF_ENDPOINT=https://hf-mirror.com

On Windows portable, add set HF_ENDPOINT=https://hf-mirror.com to run_nvidia_gpu.bat above the python line. It downloads once; offline you can copy the weights folder in by hand.

Common issues

  • Brightness jumps between frames or chunks - you passed frames in pieces. One batch, one clip.
  • CUDA out of memory … Tried to allocate 4.02 GiB - quality: full on a card under 12 GB. Use fast.
  • Flat, uniform grey - either the clip has almost no depth variation (a slideshow won't produce much) or one hot close-up is eating the range. Try clip_percent 0.5–1.
  • Hangs on first run, or could not obtain weights - Hugging Face is unreachable from your network. See the mirror above.
CategoryReShot

Inputs (6)

NameTypeDefaultDescription
imagesIMAGEVideo frames as an IMAGE batch [T, H, W, 3].
qualityCOMBOfastfast: model sees 644x364 (16:9), ~3 GB VRAM. full: 924x518, ~11 GB VRAM, 2.5x slower, sharper fine detail.
fit_toCOMBOnoneCenter-crop to the model's frame-size multiple (h3: x32, seedance/wan: x16). fps is not changed here — use ReShot Depth Video for that.
invertoptBOOLEANfalseOff: near is white (what depth ControlNets and Seedance/H3 expect). On: far is white.
clip_percentoptFLOAT0.00–10Percent trimmed from both ends before scaling to 0–255, so one hot pixel can't crush the contrast. 0 = none.
gammaoptFLOAT1.000.2–3>1 darkens mid-tones (more separation near the camera). 1 = linear.

Outputs (1)

NameTypeDescription
depthIMAGE