ComposeVec3
Bundle three floats into one VEC3 wire
- VEC3
ComposeVec3 packs three separate FLOAT values - x/y/z, R/G/B, whatever triple belongs together conceptually - into a single VEC3 output. Same motivation as its Vec2 sibling: three related numbers traveling as one wire is a tidier graph than three parallel FLOAT connections crossing the canvas, and it's the pack half of a pack/unpack pair with BreakoutVec3 on the other end.
How it works
Feed x, y, and z (all FLOAT, default 0) in, get a single VEC3 out containing all three, in that order.
The inputs and outputs that matter
- x, y, z - the three float values to bundle.
- Output - a single VEC3, feeding
BreakoutVec3later or any other ComfyMath node expecting VEC3.
Installing it
Search ComfyMath in ComfyUI Manager, or:
cd ComfyUI/custom_nodes && git clone https://github.com/evanspearman/ComfyMath
then restart ComfyUI. No pip dependencies beyond ComfyUI's own, no models to download.
Common issues
VEC3 is a ComfyMath-defined type, not a general ComfyUI or cross-pack standard, so composing one is mainly useful while you're staying inside ComfyMath's own vector tooling - building a value here to unpack later with BreakoutVec3, or feeding it into whatever other ComfyMath vector node expects VEC3. It isn't a drop-in way to bundle a color or 3D point for some unrelated pack's node; check that the destination actually speaks VEC3 before building one for it.
It's also worth being clear this node doesn't do any math - it's packaging only. If what you actually want is vector arithmetic (adding, scaling, or otherwise combining VEC3 values), that's not what ComposeVec3 does; this node and BreakoutVec3 are strictly the pack/unpack pair, with any actual computation still happening on the individual FLOAT values before or after.
This is a quiet corner of an already small pack - essentially no community discussion around the vector nodes specifically, and ComfyMath overall hasn't seen active development since roughly early 2024. There's very little complexity here (three floats into a tuple) for anything to break, and correspondingly little to troubleshoot beyond double-checking your own wiring if the values downstream aren't what you expected.
If you're only ever moving two values around, reach for ComposeVec2 instead - there's no benefit to the extra unused slot, and a VEC2 is a cleaner signal to your future self (or anyone reading the workflow) about what the pair actually represents. Save VEC3 for cases where you genuinely have three values that belong together conceptually, not as a default "just in case" container.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| x | FLOAT | 0.00 | — |
| y | FLOAT | 0.00 | — |
| z | FLOAT | 0.00 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| VEC3 | VEC3 | — |