NVIDIA DiffusionHarmonizer (NuRec post-processing)
Purpose
Run NVIDIA DiffusionHarmonizer on rendered images from neural
reconstructions. DiffusionHarmonizer is a single-step,
temporally-aware image diffusion enhancer for NeRF / 3DGS /
NuRec-style renderings. It improves realism, reduces
reconstruction artifacts, and harmonizes inserted dynamic
objects with the surrounding scene.
When to Use / When NOT to Use
Use this skill when the user has rendered frames from NRE,
NuRec, 3DGS, NeRF, or a similar reconstruction pipeline and
wants to enhance, harmonize, evaluate, or optionally fine-tune
the DiffusionHarmonizer model.
Do NOT use this skill when:
- The user wants to train or render the 3D reconstruction itself
(use
nre).
- The user wants to convert raw sensor data to NCore V4 (use
ncore).
- The user wants a generic photo enhancer. DiffusionHarmonizer
is tuned for neural-reconstruction artifacts and
object-insertion failures.
- The user only wants NRE inline rendering with
--enable-difix. That remains an NRE runtime feature; use the
nre skill for the complete serve-grpc / render-grpc
command shape.
What changed from the older Fixer skill
This skill follows the public NVIDIA/harmonizer release, not
the older NGC JIT .pt artifact recipe. Use these public
release artifacts:
- Code: https://github.com/NVIDIA/harmonizer
- Model:
nvidia/Harmonizer on Hugging Face (the paper checkpoint
models/diffusion_harmonizer.pkl), plus the base
nvidia/Cosmos-Predict2-0.6B-Text2Image model that inference
also requires.
- Checkpoint download:
./download_checkpoints.sh from the repo
root. It fetches the Harmonizer checkpoints into models/
(diffusion_harmonizer.pkl, harmonizer_nontemporal.pt) and
the base Cosmos DiT + tokenizer into
src/checkpoints/nvidia/Cosmos-Predict2-0.6B-Text2Image/.
- Runtime: the
harmonizer-cosmos-env image built from
Dockerfile.cosmos (base nvcr.io/nvidia/pytorch:25.10-py3).
- Inference entry:
src/inference_pix2pix_turbo_harmonizer.py,
run from inside /work/src so it can import its sibling
modules.
- Evaluation entry:
src/evaluate_test_dataset.py
- Training entry:
src/train_pix2pix_turbo_harmonizer.py
Do not use the obsolete standalone recipe that downloads
nvidia/nre/nurec-fixer:cosmos_3dgut_fixer_harmonizer, mounts
harmonizer_temporal.pt, or runs inference_jit_harmonizer.py
inside nvcr.io/nvidia/pytorch:24.10-py3 unless the user
explicitly asks for that older beta artifact. Do not run
inference_pretrained_model.py; the current README documents
inference_pix2pix_turbo_harmonizer.py as the inference entry
point.
Background
DiffusionHarmonizer is described in DiffusionHarmonizer:
Bridging Neural Reconstruction and Photorealistic Simulation
with Online Diffusion Enhancer
(arXiv 2602.24096, CVPR 2026).
It distills a pretrained multi-step diffusion model into a
single-step enhancer designed for online simulation and offline
data cleanup.
Two operating modes:
- Offline: clean pseudo-training views rendered from a
reconstruction, then distill the improved views back into the
3D representation.
- Online: enhance frames during simulation/inference by
harmonizing color and lighting, reconstructing missing or
inconsistent shadows for inserted actors, and reducing residual
reconstruction artifacts.
The public model card describes DiffusionHarmonizer-cosmos-0.6B,
a Cosmos Predict2 Diffusion Transformer post-trained at
576x1024 input and output resolution.
Inputs
- code_dir — checkout of
https://github.com/NVIDIA/harmonizer.
- model_dir — checkpoints fetched by
./download_checkpoints.sh
from the repo root. It places the paper checkpoint at
models/diffusion_harmonizer.pkl and the required base Cosmos
model under
src/checkpoints/nvidia/Cosmos-Predict2-0.6B-Text2Image/.
- input_dir — directory of rendered RGB frames (
.png,
.jpg, .jpeg) to enhance.
- output_dir —
inference_pix2pix_turbo_harmonizer.py does
not take an output flag; it writes to a sibling folder named
<input_dir>_<model_identifier> next to the input directory.
- HF_TOKEN — Hugging Face token with access to
nvidia/Harmonizer, nvidia/Cosmos-Predict2-0.6B-Text2Image,
and (if used) nvidia/Harmonizer-Dataset. Accept the
model/dataset license terms first.
- NGC_API_KEY — often needed to authenticate
docker pull
from nvcr.io. Use only for container pulls, not model
download.
Instructions
Validate the host. Have the agent execute
scripts/validate_setup.py via its standard script runner —
e.g. run_script("scripts/validate_setup.py") or
python scripts/validate_setup.py. It checks Docker, the
NVIDIA Container Toolkit, GPU architecture, git, the
Hugging Face CLI, token presence, and free disk space — and
exits non-zero on any missing prerequisite.
Clone the code and build (or pull) the runtime image.
Full commands and the Blackwell patch caveat live in
references/inference.md.
git clone https://github.com/NVIDIA/harmonizer.git
cd harmonizer
docker build -t harmonizer-cosmos-env -f Dockerfile.cosmos .
Download the checkpoints. From the repo root run the
helper, which fetches both the Harmonizer checkpoints and the
base Cosmos model into the paths the code expects.
export HF_TOKEN=<your-hugging-face-token>
hf auth login --token "$HF_TOKEN"
./download_checkpoints.sh
Verify models/diffusion_harmonizer.pkl and
src/checkpoints/nvidia/Cosmos-Predict2-0.6B-Text2Image/
exist.
Confirm input_dir exists and filenames sort into frame
order. The temporal inference script sorts frames with
natural sort and uses previous outputs as references; prefer
zero-padded names such as frame_000001.png.
Run inference inside the container with the repo mounted
at /work, then cd /work/src and run
inference_pix2pix_turbo_harmonizer.py. Pin
-u $(id -u):$(id -g) so outputs are owned by the host user.
Output frames land in
<input_dir>_<model_identifier>. Full docker run recipe and
flag matrix in
references/inference.md.
Validate that the output frame count matches the input
frame count, spot-check frames, and (if ground truth is
available) run paired evaluation with PSNR/LPIPS — see
references/evaluation.md.
(Optional) Train or fine-tune. Download the dataset (or
prepare JSON manifests in the documented format), then run
src/train_pix2pix_turbo_harmonizer.py with the recommended
hyperparameters. For fine-tuning, initialize from the released
checkpoint with --pretrained_path /path/to/diffusion_harmonizer.pkl. Full recipe + NuRec
data-pair recipes in
references/training.md.
(Optional) Teardown. Follow
references/teardown.md to remove
images, code clones, model weights, datasets, and outputs.
Examples
Example 1 — Enhance a folder of rendered frames
Run scripts/validate_setup.py, build the image once (see
references/wrapper-image.md), then
invoke inference_pix2pix_turbo_harmonizer.py inside the
harmonizer-cosmos-env container with the repo checkout mounted at
/work. From /work/src, point --input_image at the rendered
frames, --model_path at /work/models/diffusion_harmonizer.pkl,
set --model_identifier, and pass typical flags
--timestep 250 --resolution 1024 --use_sched. Enhanced frames are
written to <input_dir>_<model_identifier>. The canonical
docker run command and the full flag matrix live in
references/inference.md.
Example 2 — Quantitative PSNR / LPIPS evaluation
Prepare the paired test_dataset/{scene}/render +
test_dataset/{scene}/gt layout, then run
src/evaluate_test_dataset.py inside the container. See
references/evaluation.md for the
exact directory shape and the docker run command.
Example 3 — Fine-tune from the public checkpoint
Download nvidia/Harmonizer-Dataset, prepare the
training JSON, then run
src/train_pix2pix_turbo_harmonizer.py with the multi-GPU
accelerate launch recipe in
references/training.md. For
fine-tuning add --pretrained_path /path/to/diffusion_harmonizer.pkl and use
--fixing_data_weight 3 on the released dataset.
Example 4 — Non-temporal (frame-by-frame) enhancement
inference_pix2pix_turbo_harmonizer.py is temporal by default
and uses previous enhanced frames as references
(--offset_list -1 -2 -3 -4). When the user wants each frame
enhanced independently (e.g. unordered images), add
--nontemporal to disable temporal conditioning. Full command +
--offset_list defaults in
references/inference.md.
Consuming the inline Fixer via NRE
nre --enable-difix is still the right answer when the user
wants NRE to enhance frames as part of rendering without a
separate harmonizer checkout. That path is owned by the sibling
nre skill. Do not mix the standalone DiffusionHarmonizer
HF/Cosmos workflow with NRE's internal cache flags unless the
NRE documentation for the user's tag explicitly says they share
weights.
Use this standalone skill when the user wants the public
DiffusionHarmonizer code, model card, training/evaluation
scripts, or post-processing of frames that already exist on
disk.
Prerequisites
- OS: Linux host.
- GPU / driver: NVIDIA GPU Ampere or newer (compute
capability
>= 8.0; A100, A10, L40, H100, RTX 30/40/PRO,
B200, GB200).
- Container runtime: Docker with the NVIDIA Container
Toolkit.
- Tools:
git, python3, Hugging Face CLI (hf or
huggingface-cli).
- Secrets:
- Disk: at least ~120 GB free for the runtime image, build
cache, model weights, optional dataset, and outputs combined.
- Source / model / dataset:
The fail-fast check that enforces all of the above is
scripts/validate_setup.py.
Scripts
| Script |
Purpose |
Usage |
scripts/validate_setup.py |
Verify Docker, NVIDIA Container Toolkit, GPU architecture, git, Hugging Face CLI, token presence, and disk space. No network calls. |
run_script("scripts/validate_setup.py") or python scripts/validate_setup.py |
scripts/.env.example |
Template for HF_TOKEN and optional NGC_API_KEY. |
cp scripts/.env.example .env && set -a && . ./.env && set +a |
References
references/inference.md — container
build, raw-base fallback, Blackwell patches, checkpoint
download, inference_pix2pix_turbo_harmonizer.py flag matrix,
non-temporal mode.
references/evaluation.md — paired
test_dataset/ layout and evaluate_test_dataset.py command.
references/training.md — dataset
download, training JSON format, multi-GPU accelerate launch
recipe, fine-tuning flags, NuRec data-pair recipes.
references/wrapper-image.md —
build and run the project image for repeat inference.
references/troubleshooting.md
— extended diagnostic notes.
references/teardown.md — cleanup
inventory for images, code, Hugging Face caches, datasets,
and outputs.
- Public code: https://github.com/NVIDIA/harmonizer
- Model card: https://huggingface.co/nvidia/Harmonizer
- Dataset: https://huggingface.co/datasets/nvidia/Harmonizer-Dataset
- Paper: https://arxiv.org/abs/2602.24096
- Project page: https://research.nvidia.com/labs/sil/projects/diffusion-harmonizer/
Limitations
- Rendered inputs only. The model is tuned for
neural-reconstruction renderings and object-insertion
artifacts, not arbitrary real photos.
- Primary model resolution is 576x1024. The inference script
maps resolution key
1024 to 1024x576. Only 1024, 960,
and 1360 are supported keys; 1024 matches the model-card
operating point.
- Temporal references and filename order matter. The
inference script enhances frames in natural-sorted order and
feeds previous outputs back as temporal references. Use
zero-padded frame numbers, or pass
--nontemporal for
unordered images.
- Container builds can be large. The runtime image, build
cache, model weights, and optional dataset can exceed 100 GB.
- Training is multi-GPU by default. The README command
assumes 8 GPUs with bf16 mixed precision.
- Public code evolves. The current README documents
inference_pix2pix_turbo_harmonizer.py as the inference entry
point; if a future checkout renames it, prefer the script and
flags present in that checkout.
Troubleshooting (top 5)
| Error / symptom |
Most common cause |
docker: could not select device driver ... gpu |
NVIDIA Container Toolkit missing or Docker is not configured for the NVIDIA runtime. |
docker pull 401 / 403 from nvcr.io |
Docker is not authenticated to NGC, or the API key lacks container access. |
hf download ... 401 / 403 |
HF_TOKEN is missing/expired/lacks read scope, or the model/dataset license has not been accepted. |
diffusion_harmonizer.pkl missing |
Checkpoint download path is wrong or incomplete. Re-run ./download_checkpoints.sh from the repo root. |
Output files owned by root |
The docker run omitted -u $(id -u):$(id -g). |
Full matrix in
references/troubleshooting.md.
Teardown
A full workflow can leave large artifacts on disk: the Cosmos
image, project image, build cache, harmonizer code checkout,
Hugging Face model weights, optional dataset, evaluation
outputs, and enhanced frames. Reclaim them with the inventory
in references/teardown.md. Do not
revoke HF_TOKEN or NGC_API_KEY as normal cleanup. Rotate a
token only if you suspect it was leaked.
1---2name: nurec-fixer3description: Use to run NVIDIA DiffusionHarmonizer (public successor to the older Fixer recipes) to enhance, harmonize, evaluate, or fine-tune novel-view frames from NRE / NuRec / 3DGS / NeRF reconstructions. Do NOT use for training the 3D reconstruction itself (use `nre`) or for sensor-to-NCore conversion (use `ncore`).4license: CC-BY-4.0 AND Apache-2.05---67# NVIDIA DiffusionHarmonizer (NuRec post-processing)89## Purpose1011Run NVIDIA DiffusionHarmonizer on rendered images from neural12reconstructions. DiffusionHarmonizer is a single-step,13temporally-aware image diffusion enhancer for NeRF / 3DGS /14NuRec-style renderings. It improves realism, reduces15reconstruction artifacts, and harmonizes inserted dynamic16objects with the surrounding scene.1718## When to Use / When NOT to Use1920**Use this skill when** the user has rendered frames from NRE,21NuRec, 3DGS, NeRF, or a similar reconstruction pipeline and22wants to enhance, harmonize, evaluate, or optionally fine-tune23the DiffusionHarmonizer model.2425**Do NOT use this skill when:**2627- The user wants to train or render the 3D reconstruction itself28 (use `nre`).29- The user wants to convert raw sensor data to NCore V4 (use30 `ncore`).31- The user wants a generic photo enhancer. DiffusionHarmonizer32 is tuned for neural-reconstruction artifacts and33 object-insertion failures.34- The user only wants NRE inline rendering with35 `--enable-difix`. That remains an NRE runtime feature; use the36 `nre` skill for the complete `serve-grpc` / `render-grpc`37 command shape.3839## What changed from the older Fixer skill4041This skill follows the public `NVIDIA/harmonizer` release, not42the older NGC JIT `.pt` artifact recipe. Use these public43release artifacts:4445- Code: <https://github.com/NVIDIA/harmonizer>46- Model: `nvidia/Harmonizer` on Hugging Face (the paper checkpoint47 `models/diffusion_harmonizer.pkl`), plus the base48 `nvidia/Cosmos-Predict2-0.6B-Text2Image` model that inference49 also requires.50- Checkpoint download: `./download_checkpoints.sh` from the repo51 root. It fetches the Harmonizer checkpoints into `models/`52 (`diffusion_harmonizer.pkl`, `harmonizer_nontemporal.pt`) and53 the base Cosmos DiT + tokenizer into54 `src/checkpoints/nvidia/Cosmos-Predict2-0.6B-Text2Image/`.55- Runtime: the `harmonizer-cosmos-env` image built from56 `Dockerfile.cosmos` (base `nvcr.io/nvidia/pytorch:25.10-py3`).57- Inference entry: `src/inference_pix2pix_turbo_harmonizer.py`,58 run from inside `/work/src` so it can import its sibling59 modules.60- Evaluation entry: `src/evaluate_test_dataset.py`61- Training entry: `src/train_pix2pix_turbo_harmonizer.py`6263Do not use the obsolete standalone recipe that downloads64`nvidia/nre/nurec-fixer:cosmos_3dgut_fixer_harmonizer`, mounts65`harmonizer_temporal.pt`, or runs `inference_jit_harmonizer.py`66inside `nvcr.io/nvidia/pytorch:24.10-py3` unless the user67explicitly asks for that older beta artifact. Do not run68`inference_pretrained_model.py`; the current README documents69`inference_pix2pix_turbo_harmonizer.py` as the inference entry70point.7172## Background7374DiffusionHarmonizer is described in *DiffusionHarmonizer:75Bridging Neural Reconstruction and Photorealistic Simulation76with Online Diffusion Enhancer*77([arXiv 2602.24096](https://arxiv.org/abs/2602.24096), CVPR 2026).78It distills a pretrained multi-step diffusion model into a79single-step enhancer designed for online simulation and offline80data cleanup.8182Two operating modes:8384- **Offline:** clean pseudo-training views rendered from a85 reconstruction, then distill the improved views back into the86 3D representation.87- **Online:** enhance frames during simulation/inference by88 harmonizing color and lighting, reconstructing missing or89 inconsistent shadows for inserted actors, and reducing residual90 reconstruction artifacts.9192The public model card describes `DiffusionHarmonizer-cosmos-0.6B`,93a Cosmos Predict2 Diffusion Transformer post-trained at94`576x1024` input and output resolution.9596## Inputs9798- **code_dir** — checkout of99 <https://github.com/NVIDIA/harmonizer>.100- **model_dir** — checkpoints fetched by `./download_checkpoints.sh`101 from the repo root. It places the paper checkpoint at102 `models/diffusion_harmonizer.pkl` and the required base Cosmos103 model under104 `src/checkpoints/nvidia/Cosmos-Predict2-0.6B-Text2Image/`.105- **input_dir** — directory of rendered RGB frames (`.png`,106 `.jpg`, `.jpeg`) to enhance.107- **output_dir** — `inference_pix2pix_turbo_harmonizer.py` does108 not take an output flag; it writes to a sibling folder named109 `<input_dir>_<model_identifier>` next to the input directory.110- **HF_TOKEN** — Hugging Face token with access to111 `nvidia/Harmonizer`, `nvidia/Cosmos-Predict2-0.6B-Text2Image`,112 and (if used) `nvidia/Harmonizer-Dataset`. Accept the113 model/dataset license terms first.114- **NGC_API_KEY** — often needed to authenticate `docker pull`115 from `nvcr.io`. Use only for container pulls, not model116 download.117118## Instructions1191201. **Validate the host.** Have the agent execute121 `scripts/validate_setup.py` via its standard script runner —122 e.g. `run_script("scripts/validate_setup.py")` or123 `python scripts/validate_setup.py`. It checks Docker, the124 NVIDIA Container Toolkit, GPU architecture, `git`, the125 Hugging Face CLI, token presence, and free disk space — and126 exits non-zero on any missing prerequisite.1272. **Clone the code and build (or pull) the runtime image.**128 Full commands and the Blackwell patch caveat live in129 [`references/inference.md`](references/inference.md).130131 ```bash132 git clone https://github.com/NVIDIA/harmonizer.git133 cd harmonizer134 docker build -t harmonizer-cosmos-env -f Dockerfile.cosmos .135 ```1361373. **Download the checkpoints.** From the repo root run the138 helper, which fetches both the Harmonizer checkpoints and the139 base Cosmos model into the paths the code expects.140141 ```bash142 export HF_TOKEN=<your-hugging-face-token>143 hf auth login --token "$HF_TOKEN"144 ./download_checkpoints.sh145 ```146147 Verify `models/diffusion_harmonizer.pkl` and148 `src/checkpoints/nvidia/Cosmos-Predict2-0.6B-Text2Image/`149 exist.1504. **Confirm `input_dir` exists and filenames sort into frame151 order.** The temporal inference script sorts frames with152 natural sort and uses previous outputs as references; prefer153 zero-padded names such as `frame_000001.png`.1545. **Run inference inside the container** with the repo mounted155 at `/work`, then `cd /work/src` and run156 `inference_pix2pix_turbo_harmonizer.py`. Pin157 `-u $(id -u):$(id -g)` so outputs are owned by the host user.158 Output frames land in159 `<input_dir>_<model_identifier>`. Full `docker run` recipe and160 flag matrix in161 [`references/inference.md`](references/inference.md).1626. **Validate that the output frame count matches the input163 frame count,** spot-check frames, and (if ground truth is164 available) run paired evaluation with PSNR/LPIPS — see165 [`references/evaluation.md`](references/evaluation.md).1667. **(Optional) Train or fine-tune.** Download the dataset (or167 prepare JSON manifests in the documented format), then run168 `src/train_pix2pix_turbo_harmonizer.py` with the recommended169 hyperparameters. For fine-tuning, initialize from the released170 checkpoint with `--pretrained_path171 /path/to/diffusion_harmonizer.pkl`. Full recipe + NuRec172 data-pair recipes in173 [`references/training.md`](references/training.md).1748. **(Optional) Teardown.** Follow175 [`references/teardown.md`](references/teardown.md) to remove176 images, code clones, model weights, datasets, and outputs.177178## Examples179180### Example 1 — Enhance a folder of rendered frames181182Run `scripts/validate_setup.py`, build the image once (see183[`references/wrapper-image.md`](references/wrapper-image.md)), then184invoke `inference_pix2pix_turbo_harmonizer.py` inside the185`harmonizer-cosmos-env` container with the repo checkout mounted at186`/work`. From `/work/src`, point `--input_image` at the rendered187frames, `--model_path` at `/work/models/diffusion_harmonizer.pkl`,188set `--model_identifier`, and pass typical flags189`--timestep 250 --resolution 1024 --use_sched`. Enhanced frames are190written to `<input_dir>_<model_identifier>`. The canonical191`docker run` command and the full flag matrix live in192[`references/inference.md`](references/inference.md).193194### Example 2 — Quantitative PSNR / LPIPS evaluation195196Prepare the paired `test_dataset/{scene}/render` +197`test_dataset/{scene}/gt` layout, then run198`src/evaluate_test_dataset.py` inside the container. See199[`references/evaluation.md`](references/evaluation.md) for the200exact directory shape and the `docker run` command.201202### Example 3 — Fine-tune from the public checkpoint203204Download `nvidia/Harmonizer-Dataset`, prepare the205training JSON, then run206`src/train_pix2pix_turbo_harmonizer.py` with the multi-GPU207`accelerate launch` recipe in208[`references/training.md`](references/training.md). For209fine-tuning add `--pretrained_path210/path/to/diffusion_harmonizer.pkl` and use211`--fixing_data_weight 3` on the released dataset.212213### Example 4 — Non-temporal (frame-by-frame) enhancement214215`inference_pix2pix_turbo_harmonizer.py` is temporal by default216and uses previous enhanced frames as references217(`--offset_list -1 -2 -3 -4`). When the user wants each frame218enhanced independently (e.g. unordered images), add219`--nontemporal` to disable temporal conditioning. Full command +220`--offset_list` defaults in221[`references/inference.md`](references/inference.md).222223## Consuming the inline Fixer via NRE224225`nre --enable-difix` is still the right answer when the user226wants NRE to enhance frames as part of rendering without a227separate harmonizer checkout. That path is owned by the sibling228`nre` skill. Do not mix the standalone DiffusionHarmonizer229HF/Cosmos workflow with NRE's internal cache flags unless the230NRE documentation for the user's tag explicitly says they share231weights.232233Use this standalone skill when the user wants the public234DiffusionHarmonizer code, model card, training/evaluation235scripts, or post-processing of frames that already exist on236disk.237238## Prerequisites239240- **OS:** Linux host.241- **GPU / driver:** NVIDIA GPU Ampere or newer (compute242 capability `>= 8.0`; A100, A10, L40, H100, RTX 30/40/PRO,243 B200, GB200).244- **Container runtime:** Docker with the NVIDIA Container245 Toolkit.246- **Tools:** `git`, `python3`, Hugging Face CLI (`hf` or247 `huggingface-cli`).248- **Secrets:**249 - `HF_TOKEN` with the250 [`nvidia/Harmonizer`](https://huggingface.co/nvidia/Harmonizer)251 and252 [`nvidia/Cosmos-Predict2-0.6B-Text2Image`](https://huggingface.co/nvidia/Cosmos-Predict2-0.6B-Text2Image)253 licenses accepted (required to download model weights and254 the optional dataset).255 - `NGC_API_KEY` (often required for `docker login nvcr.io`256 before pulling `nvcr.io/nvidia/pytorch:25.10-py3`).257- **Disk:** at least ~120 GB free for the runtime image, build258 cache, model weights, optional dataset, and outputs combined.259- **Source / model / dataset:**260 - Code: <https://github.com/NVIDIA/harmonizer>.261 - Model: <https://huggingface.co/nvidia/Harmonizer>.262 - Base model:263 <https://huggingface.co/nvidia/Cosmos-Predict2-0.6B-Text2Image>.264 - Optional dataset:265 <https://huggingface.co/datasets/nvidia/Harmonizer-Dataset>.266267The fail-fast check that enforces all of the above is268`scripts/validate_setup.py`.269270## Scripts271272| Script | Purpose | Usage |273|--------|---------|-------|274| `scripts/validate_setup.py` | Verify Docker, NVIDIA Container Toolkit, GPU architecture, `git`, Hugging Face CLI, token presence, and disk space. No network calls. | `run_script("scripts/validate_setup.py")` or `python scripts/validate_setup.py` |275| `scripts/.env.example` | Template for `HF_TOKEN` and optional `NGC_API_KEY`. | `cp scripts/.env.example .env && set -a && . ./.env && set +a` |276277## References278279- [`references/inference.md`](references/inference.md) — container280 build, raw-base fallback, Blackwell patches, checkpoint281 download, `inference_pix2pix_turbo_harmonizer.py` flag matrix,282 non-temporal mode.283- [`references/evaluation.md`](references/evaluation.md) — paired284 `test_dataset/` layout and `evaluate_test_dataset.py` command.285- [`references/training.md`](references/training.md) — dataset286 download, training JSON format, multi-GPU `accelerate launch`287 recipe, fine-tuning flags, NuRec data-pair recipes.288- [`references/wrapper-image.md`](references/wrapper-image.md) —289 build and run the project image for repeat inference.290- [`references/troubleshooting.md`](references/troubleshooting.md)291 — extended diagnostic notes.292- [`references/teardown.md`](references/teardown.md) — cleanup293 inventory for images, code, Hugging Face caches, datasets,294 and outputs.295- Public code: <https://github.com/NVIDIA/harmonizer>296- Model card: <https://huggingface.co/nvidia/Harmonizer>297- Dataset: <https://huggingface.co/datasets/nvidia/Harmonizer-Dataset>298- Paper: <https://arxiv.org/abs/2602.24096>299- Project page: <https://research.nvidia.com/labs/sil/projects/diffusion-harmonizer/>300301## Limitations302303- **Rendered inputs only.** The model is tuned for304 neural-reconstruction renderings and object-insertion305 artifacts, not arbitrary real photos.306- **Primary model resolution is 576x1024.** The inference script307 maps resolution key `1024` to `1024x576`. Only `1024`, `960`,308 and `1360` are supported keys; `1024` matches the model-card309 operating point.310- **Temporal references and filename order matter.** The311 inference script enhances frames in natural-sorted order and312 feeds previous outputs back as temporal references. Use313 zero-padded frame numbers, or pass `--nontemporal` for314 unordered images.315- **Container builds can be large.** The runtime image, build316 cache, model weights, and optional dataset can exceed 100 GB.317- **Training is multi-GPU by default.** The README command318 assumes 8 GPUs with bf16 mixed precision.319- **Public code evolves.** The current README documents320 `inference_pix2pix_turbo_harmonizer.py` as the inference entry321 point; if a future checkout renames it, prefer the script and322 flags present in that checkout.323324## Troubleshooting (top 5)325326| Error / symptom | Most common cause |327|-----------------|-------------------|328| `docker: could not select device driver ... gpu` | NVIDIA Container Toolkit missing or Docker is not configured for the NVIDIA runtime. |329| `docker pull` 401 / 403 from `nvcr.io` | Docker is not authenticated to NGC, or the API key lacks container access. |330| `hf download ... 401 / 403` | `HF_TOKEN` is missing/expired/lacks read scope, or the model/dataset license has not been accepted. |331| `diffusion_harmonizer.pkl` missing | Checkpoint download path is wrong or incomplete. Re-run `./download_checkpoints.sh` from the repo root. |332| Output files owned by `root` | The `docker run` omitted `-u $(id -u):$(id -g)`. |333334Full matrix in335[`references/troubleshooting.md`](references/troubleshooting.md).336337## Teardown338339A full workflow can leave large artifacts on disk: the Cosmos340image, project image, build cache, `harmonizer` code checkout,341Hugging Face model weights, optional dataset, evaluation342outputs, and enhanced frames. Reclaim them with the inventory343in [`references/teardown.md`](references/teardown.md). Do not344revoke `HF_TOKEN` or `NGC_API_KEY` as normal cleanup. Rotate a345token only if you suspect it was leaked.