Sliding portrait
A panelled Victorian wall section where a gilt-framed portrait of a stern, pale sitter rolls aside on an iron rail to reveal a black peephole niche with two glowing amber eyes that blink back.

Left rail: colours and the 3 knobs the agent wrote into this model — they rebuild the geometry and go into your download. Right rail: looks for the viewer. Drag to orbit, scroll to zoom.
- Triangles
- 1,904
- Vertices
- 3,377
- Meshes · materials
- 32 · 32
- Size (W × H × D)
- 1.7 m × 2.4 m × 37 cm
- File
- GLB · 145 KB
- Animation
- scene-motion · 8.0s
- Style
- Low-poly
- Collection
- Haunted Mansion
Palette · named materials
- wallpaper#81688d
- wallpaper stripes, cravat, mouth#584861
- oval mat, peeling paper flaps#a497aa
- wainscot, pilasters, crown, backing board#3d2a1c
- frame, bosses, crest, bare plaster patches#c9ba9c
- frame bead and sight lip#e4ddcd
- sitter's face#f9f8f5
- collar, eye whites, cobweb#f2ede2
- painted background#55743e
- rail, straps, niche lining, coat, pupils#1b1b22
- roller wheels, hair, bolts#7d828c
- watcher eyes (emissive)#ec9c13
Use it
import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
const gltf = await new GLTFLoader().loadAsync(
"https://assets.stoicsoft.com/1designtool/3d/models/haunted-mansion-sliding-portrait/86eaf444d1/model.glb"
);
scene.add(gltf.scene); // metres, +Y up, front faces +Z
const mixer = new THREE.AnimationMixer(gltf.scene);
gltf.animations.forEach((clip) => mixer.clipAction(clip).play());
// in your loop: mixer.update(delta)How it was made
The brief given to 1DesignTool's “3D object” template:
Sliding portrait for the Haunted Mansion kit. Design it as one clear asset at believable real-world scale for that setting (state the size in metres in meta.notes), with its main parts modelled and named, readable at thumbnail size and from every orbit angle. It moves: author a seamless baked loop (2–12 s) with every pivot exactly at its hinge, axle or swivel, and keep the base still. This is one part of the Haunted Mansion kit (Low-poly style, flat-lowpoly direction): A decaying house that watches back. Use ONLY the kit palette, by name: faded purple #81688d, bone #e4ddcd, moss #55743e, candle amber #ec9c13, faded purple dark #584861, bone dark #c9ba9c, faded purple light #a497aa, bone light #f9f8f5, soot black #1b1b22, warm white #f2ede2, mid grey #7d828c, dark wood #3d2a1c. Every material's `name` must be exactly the palette colour it uses — the GLB carries these names so the kit recolours as one; an unnamed material fails delivery. Kit knob: expose a param `decayLevel` (0–1, default 0.5) for the kit's "Decay level" setting wherever it makes sense on this part, and keep that id.
- Agent: Claude Code · Claude Opus 5.5 in 1DesignTool
- Generation: 6.73M tokens (96% cached) · ≈ $4.38 at API prices · 5-hour plan +8%, weekly plan +1%
- Direction: Low-poly · family abstract-kinetic
- three-check PASS · glb-lint PASS — 0 blocking errors (5 heuristic/direction warnings)
Named parts · 15
- Sliding portrait
- Wall section
- Wallpaper
- Wainscot
- Pilasters and crown
- Hidden niche
- Watcher eyes
- Iron rail
- Decay
- Portrait carriage
- Left roller
- Right roller
- Frame
- Painted sitter
- Painted pupils
Note: Free-standing wall section about 1.71 m wide, 2.44 m tall and 0.36 m deep (at default portraitWidth). The portrait is 0.62 x 0.81 m with its eyes at about 1.5 m. Origin is at the bottom centre, it rests on y = 0 and the front faces +Z. One seamless 8 s baked clip (scene-motion): the carriage slides along the rail axis, each roller spins about its axle pin by travel / radius, the painted pupils glance, and the hidden eyes open, blink twice and close about their own centre line. Only those five moving nodes carry tracks; the wall never moves. t = 0 is mid-reveal, so a paused model shows the eyes. decayLevel adds seeded peeled-wallpaper patches, grows a corner cobweb and adds a mid-slide hitch to the motion. Because the clip is baked, the GLB carries only the default param values. Part ids drop the slug's hyphens (the kit requires dotted lowercase alphanumerics). Static parts are merged into one mesh per material (about 1.9k triangles, 32 meshes). The exporter writes one material slot per mesh, but every slot carries an exact palette name, so recolour by material name. The watcher eyes use an emissive candle-amber material.
More like this
All of Haunted Mansion →
Self-playing organ
Haunted Mansion2,224 tris

Swinging chandelier
Haunted Mansion5,519 tris

Solar panels
Mars Colony1,832 tris

Gate
Graveyard1,828 tris

Chapel
Graveyard2,160 tris

Mausoleum
Graveyard2,172 tris

Crater and dune tiles
Mars Colony1,374 tris

Crypt entrance
Graveyard2,880 tris
Free under the 1DesignTool 3D library license. Model #1 of 485.