ReShot Depth Map
How to copy a shot's blocking without copying its actors
- images
- depth
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) orfull(924×518, ~11 GB, 2.5× slower, sharper fine silhouettes). Leave it onfast. The output is your source resolution either way;qualityonly 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:h3is ×32,seedanceandwanare ×16. Drop it into an H3 Fun ControlNet and you'll wanth3.- 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: fullon a card under 12 GB. Usefast.- 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_percent0.5–1. - Hangs on first run, or
could not obtain weights- Hugging Face is unreachable from your network. See the mirror above.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | Video frames as an IMAGE batch [T, H, W, 3]. | |
| quality | COMBO | fast | fast: model sees 644x364 (16:9), ~3 GB VRAM. full: 924x518, ~11 GB VRAM, 2.5x slower, sharper fine detail. |
| fit_to | COMBO | none | Center-crop to the model's frame-size multiple (h3: x32, seedance/wan: x16). fps is not changed here — use ReShot Depth Video for that. |
| invertopt | BOOLEAN | false | Off: near is white (what depth ControlNets and Seedance/H3 expect). On: far is white. |
| clip_percentopt | FLOAT | 0.00–10 | Percent trimmed from both ends before scaling to 0–255, so one hot pixel can't crush the contrast. 0 = none. |
| gammaopt | FLOAT | 1.000.2–3 | >1 darkens mid-tones (more separation near the camera). 1 = linear. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| depth | IMAGE | — |