Panorama
Upload an HDRI or generate a whole surround from a prompt
- image
- panorama
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:
- 📤 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. - Image-to-panorama - wire a regular photo into the
imageinput; the source becomes the front view and the model extrapolates the full 360° around it. - 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, defaultQwen-Image 2512 + 360 LoRA(alsoQwen-Image-Edit 2511 Image-to-Panoramafor 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.safetensors→diffusion_models/Qwen-Image-2512-Lightning-4steps-V1.0-fp32.safetensors→loras/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.safetensors→text_encoders/qwen_image_vae.safetensors→vae/
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.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| workflow | COMBO | Qwen-Image 2512 + 360 LoRA | Which panorama generation workflow to invoke on Run. Leave at the default if you only want to upload an HDRI manually. |
| main_prompt | STRING | Scene description for the equirectangular panorama. The workflow auto-prepends 'equirectangular 360 degree panorama, ' so just describe content. | |
| manual_source | STRING | User-uploaded panorama path (annotated /view? URL string). When non-empty, overrides everything else. | |
| custom_params | STRING | {} | Internal — JSON of user-defined parameter attachments/values for this node. |
| imageopt | COMFYTV_IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| panorama | COMFYTV_PANORAMA | — |