fix-anything README

The project's README from github.com/kvuong2711/fix-anything. As one markdown file: README.md.

FixAnything: 3D-Consistent Rendering Refinement via Video Generative Priors

Khiem Vuong, Deva Ramanan*, Srinivasa Narasimhan*

ECCV 2026

[arXiv] [Project Page] [Model (HF)] [Bibtex]

📖 Overview

FixAnything is a single generalist video model that repairs rendering artifacts from any 3D representation — 3DGS, NeRF, meshes, or sparse point clouds — by repurposing a pretrained video diffusion model with minimal modification and finetuning.

This repository contains the inference code.

Table of Contents

🔧 Installation

git clone https://github.com/kvuong2711/fix-anything.git
cd fix-anything

conda create -n fixanything python=3.10 -y
conda activate fixanything

# PyTorch for your CUDA version
pip install torch==2.6.0 torchvision==0.21.0 --index-url https://download.pytorch.org/whl/cu126

# FixAnything + the pinned DiffSynth-Studio commit it builds on
# (DiffSynth's setup.py needs pkg_resources, hence setuptools<82 and --no-build-isolation)
pip install "setuptools<82" wheel
pip install --no-build-isolation -e .

# Optional: MapAnything + pyrender, to reconstruct and render your own captures (see below)
pip install --no-build-isolation -e ".[mapanything]"

# Optional but recommended: FlashAttention-2 (used automatically when installed; prebuilt wheel for torch 2.6 / CUDA 12 / Python 3.10)
pip install https://github.com/Dao-AILab/flash-attention/releases/download/v2.7.4.post1/flash_attn-2.7.4.post1+cu12torch2.6cxx11abiTRUE-cp310-cp310-linux_x86_64.whl

📦 Checkpoints

scripts/download_models.py downloads everything into checkpoints/: the Wan2.1-I2V-14B-480P base model (~60 GB, from Hugging Face or --source modelscope) and the FixAnything LoRA from kvuong2711/fix-anything:

python scripts/download_models.py --model_dir checkpoints

The expected layout is:

checkpoints/
├── Wan-AI/Wan2.1-I2V-14B-480P/
│   ├── diffusion_pytorch_model-0000?-of-00007.safetensors
│   ├── models_t5_umt5-xxl-enc-bf16.pth
│   ├── Wan2.1_VAE.pth
│   ├── models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth
│   └── google/umt5-xxl/
└── fixanything_lora.safetensors

If you already have the Wan2.1 files elsewhere, point --model_dir to the folder that contains Wan-AI/.

🚀 Run Inference on a Rendered Video

run_inference.py refines a rendered video (a video file, or a folder of frames). examples/ contains one DL3DV clip rendered by 3D Gaussian Splatting and by a sparse point-track renderer:

# 3DGS rendering
python scripts/run_inference.py --input examples/dl3dv_3dgs/input.mp4   --output_dir outputs/dl3dv_3dgs

# sparse point-track rendering
python scripts/run_inference.py --input examples/dl3dv_tracks/input.mp4 --output_dir outputs/dl3dv_tracks

Each run writes generated.mp4 (refined video), input.mp4 (the resized input) and side_by_side.mp4 (input | refined) to the output folder.

To run on your own rendering (any 3D representation), pass a video of 61 frames rendered along a camera path, ideally starting and ending at views used to build the representation. Frames are resized to 832×480.

📷 Run on Your Own Captures

If you only have a few photos of a scene, scripts/run_mapanything.py reconstructs them with MapAnything, renders the reconstruction along a camera path from the first to the last image, and FixAnything turns that rendering into a clean video. examples/microkitchen_2views and examples/chair_2views each contain two photos of a scene (credit: thanks to Peter Hedman for the photos!):

# 1) MapAnything reconstruction + rendering (61 frames; first/last frame = the input photos)
python scripts/run_mapanything.py --images examples/microkitchen_2views/images --output_dir outputs/microkitchen_2views

# 2) FixAnything
python scripts/run_inference.py --input outputs/microkitchen_2views/rendered.mp4 --output_dir outputs/microkitchen_2views

Step 1 writes rendered.mp4 and reconstruction.glb; step 2 adds generated.mp4 (the result) and side_by_side.mp4.

Example on examples/microkitchen_2views with --trajectory push_in:


MapAnything rendering (left), FixAnything output (right).

📄 License

The code and the FixAnything weights are released under the Apache 2.0 License, the license of the underlying Wan2.1 model.

🙏 Acknowledgments

This codebase builds upon many excellent open-source projects, such as DiffSynth-Studio, Wan2.1, MapAnything, gsplat, DL3DV, etc. We thank the respective authors for making their work publicly available.

🐛 Issues

If you have any problem/question/suggestion, feel free to create an issue or reach out directly to me via email.

📝 Citation

@inproceedings{vuong2026fixanything,
  title     = {FixAnything: 3D-Consistent Rendering Refinement via Video Generative Priors},
  author    = {Vuong, Khiem and Ramanan, Deva and Narasimhan, Srinivasa},
  booktitle = {European Conference on Computer Vision},
  year      = {2026}
}

fix-anything (kvuong2711/fix-anything)

Searching Database…

这是什么东西?一个来自 ECCV 2026 论文的研究工具:一个经过微调的视频扩散模型,用来修复各种 3D 表示方式(3DGS、NeRF、网格模型或稀疏点云)生成的渲染瑕疵。这个仓库里放的是推理代码。
它是桌面应用、程序库,还是我在命令行里运行的工具?是命令行 Python 脚本:runinference.py 用于精细化渲染出的视频,另有一些辅助脚本负责下载模型权重和基于照片的重建。它没有图形界面。
我该怎么把它跑起来?运行 scripts/downloadmodels.py,把 Wan2.1 基础模型(约 60 GB)和 FixAnything LoRA 下载到 checkpoints/ 目录,然后对渲染好的视频运行 runinference.py。
输入的视频应该是什么样的?一段恰好 61 帧、沿相机路径渲染的视频,最好起点和终点就是构建 3D 表示时所用的视角。帧会被缩放到 832×480。
我手头只有一个场景的几张照片,还能用吗?可以——scripts/runmapanything.py 会用 MapAnything 根据你的照片重建场景,沿从第一张到最后一张照片的相机路径进行渲染,然后 FixAnything 把这个渲染结果精细化成一段干净的视频。
运行它需要特殊硬件吗?README 里没有列出硬件要求,但基础模型是一个 140 亿参数的视频扩散模型,在磁盘上约 60 GB,所以要有 GPU 级别的硬件和足够的存储空间。
运行一次之后我会得到哪些文件?每次运行会在输出文件夹里写入 generated.mp4(精细化后的视频)、input.mp4(缩放后的输入)和 sidebyside.mp4(输入 | 精细化结果的对比视频)。
这个仓库包含训练代码吗,还是只有推理?只有推理——仓库里只有推理代码,微调好的 FixAnything LoRA 权重由下载脚本从 Hugging Face 获取。
相机是怎么在两张照片之间移动的?使用 --trajectory interpolate(默认选项)时,相机在两个输入视角之间走一条直线路径;pushin 选项还会在路径中途向场景推进、随后再拉远。
为什么正好是 61 帧?内部会把最后一帧重复四次(共 65 帧),因为 Wan VAE 单独编码第一帧,而对其余帧做时间上的压缩——这样能让最终视角获得更大的影响力;输出会再裁剪回 61 帧。
Creator
kvuong2711
Size
35.7 MB
Stars
246
Updated
CommitAug 25
Age
1mo
Commits · 90 Days