Correr-Zhou/OmniShow

[ICML 2026] ByteDance's All-in-One Video Generation Model for Human-Object Interaction Video Generation

469

stars

17

commits

Python

primary language

Jul 29, 2026

updated

correr-zhou.github.io/OmniShow/
aigc
computer-vision
deep-learning
diffusion-models
dit
icml
icml-2026
large-models
mmdit
multimodal-ai
multimodal-deep-learning
video-generation
visual-generation
Browse cluster: Video Generation with Diffusion Models

README

OmniShow logo

OmniShow: Unifying Multimodal Conditions for Human-Object Interaction Video Generation

Donghao Zhou1,*, Guisheng Liu2,*, Hao Yang2, Jiatong Li2,†, Jingyu Lin3, Xiaohu Huang4,
Yichen Liu2, Xin Gao2, Cunjian Chen3, Shilei Wen2,§, Chi-Wing Fu1, Pheng-Ann Heng1,§

1The Chinese University of Hong Kong, 2ByteDance, 3Monash University, 4The University of Hong Kong

*Equal contribution, Project lead, §Corresponding author


🔥 Updates

  • 2026.07: The evaluation code of HOIVG-Bench is released!
  • 2026.05: Training and inference code for Wan-based models is released!
  • 2026.05: OmniShow is accepted by ICML 2026! 🎉
  • 2026.04: The Data of HOIVG-Bench is available on HuggingFace! 🤗
  • 2026.04: The technical report of OmniShow is released!

🌟 Highlights

  • Multimodal Controllable Model: OmniShow is the first all-in-one model for Human-Object Interaction Video Generation (HOIVG) with text, reference image, audio, and pose conditioning.
  • Flexible Task Coverage: A single model supports R2V, RA2V, RP2V, and RAP2V generation within one coherent framework.
  • Enabling Broader Applications: OmniShow exhibits remarkable versatility in broader applications, such as audio-driven avatars, object swapping, and video remixing.
  • New Benchmark: HOIVG-Bench provides a dedicated and comprehensive benchmark for evaluating HOIVG under diverse multimodal conditions.
OmniShow Overview

🚀 Introducing OmniShow

We propose OmniShow, a video generation model that unifies text, reference image, audio, and pose conditions for HOIVG, which consists of:

  1. Unified Channel-wise Conditioning effectively injects reference image and pose cues via unified channel concatenation. It augments noisy video tokens with pseudo-frames, which are supervised by a reference reconstruction loss to preserve semantic details.
  2. Gated Local-Context Attention ensures precise audio-visual synchronization. It packs audio features with sufficient contextual information and injects them via masked attention to align video frames with corresponding audio segments, followed by adaptive gating to stabilize early training.
  3. Decoupled-Then-Joint Training makes the efficient utilization of heterogeneous datasets possible. We first train specialized R2V and A2V models on separate sub-task datasets, then fuse them via weight interpolation, followed by joint fine-tuning to unify multimodal capabilities.
OmniShow Pipeline

Learn more details

📊 HOIVG-Bench

To systematically evaluate HOIVG under diverse multimodal conditions, we construct HOIVG-Bench, a dedicated benchmark with 135 carefully curated samples and task-specific metrics. Each sample contains a detailed text caption, a human reference image, an object reference image, semantically aligned audio, and a coherent pose sequence.

HOIVG-Bench

🎬 Demo

Across varied tasks, OmniShow exhibits high-fidelity reference preservation, natural motion dynamics, and precise audio-visual synchronization. Please visit the OmniShow project page for more immersive and diverse video demonstrations.

OmniShow Qualitative Results

🏆 Benchmark Evaluation

OmniShow achieves overall state-of-the-art performance across various multimodal generation tasks, and it is the only model that supports the full RAP2V setting.

Reference-to-Video Generation (R2V)

MethodTA↑FaceSim↑NexusScore↑AES↑IQA↑VQ↑MQ↑
HunyuanCustom7.5230.4400.3590.4520.69710.115.286
HuMo-1.7B7.0870.6470.3330.4410.7239.763.406
HuMo-17B7.9490.8430.3460.4480.7269.973.685
VACE8.4130.7590.3680.4570.72210.725.442
Phantom-1.3B8.3420.7080.3510.4590.72210.905.637
Phantom-14B8.6090.8760.3660.4490.74110.935.517
OmniShow (Ours)7.7460.8740.3890.4680.74011.125.885

Reference+Audio-to-Video Generation (RA2V)

MethodTA↑FaceSim↑NexusScore↑Sync-C↑Sync-D↓AES↑IQA↑VQ↑MQ↑
HunyuanCustom7.2890.4570.3506.07210.080.4390.7159.153.658
HuMo-1.7B7.4890.5750.3297.2349.1170.4280.7319.974.182
HuMo-17B8.1460.8050.3448.0138.3160.4390.73910.274.269
OmniShow (Ours)8.0930.8100.3698.6127.6080.4650.74210.865.554

Reference+Pose-to-Video Generation (RP2V)

MethodTA↑FaceSim↑NexusScore↑AKD↓PCK↑AES↑IQA↑VQ↑MQ↑
AnchorCrafter2.6690.4040.2150.2290.1760.4990.6738.954.241
VACE7.6900.6000.3520.2060.3360.4500.71210.145.393
OmniShow (Ours)6.5260.4740.4180.1740.4600.4470.72210.284.937

✅ Todo List

  • Training Code (Wan-Based)
  • Inference Code (Wan-Based)
  • Data of HOIVG-Bench
  • Evaluation Code of HOIVG-Bench

🛠️ Environment Setup

We recommend using a clean Conda environment with Python 3.11:

git clone https://github.com/Correr-Zhou/OmniShow.git
cd OmniShow

conda create -n omnishow python=3.11 -y
conda activate omnishow

pip install -e .
pip install -r requirements.txt

If the default PyTorch installation does not match your CUDA version, reinstall PyTorch manually. For example, for CUDA 12.4:

pip install --index-url https://download.pytorch.org/whl/cu124 \
  torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0

📦 Data and Model Preparation

Download the required Wan backbones, tokenizer assets, Wav2Vec2 audio encoder, and the OmniShow example dataset:

bash download_weights.sh
bash download_data.sh

By default, the scripts organize files as:

OmniShow/
├── models/
│   ├── Wan-AI/Wan2.1-I2V-14B-480P/
│   ├── Wan-AI/Wan2.1-I2V-14B-720P/
│   ├── Wan-AI/Wan2.1-T2V-1.3B/
│   └── facebook/wav2vec2-base-960h/
└── data/
    └── donghao-zhou/OmniShow_example_dataset/

The example dataset follows the metadata format below:

FieldDescription
text_promptText description of the target video.
ref_image_humanRelative path to the human reference image.
ref_image_objectRelative path to the object reference image.
audioRelative path to the audio file.
audio_captionTextual description of the audio content.
pose_videoRelative path to the pose video.
target_videoRelative path to the training target video. Used for training metadata.

This release focuses on reproducing our method on Wan-based models. Checkpoints are not included due to internal policy constraints. The target_video files of the example dataset are generated by OmniShow and intended for checking that the code runs correctly. For HOIVG-Bench, please download the benchmark from HuggingFace.

⚡ Quick Start

Training

Run the default Wan-based OmniShow training script:

bash run_train/train_omnishow_wan.sh

The default script uses the example dataset and trains the r2v setting at 480p. You can edit the following variables in run_train/train_omnishow_wan.sh to switch task, resolution, or data path:

GEN_TASK="r2v"      # r2v / a2v / ra2v / rp2v / rap2v
RESOLUTION="480p"  # 480p / 720p
DATA_FILE="data/donghao-zhou/OmniShow_example_dataset/meta_data_train.csv"
DATASET_BASE_PATH="data/donghao-zhou/OmniShow_example_dataset"

The training entry also supports direct command-line usage:

accelerate launch --config_file run_train/accelerate_config_14B_zero3.yaml \
  --num_processes 8 \
  run_train/train_omnishow_wan.py \
  --dataset_base_path data/donghao-zhou/OmniShow_example_dataset \
  --dataset_metadata_path data/donghao-zhou/OmniShow_example_dataset/meta_data_train.csv \
  --height 832 \
  --width 480 \
  --num_frames 49 \
  --gen_task r2v \
  --model_id_with_origin_paths "Wan-AI/Wan2.1-I2V-14B-480P:diffusion_pytorch_model*.safetensors,Wan-AI/Wan2.1-I2V-14B-480P:models_t5_umt5-xxl-enc-bf16.pth,Wan-AI/Wan2.1-I2V-14B-480P:Wan2.1_VAE.pth,Wan-AI/Wan2.1-I2V-14B-480P:models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth" \
  --trainable_models "dit" \
  --learning_rate 1e-5 \
  --num_epochs 1000 \
  --save_steps 500 \
  --remove_prefix_in_ckpt "pipe.dit." \
  --output_path outputs/train_omnishow_wan_r2v_480p \
  --use_gradient_checkpointing_offload \
  --initialize_model_on_cpu

Inference

Run the default Wan-based OmniShow inference script:

bash run_infer/infer_omnishow_wan.sh

The default script reads meta_data_infer.csv and saves generated videos to outputs/. To use a fine-tuned checkpoint, set DIT_CHECKPOINT in run_infer/infer_omnishow_wan.sh:

DIT_CHECKPOINT="path/to/your/checkpoint.safetensors"

The inference entry also supports direct command-line usage:

python run_infer/infer_omnishow_wan.py \
  --model_id Wan-AI/Wan2.1-I2V-14B-480P \
  --csv data/donghao-zhou/OmniShow_example_dataset/meta_data_infer.csv \
  --base_path data/donghao-zhou/OmniShow_example_dataset \
  --output_dir outputs/infer_omnishow_wan_r2v_480p \
  --gen_task r2v \
  --dit_checkpoint path/to/your/checkpoint.safetensors \
  --height 832 \
  --width 480 \
  --num_frames 49 \
  --num_inference_steps 50 \
  --cfg_scale 6 \
  --seed 42

🧭 Advanced Usage

OmniShow supports the following tasks:

TaskConditionsTypical inference CSV fields
r2vtext + reference imagestext_prompt, ref_image_human, ref_image_object
a2vtext + first frame + audiotext_prompt, input_image, audio
ra2vtext + reference images + audiotext_prompt, ref_image_human, ref_image_object, audio
rp2vtext + reference images + posetext_prompt, ref_image_human, ref_image_object, pose_video
rap2vtext + reference images + audio + posetext_prompt, ref_image_human, ref_image_object, audio, pose_video

Both training and inference scripts expose the same task switch:

GEN_TASK="r2v"  # r2v / a2v / ra2v / rp2v / rap2v

To switch resolution, you can also edit RESOLUTION in the corresponding script:

RESOLUTION="480p"  # 480p / 720p

The scripts automatically select the matching base model.

If you use a custom aspect ratio or resolution, also check the HEIGHT and WIDTH values in the script.

For training, the most commonly edited variables in run_train/train_omnishow_wan.sh are:

GEN_TASK="r2v"
RESOLUTION="480p"
DATA_FILE="path/to/your/meta_data_train.csv"
DATASET_BASE_PATH="path/to/your/dataset_root"
OUTPUT_DIR="outputs/train_omnishow_wan_${GEN_TASK}_${RESOLUTION}"
LAUNCH_NUM_PROCESSES=8
LEARNING_RATE="1e-5"
NUM_EPOCHS=1000
SAVE_STEPS=500
NUM_FRAMES=49

For inference, the most commonly edited variables in run_infer/infer_omnishow_wan.sh are:

GEN_TASK="r2v"
RESOLUTION="480p"
DATA_FILE="path/to/your/meta_data_infer.csv"
DATASET_BASE_PATH="path/to/your/dataset_root"
OUTPUT_DIR="outputs/infer_omnishow_wan_${GEN_TASK}_${RESOLUTION}"
DIT_CHECKPOINT="path/to/your/checkpoint.safetensors"
NUM_INFERENCE_STEPS=50
CFG_SCALE=6
SEED=42

If DIT_CHECKPOINT is left empty, inference uses the base Wan DiT weights. Set it when evaluating a fine-tuned checkpoint.

🧾 Preparing Your Own Dataset

To use your own data, follow the same CSV-driven format as the example dataset. All media paths in the CSV should be relative to DATASET_BASE_PATH.

A typical dataset can be organized as:

your_dataset/
├── meta_data_train.csv
├── meta_data_infer.csv
├── ref_image_human/
├── ref_image_object/
├── input_image/
├── audio/
├── pose_video/
└── target_video/       # training only

Training metadata should include target_video, while inference metadata does not need it. For a2v training, the first frame is taken from target_video; for a2v inference, provide input_image. The detailed requirements for CSV fields are as follows:

FieldRequired forDescription
text_promptall tasksText description of the target video.
ref_image_humanr2v, ra2v, rp2v, rap2vRelative path to the human reference image.
ref_image_objectr2v, ra2v, rp2v, rap2vRelative path to the object reference image.
input_imagea2v inferenceRelative path to the first-frame image.
audioa2v, ra2v, rap2vRelative path to the audio file.
audio_captionoptionalTextual description of the audio content.
pose_videorp2v, rap2vRelative path to the pose video.
target_videotraining onlyRelative path to the target video used for supervision. Also provides the first frame for a2v training.
output_nameinference optionalOutput filename stem for the generated video.
negative_promptinference optionalPer-sample negative prompt. If omitted, the default negative prompt is used.
seedinference optionalPer-sample random seed. If omitted, the script-level seed is used.

Example training row:

text_prompt,ref_image_human,ref_image_object,audio,audio_caption,pose_video,target_video
"A person presents a object to the camera.",ref_image_human/0001.png,ref_image_object/0001.png,audio/0001.wav,"Object introduction speech.",pose_video/0001.mp4,target_video/0001.mp4

Example inference row:

text_prompt,ref_image_human,ref_image_object,audio,audio_caption,pose_video,output_name
"A person presents a object to the camera.",ref_image_human/0001.png,ref_image_object/0001.png,audio/0001.wav,"Object introduction speech.",pose_video/0001.mp4,sample_0001

🗂️ File Structure

The released code is organized around the OmniShow training and inference workflow:

OmniShow/
├── assets/                         # Figures used in this README.
├── diffsynth/                       # Core framework and OmniShow implementation.
│   ├── configs/
│   ├── core/
│   ├── diffusion/
│   ├── models/
│   ├── modules/
│   ├── pipelines/
│   ├── utils/
│   ├── __init__.py
│   └── version.py
├── run_train/                      # Training entrypoint, launcher script, and Accelerate config.
│   ├── accelerate_config_14B_zero3.yaml
│   ├── train_omnishow_wan.py
│   └── train_omnishow_wan.sh
├── run_infer/                      # Inference entrypoint and example launcher script.
│   ├── infer_omnishow_wan.py
│   └── infer_omnishow_wan.sh
├── evaluation/                     # HOIVG-Bench evaluation pipeline and vendored metric adapters.
├── download_weights.sh             # Downloads Wan, tokenizer, and audio encoder weights.
├── download_data.sh                # Downloads the OmniShow example dataset.
├── requirements.txt                # Python dependencies used by the release.
└── README.md                       # Project overview and usage instructions.

📊 Evaluation

The evaluation/ folder provides the HOIVG-Bench evaluation pipeline. It runs the selected metric families with separate evaluator environments and merges the results into a unified final_report.csv. For environment setup, checkpoint preparation, input format, and usage commands, please see the evaluation README.

⚖️ Ethics

OmniShow is released for research purposes. The code and data are intended to support responsible study of video generation. Please follow the following guidelines:

  • Do not use the model for identity misuse, impersonation, harassment, deception, or other harmful content generation.
  • Respect the licenses and usage restrictions of the underlying Wan models, Wav2Vec2, datasets, and any input media.
  • When using personal images, voices, or videos, obtain proper consent and follow applicable laws and platform policies.
  • Generated content should be clearly disclosed when used in public-facing scenarios.

🤝 Acknowledgements

This codebase was built upon DiffSynth-Studio. We sincerely thank the contributors of this project for their excellent code.

🔗 Citation

If you find OmniShow useful or inspiring, please consider giving us a ⭐ on GitHub. Your support helps more people discover the project!

If OmniShow is helpful for your research or projects, please consider citing our work:

@article{zhou2026omnishow,
  title={OmniShow: Unifying Multimodal Conditions for Human-Object Interaction Video Generation},
  author={Zhou, Donghao and Liu, Guisheng and Yang, Hao and Li, Jiatong and Lin, Jingyu and Huang, Xiaohu and Liu, Yichen and Gao, Xin and Chen, Cunjian and Wen, Shilei and Fu, Chi-Wing and Heng, Pheng-Ann},
  journal={arXiv preprint arXiv:2604.11804},
  year={2026}
}

📬 Contact

For questions about OmniShow, please contact Donghao Zhou at dhzhou@link.cuhk.edu.hk.

Contributors

Correr-Zhou

17 commits

Correr-Zhou/OmniShow

[ICML 2026] ByteDance's All-in-One Video Generation Model for Human-Object Interaction Video Generation

469

stars

17

commits

Python

primary language

Jul 29, 2026

updated

correr-zhou.github.io/OmniShow/
aigc
computer-vision
deep-learning
diffusion-models
dit
icml
icml-2026
large-models
mmdit
multimodal-ai
multimodal-deep-learning
video-generation
visual-generation
Browse cluster: Video Generation with Diffusion Models

README

OmniShow logo

OmniShow: Unifying Multimodal Conditions for Human-Object Interaction Video Generation

Donghao Zhou1,*, Guisheng Liu2,*, Hao Yang2, Jiatong Li2,†, Jingyu Lin3, Xiaohu Huang4,
Yichen Liu2, Xin Gao2, Cunjian Chen3, Shilei Wen2,§, Chi-Wing Fu1, Pheng-Ann Heng1,§

1The Chinese University of Hong Kong, 2ByteDance, 3Monash University, 4The University of Hong Kong

*Equal contribution, Project lead, §Corresponding author


🔥 Updates

  • 2026.07: The evaluation code of HOIVG-Bench is released!
  • 2026.05: Training and inference code for Wan-based models is released!
  • 2026.05: OmniShow is accepted by ICML 2026! 🎉
  • 2026.04: The Data of HOIVG-Bench is available on HuggingFace! 🤗
  • 2026.04: The technical report of OmniShow is released!

🌟 Highlights

  • Multimodal Controllable Model: OmniShow is the first all-in-one model for Human-Object Interaction Video Generation (HOIVG) with text, reference image, audio, and pose conditioning.
  • Flexible Task Coverage: A single model supports R2V, RA2V, RP2V, and RAP2V generation within one coherent framework.
  • Enabling Broader Applications: OmniShow exhibits remarkable versatility in broader applications, such as audio-driven avatars, object swapping, and video remixing.
  • New Benchmark: HOIVG-Bench provides a dedicated and comprehensive benchmark for evaluating HOIVG under diverse multimodal conditions.
OmniShow Overview

🚀 Introducing OmniShow

We propose OmniShow, a video generation model that unifies text, reference image, audio, and pose conditions for HOIVG, which consists of:

  1. Unified Channel-wise Conditioning effectively injects reference image and pose cues via unified channel concatenation. It augments noisy video tokens with pseudo-frames, which are supervised by a reference reconstruction loss to preserve semantic details.
  2. Gated Local-Context Attention ensures precise audio-visual synchronization. It packs audio features with sufficient contextual information and injects them via masked attention to align video frames with corresponding audio segments, followed by adaptive gating to stabilize early training.
  3. Decoupled-Then-Joint Training makes the efficient utilization of heterogeneous datasets possible. We first train specialized R2V and A2V models on separate sub-task datasets, then fuse them via weight interpolation, followed by joint fine-tuning to unify multimodal capabilities.
OmniShow Pipeline

Learn more details

📊 HOIVG-Bench

To systematically evaluate HOIVG under diverse multimodal conditions, we construct HOIVG-Bench, a dedicated benchmark with 135 carefully curated samples and task-specific metrics. Each sample contains a detailed text caption, a human reference image, an object reference image, semantically aligned audio, and a coherent pose sequence.

HOIVG-Bench

🎬 Demo

Across varied tasks, OmniShow exhibits high-fidelity reference preservation, natural motion dynamics, and precise audio-visual synchronization. Please visit the OmniShow project page for more immersive and diverse video demonstrations.

OmniShow Qualitative Results

🏆 Benchmark Evaluation

OmniShow achieves overall state-of-the-art performance across various multimodal generation tasks, and it is the only model that supports the full RAP2V setting.

Reference-to-Video Generation (R2V)

MethodTA↑FaceSim↑NexusScore↑AES↑IQA↑VQ↑MQ↑
HunyuanCustom7.5230.4400.3590.4520.69710.115.286
HuMo-1.7B7.0870.6470.3330.4410.7239.763.406
HuMo-17B7.9490.8430.3460.4480.7269.973.685
VACE8.4130.7590.3680.4570.72210.725.442
Phantom-1.3B8.3420.7080.3510.4590.72210.905.637
Phantom-14B8.6090.8760.3660.4490.74110.935.517
OmniShow (Ours)7.7460.8740.3890.4680.74011.125.885

Reference+Audio-to-Video Generation (RA2V)

MethodTA↑FaceSim↑NexusScore↑Sync-C↑Sync-D↓AES↑IQA↑VQ↑MQ↑
HunyuanCustom7.2890.4570.3506.07210.080.4390.7159.153.658
HuMo-1.7B7.4890.5750.3297.2349.1170.4280.7319.974.182
HuMo-17B8.1460.8050.3448.0138.3160.4390.73910.274.269
OmniShow (Ours)8.0930.8100.3698.6127.6080.4650.74210.865.554

Reference+Pose-to-Video Generation (RP2V)

MethodTA↑FaceSim↑NexusScore↑AKD↓PCK↑AES↑IQA↑VQ↑MQ↑
AnchorCrafter2.6690.4040.2150.2290.1760.4990.6738.954.241
VACE7.6900.6000.3520.2060.3360.4500.71210.145.393
OmniShow (Ours)6.5260.4740.4180.1740.4600.4470.72210.284.937

✅ Todo List

  • Training Code (Wan-Based)
  • Inference Code (Wan-Based)
  • Data of HOIVG-Bench
  • Evaluation Code of HOIVG-Bench

🛠️ Environment Setup

We recommend using a clean Conda environment with Python 3.11:

git clone https://github.com/Correr-Zhou/OmniShow.git
cd OmniShow

conda create -n omnishow python=3.11 -y
conda activate omnishow

pip install -e .
pip install -r requirements.txt

If the default PyTorch installation does not match your CUDA version, reinstall PyTorch manually. For example, for CUDA 12.4:

pip install --index-url https://download.pytorch.org/whl/cu124 \
  torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0

📦 Data and Model Preparation

Download the required Wan backbones, tokenizer assets, Wav2Vec2 audio encoder, and the OmniShow example dataset:

bash download_weights.sh
bash download_data.sh

By default, the scripts organize files as:

OmniShow/
├── models/
│   ├── Wan-AI/Wan2.1-I2V-14B-480P/
│   ├── Wan-AI/Wan2.1-I2V-14B-720P/
│   ├── Wan-AI/Wan2.1-T2V-1.3B/
│   └── facebook/wav2vec2-base-960h/
└── data/
    └── donghao-zhou/OmniShow_example_dataset/

The example dataset follows the metadata format below:

FieldDescription
text_promptText description of the target video.
ref_image_humanRelative path to the human reference image.
ref_image_objectRelative path to the object reference image.
audioRelative path to the audio file.
audio_captionTextual description of the audio content.
pose_videoRelative path to the pose video.
target_videoRelative path to the training target video. Used for training metadata.

This release focuses on reproducing our method on Wan-based models. Checkpoints are not included due to internal policy constraints. The target_video files of the example dataset are generated by OmniShow and intended for checking that the code runs correctly. For HOIVG-Bench, please download the benchmark from HuggingFace.

⚡ Quick Start

Training

Run the default Wan-based OmniShow training script:

bash run_train/train_omnishow_wan.sh

The default script uses the example dataset and trains the r2v setting at 480p. You can edit the following variables in run_train/train_omnishow_wan.sh to switch task, resolution, or data path:

GEN_TASK="r2v"      # r2v / a2v / ra2v / rp2v / rap2v
RESOLUTION="480p"  # 480p / 720p
DATA_FILE="data/donghao-zhou/OmniShow_example_dataset/meta_data_train.csv"
DATASET_BASE_PATH="data/donghao-zhou/OmniShow_example_dataset"

The training entry also supports direct command-line usage:

accelerate launch --config_file run_train/accelerate_config_14B_zero3.yaml \
  --num_processes 8 \
  run_train/train_omnishow_wan.py \
  --dataset_base_path data/donghao-zhou/OmniShow_example_dataset \
  --dataset_metadata_path data/donghao-zhou/OmniShow_example_dataset/meta_data_train.csv \
  --height 832 \
  --width 480 \
  --num_frames 49 \
  --gen_task r2v \
  --model_id_with_origin_paths "Wan-AI/Wan2.1-I2V-14B-480P:diffusion_pytorch_model*.safetensors,Wan-AI/Wan2.1-I2V-14B-480P:models_t5_umt5-xxl-enc-bf16.pth,Wan-AI/Wan2.1-I2V-14B-480P:Wan2.1_VAE.pth,Wan-AI/Wan2.1-I2V-14B-480P:models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth" \
  --trainable_models "dit" \
  --learning_rate 1e-5 \
  --num_epochs 1000 \
  --save_steps 500 \
  --remove_prefix_in_ckpt "pipe.dit." \
  --output_path outputs/train_omnishow_wan_r2v_480p \
  --use_gradient_checkpointing_offload \
  --initialize_model_on_cpu

Inference

Run the default Wan-based OmniShow inference script:

bash run_infer/infer_omnishow_wan.sh

The default script reads meta_data_infer.csv and saves generated videos to outputs/. To use a fine-tuned checkpoint, set DIT_CHECKPOINT in run_infer/infer_omnishow_wan.sh:

DIT_CHECKPOINT="path/to/your/checkpoint.safetensors"

The inference entry also supports direct command-line usage:

python run_infer/infer_omnishow_wan.py \
  --model_id Wan-AI/Wan2.1-I2V-14B-480P \
  --csv data/donghao-zhou/OmniShow_example_dataset/meta_data_infer.csv \
  --base_path data/donghao-zhou/OmniShow_example_dataset \
  --output_dir outputs/infer_omnishow_wan_r2v_480p \
  --gen_task r2v \
  --dit_checkpoint path/to/your/checkpoint.safetensors \
  --height 832 \
  --width 480 \
  --num_frames 49 \
  --num_inference_steps 50 \
  --cfg_scale 6 \
  --seed 42

🧭 Advanced Usage

OmniShow supports the following tasks:

TaskConditionsTypical inference CSV fields
r2vtext + reference imagestext_prompt, ref_image_human, ref_image_object
a2vtext + first frame + audiotext_prompt, input_image, audio
ra2vtext + reference images + audiotext_prompt, ref_image_human, ref_image_object, audio
rp2vtext + reference images + posetext_prompt, ref_image_human, ref_image_object, pose_video
rap2vtext + reference images + audio + posetext_prompt, ref_image_human, ref_image_object, audio, pose_video

Both training and inference scripts expose the same task switch:

GEN_TASK="r2v"  # r2v / a2v / ra2v / rp2v / rap2v

To switch resolution, you can also edit RESOLUTION in the corresponding script:

RESOLUTION="480p"  # 480p / 720p

The scripts automatically select the matching base model.

If you use a custom aspect ratio or resolution, also check the HEIGHT and WIDTH values in the script.

For training, the most commonly edited variables in run_train/train_omnishow_wan.sh are:

GEN_TASK="r2v"
RESOLUTION="480p"
DATA_FILE="path/to/your/meta_data_train.csv"
DATASET_BASE_PATH="path/to/your/dataset_root"
OUTPUT_DIR="outputs/train_omnishow_wan_${GEN_TASK}_${RESOLUTION}"
LAUNCH_NUM_PROCESSES=8
LEARNING_RATE="1e-5"
NUM_EPOCHS=1000
SAVE_STEPS=500
NUM_FRAMES=49

For inference, the most commonly edited variables in run_infer/infer_omnishow_wan.sh are:

GEN_TASK="r2v"
RESOLUTION="480p"
DATA_FILE="path/to/your/meta_data_infer.csv"
DATASET_BASE_PATH="path/to/your/dataset_root"
OUTPUT_DIR="outputs/infer_omnishow_wan_${GEN_TASK}_${RESOLUTION}"
DIT_CHECKPOINT="path/to/your/checkpoint.safetensors"
NUM_INFERENCE_STEPS=50
CFG_SCALE=6
SEED=42

If DIT_CHECKPOINT is left empty, inference uses the base Wan DiT weights. Set it when evaluating a fine-tuned checkpoint.

🧾 Preparing Your Own Dataset

To use your own data, follow the same CSV-driven format as the example dataset. All media paths in the CSV should be relative to DATASET_BASE_PATH.

A typical dataset can be organized as:

your_dataset/
├── meta_data_train.csv
├── meta_data_infer.csv
├── ref_image_human/
├── ref_image_object/
├── input_image/
├── audio/
├── pose_video/
└── target_video/       # training only

Training metadata should include target_video, while inference metadata does not need it. For a2v training, the first frame is taken from target_video; for a2v inference, provide input_image. The detailed requirements for CSV fields are as follows:

FieldRequired forDescription
text_promptall tasksText description of the target video.
ref_image_humanr2v, ra2v, rp2v, rap2vRelative path to the human reference image.
ref_image_objectr2v, ra2v, rp2v, rap2vRelative path to the object reference image.
input_imagea2v inferenceRelative path to the first-frame image.
audioa2v, ra2v, rap2vRelative path to the audio file.
audio_captionoptionalTextual description of the audio content.
pose_videorp2v, rap2vRelative path to the pose video.
target_videotraining onlyRelative path to the target video used for supervision. Also provides the first frame for a2v training.
output_nameinference optionalOutput filename stem for the generated video.
negative_promptinference optionalPer-sample negative prompt. If omitted, the default negative prompt is used.
seedinference optionalPer-sample random seed. If omitted, the script-level seed is used.

Example training row:

text_prompt,ref_image_human,ref_image_object,audio,audio_caption,pose_video,target_video
"A person presents a object to the camera.",ref_image_human/0001.png,ref_image_object/0001.png,audio/0001.wav,"Object introduction speech.",pose_video/0001.mp4,target_video/0001.mp4

Example inference row:

text_prompt,ref_image_human,ref_image_object,audio,audio_caption,pose_video,output_name
"A person presents a object to the camera.",ref_image_human/0001.png,ref_image_object/0001.png,audio/0001.wav,"Object introduction speech.",pose_video/0001.mp4,sample_0001

🗂️ File Structure

The released code is organized around the OmniShow training and inference workflow:

OmniShow/
├── assets/                         # Figures used in this README.
├── diffsynth/                       # Core framework and OmniShow implementation.
│   ├── configs/
│   ├── core/
│   ├── diffusion/
│   ├── models/
│   ├── modules/
│   ├── pipelines/
│   ├── utils/
│   ├── __init__.py
│   └── version.py
├── run_train/                      # Training entrypoint, launcher script, and Accelerate config.
│   ├── accelerate_config_14B_zero3.yaml
│   ├── train_omnishow_wan.py
│   └── train_omnishow_wan.sh
├── run_infer/                      # Inference entrypoint and example launcher script.
│   ├── infer_omnishow_wan.py
│   └── infer_omnishow_wan.sh
├── evaluation/                     # HOIVG-Bench evaluation pipeline and vendored metric adapters.
├── download_weights.sh             # Downloads Wan, tokenizer, and audio encoder weights.
├── download_data.sh                # Downloads the OmniShow example dataset.
├── requirements.txt                # Python dependencies used by the release.
└── README.md                       # Project overview and usage instructions.

📊 Evaluation

The evaluation/ folder provides the HOIVG-Bench evaluation pipeline. It runs the selected metric families with separate evaluator environments and merges the results into a unified final_report.csv. For environment setup, checkpoint preparation, input format, and usage commands, please see the evaluation README.

⚖️ Ethics

OmniShow is released for research purposes. The code and data are intended to support responsible study of video generation. Please follow the following guidelines:

  • Do not use the model for identity misuse, impersonation, harassment, deception, or other harmful content generation.
  • Respect the licenses and usage restrictions of the underlying Wan models, Wav2Vec2, datasets, and any input media.
  • When using personal images, voices, or videos, obtain proper consent and follow applicable laws and platform policies.
  • Generated content should be clearly disclosed when used in public-facing scenarios.

🤝 Acknowledgements

This codebase was built upon DiffSynth-Studio. We sincerely thank the contributors of this project for their excellent code.

🔗 Citation

If you find OmniShow useful or inspiring, please consider giving us a ⭐ on GitHub. Your support helps more people discover the project!

If OmniShow is helpful for your research or projects, please consider citing our work:

@article{zhou2026omnishow,
  title={OmniShow: Unifying Multimodal Conditions for Human-Object Interaction Video Generation},
  author={Zhou, Donghao and Liu, Guisheng and Yang, Hao and Li, Jiatong and Lin, Jingyu and Huang, Xiaohu and Liu, Yichen and Gao, Xin and Chen, Cunjian and Wen, Shilei and Fu, Chi-Wing and Heng, Pheng-Ann},
  journal={arXiv preprint arXiv:2604.11804},
  year={2026}
}

📬 Contact

For questions about OmniShow, please contact Donghao Zhou at dhzhou@link.cuhk.edu.hk.

Contributors

Correr-Zhou

17 commits

Languages

Python

99.6%