Nodes/ComfyTV/Panorama
ComfyUI Node

Panorama

Upload an HDRI or generate a whole surround from a prompt

By jtydhr88·Created 3 months ago·Updated about 15 hours ago· 725
Panorama
  • image
  • panorama
force_run_token0
project_id
parent_output_id0
workflowQwen-Image 2512 + 360 LoRA
main_prompt
manual_source
custom_params{}

Panorama is ComfyTV's 360° environment entry point. Its output isn't a flat photo - it's an equirectangular panorama, the "world map" where the horizontal axis wraps 360° and the vertical runs from sky to ground. The node opens a 3D viewer, you sit at the center of the sphere, and you drag to look anywhere. From there, the Current View and Multi-View stages turn that sphere into flat images.

There are three ways to get a panorama in, and priority matters:

  1. 📤 Upload - .jpg / .png / .webp / .hdr / .exr. The viewer loads instantly with a "manual" badge. Upload overrides everything else, so clear it before you try to generate.
  2. Image-to-panorama - wire a regular photo into the image input; the source becomes the front view and the model extrapolates the full 360° around it.
  3. Text-to-panorama - describe the scene and the model generates a complete equirectangular from the prompt alone. Great for building environments from scratch.

The inputs that matter

  • workflow - the generation backend, default Qwen-Image 2512 + 360 LoRA (also Qwen-Image-Edit 2511 Image-to-Panorama for the photo path). Leave it default if you only want to upload an HDRI manually.
  • main_prompt - the scene description. The workflow auto-prepends "equirectangular 360 degree panorama, ", so just describe content - "a misty pine forest clearing at dawn" - and don't fight the prefix.
  • manual_source - the uploaded path; when non-empty it wins over everything.
  • image (optional) - the reference photo for image-to-panorama.
  • custom_params - internal JSON, ignore.

One output: panorama (COMFYTV_PANORAMA). The node shows only the 3D viewer, no flat thumbnail - you inspect it by orbiting, then capture views with the downstream stages.

The model files for text-to-panorama

If you're generating rather than uploading, the workflow needs a real stack in ComfyUI/models/ (exact paths in docs/models.md):

  • qwen_image_2512_fp8_e4m3fn.safetensorsdiffusion_models/
  • Qwen-Image-2512-Lightning-4steps-V1.0-fp32.safetensorsloras/
  • qwen-360-diffusion-2512-int8-bf16-v2.safetensors (the 360 LoRA - download from ProGamerGov's repo on Hugging Face) → loras/
  • qwen_2.5_vl_7b_fp8_scaled.safetensorstext_encoders/
  • qwen_image_vae.safetensorsvae/

Missing LoRAs are the usual culprit when the 360 path renders flat or distorted - the model genuinely needs that 360 LoRA to understand the equirectangular format.

Install

Pack-wide one-liner:

cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV

Restart ComfyUI - Desktop/macOS users: clone into the running instance by absolute path, verify __init__.py at the top level, and restart the backend fully. ComfyUI Manager finds it as "ComfyTV". Zero extra Python dependencies.

And the one reminder nobody reads until they hit it: upload beats generation. If you've uploaded an HDRI and then run a prompt, you get the upload, and you'll swear the generator is broken. Click ✕ Clear upload, then run.

CategoryComfyTV/Panorama

Inputs (8)

NameTypeDefaultDescription
force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
project_idSTRINGInternal — populated by the projectStore on the frontend.
parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
workflowCOMBOQwen-Image 2512 + 360 LoRAWhich panorama generation workflow to invoke on Run. Leave at the default if you only want to upload an HDRI manually.
main_promptSTRINGScene description for the equirectangular panorama. The workflow auto-prepends 'equirectangular 360 degree panorama, ' so just describe content.
manual_sourceSTRINGUser-uploaded panorama path (annotated /view? URL string). When non-empty, overrides everything else.
custom_paramsSTRING{}Internal — JSON of user-defined parameter attachments/values for this node.
imageoptCOMFYTV_IMAGE

Outputs (1)

NameTypeDescription
panoramaCOMFYTV_PANORAMA