Nodes/radiance/◎ Radiance HDR 360 Generate
ComfyUI Node

◎ Radiance HDR 360 Generate

Turn a flat image into an HDRI you can light a scene with

By fxtdstudios·Created 7 months ago·Updated 9 days ago· 242
◎ Radiance HDR 360 Generate
  • source_image
  • panorama
  • projection_map
projection_typeEquirectangular
output_width4096
output_height2048
horizontal_fov360
vertical_fov180
rotation_x0
rotation_y0
rotation_z0
interpolationLanczos
fill_modeMirror
exposure_adjust0.0

3D artists have a specific, chronic need: an HDR environment map to light a scene, ideally with the exact mood of some image they already like. That's what HDR360Generate is for. Feed it a wide or panoramic image and it projects it into a full 360° equirectangular HDRI - the standard format Blender, Unreal, and Octane all accept as an environment texture - and hands you a float image you can save as EXR and drop into your renderer.

The realistic flow: generate a wide panoramic image in ComfyUI, run it through this node at 4096×2048, save the result as EXR, and light your 3D scene with it. The pack's whole point is that the output stays in float, so your environment map carries real highlight values instead of an 8-bit approximation.

How it works

The node does spherical remapping: it takes each output pixel, converts it to a point on the unit sphere (equirectangular θ/φ math - the source literally does u, v → theta, phi → x, y, z), applies any rotation you asked for via 3D rotation matrices (pitch/yaw/roll), then samples your source image at those UVs. Areas of the sphere that fall outside your source get filled per the fill_mode - Mirror (default, reflects), Repeat (tiles), Edge (stretches), or Black. Interpolation defaults to Lanczos for quality.

The inputs that matter

  • projection_type - Equirectangular (the standard, keep it), Cube_Map, Mirror_Ball, or Angular_Map. The others exist for specific workflows; 95% of the time you want Equirectangular.
  • output_width / output_height - default 4096×2048. For equirectangular, height should be half the width (2:1). 8192 if you want it crisp up close; 2048 for a quick preview.
  • horizontal_fov / vertical_fov - 360°/180° fills the whole sphere; drop them for a partial panorama band.
  • rotation_x/y/z - aim the map so the light source lands where you want it.
  • fill_mode and interpolation - quality controls for what happens beyond the source edges.
  • exposure_adjust - in stops, for matching the map's brightness to your scene's scale.

Outputs: panorama (the equirectangular image) and projection_map (a UV debug view showing how the source is being sampled - wire it to a preview the first time you use the node so you can see the distortion pattern you're fighting).

The honest caveats

This is a projection, not a reconstruction. A wide landscape in becomes a panorama out, but the poles (top/bottom of the sphere) stretch whatever's there, which is why a horizon-heavy source works best and a portrait of your cat becomes an abstract nightmare. And mirror/repeat fills are visible seams in a good renderer, so shoot for a source that's already near-panoramic. Also note the node preserves the dynamic range of the input - an HDR-float image in gives you an HDR map worth lighting with; an 8-bit PNG gives you a flat map that will make your render look flat.

Install

ComfyUI Manager → search Radiance, or:

cd ComfyUI/custom_nodes
git clone https://github.com/fxtdstudios/radiance.git
cd radiance
pip install -r requirements.txt

Restart. Under FXTD Studios/Radiance/Image.

CategoryFXTD Studios/Radiance/Image

Inputs (12)

NameTypeDefaultDescription
source_imageIMAGEInput image to project. For best results, use a wide or panoramic image.
projection_typeCOMBOEquirectangularProjection type: Equirectangular (standard HDRI), Cube_Map (6-face), Mirror_Ball (chrome ball), Angular_Map (light probe).
output_widthINT4096512–16384Output panorama width in pixels. Standard HDRI sizes: 2048 (preview), 4096 (standard), 8192 (high), 16384 (ultra).
output_heightINT2048256–8192Output panorama height. For equirectangular, height should be half of width (2:1 ratio).
horizontal_fovoptFLOAT36030–360Horizontal field of view in degrees. 360° = full sphere, less = partial panorama.
vertical_fovoptFLOAT18015–180Vertical field of view in degrees. 180° = pole to pole, less = band around horizon.
rotation_xoptFLOAT0-180–180Rotation around X axis (pitch) in degrees. Tilts the panorama up/down.
rotation_yoptFLOAT0-180–180Rotation around Y axis (yaw) in degrees. Rotates the panorama left/right.
rotation_zoptFLOAT0-180–180Rotation around Z axis (roll) in degrees. Tilts the horizon.
interpolationoptCOMBOLanczosSampling interpolation: Lanczos (highest quality), Bicubic (good), Bilinear (fast), Nearest (pixelated).
fill_modeoptCOMBOMirrorHow to fill areas outside source image: Mirror (reflects), Repeat (tiles), Black (transparent), Edge (extends edge pixels).
exposure_adjustoptFLOAT0.0-5–5Exposure adjustment in stops. +1 = double brightness, -1 = half brightness.

Outputs (2)

NameTypeDescription
panoramaIMAGEGenerated 360° panorama.
projection_mapIMAGEUV projection map for debugging.