Nodes/kubakub nodes/kubakub relief mass estimate
ComfyUI Node

kubakub relief mass estimate

Relief mass estimate

By kubakubkub·Created about a month ago·Updated 2 days ago· 10
kubakub relief mass estimate
  • field
  • report
  • total_kg
  • kg_per_m2
◄shell_thickness_mm15.0►
◄density_kg_m32100►
◄frame_kg_per_m218►
◄footprint_m22.00►
◄panel_count2►

Relief panels are heavy, and the discipline that gets you rejected from a public commission is usually not aesthetics - it's load per square metre of footprint. A call will cap it (the pack's own notes mention a 1000 kg/m² ceiling), and if your beautiful 2.4 m GFRC panel comes in over it, the conversation ends there.

This node estimates the weight. It's not a structural calculation and it doesn't pretend to be, but it gets you into the right order of magnitude before you've paid anyone to model it properly.

Why it isn't just area × thickness

The interesting part is the surface area. A flat 2.4 × 1.2 m panel has the obvious 2.88 m², but a cast shell has to follow the relief, so its true area is the height field's real surface - every ridge, sill and undercut counts. The node integrates that: it takes the gradient of the height field in both directions, adds the sqrt(1 + gx² + gy²) factor per pixel, and sums. A relief with 120 mm of depth across it has meaningfully more surface than its flat projection, and that difference is exactly what a rough estimate made on a napkin gets wrong.

Then it multiplies by shell_thickness_mm and density_kg_m3 for the shell, adds a per-square-metre frame allowance on the flat area for the backing steel, multiplies by how many panels the piece has, and finally divides by the footprint for the load figure.

Inputs

field - the relief to weigh, one panel's worth. Anything from the chain works; the shape is what matters, not the stage.

shell_thickness_mm (default 15) is the cast shell. If you're doing a solid cast rather than a shell, this is where you'd be honest about it - 15 mm is a shell, 100 mm is a slab, and the weight difference is not subtle.

density_kg_m3 (default 2100, glass-fibre-reinforced concrete). The obvious alternatives: 2400 for concrete, 2700 aluminium, 7850 steel. You can probably feel which of those to use.

frame_kg_per_m2 (default 18) is the backing frame per square metre of flat panel. Set it to 0 for shell only, and be aware that 0 is almost always optimistic for something that has to stand up.

footprint_m2 (default 2) is the ground area the whole piece stands on - not the panel area. This one is easy to get wrong and it's the denominator of the headline number, so a piece on a 2 m² plinth with four panels gets a very different ratio than the same four panels spread along a 20 m wall.

panel_count (default 2) is how many panels like this one.

Outputs

report is JSON with areas, shell and frame weight per panel and the totals, and a note that says what the node can't see: ballast for wind loading is not included. Read that again before you quote the figure to anyone. total_kg is every panel together, and kg_per_m2 is that total divided by the footprint - usually the number on the form.

Both numeric outputs are plain FLOATs, so you can wire total_kg into a text node or a compare and fail the graph loudly if a revision pushes you over budget. That's a genuinely nice use of this node: put the load in the workflow and let the workflow tell you when the design changed too much.

Installing

ComfyUI Manager → search kubakub nodes → install → restart. By hand:

cd ComfyUI/custom_nodes
git clone https://github.com/kubakubkub/ComfyUI_KubaNodes
python -m pip install -r ComfyUI_KubaNodes/requirements.txt

requirements.txt adds opencv-python-headless and nothing else; ComfyUI 0.37.0+ is required. The relief group is pure numpy geometry, so no Blender and no model files.

The honest caveats

This is an order-of-magnitude check, and the pack says so itself: it's not a calculation, wind ballast isn't in it, and the defaults are reasonable working values rather than anything quoted from a standard. Get it confirmed by the structural engineer doing the technical review.

The other thing to watch is that the shell area comes from the field you feed it, so junk in the depth map is junk in the weight. A depth model that produced a lumpy, high-frequency surface inflates the integrated area versus the clean geometry the shop will actually cast - which means the estimate is more likely to be pessimistic than optimistic. If you're near the cap, run it on the mould-prepped field, not the raw one.

Categorykubakub/3d/fabricate/relief

Inputs (6)

NameTypeDefaultDescription
fieldRELIEFFORGE_FIELDThe relief to weigh (one panel).
shell_thickness_mmFLOAT15.02–200Thickness of the cast shell, in mm. The shell follows the relief, so its true surface area is used.
density_kg_m3FLOAT2100100–8000Density of the shell material in kg/m3 (2100 = glass fibre reinforced concrete).
frame_kg_per_m2FLOAT180–200Weight of the backing frame per square metre of flat panel, in kg. 0 = shell only.
footprint_m2FLOAT2.000.05–100Ground area the whole piece stands on, in m2, for the load per square metre.
panel_countINT21–20How many panels like this one the piece has.

Outputs (3)

NameTypeDescription
reportSTRINGAreas, shell and frame weight per panel and the totals (json).
total_kgFLOATWeight of all panels together, in kg.
kg_per_m2FLOATTotal weight divided by the footprint, in kg per m2.