Sink Unit
A kitchen sink base unit at counter height (90 cm, 60 cm deep; 60, 100 or 120 cm wide): a chamfered worktop with an inset steel or black composite sink and a ribbed drainer, or a white ceramic farmhouse sink with an apron front, a gooseneck mixer (a bridge tap with cross handles on the retro finish), a dish rack with plates, soap and a sponge, and cupboard doors that swing open (door_0, door_1, ...) onto the waste trap and cleaning bottles.
- Size
- 1.0 × 1.2 × 0.64 m
- Triangles
- 1,242
Tune it
5 knobs: Width, Basin, Finish, Handles, Open.
Specs
- Size
- 1.0 × 1.2 × 0.64 m width × height × depth
- Triangles
- 1,242 of 6,000
- Draw calls
- 1 one vertex-colour material
- Moving parts
- 2 door_0 · rotate, door_1 · rotate
- Knobs
- 5 3 presets
- Night lights
- 0 none
Passed the validator: real scale, rests on y = 0, front faces +Z, deterministic.
Use it
Code for the specimen as it is set up above; it follows your knobs.
import { createAsset } from 'https://gaitkit.com/cdn/sink-unit.mjs';
const sinkUnit = createAsset();
scene.add(sinkUnit); // rests on y = 0, front faces +Z
// 'door_0' pivots on its hinge: -100° to 0° around y
sinkUnit.getObjectByName('door_0').rotation.y = THREE.MathUtils.degToRad(-100);import { useMemo } from 'react';
import { createAsset } from 'https://gaitkit.com/cdn/sink-unit.mjs';
export function SinkUnit() {
const model = useMemo(() => createAsset(), []);
return <primitive object={model} />;
}# Import sink-unit.glb (download below). Moving parts are separate nodes, pivoted on their hinge.
$SinkUnit/door_0.rotation_degrees.y = -100// Import sink-unit.glb with glTFast (com.unity.cloud.gltfast).
transform.Find("door_0").localEulerAngles = new Vector3(/* y: */ -100, 0, 0);Use the gaitkit MCP server: get_variant({ "id": "sink-unit", "want": "default look" })
then place the result.
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
size | choice | single drainer double | drainer | single (60 cm, one bowl), drainer (100 cm, a bowl and a ribbed draining board with a dish rack) or double (120 cm, two bowls and a narrow drainer, four doors). |
basin | choice | steel composite ceramic | steel | steel (inset stainless bowls with a flange), composite (the same in matt black granite composite) or ceramic (a deep white farmhouse sink with an apron front over shorter doors). |
finish | choice | white stainless black retro | white | Cabinet finish and matching worktop: white (oak top), stainless (all steel, a catering look), black (grey stone top, black tap) or retro (pastel mint, cream laminate with a chrome edge, a bridge tap). |
handle | choice | bar edge lever | bar | bar (steel bar pulls), edge (slim pull lips along the top of the doors) or lever (chunky chrome retro pulls). |
open | range | 0 to 1, step 0.05 | 0 | How far the cupboard doors are open as built: 0 closed, 1 wide open (100 degrees). |
Presets: family kitchen {"size":"drainer","basin":"steel","finish":"white"} · farmhouse sink {"size":"double","basin":"ceramic","finish":"black","open":0.4} · retro diner {"size":"single","basin":"steel","finish":"retro","handle":"lever"}
Files
| File | What |
|---|---|
| sink-unit.glb Pro | GLB, default look · 181 KB |
| sink-unit.mjs Pro | ES module, every knob live |
| sink-unit.obj Pro | OBJ, static; colours in the .mtl |
| sink-unit.mtl | OBJ colours; keep it next to the .obj |
| sink-unit-params.json | knob schema, presets, night zones |
Licence
Use it in games, apps, renders and client work, commercially and without credit. Do not resell it as an asset or train a 3D generator on it. The full licence.