Gaitkit Open the lab
Octopus, A reef octopus about 1 m across the arms, with a bulbous mantle, slit-pupil eyes and eight suckered arms. Swims by distance: the arms draw together in a jet pulse and spread again while waves curl down each arm and the mantle swells; it drifts 0.6 m above the sea floor.
Creature · Swims

Octopus

A reef octopus about 1 m across the arms, with a bulbous mantle, slit-pupil eyes and eight suckered arms. Swims by distance: the arms draw together in a jet pulse and spread again while waves curl down each arm and the mantle swells; it drifts 0.6 m above the sea floor.

Size
0.99 × 0.73 × 0.95 m
Triangles
2,168
Open in the lab Loop clip inside. The download carries the knobs you set here.

Tune it

4 knobs: Kind, Arm curl, Mottling, Size.

Specs

Size
0.99 × 0.73 × 0.95 m
width × height × depth
Triangles
2,168
of 6,000
Draw calls
1
one vertex-colour material
Loop clip
0.9 m
of travel per cycle
Altitude
0.6 m
below the surface
Moving parts
42
body · slide, mantle · rotate, arm_0 · rotate, arm_0_1 · rotate, arm_0_2 · rotate, arm_0_3 · rotate, arm_0_4 · rotate, arm_1 · rotate, arm_1_1 · rotate, arm_1_2 · rotate, arm_1_3 · rotate, arm_1_4 · rotate, arm_2 · rotate, arm_2_1 · rotate, arm_2_2 · rotate, arm_2_3 · rotate, arm_2_4 · rotate, arm_3 · rotate, arm_3_1 · rotate, arm_3_2 · rotate, arm_3_3 · rotate, arm_3_4 · rotate, arm_4 · rotate, arm_4_1 · rotate, arm_4_2 · rotate, arm_4_3 · rotate, arm_4_4 · rotate, arm_5 · rotate, arm_5_1 · rotate, arm_5_2 · rotate, arm_5_3 · rotate, arm_5_4 · rotate, arm_6 · rotate, arm_6_1 · rotate, arm_6_2 · rotate, arm_6_3 · rotate, arm_6_4 · rotate, arm_7 · rotate, arm_7_1 · rotate, arm_7_2 · rotate, arm_7_3 · rotate, arm_7_4 · rotate
Knobs
4
3 presets
Night lights
1
ring

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.

JavaScript
import { createAsset } from 'https://gaitkit.com/cdn/octopus.mjs';

const octopus = createAsset();
scene.add(octopus);                      // rests on y = 0, front faces +Z

let dist = 0;
renderer.setAnimationLoop(() => {
  dist += speed * clock.getDelta();
  octopus.position.set(0, groundY + octopus.userData.altitude, dist);
  octopus.userData.tick(dist);            // the body waves with the distance
  renderer.render(scene, camera);
});

More in the docs; agents can fetch all of this through MCP.

Knobs

KnobTypeValuesDefaultWhat it does
kindchoicecommon pacific blueringed mimic ghostcommonSpecies: common (red-brown, mottled), pacific (big bright red-orange giant), blueringed (small sandy-yellow with electric blue rings that glow at night), mimic (white with dark brown bands on long arms), ghost (pale pink deep-sea octopus).
curlrange0 to 1.5, step 0.050.8How tightly the arm tips curl up and inward. 0 is straight trailing arms; 1.5 is tight spirals.
seedrange1 to 30, step 13Seed for the skin blotches and each arm's own rhythm; every number is a different octopus.
sizerange0.2 to 6, step 0.11Uniform scale. 1 is 1 m across the arms; 0.2 is a tiny 20 cm octopus; 3 is a giant; 6 is a ship-grabbing kraken.

Presets: blue-ringed {"kind":"blueringed","size":0.25} · giant pacific {"kind":"pacific","size":3,"curl":1.1} · kraken {"kind":"pacific","size":6,"curl":1.4,"seed":17}

Files

FileWhat
octopus.glbGLB, default look · 374 KB
octopus.mjsES module, every knob live
octopus.objOBJ, static, no colour
octopus-params.jsonknob 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.