kubakub sample model
Learn the 3D half of kubakub without a single 3D file
- file
- report
The 3D side of this pack is where projection mapping stops being compositing and starts being previz: where the stones of a facade get pushed out by a wave, where you find out that the projector misses 14% of what the audience sees, where you check whether a lamp actually lights the wall. All of that normally needs a model of your building. kubakub sample model hands you one - the same facade as kubakub sample facade, but as real geometry in metres.
What comes out
Two outputs. file is a STRING: the path of an .obj written into ComfyUI's temp folder, and it goes straight into the file input of kubakub scene render. report tells you the size, the objects, how many parts and how many faces.
The model is structured the way a facade model should be, and that's the point of it. Stones sit in courses. The arches have voussoirs. Windows are framed, with glass behind the wall plane. Pilasters, sill bands, cornices and a door are separate objects, roughly 640 loose parts in the default configuration, named by element - wall_F1, window_F2_C03, pilaster_04 - across four materials. So when kubakub scene pieces asks what can move, it has a real answer: stones, frames, cornice blocks, dormers, each one a piece. That's what makes the wave and beat examples work with no AI model involved.
The file has no camera. That's deliberate and it's not a limitation - kubakub scene render frames the model by itself when the file has none, and if you want a projector in a specific place you add kubakub projector and set the throw distance, height and lens shift in metres.
The inputs
floors (default 3, upper storeys above the ground floor) and bays (default 7, window columns) do the same job as on the 2D sample: shape the building.
width_m and height_m (defaults 24 × 16 m) are the real dimensions, in metres. This is the whole reason the 3D half is worth using - every distance downstream is real. Throw ratio, mm per matrix pixel on the stone, incidence angle at a sill, whether a lamp at 6 m up actually reaches, whether a neighbour's roofline blocks the projector. Get these two wrong and the report will tell you the model looks off while every other number stays internally consistent and therefore wrong.
relief_m (default 0.015) is how far single stones stand proud of the wall - rustication. Zero means a flat wall; 0.05 is a strongly rusticated stone facade. It's small, but it's the difference between a sheet of paper and a building when light hits it at an angle.
seed picks which stones stand out. Change it and the rustication pattern shuffles; everything else stays put.
Install, and the one thing you need beyond the pack
The node itself needs nothing - it's pure geometry generation and writes an OBJ. But you'll only ever use it to feed kubakub scene render, and that one needs Blender 4.x on the machine. Blender is found by itself in C:\Program Files\Blender Foundation, or you can point the pack at it with the blender_path input or blender = ... in kubakub.ini. It runs headless as a subprocess, so ComfyUI never imports it; you can have Blender installed purely for this.
# the pack, if you haven't got it yet
cd ComfyUI/custom_nodes && git clone https://github.com/kubakubkub/ComfyUI_KubaNodes
python -m pip install -r ComfyUI_KubaNodes/requirements.txt
Then open templates 07_3d_model_to_regions (a sample building rendered from a projector you place, regions straight from the model, real distances) and 08_moving_pieces (its stones pushed out by a band running across the facade). Neither needs a file of yours and neither runs a diffusion model.
Troubleshooting notes
Remember where the OBJ lives. It's in ComfyUI's temp folder, and if you clear temp the path in your saved workflow dangles - re-run the node and it's back, identical for the same settings. If you want to keep a copy, that's what kubakub save GLB is for.
This is also the node that makes the pack's "an empty file field is the sample" line tangible. Scene render with an empty file frames the sample by itself, so this node exists for the case where you want a different sample size, or want to hand the path to something else. If your workflow already has it wired in, fine - but don't be surprised when deleting it changes nothing.
One honest expectation to set: this is a clean, purpose-built structural model, not a scanned building. It's the right thing for learning the pipeline and for validating that your projector placement, distances and piece sizes make sense in metres. Your own .fbx or .blend from the architect is where it gets real - and it'll be messier, which is exactly why you learn the knobs here first.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| floors | INT | 31–10 | Upper floors (above the ground floor). |
| bays | INT | 72–20 | Window columns. |
| width_m | FLOAT | 24.04–200 | Width of the facade in metres. |
| height_m | FLOAT | 16.04–200 | Height of the facade in metres. |
| relief_m | FLOAT | 0.0150–0.5 | How far single stones stand out of the wall (rustication). |
| seed | INT | 00–2147483647 | Which stones stand out. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| file | STRING | The model as an .obj (in ComfyUI's temp folder) -> kubakub scene render, file. |
| report | STRING | Size, objects, parts and faces. |