This repository benchmarks and validates the Netflix VOID model (netflix/void-model) for object and interaction removal in videos.
The core goal is to evaluate physical causal reasoning in video inpainting. Instead of removing only the visible object, VOID can also update physically related evidence such as shadows, reflections, contact regions, and scene continuity. This is important for realistic scene reconstruction, simulation workflows, and spatial analysis tasks where visual consistency depends on causal relationships.
All experiments in this repository directly test inference quality of netflix/void-model under different physical interaction scenarios:
- large obstacle removal in a dynamic pedestrian scene
- falling-object/contact behavior consistency
- water-surface continuity after object deletion
GitHub README pages do not reliably render HTML <video> tags.
For this reason, results are shown as looping GIF previews below. Click any preview to open the original MP4.
This experiment removes a large van blocking a pedestrian path. The model reconstructs plausible pavement structure and preserves crowd motion continuity while removing the object and its interaction footprint.
This experiment tests temporal causality and contact behavior. After object removal, the model maintains believable motion progression and updates object-surface interaction cues.
This experiment focuses on fluid-like surface behavior. The output shows continuity in ripples and reflections as if the removed object had not influenced the water surface.
This project is organized into two practical categories.
ducky-float-fg=-1-0001_tuple.mp4lime-fg=-1-0001_tuple.mp4my_video-fg=-1-0001_tuple.mp4ducky-float-fg=-1-0001_tuple.giflime-fg=-1-0001_tuple.gifmy_video-fg=-1-0001_tuple.gif
These are inference outputs demonstrating the model's performance on different physical reasoning scenarios.
input_video.mp4: Original source video (ice cream van scene).quadmask_0.mp4: Interaction-aware 4-value quadmask for the target object.prompt.json: Background description prompt used during generation.VOID_Inference_Colab.ipynb: End-to-end Colab notebook for environment setup and inference.benchmark/: Repeatable GPU benchmark wrapper and protocol for L40S and Colab runtime comparisons.
For each sequence, VOID expects three synchronized inputs:
input_video.mp4for the original temporal content.quadmask_0.mp4for spatial and interaction guidance.prompt.jsonfor semantic background reconstruction guidance.
The quadmask encoding used in this project:
0: remove region63: overlap/boundary region127: affected interaction region255: preserve region
This representation helps the model reason about not only where to erase an object, but also which neighboring pixels should be causally updated.
- Open
VOID_Inference_Colab.ipynbin Google Colab. - Run setup cells to install dependencies and download model checkpoints.
- Upload
input_video.mp4,quadmask_0.mp4, andprompt.jsonwhen prompted. - Run the inference cell (Pass 1) to generate outputs.
- Review generated videos under the configured output directory.
Issue #1 tracks a startup bottleneck where L40S runs spend about 40-50 seconds loading the CogVideoX 5B transformer before inference begins.
The Colab notebook now treats that as cold-start overhead and separates it from the rest of the predictor wall time:
- Re-running setup reuses the
/content/void-modelcheckout instead of deleting and cloning it every time. hf_transferis enabled for faster Hugging Face checkpoint downloads.- The upload cell builds
RUN_SEQSfrom every valid folder under/content/void-model/custom_data. - The inference cell supports
cold_single_seqfor per-job latency andbatched_multi_seqfor amortized throughput. - The inference cell exposes
GPU_MEMORY_MODE, so high-VRAM GPUs can comparemodel_full_loadagainst the upstreammodel_cpu_offload_and_qfloat8default. - The inference cell streams predictor logs and prints total wall time, initialization before the transformer-load log, the transformer-load-to-sequence bracket, and the remaining wall time after the first sequence marker.
A Colab my_video run reported VOID predictor wall time: 175.7s. That number is total predictor wall time for the single sequence, not cold-start time by itself. Use the updated notebook or benchmark/run_void_benchmark.py to split that total into cold-start/loading time and post-load inference time.
The current A100 result shows the larger delay happens before the Load transformer from checkpoint log, so issue #1 is best treated as a predictor initialization and memory-mode problem rather than pure safetensors I/O. A100 results are diagnostic only; L40S results should be measured directly before claiming an L40S fix.
This does not remove the initial load cost, but it prevents paying the same cost once per sequence when benchmarking multiple VOID cases. For a single sequence, the next fix candidate is model_full_load on high-VRAM GPUs. For multiple sequences, prepare all sequences first and run one predictor process.
For repeatable timing, the notebook recreates the uploaded sequence directory and writes each run to a timestamped output directory. This prevents stale masks from adding extra foreground runs and prevents old outputs from being skipped.
For structured GPU comparisons, use benchmark/run_void_benchmark.py. It records the actual GPU name, total predictor wall time, and time to the first inference sequence log in a JSON report. See benchmark/README.md for the L40S and Colab test matrix.
- Google Colab or equivalent Linux environment
- Python dependencies installed by the notebook (
huggingface_hub, model requirements, and system packages such asffmpeg)
- Model under test: Netflix VOID (
netflix/void-model) - Base diffusion/video stack used by VOID: CogVideoX-related components as defined in the original repository


