Views
No views yet
Yuxuan Bian12, Zhaoyang Zhang1‡, Xuan Ju2, Mingdeng Cao3, Liangbin Xie4, Ying Shan1, Qiang Xu2✉
1ARC Lab, Tencent PCG 2The Chinese University of Hong Kong 3The University of Tokyo 4University of Macau ‡Project Lead ✉Corresponding Author

git clone https://github.com/TencentARC/VideoPainter.gitconda to create virtual environment, and install needed libraries. For example:conda create -n videopainter python=3.10 -y
conda activate videopainter
pip install -r requirements.txtcd ./diffusers
pip install -e .conda install -c conda-forge ffmpeg -ycd ./app
pip install -e .|-- data
|-- davis
|-- JPEGImages_432_240
|-- test_masks
|-- davis_caption
|-- test.json
|-- train.json
|-- videovo/raw_video
|-- 000005000
|-- 000005000000.0.mp4
|-- 000005000001.0.mp4
|-- ...
|-- 000005001
|-- ...
|-- pexels/pexels/raw_video
|-- 000000000
|-- 000000000000_852038.mp4
|-- 000000000001_852057.mp4
|-- ...
|-- 000000001
|-- ...
|-- video_inpainting
|-- videovo
|-- 000005000000/all_masks.npz
|-- 000005000001/all_masks.npz
|-- ...
|-- pexels
|-- ...
|-- pexels_videovo_train_dataset.csv
|-- pexels_videovo_val_dataset.csv
|-- pexels_videovo_test_dataset.csv
|-- our_video_inpaint.csv
|-- our_video_inpaint_long.csv
|-- our_video_edit.csv
|-- our_video_edit_long.csv
|-- pexels.csv
|-- videovo.csv
data folder by:git lfs install
git clone https://huggingface.co/datasets/TencentARC/VPBench
mv VPBench data
cd data
unzip pexels.zip
unzip videovo.zip
unzip davis.zip
unzip video_inpainting.zipdata folder by:git lfs install
git clone https://huggingface.co/datasets/TencentARC/VPData
mv VPBench data
# 1. unzip the masks in VPData
python data_utils/unzip_folder.py --source_dir ./data/videovo_masks --target_dir ./data/video_inpainting/videovo
python data_utils/unzip_folder.py --source_dir ./data/pexels_masks --target_dir ./data/video_inpainting/pexels
# 2. unzip the raw videos in Videovo subset in VPData
python data_utils/unzip_folder.py --source_dir ./data/videovo_raw_videos --target_dir ./data/videovo/raw_videocd data_utils
python VPData_download.pyckpt folder by:git lfs install
git clone https://huggingface.co/TencentARC/VideoPainter
mv VideoPainter ckptgit lfs install
cd ckpt
git clone https://huggingface.co/THUDM/CogVideoX-5b-I2Vgit lfs install
cd ckpt
git clone https://huggingface.co/black-forest-labs/FLUX.1-Fill-dev
mv ckpt/FLUX.1-Fill-dev ckpt/flux_inpgit lfs install
cd ckpt
wget https://huggingface.co/facebook/sam2-hiera-large/resolve/main/sam2_hiera_large.pt|-- ckpt
|-- VideoPainter/checkpoints
|-- branch
|-- config.json
|-- diffusion_pytorch_model.safetensors
|-- VideoPainterID/checkpoints
|-- pytorch_lora_weights.safetensors
|-- CogVideoX-5b-I2V
|-- scheduler
|-- transformer
|-- vae
|-- ...
|-- flux_inp
|-- scheduler
|-- transformer
|-- vae
|-- ...
|-- sam2_hiera_large.pt# cd train
# bash VideoPainter.sh
export MODEL_PATH="../ckpt/CogVideoX-5b-I2V"
export CACHE_PATH="~/.cache"
export DATASET_PATH="../data/videovo/raw_video"
export PROJECT_NAME="pexels_videovo-inpainting"
export RUNS_NAME="VideoPainter"
export OUTPUT_PATH="./${PROJECT_NAME}/${RUNS_NAME}"
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
export TOKENIZERS_PARALLELISM=false
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
accelerate launch --config_file accelerate_config_machine_single_ds.yaml --machine_rank 0 \
train_cogvideox_inpainting_i2v_video.py \
--pretrained_model_name_or_path $MODEL_PATH \
--cache_dir $CACHE_PATH \
--meta_file_path ../data/pexels_videovo_train_dataset.csv \
--val_meta_file_path ../data/pexels_videovo_val_dataset.csv \
--instance_data_root $DATASET_PATH \
--dataloader_num_workers 1 \
--num_validation_videos 1 \
--validation_epochs 1 \
--seed 42 \
--mixed_precision bf16 \
--output_dir $OUTPUT_PATH \
--height 480 \
--width 720 \
--fps 8 \
--max_num_frames 49 \
--video_reshape_mode "resize" \
--skip_frames_start 0 \
--skip_frames_end 0 \
--max_text_seq_length 226 \
--branch_layer_num 2 \
--train_batch_size 1 \
--num_train_epochs 10 \
--checkpointing_steps 1024 \
--validating_steps 256 \
--gradient_accumulation_steps 1 \
--learning_rate 1e-5 \
--lr_scheduler cosine_with_restarts \
--lr_warmup_steps 1000 \
--lr_num_cycles 1 \
--enable_slicing \
--enable_tiling \
--noised_image_dropout 0.05 \
--gradient_checkpointing \
--optimizer AdamW \
--adam_beta1 0.9 \
--adam_beta2 0.95 \
--max_grad_norm 1.0 \
--allow_tf32 \
--report_to wandb \
--tracker_name $PROJECT_NAME \
--runs_name $RUNS_NAME \
--inpainting_loss_weight 1.0 \
--mix_train_ratio 0 \
--first_frame_gt \
--mask_add \
--mask_transform_prob 0.3 \
--p_brush 0.4 \
--p_rect 0.1 \
--p_ellipse 0.1 \
--p_circle 0.1 \
--p_random_brush 0.3
# cd train
# bash VideoPainterID.sh
export MODEL_PATH="../ckpt/CogVideoX-5b-I2V"
export BRANCH_MODEL_PATH="../ckpt/VideoPainter/checkpoints/branch"
export CACHE_PATH="~/.cache"
export DATASET_PATH="../data/videovo/raw_video"
export PROJECT_NAME="pexels_videovo-inpainting"
export RUNS_NAME="VideoPainterID"
export OUTPUT_PATH="./${PROJECT_NAME}/${RUNS_NAME}"
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
export TOKENIZERS_PARALLELISM=false
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
accelerate launch --config_file accelerate_config_machine_single_ds_wo_cpu.yaml --machine_rank 0 \
train_cogvideox_inpainting_i2v_video_resample.py \
--pretrained_model_name_or_path $MODEL_PATH \
--cogvideox_branch_name_or_path $BRANCH_MODEL_PATH \
--cache_dir $CACHE_PATH \
--meta_file_path ../data/pexels_videovo_train_dataset.csv \
--val_meta_file_path ../data/pexels_videovo_val_dataset.csv \
--instance_data_root $DATASET_PATH \
--dataloader_num_workers 1 \
--num_validation_videos 1 \
--validation_epochs 1 \
--seed 42 \
--rank 256 \
--lora_alpha 128 \
--mixed_precision bf16 \
--output_dir $OUTPUT_PATH \
--height 480 \
--width 720 \
--fps 8 \
--max_num_frames 49 \
--video_reshape_mode "resize" \
--skip_frames_start 0 \
--skip_frames_end 0 \
--max_text_seq_length 226 \
--branch_layer_num 2 \
--train_batch_size 1 \
--num_train_epochs 10 \
--checkpointing_steps 256 \
--validating_steps 128 \
--gradient_accumulation_steps 1 \
--learning_rate 5e-5 \
--lr_scheduler cosine_with_restarts \
--lr_warmup_steps 200 \
--lr_num_cycles 1 \
--enable_slicing \
--enable_tiling \
--noised_image_dropout 0.05 \
--gradient_checkpointing \
--optimizer AdamW \
--adam_beta1 0.9 \
--adam_beta2 0.95 \
--max_grad_norm 1.0 \
--allow_tf32 \
--report_to wandb \
--tracker_name $PROJECT_NAME \
--runs_name $RUNS_NAME \
--inpainting_loss_weight 1.0 \
--mix_train_ratio 0 \
--first_frame_gt \
--mask_add \
--mask_transform_prob 0.3 \
--p_brush 0.4 \
--p_rect 0.1 \
--p_ellipse 0.1 \
--p_circle 0.1 \
--p_random_brush 0.3 \
--id_pool_resample_learnablecd infer
# video inpainting
bash inpaint.sh
# video inpainting with ID resampling
bash inpaint_id_resample.sh
# video editing
bash edit.shbash edit_bench.sh# cd app
CUDA_VISIBLE_DEVICES=0 python app.py \
--model_path ../ckpt/CogVideoX-5b-I2V \
--inpainting_branch ../ckpt/VideoPainter/checkpoints/branch \
--id_adapter ../ckpt/VideoPainterID/checkpoints \
--img_inpainting_model ../ckpt/flux_inpcd evaluate
# video inpainting
bash eval_inpainting.sh
# video inpainting with ID resampling
bash eval_inpainting_id_resample.sh
# video editing
bash eval_edit.sh
# video editing with ID resampling
bash eval_editing_id_resample.sh@article{bian2025videopainter,
title={VideoPainter: Any-length Video Inpainting and Editing with Plug-and-Play Context Control},
author={Bian, Yuxuan and Zhang, Zhaoyang and Ju, Xuan and Cao, Mingdeng and Xie, Liangbin and Shan, Ying and Xu, Qiang},
journal={arXiv preprint arXiv:2503.05639},
year={2025}
}