Nodes/Pixar's OpenUSD/Create USD Light
ComfyUI Node

Create USD Light

Light the scene so your USD stage isn't pitch black

By cjhosken·Created 3 months ago·Updated 2 months ago· 9
Create USD Light
  • USD
  • color
  • USD
prim_path/Root/Lights/DomeLight
light_typeDomeLight
intensity1.00
intensity_modecreate/set
exposure0.00
exposure_modecreate/set
color_modecreate/set
texture_path
texture_modeignore

A mesh with no lights renders as a flat silhouette, or nothing at all. Create USD Light is how you add real UsdLux lights to your stage - the same light prims that renderers, USD viewers, and DCCs actually respect - so the scene you save is a scene you can see. If you've generated a mesh, given it a material, and then stared at a dark void in the viewer, this is the node you were missing.

It creates four standard light types from USD's own library: DomeLight (the default - an ambient sky-style light, your "it should never be fully dark" workhorse), DistantLight (like the sun - parallel rays from a direction), SphereLight, and RectLight (area lights for soft, shape-defined illumination). Each gets created at your prim_path if it doesn't exist, or edited in place if it does.

The inputs that matter

  • USD and prim_path (default /Root/Lights/DomeLight).
  • light_type - Dome/Distant/Sphere/Rect, default Dome.
  • intensity (default 1.0) and exposure (default 0.0) - the two brightness knobs. Exposure is an extra f-stop-style multiplier on top of intensity; for a first pass, intensity 1–2 usually does it.
  • color - hex color, default white. Lights in USD take a color attribute (not "light color," just color), so this is where you tint the light.
  • texture_path - only meaningful for a DomeLight: point it at an HDR/EXR environment texture and the dome becomes image-based lighting instead of a flat color.

Each of intensity, exposure, color, and texture has its own mode dropdown - create/set, block, ignore - the same trio as Create USD Camera. Default is create/set for everything except texture, which defaults to ignore (so the dome starts as flat white and doesn't silently demand a texture file). block stamps a blocking opinion that erases a value inherited from a weaker layer; ignore leaves that attribute untouched.

Output is the USD stage with the light in it.

Install & gotchas

Pack install: ComfyUI Manager → search "ComfyUI-OpenUSD", or

cd ComfyUI/custom_nodes
git clone https://github.com/cjhosken/ComfyUI-OpenUSD

then restart. Deps: usd-core==26.5, numpy==2.5.0, trimesh.

Two things that bite people. First, the texture only applies to DomeLight - the code sets texture:file only for domes, so if you set a texture on a RectLight and it's ignored, that's expected behavior, not a bug. Second, remember the USD socket is this pack's private type; the light prim is real and will show up when the saved stage is opened anywhere, but in the graph it only flows through OpenUSD nodes.

Category3d/usd/scene

Inputs (11)

NameTypeDefaultDescription
USDUSD
prim_pathSTRING/Root/Lights/DomeLight
light_typeCOMBODomeLight4 options: DomeLight, DistantLight, SphereLight, RectLight
intensityFLOAT1.00
intensity_modeCOMBOcreate/set3 options: create/set, block, ignore
exposureFLOAT0.00
exposure_modeCOMBOcreate/set3 options: create/set, block, ignore
colorCOLOR#FFFFFF
color_modeCOMBOcreate/set3 options: create/set, block, ignore
texture_pathSTRING
texture_modeCOMBOignore3 options: create/set, block, ignore

Outputs (1)

NameTypeDescription
USDUSD