Skip to content

Repository files navigation

ReShot

Copy the shot, not the actors.

ReShot turns a reference video into a depth map, so Seedance or MiniMax H3 can repeat its choreography and camera moves — with your own characters in it.

a fight scene, its depth map, and three new takes generated from it

Top: the reference and its depth map. Bottom: three takes generated from that depth map — two women, one rabbit. Same moves, same camera. Full-resolution clip.

中文 · User guide · Hugging Face · Changelog

ci Apache-2.0 platforms


The problem

You have a clip whose fight, dance or camera move is exactly what you want in your own AI video. There are two ways to get it, and both fail:

  • Feed the clip to the video model as a reference. It copies the faces, the clothes and the look along with the moves. If the clip has real people in it, the platform's content check may refuse it outright.
  • Describe the moves in words. "She kicks off the wall, grabs a pipe, throws the big guy over her shoulder" — the model gives you a different fight every time, and the camera never does what you said.

What ReShot does

ReShot takes an .mp4 in and writes an .mp4 out. The output is a depth map video: every frame is grey, near things are white, far things are black. It keeps where everyone stands, how big they are, how they move and how the camera moves. It throws away faces, clothes, lighting and style.

reference frame the same frame as a depth map

You give that grey video to your video model as the reference and describe the people and the look in the prompt. The model takes the moves from the video and everything else from your words.

Technically: monocular video depth estimation. The model predicts relative inverse depth for every frame; ReShot normalises it once over the whole clip to 8-bit grey (near = white) and encodes it as a standard depth-map video.

How to use it

The three takes in the demo were made exactly this way. Every file involved is in this repo, so you can repeat it.

1. Install

pip install git+https://github.com/maosika-ai/reshot        # needs ffmpeg on PATH

No ffmpeg? pip install "reshot[ffmpeg] @ git+https://github.com/maosika-ai/reshot" bundles one. The model weights (111 MB) download on first run.

2. Make the depth map

reshot reference.mp4 -o depth.mp4 --target seedance

--target seedance sets 24 fps, H.264, a frame size that is a multiple of 16 and at least 407,696 pixels, up to 15 seconds — the reference-video rules of the Seedance API. For MiniMax H3 use --target h3 (multiples of 32). On an RTX 4090 a 12-second clip takes about 20 seconds; on a MacBook a few minutes.

3. Give it to the video model

Seedance 2.0 / 2.5. Upload depth.mp4 as a reference video. In the prompt, point at it and describe the people and the look:

参考@视频1的动作与运镜,顺序与视频保持一致。
一名穿深绿色丝绒旗袍的女子在狭窄的金属走廊里与三名黑衣守卫搏斗,冷蓝走廊光,红色警示灯,电影感。

MiniMax H3. Attach depth.mp4 as <Video 1>. If you want a specific face, attach a character sheet as <Picture 1>. These are the three sheets used for the demo:

the three character sheets used as Picture 1

MiniMax H3 wants its prompt in a fixed six-section format. The full prompts for all three takes are in docs/prompts/. The part that does the work is how <Video 1> is defined and what it is allowed to transfer:

<Subject 3> is the fight choreography and camera movement shown in <Video 1>, a grey depth map
in which near objects are white and far objects are black: one fighter leans on a corridor wall
in close-up, kicks off it to tear down a pipe, fights several opponents, is grabbed from behind
by the largest and throws him, slams the last one into a wall panel, wipes the mouth in close-up,
then walks away through a door past the fallen opponents.

<Subject 3>: attribute_transfer - every action, position, timing and camera move of <Video 1>
is transferred onto <Subject 1> and <Subject 2>; its grey depth look is not transferred.

Two things in there matter. Say in words what happens in the grey clip — the model reads the depth map far better when the prompt tells it what the blobs are doing. Say that the grey look is not to be copied, or you may get a grey film back.

4. What comes out

the three takes

Left to right: Jiang Xue in bronze armour, Su Wan in a green velvet qipao, and a rabbit boxer against a wolf, a tiger and a bear as a 3D animated feature. Same six shots, same close-up at the start, same walk out through the door at the end. The reference clip itself was a MiniMax H3 text-to-video render, so nobody's likeness was involved at any step.

What transfers, and what doesn't

Transfers: who stands where, how big they are relative to each other, every move and its timing, the cuts, and the camera — push-ins, tracking, handheld shake.

Doesn't: faces (use a character sheet), clothes, lighting, colour, props in detail, and anything smaller than a hand. Those come from your prompt and your reference images.

Things we learned making the demo:

  • Keep the reference under 15 seconds (Seedance's limit) and cut it to the shots you want before running ReShot. Everything in the clip gets copied, including the boring part at the end.
  • For MiniMax H3, make the depth map small: --target h3 --max-res 320 (that is 320×176 for a 16:9 clip). A full-size grey silhouette starts to pull the character's face shape towards the person in the reference; a small one carries the moves without the shape.
  • Change the species, keep the size ratio. The bear take works because the prompt says the bear is "about 1.3× the rabbit, never more than 1.5×". The depth map already says who is bigger; the prompt must not contradict it.
  • Plain clothes on extras, no logos. Whatever the prompt leaves open, the model fills with text and badges.

Presets

--target fps frame size length for
seedance 24 ×16, ≥ 407,696 px ≤ 15 s Seedance 2.0 / 2.5 reference video
h3 24 ×32 ≤ 15 s MiniMax H3 (reference video or Fun ControlNet depth)
wan 16 ×16 Wan 2.1 VACE
none source even anything that reads a depth video

reshot --help lists every option; the user guide explains them.

For developers

from pathlib import Path
from reshot import RunConfig, run

run(RunConfig(input=Path("reference.mp4"), output=Path("depth.mp4"), target="seedance"))

Three details make the output something a video model will actually follow:

  • One scale for the whole clip. Depth is normalised once over all frames, never per frame, so a wall keeps the same grey when someone walks past it. Per-frame normalisation makes the scene "breathe".
  • Frames picked by timestamp. 30 fps → 24 fps really is 24; nothing is duplicated or dropped in a pattern the model could learn.
  • Cropped, never padded. Frame size is trimmed to the model's grid. A black border would read as a far wall.

The model is Video Depth Anything Small (ByteDance, CVPR 2025). It works on overlapping 32-frame windows and aligns them, so depth doesn't jitter between frames. It needs about 4 GB of RAM for a 720p clip and refuses up front if a clip won't fit. A fake backend runs the whole pipeline without a model for your own tests. Errors that are yours to fix are ReshotError subclasses with an exit code and a concrete fix in the message.

License

Apache-2.0, and so is the default model. The vendored model code is under reshot/third_party/. Use it in a product, a pipeline, a service. The larger research-only weights (Base, Large) are CC-BY-NC and never load unless you ask for them.

Issues and pull requests are welcome; see CONTRIBUTING.md.

About Maosika 猫斯卡

ReShot is open-sourced by Maosika 猫斯卡 (www.maosika.com), a professional AI video production system for short drama and short video. Maosika takes a story from a one-line idea to a finished vertical AI short drama: it writes the episodic script, designs the characters and scenes, generates consistent character sheets and scene images, and renders every shot with video models such as Seedance 2.0 / 2.5 and MiniMax H3 — a crew of digital specialists handling each step, so one person can produce a series that used to take a studio. Individual screenwriters, MCNs and short-drama companies use Maosika to produce AI short drama every day.

ReShot is the depth-map step of that pipeline, released under Apache-2.0 so anyone can copy a reference shot's staging and camera into their own AI-generated video. To make AI short drama, AI short video or AI manhua drama end to end, visit https://www.maosika.com.

Made by Maosika 猫斯卡 · AI short drama, produced daily · www.maosika.com

About

ReShot — copy the shot, not the actors. Video → depth map (monocular video depth estimation) for Seedance 2.0/2.5 reference video, MiniMax H3 Fun ControlNet and Wan VACE. Apache-2.0. Open-sourced by Maosika 猫斯卡 (www.maosika.com), the AI short-drama production system.

Topics

Resources

Contributing

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages