Nodes/HunyuanWorld 3D World Generation/HunyuanWorld Image to Panorama
ComfyUI Node

HunyuanWorld Image to Panorama

The HunyuanWorld Image to Panorama node

By krmahil·Created 6 months ago·Updated 6 months ago· 1
HunyuanWorld Image to Panorama
  • image
  • panorama
  • panorama_path
◄prompt►
◄negative_prompt►
◄seed42►
◄height960►
◄width1920►
◄fov80►
◄guidance_scale30.0►
◄num_inference_steps50►
◄blend_extend6►
◄fp8_quantizationfalse►
◄use_cachefalse►

You have one photo of a place - a friend's apartment, a location scout still, a render you like - and you want the rest of the universe around it. That's this node. HYWorldImage2Pano takes a single perspective image, figures out what's behind and to the sides, and hallucinates the missing 360° into a seam-free equirectangular panorama. It's the image-in variant of the pack's text-in panorama node, and it's the more impressive trick of the two: given a decent source, the results feel like someone handed you a 360° camera that was pointed at your scene.

How it works

The heavy lifting is a FLUX.1-Fill-dev inpainting pipeline (black-forest-labs/FLUX.1-Fill-dev, also gated, also ~23 GB) with HunyuanWorld's PanoDiT-Image LoRA fused in. The clever part is the geometry, which the node does for you: your source image is resized to match the fov you declare, projected into equirectangular space (that's the Perspective → GetEquirec step), and the empty region is turned into an inpaint mask. The model then fills everything the mask covers - and it has to match the source's perspective, lighting, and style, which is exactly why an inpainting-tuned FLUX is the base. It also quietly appends its own quality prompt ("high-quality, high-resolution, sharp, 8k") and a negative that bans people and mess, so you don't have to.

Inputs and outputs that matter

  • image - required. Any IMAGE tensor you can produce: Load Image, a render, a screenshot.
  • fov - default 80, range 30–180. This is the one to get right. It tells the node how wide your source photo is, and it drives the whole projection. A typical phone photo is roughly 65–75°; a game screenshot with a narrow lens might be 50. Say 120 when your lens is actually 70 and the model will warp the source before it even starts.
  • prompt - optional text guidance. Handy for steering what the model fills in ("dense forest continues," "city skyline"). Empty is fine.
  • height / width - panorama size, default 960×1920. Height tops out at 2048, width at 4096.
  • guidance_scale - default 30 again, the HunyuanWorld house style. Don't dial it to 7 because FLUX told you so.
  • blend_extend, fp8_quantization, use_cache - the seam blending and VRAM knobs, same as the text node.

Outputs: panorama (IMAGE) and panorama_path (STRING). Keep the string - HYWorldSceneGen wants a file path to feed the 3D stage.

Installing it

Same pack install as the rest: ComfyUI Manager → HunyuanWorld 3D World Generation, or

cd ComfyUI/custom_nodes
git clone https://github.com/krmahil/comfyui-hunyuan-world.git
pip install -r comfyui-hunyuan-world/requirements.txt

Then the pack prerequisites: HunyuanWorld-1.0 installed so hy3dworld imports, Real-ESRGAN, the ZIM segmentation models, and a HuggingFace login with the FLUX.1-Fill-dev license accepted. First run downloads the Fill model plus the ~478 MB PanoDiT-Image LoRA - budget 10–30 minutes.

Common issues

  • The source image looks warped - fov is wrong for your source. Measure or guess tighter before blaming the model.
  • Seam or lighting mismatch - nudge blend_extend up, and give the prompt a hint about the scene continuing.
  • Gated model errors - accept FLUX.1-Fill-dev on HuggingFace and log in; it's a different gated repo from FLUX.1-dev, so accepting one doesn't grant the other.
  • OOM - same story as the text node: FP8 (fp8_quantization) gets you to ~24 GB, adding use_cache (DeepCache) to ~20 GB. Without them you need ~40 GB.

Both FLUX pipelines (dev and Fill-dev) stay cached in memory after their first use - if you run this node and the text node in the same session, that's ~46 GB of models parked in VRAM. Throw a HYWorldUnloadModels at the end of the graph when you're done.

Category3d/hunyuan-world

Inputs (12)

NameTypeDefaultDescription
imageIMAGE—
promptoptSTRING—
negative_promptoptSTRING—
seedoptINT420–2147483647—
heightoptINT960256–2048—
widthoptINT1920512–4096—
fovoptINT8030–180—
guidance_scaleoptFLOAT30.01–50—
num_inference_stepsoptINT5010–100—
blend_extendoptINT60–20—
fp8_quantizationoptBOOLEANfalse—
use_cacheoptBOOLEANfalse—

Outputs (2)

NameTypeDescription
panoramaIMAGE—
panorama_pathSTRING—