潘凯航*1,2, 田奇*2, 张健伟2, 孔维杰2, 熊江峰2, 龙彦鑫2, 张世学2, 邱海一1, 王潭3, 吕哲琦1, 吴玥§2, 柏立峰2, 唐思亮§1, 钟钊†2
1浙江大学 2腾讯混元 3南洋理工大学
*同等贡献 §通讯作者 †项目负责人
本研究工作是潘凯航在腾讯混元实习期间完成
我们提出了 OmniWeaving,这是一款全层级视频生成模型,具备强大的多模态组合能力和推理感知能力。通过利用包含多样化组合场景和推理增强场景的大规模预训练数据集,OmniWeaving 能够学习对交错的文本、多图像和视频输入进行时间绑定,同时作为智能代理推断复杂的用户意图,以实现复杂的视频创作。 此外,我们引入了 IntelligentVBench,这是首个旨在严格评估下一代智能统一视频生成的综合基准。大量实验表明,OmniWeaving 在开源统一模型中取得了最先进(SoTA)的性能。
根据论文所述,OmniWeaving 构建为一个集成的 MLLM + MMDiT + VAE 框架,用于统一的自由形式视频生成。MLLM 作为交错文本、图像和视频输入的语义解析器,将它们映射到高级语义空间,并通过 MLP 连接器转发其隐藏状态。VAE 充当视觉令牌器,将视觉输入压缩为低级潜变量,而 MMDiT 则利用这些语义条件和潜噪声生成语义对齐、高保真的视频。
在此基础上,我们进一步引入了两项专为高级推理和组合而定制的额外改进。
图 1. OmniWeaving 架构概述,包含用于多模态理解的 MLLM 和用于生成的 MMDiT。
OmniWeaving 的输入和输出配置灵活多样,可支持多种统一的视频生成任务:
| 任务 | 输入类型 | 输出 | 描述 | 演示输入 | 演示输出 |
|---|---|---|---|---|---|
| Text-to-Video (T2V) | 文本 📝 | 视频 🎬 | 根据文本提示生成视频。 |
|
|
| First-Frame-to-Video (I2V) | 图像 🖼 + 文本 📝 | 视频 🎬 | 基于首帧图像生成视频。 |
![]() |
|
| Key-Frames-to-Video | 2 张图像 🖼 + 文本 📝 | 视频 🎬 | 根据起始帧和结束帧生成视频。 |
![]() |
|
| Video-to-Video Editing | 视频 🎬 + 文本 📝 | 视频 🎬 | 基于指令的视频操控与风格化。 |
![]() |
|
| Reference-to-Video | 图像 🖼 + 文本 📝 | 视频 🎬 | 基于单主体参考图像驱动的视频生成。 |
![]() |
|
| Compositional Multi-Image-to-Video | 2–4 张图像 🖼 + 文本 📝 | 视频 🎬 | 多主体组合式视频生成。 |
|
|
| Text-Image-Video-to-Video | 视频 🎬 + 图像 🖼 + 文本 📝 | 视频 🎬 | 根据文本、图像和视频输入生成视频。 |
![]() ![]() |
|
| Reasoning-Augmented Video Generation | 图像(s) 🖼 + 文本 📝 | 推理 💭 + 视频 🎬 | 在生成视频前对用户意图进行推理。 |
![]() |
|
git clone https://github.com/Tencent-Hunyuan/OmniWeaving
cd OmniWeavingOmniWeaving 基于 HunyuanVideo-1.5 构建。其依赖项的安装方式与 HunyuanVideo-1.5 类似。具体而言,您需要安装基本依赖项:
pip install -r requirements.txt此外,根据需要安装注意力库(我们在实际应用中使用 Flash Attention):
Flash Attention:安装后可实现更快的推理速度并降低 GPU 内存消耗。详情请参见 Flash Attention。
Flex-Block-Attention:仅在使用稀疏注意力以实现更快推理时需要:
git clone https://github.com/Tencent-Hunyuan/flex-block-attn.git
cd flex-block-attn
git submodule update --init --recursive
python3 setup.py installSageAttention:用于更快推理(将自动禁用 Flex-Block-Attention):
git clone https://github.com/cooper1637/SageAttention.git
cd SageAttention
export EXT_PARALLEL=4 NVCC_APPEND_FLAGS="--threads 8" MAX_JOBS=32 # 可选
python3 setup.py install详细的下载说明可参见 download-checkpoint.md。
在我们的推理代码中,我们定义了与支持的任务相对应的六个任务标志。它们的映射关系如下:
| 任务标志 | 全称 | 描述 |
|---|---|---|
t2v | Text-to-Video | 根据文本提示生成视频。 |
i2v | First-Frame-to-Video | 在文本引导下将静态图像生成为视频。 |
interpolation | Key-Frames-to-Video | 根据起始帧和结束帧生成视频。 |
reference2v | Reference-to-Video / Compositional Multi-Image-to-Video | 基于单主体或多主体参考图像的视频生成。 |
editing | Video-to-Video Editing | 基于指令的视频操作和风格化。 |
tiv2v | Text-Image-Video-to-Video | 根据文本、图像和视频输入生成视频。 |
其中,t2v、i2v 和 interpolation 可以选择启用思考模式(--think)以进行推理增强型视频生成,在此模式下,MLLM 会先对用户意图进行推理,然后再生成视频。
所有任务共享以下超参数(在 generate.sh 顶部进行配置):
N_INFERENCE_GPU=8
SEED=0
ASPECT_RATIO=16:9
MODEL_PATH=/path/to/OmniWeaving
SAGE_ATTN=false ### Use Flash Attention
### SAGE_ATTN=true ### Use SageAttention
SPARSE_ATTN=false
OVERLAP_GROUP_OFFLOADING=false
ENABLE_CACHE=false
CACHE_TYPE=deepcache提示: 如果您的 GPU 内存有限并遇到 OOM 错误,请尝试:
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,max_split_size_mb:128如果您的 CPU 内存有限,请通过设置
OVERLAP_GROUP_OFFLOADING=false禁用重叠组卸载。
t2v)根据文本提示生成视频。
PROMPT="Put Your Prompt Here"
NEGATIVE_PROMPT="overexposed, low quality, deformation, a poor composition, bad hands, bad teeth, bad eyes, bad limbs, distortion"
OUTPUT_PATH=./outputs/t2v.mp4
torchrun --nproc_per_node=$N_INFERENCE_GPU generate.py \
--task t2v \
--prompt "$PROMPT" \
--negative_prompt "$NEGATIVE_PROMPT" \
--aspect_ratio $ASPECT_RATIO \
--seed $SEED \
--sparse_attn $SPARSE_ATTN --use_sageattn $SAGE_ATTN \
--enable_cache $ENABLE_CACHE --cache_type $CACHE_TYPE \
--overlap_group_offloading $OVERLAP_GROUP_OFFLOADING \
--output_path $OUTPUT_PATH \
--model_path $MODEL_PATH \
# --think \ # Optional: enable reasoning-augmented generation (see note below)
--think标志用于激活 MLLM 的思考模式,在此模式下,模型会对用户意图进行推理,并在视频生成前生成一个增强提示。--think标志支持t2v、i2v和interpolation任务。
i2v)在文本提示的引导下,将首帧图像生成为视频。
PROMPT="Put Your Prompt Here"
IMAGE_PATH=/path/to/reference.png
OUTPUT_PATH=./outputs/i2v.mp4
torchrun --nproc_per_node=$N_INFERENCE_GPU generate.py \
--task i2v \
--prompt "$PROMPT" \
--image_path $IMAGE_PATH \
--aspect_ratio $ASPECT_RATIO \
--seed $SEED \
--sparse_attn $SPARSE_ATTN --use_sageattn $SAGE_ATTN \
--enable_cache $ENABLE_CACHE --cache_type $CACHE_TYPE \
--overlap_group_offloading $OVERLAP_GROUP_OFFLOADING \
--output_path $OUTPUT_PATH \
--model_path $MODEL_PATH \
# --think \ # Optional: enable reasoning-augmented generation (see note below)interpolation)根据文本提示生成连接两个关键帧的视频。
PROMPT="Put Your Prompt Here"
REF_IMAGE_PATHS=(/path/to/first_frame.png /path/to/last_frame.png)
OUTPUT_PATH=./outputs/interpolation.mp4
torchrun --nproc_per_node=$N_INFERENCE_GPU generate.py \
--task interpolation \
--prompt "$PROMPT" \
--ref_image_paths "${REF_IMAGE_PATHS[@]}" \
--aspect_ratio $ASPECT_RATIO \
--seed $SEED \
--sparse_attn $SPARSE_ATTN --use_sageattn $SAGE_ATTN \
--enable_cache $ENABLE_CACHE --cache_type $CACHE_TYPE \
--overlap_group_offloading $OVERLAP_GROUP_OFFLOADING \
--output_path $OUTPUT_PATH \
--model_path $MODEL_PATH \
# --think \ # Optional: enable reasoning-augmented generationreference2v)生成包含一个或多个参考主体的视频。通过 --ref_image_paths 提供一张或多张参考图像。
PROMPT="Put Your Prompt Here"
# Supports 1–4 reference images.
# For best results with multiple images, use the same aspect ratio across all images,
# as they will be center-cropped to match the size of the first image.
REF_IMAGE_PATHS=(/path/to/img1.png /path/to/img2.png ... /path/to/img4.png) # up to 4 input images
OUTPUT_PATH=./outputs/reference2v.mp4
torchrun --nproc_per_node=$N_INFERENCE_GPU generate.py \
--task reference2v \
--prompt "$PROMPT" \
--ref_image_paths "${REF_IMAGE_PATHS[@]}" \
--aspect_ratio $ASPECT_RATIO \
--seed $SEED \
--sparse_attn $SPARSE_ATTN --use_sageattn $SAGE_ATTN \
--enable_cache $ENABLE_CACHE --cache_type $CACHE_TYPE \
--overlap_group_offloading $OVERLAP_GROUP_OFFLOADING \
--output_path $OUTPUT_PATH \
--model_path $MODEL_PATHediting)根据文本指令编辑现有视频(例如,风格迁移、对象替换)。
PROMPT="Put Your Prompt Here"
CONDITION_VIDEO_PATH=/path/to/source_video.mp4
OUTPUT_PATH=./outputs/editing.mp4
# If you have pre-extracted VAE latents for the condition video, pass them via
# --condition_video_latents_path /path/to/latents.pt to skip VAE encoding at inference.
torchrun --nproc_per_node=$N_INFERENCE_GPU generate.py \
--task editing \
--prompt "$PROMPT" \
--condition_video_paths $CONDITION_VIDEO_PATH \
--aspect_ratio $ASPECT_RATIO \
--seed $SEED \
--sparse_attn $SPARSE_ATTN --use_sageattn $SAGE_ATTN \
--enable_cache $ENABLE_CACHE --cache_type $CACHE_TYPE \
--overlap_group_offloading $OVERLAP_GROUP_OFFLOADING \
--output_path $OUTPUT_PATH \
--model_path $MODEL_PATH \
# --condition_video_latents_path /path/to/latents.pt # Optional: skip VAE encoding by providing pre-extracted latentstiv2v)编辑视频时融入参考主体图像(例如,将参考图像中的人物插入到源视频中)。
PROMPT="Put Your Prompt Here"
CONDITION_VIDEO_PATH=/path/to/source_video.mp4
# Only one reference image is supported for tiv2v.
# For best results, use a reference image whose aspect ratio is close to the output video's aspect ratio.
REF_IMAGE_PATHS=(/path/to/ref_image.png)
OUTPUT_PATH=./outputs/tiv2v.mp4
# If you have pre-extracted VAE latents for the condition video, pass them via
# --condition_video_latents_path /path/to/latents.pt to skip VAE encoding at inference.
torchrun --nproc_per_node=$N_INFERENCE_GPU generate.py \
--task tiv2v \
--prompt "$PROMPT" \
--condition_video_paths $CONDITION_VIDEO_PATH \
--ref_image_paths "${REF_IMAGE_PATHS[@]}" \
--aspect_ratio $ASPECT_RATIO \
--seed $SEED \
--sparse_attn $SPARSE_ATTN --use_sageattn $SAGE_ATTN \
--enable_cache $ENABLE_CACHE --cache_type $CACHE_TYPE \
--overlap_group_offloading $OVERLAP_GROUP_OFFLOADING \
--output_path $OUTPUT_PATH \
--model_path $MODEL_PATH \
# --condition_video_latents_path /path/to/latents.pt # Optional: skip VAE encoding by providing pre-extracted latents以下参数可附加到上述任何任务命令中,以进行进一步自定义:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
--negative_prompt | str | "" | 视频生成的负面提示词。默认值为空。设置负面提示词(例如 'overexposed, low quality, deformation, a poor composition, bad hands, bad teeth, bad eyes, bad limbs, distortion')可以提升质量,尤其对于 t2v 等任务。 |
--num_inference_steps | int | 50 | 去噪步数 |
--video_length | int | 81 | 生成的帧数 |
--fps | int | 自动 | 输出 FPS(默认:≤81 帧时为 16,>81 帧时为 24) |
--dtype | str | bf16 | 数据类型:bf16 或 fp32 |
--offloading | bool | true | 启用 CPU 卸载 |
--group_offloading | bool | None | 启用分组卸载(启用卸载时自动启用) |
--pipeline_config | str | omniweaving | 控制 guidance_scale 和 flow_shift 的流水线配置预设。可用预设:omniweaving(guidance_scale=6.0, flow_shift=7.0)、omniweaving2(guidance_scale=6.0, flow_shift=5.0)。 |
调整
guidance_scale/flow_shift: 您可以通过--pipeline_config切换预设(例如--pipeline_config omniweaving2)。如果现有预设无法满足您的需求,您可以在hyvideo/commons/__init__.py中的PIPELINE_CONFIGS字典添加新键,并设置所需的值。我们建议guidance_scale=6.0搭配flow_shift=5.0或7.0。
如果您觉得我们的工作有帮助,请考虑给本仓库点个赞 ❤️ 并按以下方式引用我们的论文: OmniWeaving
@article{pan2026omniweaving,
title={OmniWeaving: Towards Unified Video Generation with Free-form Composition and Reasoning},
author={Pan, Kaihang and Tian, Qi and Zhang, Jianwei and Kong, Weijie and Xiong, Jiangfeng and Long, Yanxin and Zhang, Shixue and Qiu, Haiyi and Wang, Tan and Lv, Zheqi and others},
journal={arXiv preprint arXiv:2603.24458},
year={2026}
}HunyuanVideo 1.5
@article{wu2025hunyuanvideo,
title={Hunyuanvideo 1.5 technical report},
author={Wu, Bing and Zou, Chang and Li, Changlin and Huang, Duojun and Yang, Fang and Tan, Hao and Peng, Jack and Wu, Jianbing and Xiong, Jiangfeng and Jiang, Jie and others},
journal={arXiv preprint arXiv:2511.18870},
year={2025}
}我们要感谢 HunyuanVideo 1.5、Transformers、Diffusers、HuggingFace 和 Qwen-VL 的贡献者们,感谢他们所做的开放研究与探索。