Nodes/Lumina_NIVR2/SeedVR2 DiT Settings
ComfyUI Node

SeedVR2 DiT Settings

The node that makes native KSampler speak SeedVR2

By Luminatrixx·Created about a month ago·Updated about a month ago· 2
SeedVR2 DiT Settings
  • model
  • condition_latent
  • positive
  • negative
  • model
  • positive
  • negative
  • latent
shift1.00
latent_noise_scale0.000
attention_backendnone

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:

  1. 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.
  2. 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.
  3. Optionally perturbs the condition latent with SeedVR2-style noise augmentation.
  4. 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 Scale first, then VAE Encode it 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 Conditioning node (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 it none. "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. Set attention_backend back to none. This is the single most common error for this node.
  • Output looks wrong with non-default settings - you moved shift or steps. 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.

CategoryLumina NIVR2

Inputs (7)

NameTypeDefaultDescription
modelMODELSeedVR2 DiT model from native Load Diffusion Model.
condition_latentLATENTLow-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.
positiveCONDITIONINGPositive conditioning from SeedVR2 Text Conditioning.
negativeCONDITIONINGNegative conditioning from SeedVR2 Text Conditioning.
shiftoptFLOAT1.000–100Rectified-flow timestep shift. 1.0 matches the original one-step recipe.
latent_noise_scaleoptFLOAT0.0000–1Latent-space noise augmentation of the SR condition before sampling (0.0 = disabled).
attention_backendoptCOMBOnoneOverrides the DiT attention backend for this model only. 'none' keeps ComfyUI's current default attention selection.

Outputs (4)

NameTypeDescription
modelMODELPatched MODEL, ready for KSampler.
positiveCONDITIONING
negativeCONDITIONING
latentLATENTStarting latent for KSampler's latent_image input (use denoise=1.0).