Nodes/ComfyUI_HYWorld2/WorldStereo Generate
ComfyUI Node

WorldStereo Generate

Camera-guided video generation with WorldStereo

By AHEKOT·Created 4 months ago·Updated about a month ago· 74
WorldStereo Generate
  • model
  • image
  • trajectory
  • base_camera_poses
  • base_camera_intrinsics
  • video_frames
  • camera_poses
  • camera_intrinsics
prompt
num_inference_steps0
guidance_scale5.0
seed-1
negative_prompt
cache_conditioningtrue
latent_condition_modeauto
render_vae_modeauto
conditioning_frame_modeauto
vae_memory_modeauto
crop_generated_edgesfalse
worldmirror_sequence_modestereo_only
generated_upscale_modebicubic
seedvr2_seed42
seedvr2_resolution0
seedvr2_max_resolution0
video_view_filterall_views
edge_crop_percent8.0

Take one image, hand the camera a path, and this node generates the frames that path would have seen - including the bits of the scene that were hidden behind the sofa, which it hallucinates. That's the whole job. You get a video out, plus camera poses and intrinsics that line up with every frame. Wire those back into VNCCS_WorldMirrorV2_3D and the WorldMirror splat gets the occluded geometry filled in, turning a flat photo into something you can orbit. Or just keep the video.

How it works

It's a three-part pipeline, and it's worth knowing because it explains the VRAM story:

  1. MoGe - Microsoft's monocular geometry model - estimates a point map from your source image (the same model the moge.json panel covers; it's auto-downloaded on first load).
  2. The source view is rendered into the target camera poses from your trajectory, so each new frame starts from real geometry.
  3. WorldStereo - a Wan 2.1 14B image-to-video diffusers pipeline - inpaints/generates the occluded and unseen regions in every slice. A prompt guides what it invents there.

The generate node loops over your input batch (each panorama slice), caching the T5 prompt embeds, CLIP image embeds, and VAE latents across slices so you're not re-encoding the same conditioning for every view.

The inputs that matter

  • model - from VNCCS_LoadWorldStereoModel or, almost always, VNCCS_LoadWorldStereoLightModel. The full base model is around 100GB and the author says outright it wants an unreasonable amount of VRAM. His int4 Light models (from MIUProject/VNCCS_WorldStereoLight) are roughly 8GB and are the sensible default for most people.
  • image - your source. A single photo, or a batch of views (e.g. slices from VNCCS_Equirect360ToViews).
  • trajectory - a CAMERA_TRAJECTORY from VNCCS_CameraTrajectoryBuilder. Presets like circular, stereo_orbit, forward, zoom_in, left_right, aerial - the builder also lets you paste your own 4×4 c2w matrices as JSON if you want a specific path.
  • prompt - text guiding the inpainting of occluded parts. Empty works, but describing "what's behind the camera" helps the hallucination.
  • num_inference_steps - 0 = auto (4 steps with a turbo LoRA or the DMD model, 20 otherwise).
  • guidance_scale - default 5, but forced to 1.0 automatically when a turbo LoRA is loaded.
  • seed - -1 for random.

The VRAM-minded ones: cache_conditioning (on by default), latent_condition_mode / render_vae_mode / conditioning_frame_mode (all auto, which switch to first-frame/keyframes at high resolution), and vae_memory_mode (diffusers VAE tiling/slicing).

Outputs

Three: video_frames (IMAGE - preview it, save it, or feed it to WorldMirror V2), camera_poses and camera_intrinsics (TENSOR - these are what you connect to VNCCS_WorldMirrorV2_3D's camera inputs so the reconstruction uses the exact cameras that generated the frames).

Install

The pack's normal install applies - Manager search "HY-World 2.0", or:

cd ComfyUI/custom_nodes
git clone https://github.com/AHEKOT/ComfyUI_HYWorld2
cd ComfyUI_HYWorld2
pip install -r requirements.txt
python install.py

On top of the vendored gsplat fork build (the usual CUDA-toolkit + ninja + MSVC requirement), WorldStereo needs PyTorch3D (installed by install.py), MoGe (pulled from the Microsoft repo by requirements), and the model itself. The Light node downloads the int4 transformer, the UMT5 encoder, and the Wan VAE automatically.

Gotchas

  • Use the Light model unless you have a GPU farm. The author built the int4 variants because the base WorldStereo is 100GB. Start there.
  • Turbo LoRA changes the rules. Load one and guidance_scale is forced to 1.0 and steps drop to 4 - that's not a bug, it's how Wan turbo LoRAs behave.
  • Some presets auto-crop. stereo_orbit and forward_orbit turn on edge cropping automatically (the generated borders get cropped so the intrinsics stay honest). You'll see crop_generated_edges flip.
  • Set expectations on the reconstruction path. The author is candid that the generated frames tend to make the final WorldMirror reconstruction worse rather than better unless you're generating at ~1024×1024 - which is hard on modest VRAM. It's genuinely still experimental, which is exactly why it's a separate node.
  • Swapped inputs are auto-detected. If you cross base_camera_poses and base_camera_intrinsics, it warns and swaps them back - but it's still worth wiring them in the right order the first time.
CategoryVNCCS/Video

Inputs (23)

NameTypeDefaultDescription
modelWORLDSTEREO_MODEL
imageIMAGE
trajectoryCAMERA_TRAJECTORY
promptoptSTRINGText prompt to guide the inpainting/generation of occluded parts.
num_inference_stepsoptINT00–1000 = auto (4 for turbo LoRA or memory-dmd, 20 for others).
guidance_scaleoptFLOAT5.01–20Forced to 1.0 automatically when a turbo LoRA is loaded.
seedoptINT-1-1–2147483647-1 = random.
negative_promptoptSTRING
cache_conditioningoptBOOLEANtrueCache T5 prompt embeds, CLIP image embeds, and VAE latent conditioning across slices.
latent_condition_modeoptCOMBOautoauto uses first_frame_only at high resolutions to reduce VAE encode VRAM.
render_vae_modeoptCOMBOautoauto encodes keyframe render conditioning at high resolutions to reduce VAE encode VRAM.
conditioning_frame_modeoptCOMBOautoauto renders only keyframe conditioning when render_vae_mode uses keyframes.
vae_memory_modeoptCOMBOautoEnable diffusers VAE tiling/slicing when available to reduce high-resolution VAE VRAM.
crop_generated_edgesoptBOOLEANfalseCrop generated borders from every output frame and adjust intrinsics.
worldmirror_sequence_modeoptCOMBOstereo_onlyprepend_source_highres outputs the original high-res source view first, followed by generated frames resized to that source size.
generated_upscale_modeoptCOMBObicubicUpscaler used when prepend_source_highres needs generated video frames resized to the source image resolution.
seedvr2_seedoptINT420–4294967295SeedVR2 seed used only when generated_upscale_mode=seedvr2.
seedvr2_resolutionoptINT00–163840 = use the source image short edge for SeedVR2 resolution.
seedvr2_max_resolutionoptINT00–163840 = use the source image long edge as SeedVR2 max_resolution.
video_view_filteroptCOMBOall_viewszero_pitch_only runs WorldStereo video only for near-horizontal panorama views; other views pass through as high-res anchors.
edge_crop_percentoptFLOAT8.00–30Percent to crop from each side when crop_generated_edges is enabled.
base_camera_posesoptTENSOR
base_camera_intrinsicsoptTENSOR

Outputs (3)

NameTypeDescription
video_framesIMAGE
camera_posesTENSOR
camera_intrinsicsTENSOR