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 ГБ) и LoRA FixAnything в папку checkpoints/, затем запустите runinference.py на своём отрендеренном видео.
Каким должно быть входное видео?Видео ровно из 61 кадра, отрендеренное вдоль траектории камеры, в идеале — начинающееся и заканчивающееся на тех ракурсах, которые использовались при построении представления. Кадры масштабируются до 832×480.
У меня есть всего пара фотографий сцены — я всё равно смогу этим воспользоваться?Да — scripts/runmapanything.py восстанавливает сцену по вашим фотографиям с помощью MapAnything, рендерит её вдоль траектории камеры от первого снимка к последнему, а FixAnything превращает этот рендер в чистое видео.
Мне нужно какое-то особое железо, чтобы это запустить?В README требований к оборудованию нет, но базовый чекпоинт — это видеодиффузионная модель на 14 млрд параметров, занимающая на диске около 60 ГБ, так что рассчитывайте на GPU и много свободного места.
Какие файлы я получу после запуска?Каждый запуск сохраняет в папку вывода generated.mp4 (улучшенное видео), input.mp4 (масштабированный вход) и sidebyside.mp4 (вход | результат рядом).
В репозитории есть код для обучения или только инференс?Только инференс — в репозитории содержится лишь код для инференса, а дообученные веса LoRA FixAnything скачиваются с Hugging Face скриптом загрузки.
Как камера перемещается между двумя фотографиями?С флагом --trajectory interpolate (он по умолчанию) камера движется по прямой между двумя исходными ракурсами; опция pushin дополнительно приближает камеру к сцене в середине пути и затем отъезжает назад.
Почему именно 61 кадр?Внутри последний кадр повторяется четыре раза (итого 65 кадров), потому что Wan VAE кодирует первый кадр отдельно, а остальные сжимает по времени — так финальный ракурс получает больший вес; на выходе видео обрезается обратно до 61 кадра.
Creator
kvuong2711
Size
35.7 MB
Stars
245
Updated
CommitAug 25
Age
1mo
Commits · 90 Days