Gaitkit Open the lab
Ghost, A floating sheet ghost about 1.3 m tall: a draped sheet with hollow eyes, little sleeve arms and a ragged hem, trailing a wispy tail. Flies low by distance: it bobs up and down, the hem flutters in a ripple round the edge and the tail waves behind it. The sheet glows softly at night.
Creature · Flies

Ghost

A floating sheet ghost about 1.3 m tall: a draped sheet with hollow eyes, little sleeve arms and a ragged hem, trailing a wispy tail. Flies low by distance: it bobs up and down, the hem flutters in a ripple round the edge and the tail waves behind it. The sheet glows softly at night.

Size
1.3 × 1.2 × 2.2 m
Triangles
1,288
Open in the lab Loop clip inside. The download carries the knobs you set here.

Tune it

5 knobs: Sheet, Face, Arms, Tail, Size.

Specs

Size
1.3 × 1.2 × 2.2 m
width × height × depth
Triangles
1,288
of 6,000
Draw calls
1
one vertex-colour material
Loop clip
1.8 m
of travel per cycle
Altitude
0.5 m
above the ground
Moving parts
17
body · slide, hem_0 · rotate, hem_1 · rotate, hem_2 · rotate, hem_3 · rotate, hem_4 · rotate, hem_5 · rotate, hem_6 · rotate, hem_7 · rotate, hem_8 · rotate, hem_9 · rotate, tail_0 · rotate, tail_1 · rotate, tail_2 · rotate, tail_3 · rotate, arm_L · rotate, arm_R · rotate
Knobs
5
3 presets
Night lights
1
glow

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/ghost.mjs';

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

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

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

Knobs

KnobTypeValuesDefaultWhat it does
sheetchoicewhite mint lavender ecto ashwhiteSheet colour (it glows this colour at night): white (classic), mint, lavender, ecto (slime green), ash (dusty grey).
facechoicespooky cute angryspookyExpression: spooky (tall hollow eyes and a howling O mouth), cute (round eyes, small smile and blush), angry (slanted eyes and a jagged grin).
armstoggleon / offtrueLittle sleeve arms held out in front, swaying as it floats. Off = a plain draped sheet.
tailrange0 to 1.5, step 0.051Length of the wispy tail trailing behind. 0 = no tail, just the hem; 1.5 = a long comet tail.
sizerange0.3 to 3, step 0.051Uniform scale. 1 is about 1.3 m tall; 0.3 is a toy-sized wisp; 3 is a 4 m giant spectre.

Presets: friendly ghost {"face":"cute","sheet":"white","size":0.6} · angry poltergeist {"face":"angry","sheet":"lavender","tail":1.5} · ecto spirit {"sheet":"ecto","face":"spooky","arms":false}

Files

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