SeedVR2 DiT Settings
The node that makes native KSampler speak SeedVR2
- model
- condition_latent
- positive
- negative
- model
- positive
- negative
- latent
Drop a SeedVR2 checkpoint into a native Load Diffusion Model, wire it to a plain KSampler, hit Run, and you get... nothing useful. That's not you doing it wrong. SeedVR2 is a one-step rectified-flow model that expects its low-resolution input as concat conditioning - two things the stock KSampler has no idea about. This node is the bridge that teaches the sampler the recipe. It's the beating heart of the Luminatrixx/NIVR2 pack and the whole reason the native approach works.
What it does
SeedVR2 DiT Settings takes your native-loaded SeedVR2 MODEL and preps it for KSampler in four moves:
- Installs the rectified-flow sampling schedule on a clone of the model - the same lerp schedule the original one-step recipe uses, with a tunable timestep
shift. - Attaches the low-res condition latent to both the positive and negative conditioning as concat conditioning. This is the same mechanism native inpainting models use: the DiT's 33-channel input (16 noisy latent channels + 16 condition channels + 1 constant task-mask channel) gets assembled entirely through it. No bespoke runtime, just a standard wire.
- Optionally perturbs the condition latent with SeedVR2-style noise augmentation.
- Optionally overrides the attention backend for this model only.
Out the other side you get a patched MODEL, patched positive and negative conditioning, and an empty starting LATENT - which is exactly what KSampler wants.
The inputs that matter
Four are required, and the one beginners get wrong is condition_latent:
- model - straight out of native
Load Diffusion Model, the SeedVR2 DiT. - condition_latent - the low-res source, as a latent. The trick from the tooltip: resize your input to the target output resolution with
Image Scalefirst, thenVAE Encodeit with the SeedVR2 VAE. Don't encode the small version and expect the model to upscale the latent - SeedVR2's SR condition is built from an already-resized image. - positive / negative - from the pack's
SeedVR2 Text Conditioningnode (there's no prompt typing anywhere in this pipeline).
Three optional knobs, and the defaults are the original recipe for a reason:
- shift (
1.0) - the rectified-flow timestep shift. Leave it at 1.0 unless you're experimenting; it's the value the published one-step checkpoints were tuned with. - latent_noise_scale (
0.0) - SeedVR2-style condition-latent noise augmentation. Zero disables it, which is what you want to start. - attention_backend (
none) - keep itnone. "None" doesn't mean no attention, it means "let ComfyUI pick its own default." Overriding it is a later optimization, not a first-run setting.
The full graph looks like this:
Load Diffusion Model ──> SeedVR2 DiT Settings ──> KSampler ──> VAE Decode
Load VAE ──> SeedVR2 VAE Settings ──> VAE Encode ─┘ (condition_latent)
SeedVR2 Text Conditioning ─────────────────┘
KSampler settings that match the recipe
The one-step checkpoint wants very specific values: sampler_name = euler, scheduler = simple, steps = 1, cfg = 1.0, denoise = 1.0. Use the latent output as KSampler's latent_image input. One step is not a typo - this is a distilled one-step model, that's the whole point.
Install and gotchas
Install is the pack install: git clone https://github.com/Luminatrixx/NIVR2 into ComfyUI/custom_nodes, then pip install einops opencv-python numpy, restart. ComfyUI Manager support is coming but listed as "soon," so manual for now. Model checkpoints aren't auto-downloaded - grab them from Comfy-Org/SeedVR2 on Hugging Face and put the DiT in ComfyUI/models/nivr2_dit/ (or models/diffusion_models/). No GGUF support here, and that's arguably a feature: SeedVR2's GGUF quant has a documented reputation for wrecking skin texture, so FP16 (or fp8 if you must) is the right call anyway.
Troubleshooting, in order of how often it bites:
SeedVR2 attention backend '...' is not available- you set a backend override your install doesn't ship. Setattention_backendback tonone. This is the single most common error for this node.- Output looks wrong with non-default settings - you moved
shiftorsteps. Reset to the recipe above. - One clip per KSampler call only - the DiT uses the temporal dimension for frames and isn't built for batching multiple independent clips together. Keep clips separate.
One quiet detail worth knowing: at cfg = 1.0 ComfyUI's sampler skips evaluating the negative branch entirely, so the negative conditioning is effectively decorative in the stock recipe. Wire it anyway - the node expects it - but don't sweat about tuning it.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | SeedVR2 DiT model from native Load Diffusion Model. | |
| condition_latent | LATENT | Low-res latent to upscale: resize your input image to the target resolution (native Image Scale) then VAE-encode it (native VAE Encode) using the SeedVR2 VAE from native Load VAE. | |
| positive | CONDITIONING | Positive conditioning from SeedVR2 Text Conditioning. | |
| negative | CONDITIONING | Negative conditioning from SeedVR2 Text Conditioning. | |
| shiftopt | FLOAT | 1.000–100 | Rectified-flow timestep shift. 1.0 matches the original one-step recipe. |
| latent_noise_scaleopt | FLOAT | 0.0000–1 | Latent-space noise augmentation of the SR condition before sampling (0.0 = disabled). |
| attention_backendopt | COMBO | none | Overrides the DiT attention backend for this model only. 'none' keeps ComfyUI's current default attention selection. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| model | MODEL | Patched MODEL, ready for KSampler. |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | Starting latent for KSampler's latent_image input (use denoise=1.0). |