Nodes/ComfyUI-ViewCrafter/Apply ViewCrafter
ComfyUI Node

Apply ViewCrafter

The Node That Moves the Camera

By logtd·Created 2 years ago·Updated 2 years ago· 15
Apply ViewCrafter
  • model
  • clip_vision
  • latents
  • image_proj_model
  • clip_image
  • model
stride10
scale_imagefalse

Apply ViewCrafter is where the actual novel-view magic happens. Load ViewCrafter hands you a bare diffusion model; this node injects your scene into it - the reference image, the input video's latents, the camera-motion hint - and hands you back a model that will happily render "the same scene, from over there." You don't sample from the loaded model directly. You sample from the model this node returns.

How it works

ViewCrafter is a video diffusion model with a trick: its UNet takes 8 channels instead of the usual 4 - 4 channels of noise plus 4 channels of the latents of your input video, concatenated in. That's why the model can keep your scene consistent while inventing new viewpoints. ApplyViewCrafter does three things:

  1. Encodes your clip_image through CLIP Vision's last hidden state and pushes it through the image-projection Resampler from the loader, producing per-token image embeddings that get injected via cross-attention. It also encodes a black image the same way for the unconditional path.
  2. Takes your latents (the VAE-encoded input frames), preprocesses them, and sets them up to be concatenated to the noise batch at sampling time.
  3. Passes your stride as the model's frame-stride embedding - the conditioning that tells the temporal blocks how far apart your input frames are.

It does all this by wrapping the model's forward pass, so nothing about your KSampler changes. You clone the model, wire it, sample.

The inputs that matter

  • model - from Load ViewCrafter. image_proj_model - also from Load ViewCrafter. Both wires are mandatory; forget the second and the node errors.
  • latents - your input frames run through VAEEncode (SD 1.5 VAE - the model lives in SD1.5 latent space). The pack's config expects 16 frames; check your checkpoint's supported count.
  • clip_vision - SD 2.x's CLIP Vision via CLIPVisionLoader. The model was trained with SD2's vision tower, so don't swap in a different one and expect good results.
  • clip_image - the reference image. Per the author's own notes, the model was trained using only the first (or last) frame of the video, so that's the safe choice - though you can feed the whole frame set if you want.
  • stride - frame stride, default 10. This is the one you'll tune. ViewCrafter's default is 10, but if your source video has fast or slow motion, adjusting it usually beats fighting the output. Set to 0 and the stride conditioning is disabled entirely.
  • scale_image - off by default. When on, it rescales your clip image to [-1, 1] before encoding. Leave it off unless your upstream image is coming in with an odd value range.

Output

One model (MODEL) socket → straight into a KSampler. The workflow's positive prompt is effectively fixed: "Rotating view of a scene." The author's note is blunt about it - the model was trained with that prompt, so deviating usually degrades output. The bundled example uses 20 steps and moderate CFG (the loader already baked in a RescaleCFG of 0.7 and v-prediction sampling, so normal vpred-friendly CFG values behave). The pack's example workflows wire in VHS_LoadVideoVHS_SelectImagesVAEEncode for latents, with the output going to VAEDecode and VHS_VideoCombine. One is labeled for ComfyUI-DUSt3R input, which is the author's path to camera-trajectory-driven angles rather than the generic orbit.

Installing and the honest gotchas

Installation is the same pack as Load ViewCrafter - search "ViewCrafter" in ComfyUI Manager, or git clone https://github.com/logtd/ComfyUI-ViewCrafter into custom_nodes/, restart, and drop a ViewCrafter checkpoint into ComfyUI/models/viewcrafter. No Python dependencies, no extra installs.

Two real complaints to know about before you're surprised:

  • First-frame color shift. The author notes the first frame of the output comes out slightly color-shifted from the rest - a bit more pronounced in this ComfyUI port than the original. If it bothers you, a color-matching node (e.g. one from KJNodes) fixes it.
  • Don't freewheel the prompt. With the fixed "Rotating view of a scene" conditioning, this is not a creative text-to-video node. Treat it as a camera rig, not a prompt box, and it'll behave.
Categoryviewcrafter

Inputs (7)

NameTypeDefaultDescription
modelMODEL
clip_visionCLIP_VISION
latentsLATENT
image_proj_modelIMAGE_PROJ_MODEL
clip_imageIMAGE
strideINT100–30
scale_imageBOOLEANfalse

Outputs (1)

NameTypeDescription
modelMODEL