ComfyUI Node Runs on cloud

Three App

The render-settings node your whole scene funnels into

By WASasquatch·Created 3 years ago·Updated 4 days ago· 1,844
Three App
  • scene
  • camera
  • effects
  • app
antialiastrue
shadowstrue
orbit_controlstrue
auto_rotatefalse
auto_rotate_speed1.00
tone_mappingaces
exposure1.00
loop_seconds4.0
pixel_ratio_limit2.00
shadow_quality2048

In the WAS Three.js suite, Three App is the node everything reports to. Geometry goes into a mesh, meshes go into a group, the group and a light go into Three Scene, and then a scene and a camera need somewhere to be turned into an actual picture. That somewhere is here. Wire scene and camera in, pick your renderer settings, and the single app output feeds whichever sink you're using: Three Viewer to look at it live, Three Render to capture frames as an IMAGE batch, or Three Compile to write out a standalone web page.

Don't think of it as a big scary aggregator. It's really the camera-plus-renderer settings sheet - the same decisions you'd make in any 3D tool before hitting render. The ones beginners actually set:

  • tone_mapping - how brightness above 1.0 is squashed into a viewable range. aces is the filmic default and is right for almost everything. none shows raw values and clips them (occasionally what you want for a flat technical render). agx is gentler if aces feels heavy.
  • exposure - overall brightness going into that tone map. 1.0 is neutral, 2.0 is a stop up. This is your global brightness knob; reach for it before you start re-lighting.
  • loop_seconds - set the hidden clock of the whole animation. It's the length the viewer loops over, the axis Three Render's strip is drawn against, and the span every per timeline motion in Three Animate Transform is spread across. 4.0 is a steady turntable loop; 20.0 is a long move your render takes a few seconds out of.
  • shadows and shadow_quality - shadows on by default, and 2048 is a sane map size. A light and a mesh have to opt in too, so if your render has no shadows despite this being on, check them.
  • orbit_controls with auto_rotate - orbit lets you drag the viewer to spin around; auto_rotate turns the camera on its own (it pauses while you drag). Great for a self-demoing scene.

There's also the optional effects socket, which is where a post chain from Three Bloom, Three Depth Of Field or Three Antialias plugs in. Leave it unwired and the frame is drawn exactly as-is.

How it works under the hood

Nothing here is rendered on your server. Three App bundles the scene, camera and settings into a typed descriptor - a plain description of the app - and hands it to the browser, where the three.js bundled inside the pack draws it on a WebGL surface. That's the architectural trick of the whole Three suite, and it's why a 43-node 3D subsystem can ship in a pack that installs zero Python packages.

Installing it

This is WAS Node Suite v3. Install via ComfyUI Manager (search WAS Node Suite v3) or:

cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git

Restart, and you need ComfyUI 0.14.0+ / Python 3.10+. Nothing downloads - three.js is bundled. If the menu is absent, set features.threejs: true in <ComfyUI user dir>/was-node-suite/config.yaml.

If it looks wrong

The classic mistake is wiring a mesh into the scene socket - a mesh is a THREE_OBJECT, the socket wants a THREE_SCENE, and ComfyUI will refuse the wire. And remember the capture caveat that bites everyone: Three Render draws in an open ComfyUI browser tab, so a headless queue stops rather than hangs. And if your still looks jaggy, it's antialias or pixel_ratio_limit on this node, not your GPU.

CategoryWAS Suite/Three

Inputs (13)

NameTypeDefaultDescription
sceneTHREE_SCENEWhat to draw, from Three Scene.
cameraTHREE_CAMERAWhere to draw it from, from either of the Three camera nodes.
antialiasBOOLEANtrue`true` smooths the edges of shapes; `false` is faster and leaves visible stair-stepping.
shadowsBOOLEANtrue`true` draws shadows, `false` skips them. A light and a mesh must each opt in as well.
orbit_controlsBOOLEANtrue`true` lets the viewer be dragged to orbit, wheeled to zoom and middle-dragged to pan; `false` pins the camera.
auto_rotateBOOLEANfalse`true` turns the camera around the target on its own, pausing while it is dragged; `false` holds still.
auto_rotate_speedFLOAT1.00-100–100How fast auto rotate turns. 1.0 is a slow drift, negative turns the other way.
tone_mappingCOMBOacesHow brightness above 1.0 is brought into range. 'aces' is filmic, 'none' clips, 'agx' is gentler.
exposureFLOAT1.000–100Overall brightness into the tone map. 1.0 is neutral, 2.0 one stop up.
loop_secondsFLOAT4.00.1–3600How long the whole animation lasts, in seconds. 4.0 is a steady turntable, 20.0 a long move a render takes a few seconds out of. It is the length the viewer loops over, the axis the strip on Three Render is drawn against, and the span every `per timeline` motion is spread across.
pixel_ratio_limitFLOAT2.000.25–8Ceiling on how many device pixels back one CSS pixel. 2.0 is sharp, 1.0 is faster on a large viewer.
shadow_qualityCOMBO2048Pixels a side of the map every shadow is drawn into. 512 is blocky, 2048 suits most scenes, 8192 costs memory and is for a close crop.
effectsoptTHREE_EFFECTThe chain of passes the frame is put through, from Three Bloom, Three Depth Of Field or Three Antialias. Left unwired the frame is shown as it was drawn.

Outputs (1)

NameTypeDescription
appTHREE_APPThe scene, camera and renderer settings, for Three Viewer.