kubakub scene walkthrough
A video of someone walking past your projection
- scene
- matrix
- background
- clay_color
- frames
- report
- fps
- shadow
A still previz tells you whether the content reads from one spot. This tells you what happens as someone walks past - the parallax, the moment the projection disappears behind a corner of the building, the way the pieces of a moving facade separate as you move off axis. kubakub scene walkthrough renders that as a video: a camera walks a path through the audience, the matrix is projected onto the model, and frame i of the walk shows matrix frame i, looping. So an animated matrix plays in sync with the walk for free.
Inputs
scene from kubakub scene render.
path is the fun one - one keyframe per line:
-15, 25, 1.7
0, 15, 1.7
15, 10, 1.7
x along the wall from the frame centre, distance from the wall, eye height, and optionally a look point (look x, look height). Keys are spread evenly across seconds and joined by a smooth spline. With no look point, the camera keeps its eye on the frame centre - which is the natural thing for someone walking past a show, and also the reason a walk with two keys looks like a dolly rather than a wander.
seconds (default 8) and fps (default 25) set the length. Here's the trap: fps is a whole-number INT you type on the node, and the decimal fps output of other nodes will not connect to it. The node's own fps output is the decimal one, and that is what you feed to Create Video. It's a small thing that costs people a confusing ten minutes.
lens_mm (24 default, 36 mm sensor), width/height (960×540 by default - walkthroughs are cheap enough to do small), ambient, gain and physical behave exactly as on kubakub scene preview: ambient is how much the unlit building shows, physical turns on real projector falloff with distance and angle. Keep physical at 1 for previz you intend to trust.
Optional matrix (a still, or frames), background (behind the building, looping to cover the view), and the clay_color / shader pair - clay, wireframe, or clay with the edges on it. Same deal as scene preview: those lines come from passes the view already has, so changing the shader re-renders nothing.
Outputs
frames - the walk, ready for Create Video / Save Video. fps - the decimal version of your frame rate for the video node. shadow - per frame, 1 where the audience sees the building but the projector doesn't reach it. report - frame count, time, how many views came from the cache, and the projection shadow share as a percentage.
That shadow number is the one to read. A walk that's beautiful at the centre of the facade often spends a third of its length looking at a wall the projector can't reach, and you only find out by watching the mask.
Caching is the reason this node is usable at all: camera views are kept on disk, so changing the matrix - the thing you'll iterate on most - re-renders nothing, and a changed path renders only the views that are new. Blender works in chunks of 25 camera positions per session, then the chunk is deleted from temp. On the pack's test facade at 960×540, that's about 0.64 s per frame - a 150-frame walk in roughly 96 seconds.
Install
cd ComfyUI/custom_nodes && git clone https://github.com/kubakubkub/ComfyUI_KubaNodes
python -m pip install -r ComfyUI_KubaNodes/requirements.txt
Blender 4.x required (headless subprocess, found automatically or via blender_path / kubakub.ini). Video output needs ffmpeg - you get it through imageio-ffmpeg or on PATH - and that's only for the export side, not for rendering the frames.
Traps
The one that catches almost everybody comes from the loader side. If you feed matrix from kubakub load images from dir (or any loader with list outputs), ComfyUI will run the whole walkthrough once per image, because a list output means "run the downstream graph once per item". Put core Rebatch Images between the loader and this node and you get one walk with all frames, as intended.
Second: the walkthrough has no viewer input, unlike scene preview and scene relight. That's deliberate - a walk has many spots, so a single audience viewpoint is meaningless here. Place the path in metres and stop looking for the socket.
Third, an expectation to set: this renders the model in the same flat clay as scene preview. If you want the walk through a lit street with lamps and emissive windows, that's kubakub scene relight with camera = audience - one frame at a time, not a walk. Use the walkthrough to check composition and coverage, and relight for hero shots.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| scene | KUBA_SCENE | From kubakub scene render. | |
| path | STRING | -15, 25, 1.7 0, 15, 1.7 15, 10, 1.7 | The walk. Draw it on the plan below: click = the next point, drag = move it, wheel over it = eye height, double click = remove. The camera goes through the points in their order, on a smooth curve, at an even pace. The text is the same thing in numbers, one point per line: metres along the wall from its middle, metres away from the wall, eye height[, look x, look height]. No look = at the middle of the wall. |
| seconds | FLOAT | 8.00.1–600 | Length of the walk in seconds (frames = seconds x fps). |
| fps | INT | 251–120 | Frames per second of the video. A whole number typed here: the decimal fps output of other nodes does not connect to it. The 'fps' output of this node passes it on (-> Create Video). |
| lens_mm | FLOAT | 246–300 | Walking camera lens (36 mm sensor); 20 = wide, 35 = natural. |
| width | INT | 96064–8192 | Video width in pixels. |
| height | INT | 54064–8192 | Video height in pixels. |
| ambient | FLOAT | 0.150–1 | Brightness of the unlit building (clay) around the projection. |
| gain | FLOAT | 1.000–4 | Brightness of the projected image; 1 = as it is, 2 = twice as bright. |
| physical | FLOAT | 1.000–1 | 1 = surfaces hit at a steep angle or far away get darker, as with a real projector; 0 = flat. |
| matrixopt | IMAGE | Matrix image or frames. Nothing connected: the walk past the clay model, without a picture. | |
| backgroundopt | IMAGE | Behind the building: a still or frames (looping), scaled to cover the view. Default black. | |
| clay_coloropt | COLOR | #f2f2f2 | Colour of the clay: the building and its surroundings where no picture lands. Almost white by default; pick the stone's colour for a closer look. |
| shaderopt | COMBO | clay | How the model is drawn where no picture lands: clay, wireframe (its edges as lines in the clay colour, not dimmed by ambient) or clay with the edges on it. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | The walk as video frames (-> Create Video / Save Video). |
| report | STRING | Frame count, time, views rendered new or from the cache, and the projection shadow share. |
| fps | FLOAT | The frames per second of this walk (-> Create Video, fps). |
| shadow | MASK | Per frame: 1 where the audience sees the building but the projector does not reach it (as on kubakub scene preview). |