Nodes/Enviral Design Node Pack/MetaView 3D Conditioning
ComfyUI Node

MetaView 3D Conditioning

Point a camera at your image and re-render it from there

By EnviralDesign·Created 4 months ago·Updated 10 days ago· 1
MetaView 3D Conditioning
  • conditioning
  • da3_model
  • image
  • vae
  • conditioning
  • latent
yaw0.0
pitch0.0
radius0.00
auto_radiustrue
width0
height0

Here's the party trick: take one photo, tell the pipeline "now look at it from 30 degrees to the left," and get back the same scene from that new viewpoint - with plausible geometry instead of a flat smear. That's novel view synthesis, and MetaView 3D Conditioning (class MetaView3DConditioning) is the node that makes it happen inside ComfyUI. It's the heart of the MetaView pipeline in the Enviral Design Node Pack, and honestly it's the most interesting thing in an otherwise deliberately boring pack of glue nodes.

How it works

The idea comes straight from the Zero-1-to-3 lineage: a diffusion model can hallucinate a new view if you give it the source image, a target camera, and some geometry to anchor to. MetaView's twist is that the geometry is serious. This node runs Depth Anything 3 on your input image to extract a 3D feature volume and a depth map, computes the target camera from your yaw/pitch/radius, then bakes all of that into your Qwen-Image-Edit conditioning as a set of metaview_* keys (camera extrinsics, intrinsics, the 3D feature grid, depth) plus a correctly-sized empty latent for the sampler.

The rendering itself is done by a grafted Qwen-Image-Edit transformer (loaded by MetaViewModelLoader) that has a parallel attention branch attending the projected 3D features, positionally encoded with the camera. But you don't need to care about any of that to use it - you just need to get the wiring right.

The inputs that matter

  • conditioning - from TextEncodeQwenImageEdit with the fixed trigger prompt, 镜头视角转到指定位置 ("move the camera to the specified viewpoint"). This model was trained on that exact phrase; it doesn't re-encode arbitrary text.
  • da3_model - the bundle from MetaViewDA3Loader. Non-negotiable.
  • image - your source view.
  • yaw, pitch - target camera angles in degrees, −180 to 180. Negative yaw orbits one way, positive the other. Start with something like −30 / +15.
  • radius and auto_radius - orbit radius; with auto_radius on (default) it's derived from the depth at the centre pixel. Leave it on unless you have a reason not to.
  • vae - supply it here, not on the text-encode node. If you pass a VAE to TextEncodeQwenImageEdit, it attaches its own reference latent at the wrong resolution. Here, the node VAE-encodes the edit image at the generation resolution and attaches it as the source-camera tokens. This is the single most common wiring mistake.
  • width / height - 0 (default) means auto: aspect-preserving, area-matched to 960×528, multiple of 16.

Outputs and wiring

  • conditioning - the geometry-augmented positive conditioning. Goes to SamplerCustom's positive input.
  • latent - the empty latent at generation resolution. Feeds both SamplerCustom.latent_image and MetaViewSigmas.latent.

The full graph: LoadImage + CLIPLoader (type qwen_image) + VAELoader (Qwen-Image VAE) → TextEncodeQwenImageEdit (trigger prompt, image, no vae) → this node → MetaViewSigmas + KSamplerSelect(euler) + SamplerCustom (MetaViewModelLoader, 8 steps, CFG 1.0) → VAEDecodeSaveImage. Negative conditioning can be a second empty text encode - at CFG 1.0 ComfyUI skips the unconditional pass, so it's never actually evaluated.

Installing and models

Install the Enviral Design Node Pack (Manager → "Enviral Design Node Pack", or clone into ComfyUI/custom_nodes) and restart. Then the real work: this pipeline needs several model files. MetaViewModelLoader and MetaViewDA3Loader articles have the details, but the short version is the MetaView DiT (models/diffusion_models/metaview_dit_fp8scaled.safetensors), two Depth Anything 3 models under models/depthanything3/, a Qwen2.5-VL fp8 encoder (stock CLIPLoader, type qwen_image), and the Qwen-Image VAE. It's a chunky download; this is not a quick try-it-in-five-minutes node.

Troubleshooting

  • Empty DA3 dropdown - models aren't in models/depthanything3/ yet; drop them in and refresh. No crash, just empty.
  • Weird resolution or a mismatch error - make sure the latent feeding MetaViewSigmas is this node's latent output, not a fresh EmptyLatentImage. The sigma schedule and the latent must agree on grid size.
  • The image never actually moves - check the trigger prompt and confirm vae is on this node, not the text encoder.

Real talk: this is a specialist node for a niche pipeline, and the model downloads are heavy. But once it's set up, "give me this exact photo from another angle" is one of the most satisfying things you can do in a ComfyUI graph.

CategoryEnviralDesign/MetaView

Inputs (10)

NameTypeDefaultDescription
conditioningCONDITIONING
da3_modelDA3_MODEL
imageIMAGE
yawFLOAT0.0-180–180Target-camera yaw in degrees.
pitchFLOAT0.0-180–180Target-camera pitch in degrees.
radiusFLOAT0.000–1000Orbit radius. 0 or auto_radius => from centre depth.
auto_radiusBOOLEANtrueDerive radius from the centre-pixel depth.
vaeoptVAEEncodes the edit image into a reference latent.
widthoptINT00–40960 = auto from aspect rule.
heightoptINT00–40960 = auto from aspect rule.

Outputs (2)

NameTypeDescription
conditioningCONDITIONING
latentLATENT