Security Camera
A CCTV security camera at real size (a 22 cm bullet): a bullet housing with a sun hood, a dome or a pan-tilt-zoom ball, on a wall plate with an angled arm, or on a 2.4 m pole with a base plate. The camera head pans in a slow sweep (rigged part head, rotate y; userData.tick + Loop clip, one sweep per loop) and its red status light and infrared ring glow at night. Front (the lens) faces +Z; the wall plate is at the back. No logos.
- Size
- 0.11 × 0.22 × 0.35 m
- Triangles
- 606
Tune it
4 knobs: Style, Mount, Colourway, Sweep (deg).
Specs
- Size
- 0.11 × 0.22 × 0.35 m width × height × depth
- Triangles
- 606 of 6,000
- Draw calls
- 1 one vertex-colour material
- Loop clip
- 1 m of travel per cycle
- Moving parts
- 1 head · rotate
- Knobs
- 4 3 presets
- Night lights
- 1 led
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/security-camera.mjs';
const securityCamera = createAsset();
scene.add(securityCamera); // rests on y = 0, front faces +Z
// 'head' pivots on its hinge: -50° to 50° around y
securityCamera.getObjectByName('head').rotation.y = THREE.MathUtils.degToRad(-50);import { useMemo } from 'react';
import { createAsset } from 'https://gaitkit.com/cdn/security-camera.mjs';
export function SecurityCamera() {
const model = useMemo(() => createAsset(), []);
return <primitive object={model} />;
}# Import security-camera.glb (download below). Moving parts are separate nodes, pivoted on their hinge.
$SecurityCamera/head.rotation_degrees.y = -50// Import security-camera.glb with glTFast (com.unity.cloud.gltfast).
transform.Find("head").localEulerAngles = new Vector3(/* y: */ -50, 0, 0);Use the gaitkit MCP server: get_variant({ "id": "security-camera", "want": "default look" })
then place the result.
# MCP endpoint
https://gaitkit.com/mcpKnobs
| Knob | Type | Values | Default | What it does |
|---|---|---|---|---|
style | choice | bullet dome ptz | bullet | bullet (long box housing with a sun hood on an angled arm), dome (smoked half-dome hanging from a pendant arm), ptz (pan-tilt-zoom: a ball with a lens window under a round housing). |
mount | choice | wall pole | wall | wall (a square wall plate at the back, rests on y = 0: lift it to about 2.5 m on a wall) or pole (stands on its own on a 2.4 m pole with a bolted base plate, for car parks and yards). |
colorway | choice | office black beige scifi | office | office (white-grey housing), black (black housing), beige (1990s retro beige CCTV), scifi (pale housing with a cyan ring round the lens). |
sweep | range | 0 to 90, step 5 | 50 | How far the head pans to each side during its slow sweep, in degrees (0 = fixed camera, 90 = turns to face each side). |
Presets: car park {"style":"ptz","mount":"pole","colorway":"black","sweep":80} · retro cctv {"style":"bullet","colorway":"beige","sweep":35} · sentry eye {"style":"dome","colorway":"scifi","sweep":70}
Files
| File | What |
|---|---|
| security-camera.glb Pro | GLB, default look · 75 KB |
| security-camera.mjs Pro | ES module, every knob live |
| security-camera.obj Pro | OBJ, static; colours in the .mtl |
| security-camera.mtl | OBJ colours; keep it next to the .obj |
| security-camera-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.