Three Transform Object
Put the same mesh in three places at once
- object
- object
The boring node that un-bores everything around it. In WAS Node Suite's Three.js group, nothing gets drawn just by existing - you build geometry, wrap it in a material and a mesh, and then you still have to say where it goes. Three Transform Object is where you say it: position, rotation and scale in nine floats. It's the most-used node in the group for a simple reason - every scene needs a floor, and floors don't place themselves.
Why it's shaped like this
This is one of the 43 "Three" nodes in the pack's fresh 2026 v3 rewrite (WAS Node Suite, 457 nodes total - the author's been at this since 2023). The whole Three system works by passing descriptors along wires, not live meshes, and Transform Object is the position-and-orientation layer of that graph. Build one nice mesh, then fan out copies of it to build a room, scatter props, or lay a ground plane.
How it works
The object you wire in is not altered. Look at the source and it's literally wrapping your object in a Three.js Group - a parent that carries the position, rotation and scale while your mesh stays untouched underneath. That's why one mesh can sit in several spots at once, from as many transform nodes, with no duplication and no risk of ruining the original. Rotation is in degrees (converted to radians internally), applied X, then Y, then Z. And despite the word "object" in the name, the result is still just a descriptor - it doesn't appear anywhere until something collects it into the scene.
The inputs that matter
object- whatever you placed, usually a mesh or a smaller group. It comes out the other side wrapped, not changed.position_y- the one you'll set first.0.5lifts a unit cube so it sits on the ground; negative sinks it.position_xandposition_zslide it around (positive Z moves toward the camera).rotation_x- turn a plane by-90on X and an upright card lays flat as a floor. That tooltip is a tiny hidden tutorial.scale_y- flatten a column to a low wall (0.5halves its height) or stretch it skyward. Negative values mirror the object rather than just shrinking it.name- a label that travels into the scene graph. If you're doing custom updates or scripts that look objects up by name (think "pedestal" or "handle"), this is how they find it.visible-falsehides the object and everything under it, which beats deleting a wire when you want to stage something before you show it.
The output, object, is your placed object, destined for a Three Group or straight into the root socket on Three Scene.
Installation
Standard WAS Node Suite install - you get all 457 nodes at once. ComfyUI Manager, search WAS Node Suite, install, restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
Restart after. Requires ComfyUI 0.14.0+ and Python 3.10+. The Three group needs no downloads: three.js is bundled in the repo and the browser pulls it from your local server when a scene runs.
Where people get burned
- Degrees, not radians. If you're used to scripting Three.js or Blender's math, a
1.57here will look like nothing happened. Type90, not1.57. - Order matters. Rotation applies X then Y then Z. Stack two big rotations and the result is order-dependent in the way Euler angles always are - if it looks wrong, that's not a bug in the node.
- Transforms nest. Each transform wraps the previous output in another group. Chain three and you have a parent-child-grandchild hierarchy, which is fine and occasionally exactly what you want - just know the scale of an outer transform multiplies everything inside it.
- Nothing in the render? A placed object that never gets wired into a Group/Scene is a placed object that exists in no scene. Check the wire all the way to the
rootsocket. - Whole group missing from the menu? The 43 Three nodes sit behind
features.threejsin<user dir>/was-node-suite/config.yaml. It ships on; an old config may have it off.
The scene graph needs a Group to collect meshes and a Scene to hold it all - then Three App and Three Viewer let you actually look at what you placed.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| object | THREE_OBJECT | The object to place. It is wrapped rather than changed. | |
| position_x | FLOAT | 0.00-100000–100000 | Move along X in scene units. 0.0 leaves it at the origin. |
| position_y | FLOAT | 0.00-100000–100000 | Move along Y in scene units. 0.5 lifts a unit cube to sit on the ground. |
| position_z | FLOAT | 0.00-100000–100000 | Move along Z in scene units. 0.0 leaves it put; positive moves toward the camera. |
| rotation_x | FLOAT | 0.0-36000–36000 | Turn around X in degrees. -90.0 lays an upright plane flat as a floor. |
| rotation_y | FLOAT | 0.0-36000–36000 | Turn around Y in degrees. 45.0 swings the object to face the corner. |
| rotation_z | FLOAT | 0.0-36000–36000 | Turn around Z in degrees. 180.0 stands the object on its head. |
| scale_x | FLOAT | 1.00-10000–10000 | Stretch along X. 1.0 leaves it, 2.0 doubles it, -1.0 mirrors it. |
| scale_y | FLOAT | 1.00-10000–10000 | Stretch along Y. 1.0 leaves it, 0.5 halves its height. |
| scale_z | FLOAT | 1.00-10000–10000 | Stretch along Z. 1.0 leaves it, 0.1 flattens it to a slab. |
| name | STRING | Transform | Label carried into the scene graph, such as 'pedestal'. Custom code finds it by name. |
| visible | BOOLEAN | true | `true` draws the object and anything under it; `false` hides all of it. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| object | THREE_OBJECT | The placed object, for Three Group or the root socket on Three Scene. |