{"data":{"id":"104","slug":"nursery-and-primary-classroom","title":"Nursery and Primary Classroom","summary":"Walk an early years classroom: story carpet and interactive whiteboard, child height tables and chairs, tray units, the cloakroom peg rail, a role play kitchen and dressing up corner, and the sand and water tray by the sink.","url":"https://3dassets.dev/demos/nursery-and-primary-classroom","coverUrl":"https://cdn.3dassets.dev/media/nursery-and-primary-classroom-demo.png","featured":true,"pack":{"slug":"nursery-and-primary-classroom","title":"Nursery and Primary Classroom","url":"https://3dassets.dev/packs/nursery-and-primary-classroom","summary":"Realistic early years and primary classroom: child tables and chairs, carpet story mats, coloured tray units, interactive whiteboard, role play kitchen, sand and water tray, soft play, coat pegs, and wall, window, door and floor modules.","assetCount":50,"totalBytes":5719324,"starterScene":{"slug":"nursery-and-primary-classroom-nursery-cl-ed2d1cbb-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/35031/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-nursery-cl-ed2d1cbb-starter-scene","fileSize":2724228}},"placementCount":124,"assetCount":48,"spawn":{"position":[0.4,0.026,-2],"yaw":258},"publishedAt":"2026-09-11T10:58:40.399Z","updatedAt":"2026-09-11T10:58:40.399Z","description":"## What is placed\n\nOne early years classroom, about 8.6 by 7.3 metres, laid on the pack's own floor tiles inside its own 2.6 m wall modules with a window strip and a fire exit door. The story carpet is marked out in two tones of carpet tile under the interactive whiteboard, with the book display shelf, the reading corner sofa, the floor cushions and a book basket around it. Child height tables, rectangular, round and horseshoe, fill the middle with 310 mm and 350 mm chairs and a spare stack of six. The back wall carries a run of coloured tray units, name label strips, display boards, a number and letter frieze and the first aid cabinet. Along the west wall the cloakroom has peg rails hung with coats and bags, a bench with a shoe shelf, a welly rack and the buggy park frame. The play side holds the role play kitchen, the dressing up rail, the puppet theatre, the small world table, the construction brick tub, the soft play steps and wedges, the rocking toy and the nap mat stack. The wet area is the sand and water tray, the tuff tray, the paint pot trolley, the double sided easel, the art drying rack and the child height sink unit, with the changing station, the high chair and the bin pair beyond. 124 placements across 48 of the pack's models.\n\n## What moves\n\nSixteen models animate as you come near them. Tray units and the tall tray unit slide their trays out, the storage trolley and the paint pot trolley roll their castors, the teacher's desk opens, the role play kitchen swings its oven door, the sand and water tray slides its lid back, the child sink unit and the first aid cabinet open, the art drying rack unfolds, the changing station works both a drawer and a door, the high chair drops its tray, the easel tilts, the bin pair lifts its lids, the rocking toy rocks and the fire exit door opens.\n\n## What does not move and why\n\nThe coats and bags on the peg rails, the cushions, the mounted paper on the display boards, and the sand and water in the tray are static geometry: none of it is reachable with the rigid node transforms this library uses. There are no children or adults anywhere in the pack, because nothing here is skinned. No real school, publisher or toy brand is named on any surface.","scene":{"version":1,"spawn":{"position":[0.4,0.026,-2],"yaw":258},"ground":{"style":"none"},"environment":{"preset":"room","wallHeight":3.6,"lampHeight":3.2,"shadows":true},"placements":[{"asset":"nursery-and-primary-classroom-classroom-floor-tile-car-954f3a42","position":[-3.6,0,-3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-car-954f3a42","position":[-3.6,0,-1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-car-954f3a42","position":[-3.6,0,-0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[-3.6,0,0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[-3.6,0,1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[-3.6,0,3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-car-954f3a42","position":[-2.4,0,-3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-car-954f3a42","position":[-2.4,0,-1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-car-954f3a42","position":[-2.4,0,-0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[-2.4,0,0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[-2.4,0,1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[-2.4,0,3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[-1.2,0,-3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[-1.2,0,-1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[-1.2,0,-0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[-1.2,0,0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[-1.2,0,1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[-1.2,0,3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[0,0,-3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[0,0,-1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[0,0,-0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[0,0,0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[0,0,1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[0,0,3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[1.2,0,-3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[1.2,0,-1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[1.2,0,-0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[1.2,0,0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[1.2,0,1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[1.2,0,3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[2.4,0,-3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[2.4,0,-1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[2.4,0,-0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[2.4,0,0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[2.4,0,1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[2.4,0,3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[3.6,0,-3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[3.6,0,-1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[3.6,0,-0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[3.6,0,0.6],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[3.6,0,1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","position":[3.6,0,3],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-wall-window-mo-6a89cb01","position":[-3.6,0.026,-3.65],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-wall-module-678c00a7","position":[-2.4,0.026,-3.65],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-wall-module-678c00a7","position":[-1.2,0.026,-3.65],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-wall-module-678c00a7","position":[0,0.026,-3.65],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-wall-module-678c00a7","position":[1.2,0.026,-3.65],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-wall-module-678c00a7","position":[2.4,0.026,-3.65],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-wall-window-mo-6a89cb01","position":[3.6,0.026,-3.65],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-wall-module-678c00a7","position":[-4.25,0.026,-3],"rotation":90},{"asset":"nursery-and-primary-classroom-classroom-wall-module-678c00a7","position":[4.25,0.026,-3],"rotation":-90},{"asset":"nursery-and-primary-classroom-classroom-wall-module-678c00a7","position":[-4.25,0.026,-1.8],"rotation":90},{"asset":"nursery-and-primary-classroom-classroom-wall-window-mo-6a89cb01","position":[4.25,0.026,-1.8],"rotation":-90},{"asset":"nursery-and-primary-classroom-classroom-wall-window-mo-6a89cb01","position":[-4.25,0.026,-0.6],"rotation":90},{"asset":"nursery-and-primary-classroom-classroom-wall-module-678c00a7","position":[-4.25,0.026,0.6],"rotation":90},{"asset":"nursery-and-primary-classroom-classroom-wall-module-678c00a7","position":[-4.25,0.026,1.8],"rotation":90},{"asset":"nursery-and-primary-classroom-fire-exit-door-module-1f2b7548","position":[-4.25,0.026,3],"rotation":90},{"asset":"nursery-and-primary-classroom-teachers-desk-a3b2e69f","position":[-3.3,0.026,-3],"rotation":0},{"asset":"nursery-and-primary-classroom-interactive-whiteboard-s-070a8541","position":[-1.5,0.026,-3.2],"rotation":0},{"asset":"nursery-and-primary-classroom-book-display-shelf-c80104bd","position":[0,0.026,-3.4],"rotation":0},{"asset":"nursery-and-primary-classroom-wall-display-board-36f30ad5","position":[-3.3,1.176,-3.54],"rotation":0},{"asset":"nursery-and-primary-classroom-wall-display-board-green-6bb72c44","position":[1.7,1.226,-3.54],"rotation":0},{"asset":"nursery-and-primary-classroom-number-and-letter-frieze-32cade55","position":[1.7,2.1759999999999997,-3.54],"rotation":0},{"asset":"nursery-and-primary-classroom-name-label-strip-7e2b6ee4","position":[0,1.176,-3.54],"rotation":0},{"asset":"nursery-and-primary-classroom-first-aid-cabinet-f3767226","position":[-0.8,1.6260000000000001,-3.48],"rotation":0},{"asset":"nursery-and-primary-classroom-carpet-mat-tile-c84666ac","position":[-3.3,0.026,-2.3],"rotation":0},{"asset":"nursery-and-primary-classroom-carpet-mat-tile-blue-d9b14a7b","position":[-3.3,0.026,-1.7],"rotation":0},{"asset":"nursery-and-primary-classroom-carpet-mat-tile-c84666ac","position":[-3.3,0.026,-1.1],"rotation":0},{"asset":"nursery-and-primary-classroom-carpet-mat-tile-blue-d9b14a7b","position":[-2.7,0.026,-2.3],"rotation":0},{"asset":"nursery-and-primary-classroom-carpet-mat-tile-c84666ac","position":[-2.7,0.026,-1.7],"rotation":0},{"asset":"nursery-and-primary-classroom-carpet-mat-tile-blue-d9b14a7b","position":[-2.7,0.026,-1.1],"rotation":0},{"asset":"nursery-and-primary-classroom-carpet-mat-tile-c84666ac","position":[-2.1,0.026,-2.3],"rotation":0},{"asset":"nursery-and-primary-classroom-carpet-mat-tile-blue-d9b14a7b","position":[-2.1,0.026,-1.7],"rotation":0},{"asset":"nursery-and-primary-classroom-carpet-mat-tile-c84666ac","position":[-2.1,0.026,-1.1],"rotation":0},{"asset":"nursery-and-primary-classroom-carpet-mat-tile-blue-d9b14a7b","position":[-1.5,0.026,-2.3],"rotation":0},{"asset":"nursery-and-primary-classroom-carpet-mat-tile-c84666ac","position":[-1.5,0.026,-1.7],"rotation":0},{"asset":"nursery-and-primary-classroom-carpet-mat-tile-blue-d9b14a7b","position":[-1.5,0.026,-1.1],"rotation":0},{"asset":"nursery-and-primary-classroom-reading-corner-sofa-c0acbb18","position":[-3.9,0.026,-1.4],"rotation":90},{"asset":"nursery-and-primary-classroom-floor-cushion-set-c2d4c8e7","position":[-2.4,0.047,-1.5],"rotation":0},{"asset":"nursery-and-primary-classroom-book-basket-f6c8e118","position":[-1,0.026,-2],"rotation":0},{"asset":"nursery-and-primary-classroom-tray-unit-242e0100","position":[1.1,0.026,-3.35],"rotation":0},{"asset":"nursery-and-primary-classroom-tray-unit-242e0100","position":[1.72,0.026,-3.35],"rotation":0},{"asset":"nursery-and-primary-classroom-tray-unit-242e0100","position":[2.34,0.026,-3.35],"rotation":0},{"asset":"nursery-and-primary-classroom-tray-unit-242e0100","position":[2.96,0.026,-3.35],"rotation":0},{"asset":"nursery-and-primary-classroom-tray-unit-tall-585b8002","position":[3.58,0.026,-3.35],"rotation":0},{"asset":"nursery-and-primary-classroom-child-table-rectangular-75deeb80","position":[-0.6,0.026,-0.3],"rotation":0},{"asset":"nursery-and-primary-classroom-child-chair-low-108bc9d6","position":[-0.85,0.026,-0.85],"rotation":0},{"asset":"nursery-and-primary-classroom-child-chair-low-108bc9d6","position":[-0.35,0.026,-0.85],"rotation":0},{"asset":"nursery-and-primary-classroom-child-chair-tall-44242a4f","position":[-0.85,0.026,0.25],"rotation":180},{"asset":"nursery-and-primary-classroom-child-chair-low-108bc9d6","position":[-0.35,0.026,0.25],"rotation":180},{"asset":"nursery-and-primary-classroom-child-table-round-9cc7b599","position":[1.3,0.026,-0.4],"rotation":0},{"asset":"nursery-and-primary-classroom-child-chair-low-108bc9d6","position":[1.3,0.026,-1.15],"rotation":0},{"asset":"nursery-and-primary-classroom-child-chair-tall-44242a4f","position":[0.6,0.026,-0.4],"rotation":90},{"asset":"nursery-and-primary-classroom-child-chair-low-108bc9d6","position":[2,0.026,-0.4],"rotation":-90},{"asset":"nursery-and-primary-classroom-child-chair-low-108bc9d6","position":[1.3,0.026,0.35],"rotation":180},{"asset":"nursery-and-primary-classroom-child-table-horseshoe-7b51e109","position":[2.9,0.026,-1.4],"rotation":0},{"asset":"nursery-and-primary-classroom-child-chair-tall-44242a4f","position":[2.15,0.026,-1.4],"rotation":90},{"asset":"nursery-and-primary-classroom-child-chair-low-108bc9d6","position":[2.9,0.026,-2.25],"rotation":0},{"asset":"nursery-and-primary-classroom-child-chair-low-108bc9d6","position":[3.55,0.026,-1.4],"rotation":-90},{"asset":"nursery-and-primary-classroom-child-chair-stack-six-5332b656","position":[-2.2,0.026,0.7],"rotation":0},{"asset":"nursery-and-primary-classroom-child-sink-unit-6a78c3b7","position":[3.95,0.026,-0.7],"rotation":-90},{"asset":"nursery-and-primary-classroom-art-drying-rack-88c36e29","position":[3.95,0.026,-2.2],"rotation":-90},{"asset":"nursery-and-primary-classroom-paint-pot-trolley-2aa11e36","position":[-0.3,0.026,1.5],"rotation":0},{"asset":"nursery-and-primary-classroom-classroom-easel-415eedd7","position":[-1,0.026,1.6],"rotation":0},{"asset":"nursery-and-primary-classroom-tuff-tray-on-stand-59992b3b","position":[0.6,0.026,1.8],"rotation":0},{"asset":"nursery-and-primary-classroom-waste-and-recycling-bins-3ea57cce","position":[2.9,0.026,1.2],"rotation":0},{"asset":"nursery-and-primary-classroom-storage-trolley-e3babf7d","position":[1.9,0.026,1.3],"rotation":0},{"asset":"nursery-and-primary-classroom-role-play-kitchen-6660b4a1","position":[1.6,0.026,3.25],"rotation":0},{"asset":"nursery-and-primary-classroom-sand-and-water-tray-63ab2bae","position":[3,0.026,3.2],"rotation":0},{"asset":"nursery-and-primary-classroom-dressing-up-rail-54682750","position":[3.95,0.026,2.4],"rotation":-90},{"asset":"nursery-and-primary-classroom-small-world-table-8ba1ab02","position":[2.4,0.026,2.3],"rotation":0},{"asset":"nursery-and-primary-classroom-high-chair-36d08929","position":[1.3,0.026,2.3],"rotation":0},{"asset":"nursery-and-primary-classroom-changing-station-unit-6fda4348","position":[3.7,0.026,1.1],"rotation":-90},{"asset":"nursery-and-primary-classroom-soft-play-steps-and-wedg-b3118544","position":[-2,0.026,2.05],"rotation":0},{"asset":"nursery-and-primary-classroom-puppet-theatre-frame-6805e67f","position":[-0.3,0.026,3.2],"rotation":0},{"asset":"nursery-and-primary-classroom-construction-brick-tub-4b667eb6","position":[0.6,0.026,2.8],"rotation":0},{"asset":"nursery-and-primary-classroom-rocking-toy-fce0d10d","position":[-0.95,0.026,2.95],"rotation":0},{"asset":"nursery-and-primary-classroom-nap-mat-stack-bdac4cf5","position":[-2.9,0.026,0.5],"rotation":0},{"asset":"nursery-and-primary-classroom-coat-peg-rail-ebc8e1e1","position":[-4.14,0.30600000000000005,0],"rotation":90},{"asset":"nursery-and-primary-classroom-coat-peg-rail-ebc8e1e1","position":[-4.14,0.30600000000000005,1.2],"rotation":90},{"asset":"nursery-and-primary-classroom-name-label-strip-7e2b6ee4","position":[-4.13,1.476,1.8],"rotation":90},{"asset":"nursery-and-primary-classroom-cloakroom-bench-b1e252f5","position":[-3.5,0.026,0.4],"rotation":90},{"asset":"nursery-and-primary-classroom-welly-rack-7c3cf156","position":[-3.85,0.026,3.1],"rotation":90},{"asset":"nursery-and-primary-classroom-buggy-park-frame-193346f1","position":[-2.4,0.026,3.2],"rotation":0}],"points":[{"position":[-2.1,1.3,-2],"title":"Story carpet and the whiteboard","text":"Two tone carpet tiles mark out the story corner, with the interactive whiteboard on its stand in front of it and the book display shelf within reach. This is where the class sits down together.","asset":"nursery-and-primary-classroom-interactive-whiteboard-s-070a8541"},{"position":[-0.6,1,0.3],"title":"Tables and child chairs","text":"Rectangular, round and horseshoe tables at child height, ringed with 310 mm and 350 mm chairs and a spare stack of six. The horseshoe is the one an adult sits inside to work with a group.","asset":"nursery-and-primary-classroom-child-table-rectangular-75deeb80"},{"position":[2,1,-2.6],"title":"Tray units and the resource wall","text":"A run of coloured tray units along the back wall holds the day to day resources, with a taller unit at the end and name label strips above. The trays slide open as you walk up to them.","asset":"nursery-and-primary-classroom-tray-unit-242e0100"},{"position":[-3.3,1.2,0.7],"title":"Cloakroom and peg rail","text":"Coat peg rails hung with coats and bags run along the west wall, over a cloakroom bench with a shoe shelf and a welly rack at the end. Every school day starts and ends here.","asset":"nursery-and-primary-classroom-coat-peg-rail-ebc8e1e1"},{"position":[1.9,1.1,2.4],"title":"Role play and dressing up","text":"The home corner: a role play kitchen unit with an opening oven door, a dressing up rail beside it, a puppet theatre frame and the small world play table for the figures.","asset":"nursery-and-primary-classroom-role-play-kitchen-6660b4a1"},{"position":[3,1,2.3],"title":"Sand, water and the sink","text":"The sand and water tray sits on legs with its lid sliding back, next to the tuff tray, the paint pot trolley and the art drying rack. The child height sink unit is a few steps away for the clean up.","asset":"nursery-and-primary-classroom-sand-and-water-tray-63ab2bae"}],"poster":{"position":[0,1.7,0.5],"lookAt":[-1.5,0.9,-3.2]}},"bounds":{"min":[-6.32497665000747,-0.000009064742732602452,-5.72497665000747],"max":[6.32497665000747,4.625999904632568,5.600000023841858]},"assets":[{"id":"35025","slug":"nursery-and-primary-classroom-classroom-floor-tile-car-954f3a42","title":"Classroom Floor Tile, Carpet (Nursery and Primary Classroom)","summary":"The classroom floor tile with a carpet field and a rounded motif, for the quiet half of a room.","description":"The classroom floor tile with a carpet field and a rounded motif, for the quiet half of a room. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-classroom-floor-tile-car-954f3a42","cdnUrl":"https://cdn.3dassets.dev/assets/35025/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-classroom-floor-tile-car-954f3a42","thumbnailUrl":"https://cdn.3dassets.dev/assets/35025/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35025/v1/poster.webp","blurhash":"U8A^g=x]00WB%MayM{j[00M{_NaxDij]xuax","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"kit","title":"Kit / Set"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":10724,"triangles":204,"vertices":441,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000000238418579,-0.000009064742732602452,-0.6000000238418579],"max":[0.6000000238418579,0.02899418609064976,0.6000000238418579]},"sizeMeters":[1.2,0.029,1.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:30.550Z","updatedAt":"2026-09-11T10:55:30.668Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35025/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ClassroomFloorTileCarpetNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35025/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35025/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35025/v1/model.glb\" alt=\"Classroom Floor Tile, Carpet (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35025/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35025/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35024","slug":"nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","title":"Classroom Floor Tile (Nursery and Primary Classroom)","summary":"A 1.2 m square classroom floor tile, 26 mm thick: a warm safety vinyl field in a dark joint, laid in a grid to make a room floor of any size.","description":"A 1.2 m square classroom floor tile, 26 mm thick: a warm safety vinyl field in a dark joint, laid in a grid to make a room floor of any size. Tiles butt on floor-left, floor-right, floor-front and floor-back at 1.2 m centres. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","cdnUrl":"https://cdn.3dassets.dev/assets/35024/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-classroom-floor-tile-b6bb7c53","thumbnailUrl":"https://cdn.3dassets.dev/assets/35024/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35024/v1/poster.webp","blurhash":"UCD0Ddxu00WU-:j[M{f600M|~paf4.bFxuay","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"kit","title":"Kit / Set"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":6884,"triangles":128,"vertices":284,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000000238418579,-0.000009064742732602452,-0.6000000238418579],"max":[0.6000000238418579,0.0259991452158376,0.6000000238418579]},"sizeMeters":[1.2,0.026,1.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:29.647Z","updatedAt":"2026-09-11T10:55:29.785Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35024/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ClassroomFloorTileNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35024/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35024/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35024/v1/model.glb\" alt=\"Classroom Floor Tile (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35024/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35024/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35022","slug":"nursery-and-primary-classroom-classroom-wall-window-mo-6a89cb01","title":"Classroom Wall Module with a Window Strip (Nursery and Primary Classroom)","summary":"The classroom wall module with a 940 mm by 1.1 m window over a 620 mm cill: a beech frame with a centre mullion, two panes and paper shapes stuck up in the glass.","description":"The classroom wall module with a 940 mm by 1.1 m window over a 620 mm cill: a beech frame with a centre mullion, two panes and paper shapes stuck up in the glass. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-classroom-wall-window-mo-6a89cb01","cdnUrl":"https://cdn.3dassets.dev/assets/35022/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-classroom-wall-window-mo-6a89cb01","thumbnailUrl":"https://cdn.3dassets.dev/assets/35022/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35022/v1/poster.webp","blurhash":"U5ECzk_N0000^+?H9a004TV@%hX9TeW=#kVr","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"kit","title":"Kit / Set"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":72792,"triangles":1652,"vertices":3714,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000000238418579,0,-0.07497665000746953],"max":[0.6000000238418579,2.5999999046325684,0.110000004991889]},"sizeMeters":[1.2,2.6,0.185],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:28.943Z","updatedAt":"2026-09-11T10:55:29.053Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35022/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ClassroomWallModuleWithAWindowStripNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35022/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35022/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35022/v1/model.glb\" alt=\"Classroom Wall Module with a Window Strip (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35022/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35022/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35021","slug":"nursery-and-primary-classroom-classroom-wall-module-678c00a7","title":"Classroom Wall Module (Nursery and Primary Classroom)","summary":"A 1.2 m by 2.6 m classroom wall module, 100 mm thick, with a dark skirting and a coloured dado band on both faces.","description":"A 1.2 m by 2.6 m classroom wall module, 100 mm thick, with a dark skirting and a coloured dado band on both faces. Modules butt on wall-left and wall-right at 1.2 m centres. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-classroom-wall-module-678c00a7","cdnUrl":"https://cdn.3dassets.dev/assets/35021/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-classroom-wall-module-678c00a7","thumbnailUrl":"https://cdn.3dassets.dev/assets/35021/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35021/v1/poster.webp","blurhash":"U9DS];kC00RP~Wt74.IU00t7_4IoJCxuwuIT","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"kit","title":"Kit / Set"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":18584,"triangles":448,"vertices":1024,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.599911474317897,0,-0.07202367916183432],"max":[0.599911474317897,2.5999999046325684,0.07202367916183432]},"sizeMeters":[1.2,2.6,0.144],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:28.523Z","updatedAt":"2026-09-11T10:55:28.639Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35021/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ClassroomWallModuleNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35021/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35021/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35021/v1/model.glb\" alt=\"Classroom Wall Module (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35021/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35021/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35023","slug":"nursery-and-primary-classroom-fire-exit-door-module-1f2b7548","title":"Fire Exit Door Module (Nursery and Primary Classroom)","summary":"A 1.2 m wall module with a 920 mm fire exit door: a glazed leaf on a push bar, a dark skirting, a dado band and a blank running man sign over the head.","description":"A 1.2 m wall module with a 920 mm fire exit door: a glazed leaf on a push bar, a dark skirting, a dado band and a blank running man sign over the head. The leaf is the exit-door node on its jamb hinge. The sign face is blank so a consumer can texture the pictogram their territory requires. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: exit-door. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-fire-exit-door-module-1f2b7548","cdnUrl":"https://cdn.3dassets.dev/assets/35023/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-fire-exit-door-module-1f2b7548","thumbnailUrl":"https://cdn.3dassets.dev/assets/35023/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35023/v1/poster.webp","blurhash":"UAC%Q$NG00xu~Wxu4-ITDPj?%fWXbdofV?NF","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"},{"slug":"kit","title":"Kit / Set"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":62760,"triangles":1338,"vertices":3020,"meshes":9,"materials":8,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.6000000238418579,0,-0.07204687442931468],"max":[0.6000000238418579,2.5999999046325684,0.07204687442931468]},"sizeMeters":[1.2,2.6,0.144],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:30.350Z","updatedAt":"2026-09-11T10:55:30.532Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35023/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function FireExitDoorModuleNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35023/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35023/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35023/v1/model.glb\" alt=\"Fire Exit Door Module (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35023/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35023/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34987","slug":"nursery-and-primary-classroom-teachers-desk-a3b2e69f","title":"Teacher's Desk with Screen (Nursery and Primary Classroom)","summary":"A 1.4 m adult height teacher's desk at 730 mm: a ply top on a drawer pedestal and a steel leg frame, with a monitor on a pole stand, a keyboard, a marking pile and a pot of pens.","description":"A 1.4 m adult height teacher's desk at 730 mm: a ply top on a drawer pedestal and a steel leg frame, with a monitor on a pole stand, a keyboard, a marking pile and a pot of pens. The two pedestal drawers are named nodes on their slide axes. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: drawer-1, drawer-2. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-teachers-desk-a3b2e69f","cdnUrl":"https://cdn.3dassets.dev/assets/34987/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-teachers-desk-a3b2e69f","thumbnailUrl":"https://cdn.3dassets.dev/assets/34987/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34987/v1/poster.webp","blurhash":"U7ECnB5800~U5Y~p-O0100-o_29GVW00Sj^*","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":89428,"triangles":2106,"vertices":4572,"meshes":12,"materials":8,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.699999988079071,-0.00003163013237206247,-0.35005340143020897],"max":[0.699999988079071,1.1800315776802845,0.35005340143020897]},"sizeMeters":[1.4,1.18,0.7],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:08.794Z","updatedAt":"2026-09-11T10:55:08.890Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34987/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function TeacherSDeskWithScreenNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34987/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34987/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34987/v1/model.glb\" alt=\"Teacher's Desk with Screen (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34987/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34987/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34988","slug":"nursery-and-primary-classroom-interactive-whiteboard-s-070a8541","title":"Interactive Whiteboard on a Stand (Nursery and Primary Classroom)","summary":"A 1.66 m interactive whiteboard on a floor stand: a bezelled panel at 820 mm to 1.87 m on a twin post frame with feet, a pen tray and four dry wipe pens.","description":"A 1.66 m interactive whiteboard on a floor stand: a bezelled panel at 820 mm to 1.87 m on a twin post frame with feet, a pen tray and four dry wipe pens. The panel does not lift or tilt on its posts, because a rigid node cannot follow the geared column that really does it. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-interactive-whiteboard-s-070a8541","cdnUrl":"https://cdn.3dassets.dev/assets/34988/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-interactive-whiteboard-s-070a8541","thumbnailUrl":"https://cdn.3dassets.dev/assets/34988/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34988/v1/poster.webp","blurhash":"UCBzFB-;00D%~q%MD%D%4noz?bM{00NG?bs:","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":51976,"triangles":1314,"vertices":2861,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.8299918899095865,0,-0.3099621594321445],"max":[0.8299918899095865,1.9620000123977661,0.3099621594321445]},"sizeMeters":[1.66,1.962,0.62],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:09.845Z","updatedAt":"2026-09-11T10:55:09.942Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34988/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function InteractiveWhiteboardOnAStandNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34988/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34988/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34988/v1/model.glb\" alt=\"Interactive Whiteboard on a Stand (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34988/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34988/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34995","slug":"nursery-and-primary-classroom-book-display-shelf-c80104bd","title":"Front Facing Book Display Shelf (Nursery and Primary Classroom)","summary":"A 900 mm front facing book display at 1.0 m: three raked ply tiers with coloured retaining rails, each holding four picture books cover out.","description":"A 900 mm front facing book display at 1.0 m: three raked ply tiers with coloured retaining rails, each holding four picture books cover out. The books are modelled closed and do not move. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-book-display-shelf-c80104bd","cdnUrl":"https://cdn.3dassets.dev/assets/34995/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-book-display-shelf-c80104bd","thumbnailUrl":"https://cdn.3dassets.dev/assets/34995/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34995/v1/poster.webp","blurhash":"UCGl07-p00S~~q?aIA4.01Sh-:rq$*%2NbE1","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":96720,"triangles":2216,"vertices":4881,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.4500106814783166,0,-0.1799973592835861],"max":[0.4500106814783166,1,0.1499832148197882]},"sizeMeters":[0.9,1,0.33],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:14.460Z","updatedAt":"2026-09-11T10:55:14.581Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34995/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FrontFacingBookDisplayShelfNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34995/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34995/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34995/v1/model.glb\" alt=\"Front Facing Book Display Shelf (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34995/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34995/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34998","slug":"nursery-and-primary-classroom-wall-display-board-36f30ad5","title":"Wall Display Board with Mounted Work (Nursery and Primary Classroom)","summary":"A 1.2 m by 900 mm classroom display board: a felt field in a coloured border, with six pieces of mounted children's work and a title card.","description":"A 1.2 m by 900 mm classroom display board: a felt field in a coloured border, with six pieces of mounted children's work and a title card. Mount it with its bottom edge at about 900 mm. The paper is modelled as flat sheets and does not curl or move. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-wall-display-board-36f30ad5","cdnUrl":"https://cdn.3dassets.dev/assets/34998/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-wall-display-board-36f30ad5","thumbnailUrl":"https://cdn.3dassets.dev/assets/34998/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34998/v1/poster.webp","blurhash":"UEEy[G-p00Ob%g.Ab0Di00S$~Brpo#bwV@i]","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":44252,"triangles":940,"vertices":2073,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000000238418579,0.00002285908069415976,-0.022499948852615744],"max":[0.6000000238418579,0.899977117077448,0.04399524510934984]},"sizeMeters":[1.2,0.9,0.066],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:16.358Z","updatedAt":"2026-09-11T10:55:16.459Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34998/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WallDisplayBoardWithMountedWorkNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34998/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34998/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34998/v1/model.glb\" alt=\"Wall Display Board with Mounted Work (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34998/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34998/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34999","slug":"nursery-and-primary-classroom-wall-display-board-green-6bb72c44","title":"Wall Display Board, Green Border (Nursery and Primary Classroom)","summary":"The classroom display board with a green border, so a wall of boards is not one colour.","description":"The classroom display board with a green border, so a wall of boards is not one colour. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-wall-display-board-green-6bb72c44","cdnUrl":"https://cdn.3dassets.dev/assets/34999/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-wall-display-board-green-6bb72c44","thumbnailUrl":"https://cdn.3dassets.dev/assets/34999/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34999/v1/poster.webp","blurhash":"UDF?X#--00PA-:?[XR9F00S$^lrXo}tQixMz","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":44328,"triangles":940,"vertices":2073,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000000238418579,0.00002285908069415976,-0.022499948852615744],"max":[0.6000000238418579,0.899977117077448,0.04398828725890655]},"sizeMeters":[1.2,0.9,0.066],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:16.393Z","updatedAt":"2026-09-11T10:55:16.500Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34999/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WallDisplayBoardGreenBorderNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34999/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34999/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34999/v1/model.glb\" alt=\"Wall Display Board, Green Border (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34999/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34999/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35000","slug":"nursery-and-primary-classroom-number-and-letter-frieze-32cade55","title":"Number and Letter Frieze Strip (Nursery and Primary Classroom)","summary":"A 1.2 m frieze strip of eight coloured cards on a ply backing, the row that runs above a classroom display board.","description":"A 1.2 m frieze strip of eight coloured cards on a ply backing, the row that runs above a classroom display board. The card faces carry a blank raised panel rather than modelled glyphs, so a consumer can texture numbers or letters onto them. Mount the strip at about 1.9 m. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-number-and-letter-frieze-32cade55","cdnUrl":"https://cdn.3dassets.dev/assets/35000/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-number-and-letter-frieze-32cade55","thumbnailUrl":"https://cdn.3dassets.dev/assets/35000/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35000/v1/poster.webp","blurhash":"UDD9n+$jMy$%-p~ps.V@00x[?bNwE200kqx]","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":30632,"triangles":1008,"vertices":2179,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000000238418579,0.000001978736141036719,-0.01597918575001396],"max":[0.6000000238418579,0.18999801887967316,0.04397918475163616]},"sizeMeters":[1.2,0.19,0.06],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:16.514Z","updatedAt":"2026-09-11T10:55:16.647Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35000/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function NumberAndLetterFriezeStripNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35000/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35000/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35000/v1/model.glb\" alt=\"Number and Letter Frieze Strip (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35000/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35000/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34997","slug":"nursery-and-primary-classroom-name-label-strip-7e2b6ee4","title":"Name Label Strip (Nursery and Primary Classroom)","summary":"A 720 mm self adhesive name label strip of five coloured cards in a dark carrier, for a peg rail, a tray front or a drawer.","description":"A 720 mm self adhesive name label strip of five coloured cards in a dark carrier, for a peg rail, a tray front or a drawer. The cards are blank: no text is modelled, so a consumer can letter them however they like. Mount it at the height of whatever it labels. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-name-label-strip-7e2b6ee4","cdnUrl":"https://cdn.3dassets.dev/assets/34997/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-name-label-strip-7e2b6ee4","thumbnailUrl":"https://cdn.3dassets.dev/assets/34997/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34997/v1/poster.webp","blurhash":"U69jio-oL~bw-p~Wt7My00T0?^skE100oc?a","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":26900,"triangles":644,"vertices":1467,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.36000001430511475,0.00002273380693621624,-0.007998291281292872],"max":[0.36000001430511475,0.10997726559701734,0.01450761411537491]},"sizeMeters":[0.72,0.11,0.023],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:14.812Z","updatedAt":"2026-09-11T10:55:14.910Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34997/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function NameLabelStripNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34997/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34997/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34997/v1/model.glb\" alt=\"Name Label Strip (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34997/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34997/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35020","slug":"nursery-and-primary-classroom-first-aid-cabinet-f3767226","title":"First Aid and Medicine Cabinet (Nursery and Primary Classroom)","summary":"A 460 mm double door first aid and medicine cabinet, 520 mm tall, with a white cross on the leaves and dressings on the shelf inside.","description":"A 460 mm double door first aid and medicine cabinet, 520 mm tall, with a white cross on the leaves and dressings on the shelf inside. Mount it at 1.6 m or above, out of a child's reach. Both leaves are named nodes on their hinges; there is no lock modelled. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: cabinet-door-1, cabinet-door-2. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-first-aid-cabinet-f3767226","cdnUrl":"https://cdn.3dassets.dev/assets/35020/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-first-aid-cabinet-f3767226","thumbnailUrl":"https://cdn.3dassets.dev/assets/35020/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35020/v1/poster.webp","blurhash":"UDFZD:9@00$Q~W%L9ZIBD7$+X*I:%L$+RQE1","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":44240,"triangles":1044,"vertices":2325,"meshes":8,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.23000640045040516,0,-0.08500564280626455],"max":[0.23000640045040516,0.5199999809265137,0.10400160090708849]},"sizeMeters":[0.46,0.52,0.189],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:27.926Z","updatedAt":"2026-09-11T10:55:28.035Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35020/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function FirstAidAndMedicineCabinetNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35020/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35020/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35020/v1/model.glb\" alt=\"First Aid and Medicine Cabinet (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35020/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35020/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34993","slug":"nursery-and-primary-classroom-carpet-mat-tile-c84666ac","title":"Carpet Story Mat Tile (Nursery and Primary Classroom)","summary":"A 600 mm carpet story mat tile, 20 mm thick: a bound coloured border round a cord field with a rounded motif, laid in a grid to make a story corner of any size.","description":"A 600 mm carpet story mat tile, 20 mm thick: a bound coloured border round a cord field with a rounded motif, laid in a grid to make a story corner of any size. Tiles butt on mat-left, mat-right, mat-front and mat-back at 600 mm centres. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-carpet-mat-tile-c84666ac","cdnUrl":"https://cdn.3dassets.dev/assets/34993/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-carpet-mat-tile-c84666ac","thumbnailUrl":"https://cdn.3dassets.dev/assets/34993/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34993/v1/poster.webp","blurhash":"UADSB*%M00V[x]a}Rjj[00Io_MW.H@oItQWB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":12500,"triangles":236,"vertices":516,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.30000001192092896,-0.000009064742732602452,-0.30000001192092896],"max":[0.30000001192092896,0.026199572536393226,0.30000001192092896]},"sizeMeters":[0.6,0.026,0.6],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:12.788Z","updatedAt":"2026-09-11T10:55:12.926Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34993/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CarpetStoryMatTileNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34993/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34993/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34993/v1/model.glb\" alt=\"Carpet Story Mat Tile (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34993/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34993/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34992","slug":"nursery-and-primary-classroom-carpet-mat-tile-blue-d9b14a7b","title":"Carpet Story Mat Tile, Blue (Nursery and Primary Classroom)","summary":"The carpet story mat tile with a blue border and a green motif, so a laid carpet alternates colour.","description":"The carpet story mat tile with a blue border and a green motif, so a laid carpet alternates colour. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-carpet-mat-tile-blue-d9b14a7b","cdnUrl":"https://cdn.3dassets.dev/assets/34992/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-carpet-mat-tile-blue-d9b14a7b","thumbnailUrl":"https://cdn.3dassets.dev/assets/34992/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34992/v1/poster.webp","blurhash":"U89[41yD00WX%Mf7Rjj[00Mx_MjEDjj[t7WB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":12540,"triangles":236,"vertices":516,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.30000001192092896,-0.000009064742732602452,-0.30000001192092896],"max":[0.30000001192092896,0.026199572536393226,0.30000001192092896]},"sizeMeters":[0.6,0.026,0.6],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:12.735Z","updatedAt":"2026-09-11T10:55:12.859Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34992/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CarpetStoryMatTileBlueNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34992/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34992/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34992/v1/model.glb\" alt=\"Carpet Story Mat Tile, Blue (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34992/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34992/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35001","slug":"nursery-and-primary-classroom-reading-corner-sofa-c0acbb18","title":"Reading Corner Child Sofa (Nursery and Primary Classroom)","summary":"A 1.0 m two seat child sofa for a reading corner: a foam shell with a crowned seat cushion, low arms, a scatter cushion and turned beech feet.","description":"A 1.0 m two seat child sofa for a reading corner: a foam shell with a crowned seat cushion, low arms, a scatter cushion and turned beech feet. The cushions are modelled in place and do not move, because upholstery is not a rigid node. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-reading-corner-sofa-c0acbb18","cdnUrl":"https://cdn.3dassets.dev/assets/35001/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-reading-corner-sofa-c0acbb18","thumbnailUrl":"https://cdn.3dassets.dev/assets/35001/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35001/v1/poster.webp","blurhash":"U8Fsk=^j00K%_L-:Ip9H009a+ZrD0}b^iJMJ","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":66836,"triangles":1632,"vertices":3396,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.5,-0.000018494165032009735,-0.2800073244422742],"max":[0.5,0.6899815344391218,0.2800073244422742]},"sizeMeters":[1,0.69,0.56],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:17.623Z","updatedAt":"2026-09-11T10:55:17.720Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35001/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ReadingCornerChildSofaNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35001/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35001/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35001/v1/model.glb\" alt=\"Reading Corner Child Sofa (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35001/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35001/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35002","slug":"nursery-and-primary-classroom-floor-cushion-set-c2d4c8e7","title":"Floor Cushion Set (Nursery and Primary Classroom)","summary":"Three 420 mm piped floor cushions and a round beanbag pouffe, the loose seating a story corner needs.","description":"Three 420 mm piped floor cushions and a round beanbag pouffe, the loose seating a story corner needs. Modelled as one static group; the cushions do not deform. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-floor-cushion-set-c2d4c8e7","cdnUrl":"https://cdn.3dassets.dev/assets/35002/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-floor-cushion-set-c2d4c8e7","thumbnailUrl":"https://cdn.3dassets.dev/assets/35002/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35002/v1/poster.webp","blurhash":"UEAdDk;f00Kj%KWCM}ox00E*?[$1D,ovx?Vy","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":65704,"triangles":1568,"vertices":3455,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.5722803473472595,-0.000002048952866470777,-0.6200000047683716],"max":[0.5506206154823303,0.2599801590199078,0.31892773509025574]},"sizeMeters":[1.123,0.26,0.939],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:18.175Z","updatedAt":"2026-09-11T10:55:18.276Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35002/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FloorCushionSetNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35002/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35002/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35002/v1/model.glb\" alt=\"Floor Cushion Set (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35002/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35002/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35010","slug":"nursery-and-primary-classroom-book-basket-f6c8e118","title":"Floor Book Basket (Nursery and Primary Classroom)","summary":"A 460 mm square ply book basket at 260 mm with a dark rim and a label plate, holding four picture books cover out for a floor reading corner.","description":"A 460 mm square ply book basket at 260 mm with a dark rim and a label plate, holding four picture books cover out for a floor reading corner. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-book-basket-f6c8e118","cdnUrl":"https://cdn.3dassets.dev/assets/35010/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-book-basket-f6c8e118","thumbnailUrl":"https://cdn.3dassets.dev/assets/35010/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35010/v1/poster.webp","blurhash":"UBFi3]~W00XSM}NGaexu009Z%LIU%1xuxtRP","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":53860,"triangles":1234,"vertices":2756,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.24500000476837158,-0.000010688605152686659,-0.3269999921321869],"max":[0.24500000476837158,0.2639212739407547,0.24500000476837158]},"sizeMeters":[0.49,0.264,0.572],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:22.129Z","updatedAt":"2026-09-11T10:55:22.248Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35010/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FloorBookBasketNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35010/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35010/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35010/v1/model.glb\" alt=\"Floor Book Basket (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35010/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35010/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34991","slug":"nursery-and-primary-classroom-tray-unit-242e0100","title":"Coloured Tray Storage Unit (Nursery and Primary Classroom)","summary":"A 620 mm tray storage unit at 740 mm: a birch ply carcass on a recessed plinth holding eight moulded trays in the four primaries, on runner cleats.","description":"A 620 mm tray storage unit at 740 mm: a birch ply carcass on a recessed plinth holding eight moulded trays in the four primaries, on runner cleats. Units butt on tray-left and tray-right at 620 mm centres, so a wall run is the same unit repeated. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: tray-1, tray-2, tray-3, tray-4, tray-5, tray-6, tray-7, tray-8. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-tray-unit-242e0100","cdnUrl":"https://cdn.3dassets.dev/assets/34991/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-tray-unit-242e0100","thumbnailUrl":"https://cdn.3dassets.dev/assets/34991/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34991/v1/poster.webp","blurhash":"UJH2M~M,00sX~qkXE1V@02x:NrR%$ys+IpNG","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":95828,"triangles":5888,"vertices":12976,"meshes":10,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.3100132798264367,-0.0000035079236398657954,-0.21001526215066657],"max":[0.3100132798264367,0.7400000095367432,0.21799999479204415]},"sizeMeters":[0.62,0.74,0.428],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:12.718Z","updatedAt":"2026-09-11T10:55:12.842Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34991/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function ColouredTrayStorageUnitNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34991/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34991/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34991/v1/model.glb\" alt=\"Coloured Tray Storage Unit (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34991/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34991/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34994","slug":"nursery-and-primary-classroom-tray-unit-tall-585b8002","title":"Coloured Tray Storage Unit, Tall (Nursery and Primary Classroom)","summary":"The tray unit at 1.06 m with twelve trays, for the deep storage wall behind a classroom.","description":"The tray unit at 1.06 m with twelve trays, for the deep storage wall behind a classroom. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: tray-1, tray-2, tray-3, tray-4, tray-5, tray-6, tray-7, tray-8, tray-9, tray-10, tray-11, tray-12. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-tray-unit-tall-585b8002","cdnUrl":"https://cdn.3dassets.dev/assets/34994/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-tray-unit-tall-585b8002","thumbnailUrl":"https://cdn.3dassets.dev/assets/34994/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34994/v1/poster.webp","blurhash":"UDFYlXs?00t1~qbvD$jE9HX4x;RQ?Hs:IVRk","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":120600,"triangles":8576,"vertices":18911,"meshes":14,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.3100189034639379,-0.0000035079236398657954,-0.20999769891103212],"max":[0.3100189034639379,1.059999942779541,0.21799999479204415]},"sizeMeters":[0.62,1.06,0.428],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:14.442Z","updatedAt":"2026-09-11T10:55:14.560Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34994/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function ColouredTrayStorageUnitTallNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34994/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34994/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34994/v1/model.glb\" alt=\"Coloured Tray Storage Unit, Tall (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34994/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34994/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34983","slug":"nursery-and-primary-classroom-child-table-rectangular-75deeb80","title":"Child Height Classroom Table, Rectangular (Nursery and Primary Classroom)","summary":"A 1.1 m by 600 mm classroom table at 530 mm: a radiused birch ply top with a soft lipped edge and a coloured edge band, on four turned beech legs with glides.","description":"A 1.1 m by 600 mm classroom table at 530 mm: a radiused birch ply top with a soft lipped edge and a coloured edge band, on four turned beech legs with glides. Seats four on the low chair or six pushed together. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-child-table-rectangular-75deeb80","cdnUrl":"https://cdn.3dassets.dev/assets/34983/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-child-table-rectangular-75deeb80","thumbnailUrl":"https://cdn.3dassets.dev/assets/34983/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34983/v1/poster.webp","blurhash":"UPEo#zozD%xt~p%LIoM{4oxuR*Io01Rk%LRk","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":41516,"triangles":1040,"vertices":2074,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.550000011920929,-0.00002123041338059073,-0.3000183176084074],"max":[0.550000011920929,0.5300212018031512,0.3000183176084074]},"sizeMeters":[1.1,0.53,0.6],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:06.926Z","updatedAt":"2026-09-11T10:55:07.060Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34983/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChildHeightClassroomTableRectangularNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34983/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34983/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34983/v1/model.glb\" alt=\"Child Height Classroom Table, Rectangular (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34983/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34983/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34985","slug":"nursery-and-primary-classroom-child-chair-low-108bc9d6","title":"Child Classroom Chair, 310 mm (Nursery and Primary Classroom)","summary":"A nursery and reception chair with a 310 mm seat: a moulded coloured seat and back shell on four turned beech legs with rails and glides.","description":"A nursery and reception chair with a 310 mm seat: a moulded coloured seat and back shell on four turned beech legs with rails and glides. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-child-chair-low-108bc9d6","cdnUrl":"https://cdn.3dassets.dev/assets/34985/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-child-chair-low-108bc9d6","thumbnailUrl":"https://cdn.3dassets.dev/assets/34985/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34985/v1/poster.webp","blurhash":"UBF#K~Or00^Q{f9t1b^Q01E1=y-VT_%2#mN[","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":43732,"triangles":1072,"vertices":2152,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.15999573116881202,0.00000523371152368491,-0.1805914044380188],"max":[0.15999573116881202,0.5467756651975171,0.15800000727176666]},"sizeMeters":[0.32,0.547,0.339],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:06.988Z","updatedAt":"2026-09-11T10:55:07.098Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34985/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChildClassroomChair310MmNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34985/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34985/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34985/v1/model.glb\" alt=\"Child Classroom Chair, 310 mm (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34985/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34985/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34986","slug":"nursery-and-primary-classroom-child-chair-tall-44242a4f","title":"Child Classroom Chair, 350 mm (Nursery and Primary Classroom)","summary":"The same classroom chair with a 350 mm seat, the height the upper primary tables take.","description":"The same classroom chair with a 350 mm seat, the height the upper primary tables take. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-child-chair-tall-44242a4f","cdnUrl":"https://cdn.3dassets.dev/assets/34986/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-child-chair-tall-44242a4f","thumbnailUrl":"https://cdn.3dassets.dev/assets/34986/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34986/v1/poster.webp","blurhash":"UBBq9-s700x_GdMwmjyE00Mw%hx^=pogOtoI","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":43740,"triangles":1072,"vertices":2152,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.15999573116881202,0.00000523371152368491,-0.1805914044380188],"max":[0.15999573116881202,0.586775671754028,0.15800000727176666]},"sizeMeters":[0.32,0.587,0.339],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:09.783Z","updatedAt":"2026-09-11T10:55:09.908Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34986/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChildClassroomChair350MmNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34986/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34986/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34986/v1/model.glb\" alt=\"Child Classroom Chair, 350 mm (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34986/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34986/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34982","slug":"nursery-and-primary-classroom-child-table-round-9cc7b599","title":"Child Height Classroom Table, Round (Nursery and Primary Classroom)","summary":"A 900 mm round classroom table at 530 mm on four turned beech legs, with a radiused ply top over a coloured underframe ring.","description":"A 900 mm round classroom table at 530 mm on four turned beech legs, with a radiused ply top over a coloured underframe ring. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-child-table-round-9cc7b599","cdnUrl":"https://cdn.3dassets.dev/assets/34982/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-child-table-round-9cc7b599","thumbnailUrl":"https://cdn.3dassets.dev/assets/34982/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34982/v1/poster.webp","blurhash":"UKDvTLt600ay~poeD*a#01WCxuWV00WB%Mj?","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":35772,"triangles":880,"vertices":1727,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.44999998807907104,-0.000025795424836216885,-0.44999998807907104],"max":[0.44999998807907104,0.5300257668146067,0.44999998807907104]},"sizeMeters":[0.9,0.53,0.9],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:06.648Z","updatedAt":"2026-09-11T10:55:06.747Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34982/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChildHeightClassroomTableRoundNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34982/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34982/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34982/v1/model.glb\" alt=\"Child Height Classroom Table, Round (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34982/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34982/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34984","slug":"nursery-and-primary-classroom-child-table-horseshoe-7b51e109","title":"Child Height Classroom Table, Horseshoe (Nursery and Primary Classroom)","summary":"A 1.36 m horseshoe teaching table at 530 mm: a ply top curved round a teacher's place at the open side, on five turned legs over a coloured underframe.","description":"A 1.36 m horseshoe teaching table at 530 mm: a ply top curved round a teacher's place at the open side, on five turned legs over a coloured underframe. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-child-table-horseshoe-7b51e109","cdnUrl":"https://cdn.3dassets.dev/assets/34984/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-child-table-horseshoe-7b51e109","thumbnailUrl":"https://cdn.3dassets.dev/assets/34984/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34984/v1/poster.webp","blurhash":"UGCsaC%201?a~pxuIoWC00fl%LD%00M|xuRj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":45996,"triangles":1140,"vertices":2263,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.6799972057342529,-0.000023645921448145306,-0.6800144681167053],"max":[0.6799972057342529,0.5299886730944237,0.23035625307077628]},"sizeMeters":[1.36,0.53,0.91],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:06.919Z","updatedAt":"2026-09-11T10:55:07.043Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34984/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ChildHeightClassroomTableHorseshoeNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34984/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34984/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34984/v1/model.glb\" alt=\"Child Height Classroom Table, Horseshoe (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34984/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34984/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34989","slug":"nursery-and-primary-classroom-child-chair-stack-six-5332b656","title":"Stack of Six Child Chairs (Nursery and Primary Classroom)","summary":"Six child chairs nested on one frame, 820 mm high, for the corner of a classroom or a store cupboard.","description":"Six child chairs nested on one frame, 820 mm high, for the corner of a classroom or a store cupboard. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-child-chair-stack-six-5332b656","cdnUrl":"https://cdn.3dassets.dev/assets/34989/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-child-chair-stack-six-5332b656","thumbnailUrl":"https://cdn.3dassets.dev/assets/34989/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34989/v1/poster.webp","blurhash":"U8DvDqxv00Mw~kE10O^*0LIV-;?Gr{WXScxZ","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":93732,"triangles":3072,"vertices":6112,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.1600033772596744,0.00000523371152368491,-0.1805914044380188],"max":[0.1600033772596744,0.9717690944671631,0.15800000727176666]},"sizeMeters":[0.32,0.972,0.339],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:09.881Z","updatedAt":"2026-09-11T10:55:10.071Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34989/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StackOfSixChildChairsNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34989/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34989/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34989/v1/model.glb\" alt=\"Stack of Six Child Chairs (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34989/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34989/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35017","slug":"nursery-and-primary-classroom-child-sink-unit-6a78c3b7","title":"Child Height Sink Unit with Towel Rail (Nursery and Primary Classroom)","summary":"A 1.04 m sink unit at 600 mm: a ply base of two cupboards under a top with twin stainless bowls, lever taps, a splashback, a paper towel roll on a rail and a soap pump.","description":"A 1.04 m sink unit at 600 mm: a ply base of two cupboards under a top with twin stainless bowls, lever taps, a splashback, a paper towel roll on a rail and a soap pump. Both cupboard leaves are named nodes on their hinges; the taps and the towel roll do not turn. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: cupboard-door-1, cupboard-door-2. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-child-sink-unit-6a78c3b7","cdnUrl":"https://cdn.3dassets.dev/assets/35017/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-child-sink-unit-6a78c3b7","thumbnailUrl":"https://cdn.3dassets.dev/assets/35017/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35017/v1/poster.webp","blurhash":"U5Ep4o0N00^%^K=_0goh00=q.TR;Ae5X]yoF","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":93740,"triangles":2264,"vertices":4908,"meshes":9,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.5199999809265137,0.000015178304510643503,-0.22999846563823242],"max":[0.5199999809265137,1.0099938956386647,0.24799860955637446]},"sizeMeters":[1.04,1.01,0.478],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:27.066Z","updatedAt":"2026-09-11T10:55:27.177Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35017/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function ChildHeightSinkUnitWithTowelRailNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35017/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35017/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35017/v1/model.glb\" alt=\"Child Height Sink Unit with Towel Rail (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35017/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35017/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35018","slug":"nursery-and-primary-classroom-art-drying-rack-88c36e29","title":"Art Drying Rack (Nursery and Primary Classroom)","summary":"A 660 mm art drying rack at 1.42 m: a steel frame of six sliding shelves with coloured front rails, each holding a painting laid out to dry.","description":"A 660 mm art drying rack at 1.42 m: a steel frame of six sliding shelves with coloured front rails, each holding a painting laid out to dry. The six shelves are named nodes on their runners and share one shelf open and close pair. The paintings are flat sheets and do not move. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: rack-shelf-1, rack-shelf-2, rack-shelf-3, rack-shelf-4, rack-shelf-5, rack-shelf-6. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-art-drying-rack-88c36e29","cdnUrl":"https://cdn.3dassets.dev/assets/35018/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-art-drying-rack-88c36e29","thumbnailUrl":"https://cdn.3dassets.dev/assets/35018/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35018/v1/poster.webp","blurhash":"U8BzFC.70000t7t7V@M{00M{~q-:ozofV@V@","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":83496,"triangles":2992,"vertices":6619,"meshes":26,"materials":7,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.33600894309277685,0,-0.2547296068926451],"max":[0.33600894309277685,1.440000057220459,0.2547296068926451]},"sizeMeters":[0.672,1.44,0.509],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:27.583Z","updatedAt":"2026-09-11T10:55:27.688Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35018/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function ArtDryingRackNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35018/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35018/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35018/v1/model.glb\" alt=\"Art Drying Rack (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35018/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35018/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35019","slug":"nursery-and-primary-classroom-paint-pot-trolley-2aa11e36","title":"Paint Pot Trolley (Nursery and Primary Classroom)","summary":"A 560 mm paint trolley on four braked castors: two wire shelves of eight lidded paint pots under a top tray of brushes, at 700 mm so an adult can push it.","description":"A 560 mm paint trolley on four braked castors: two wire shelves of eight lidded paint pots under a top tray of brushes, at 700 mm so an adult can push it. The four castors share one roll clip; the pots and lids are fixed solids. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: wheel-lb, wheel-lf, wheel-rb, wheel-rf. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-paint-pot-trolley-2aa11e36","cdnUrl":"https://cdn.3dassets.dev/assets/35019/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-paint-pot-trolley-2aa11e36","thumbnailUrl":"https://cdn.3dassets.dev/assets/35019/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35019/v1/poster.webp","blurhash":"UHCi?Zah00ov~Ts:9IR*4moc-;Rn9cWB$|o2","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":136724,"triangles":3488,"vertices":7358,"meshes":11,"materials":7,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.36002167750623026,-5.245208739568241e-9,-0.2200128187106789],"max":[0.2800000011920929,0.8398615121841431,0.2200128187106789]},"sizeMeters":[0.64,0.84,0.44],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:26.840Z","updatedAt":"2026-09-11T10:55:26.941Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35019/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function PaintPotTrolleyNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35019/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35019/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35019/v1/model.glb\" alt=\"Paint Pot Trolley (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35019/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35019/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34990","slug":"nursery-and-primary-classroom-classroom-easel-415eedd7","title":"Double Sided Painting Easel (Nursery and Primary Classroom)","summary":"A 1.2 m double sided painting easel: two beech leaves hinged at the head over a wipe clean board, a pinned sheet of work on each face, and a shelf of four paint pots.","description":"A 1.2 m double sided painting easel: two beech leaves hinged at the head over a wipe clean board, a pinned sheet of work on each face, and a shelf of four paint pots. The front leaf is the easel-leg node and tilts about the head hinge; the paper and the paint in the pots are modelled solid and do not move. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: easel-leg. Rigid node-transform clips: tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-classroom-easel-415eedd7","cdnUrl":"https://cdn.3dassets.dev/assets/34990/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-classroom-easel-415eedd7","thumbnailUrl":"https://cdn.3dassets.dev/assets/34990/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34990/v1/poster.webp","blurhash":"UIE.@HV[00x[~qt6D%Rk0KWX?as-IUWBogoM","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":68120,"triangles":1900,"vertices":3982,"meshes":13,"materials":7,"textures":0,"animations":["tilt"],"boundingBox":{"min":[-0.31004035096691385,0,-0.30114652607964],"max":[0.31004035096691385,1.1739932298660278,0.30115897052519713]},"sizeMeters":[0.62,1.174,0.602],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:11.660Z","updatedAt":"2026-09-11T10:55:11.790Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34990/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function DoubleSidedPaintingEaselNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34990/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34990/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34990/v1/model.glb\" alt=\"Double Sided Painting Easel (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34990/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34990/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35027","slug":"nursery-and-primary-classroom-tuff-tray-on-stand-59992b3b","title":"Tuff Tray on a Stand (Nursery and Primary Classroom)","summary":"A 940 mm moulded activity tray on a steel stand at 400 mm: a deep rimmed tray with a sand coloured base and loose parts, for messy play indoors or out.","description":"A 940 mm moulded activity tray on a steel stand at 400 mm: a deep rimmed tray with a sand coloured base and loose parts, for messy play indoors or out. The tray lifts off the stand in life; here it is modelled seated, with no separate node. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-tuff-tray-on-stand-59992b3b","cdnUrl":"https://cdn.3dassets.dev/assets/35027/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-tuff-tray-on-stand-59992b3b","thumbnailUrl":"https://cdn.3dassets.dev/assets/35027/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35027/v1/poster.webp","blurhash":"UNEeGTxF4pnk}@jZIpoL02R*x[ba0MWqgMR*","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":54184,"triangles":1204,"vertices":2602,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.4699999988079071,-0.000011902184237243783,-0.4699999988079071],"max":[0.4699999988079071,0.39999825066443195,0.4699999988079071]},"sizeMeters":[0.94,0.4,0.94],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:31.594Z","updatedAt":"2026-09-11T10:55:31.698Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35027/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TuffTrayOnAStandNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35027/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35027/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35027/v1/model.glb\" alt=\"Tuff Tray on a Stand (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35027/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35027/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35029","slug":"nursery-and-primary-classroom-waste-and-recycling-bins-3ea57cce","title":"Waste and Recycling Bin Pair (Nursery and Primary Classroom)","summary":"A pair of 360 mm pedal bins at 600 mm, one waste and one recycling, with coloured lid inserts and a foot pedal each.","description":"A pair of 360 mm pedal bins at 600 mm, one waste and one recycling, with coloured lid inserts and a foot pedal each. Both lids are named nodes on their back hinges; the pedal linkage is modelled but static, because a rigid node cannot follow it. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: bin-lid-1, bin-lid-2. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-waste-and-recycling-bins-3ea57cce","cdnUrl":"https://cdn.3dassets.dev/assets/35029/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-waste-and-recycling-bins-3ea57cce","thumbnailUrl":"https://cdn.3dassets.dev/assets/35029/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35029/v1/poster.webp","blurhash":"UCBX7Zq{00*Gm[x@tkMz4TtQ%yMyb-t9i~NY","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":35352,"triangles":944,"vertices":1910,"meshes":7,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.40000001251697537,-0.000005043135588078673,-0.17300862438002895],"max":[0.40000001251697537,0.5980049520259567,0.1920086330823071]},"sizeMeters":[0.8,0.598,0.365],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:32.331Z","updatedAt":"2026-09-11T10:55:32.486Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35029/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function WasteAndRecyclingBinPairNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35029/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35029/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35029/v1/model.glb\" alt=\"Waste and Recycling Bin Pair (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35029/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35029/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35003","slug":"nursery-and-primary-classroom-storage-trolley-e3babf7d","title":"Classroom Storage Trolley on Castors (Nursery and Primary Classroom)","summary":"A 620 mm classroom trolley on four braked castors: a ply frame carrying three deep coloured trays under a worktop, with a steel push handle.","description":"A 620 mm classroom trolley on four braked castors: a ply frame carrying three deep coloured trays under a worktop, with a steel push handle. The three trays are named nodes on their runners and the four castors share one roll clip. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: wheel-lb, wheel-lf, wheel-rb, wheel-rf, tray-1, tray-2, tray-3. Rigid node-transform clips: open, close and roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-storage-trolley-e3babf7d","cdnUrl":"https://cdn.3dassets.dev/assets/35003/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-storage-trolley-e3babf7d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35003/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35003/v1/poster.webp","blurhash":"UAF5]Xr^00t2.mx^McIA00oJ?uNd+Ev|J;Ff","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":91648,"triangles":3328,"vertices":7317,"meshes":11,"materials":6,"textures":0,"animations":["open","close","roll"],"boundingBox":{"min":[-0.30998869641104826,-1.5199184411063271e-9,-0.2099990764912556],"max":[0.30998869641104826,0.8759907749116695,0.2099990764912556]},"sizeMeters":[0.62,0.876,0.42],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:18.191Z","updatedAt":"2026-09-11T10:55:18.311Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35003/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function ClassroomStorageTrolleyOnCastorsNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35003/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35003/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35003/v1/model.glb\" alt=\"Classroom Storage Trolley on Castors (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35003/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35003/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35004","slug":"nursery-and-primary-classroom-role-play-kitchen-6660b4a1","title":"Role Play Kitchen Unit (Nursery and Primary Classroom)","summary":"A 920 mm role play kitchen at 620 mm: a ply unit with a glazed oven door, a cupboard, a moulded sink, a lever tap, a painted hob and a shelf of play pans over a splashback.","description":"A 920 mm role play kitchen at 620 mm: a ply unit with a glazed oven door, a cupboard, a moulded sink, a lever tap, a painted hob and a shelf of play pans over a splashback. The oven leaf and the cupboard leaf are named nodes on their real hinges. The hob rings, the pans and the tap lever are modelled solid and do not move. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: oven-door, cupboard-door-1. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-role-play-kitchen-6660b4a1","cdnUrl":"https://cdn.3dassets.dev/assets/35004/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-role-play-kitchen-6660b4a1","thumbnailUrl":"https://cdn.3dassets.dev/assets/35004/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35004/v1/poster.webp","blurhash":"UDF=s]9G00-:?^smHsI:00t7%Le-+tS6AuxB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":109008,"triangles":2494,"vertices":5269,"meshes":12,"materials":8,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.46000703921627467,0,-0.199987496088307],"max":[0.46000703921627467,1.0800000429153442,0.21999863972912126]},"sizeMeters":[0.92,1.08,0.42],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:19.528Z","updatedAt":"2026-09-11T10:55:19.649Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35004/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function RolePlayKitchenUnitNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35004/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35004/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35004/v1/model.glb\" alt=\"Role Play Kitchen Unit (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35004/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35004/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35006","slug":"nursery-and-primary-classroom-sand-and-water-tray-63ab2bae","title":"Sand and Water Tray on Legs (Nursery and Primary Classroom)","summary":"A 960 mm sand and water tray at 500 mm: a moulded twin tub on a beech frame, divided down the middle with settled sand one side and water the other, a scoop, a bucket and a hinged lid.","description":"A 960 mm sand and water tray at 500 mm: a moulded twin tub on a beech frame, divided down the middle with settled sand one side and water the other, a scoop, a bucket and a hinged lid. The lid is the tray-lid node on its back hinge. The sand and the water are static surfaces: neither is a rigid body, so neither is animated. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: tray-lid. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-sand-and-water-tray-63ab2bae","cdnUrl":"https://cdn.3dassets.dev/assets/35006/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-sand-and-water-tray-63ab2bae","thumbnailUrl":"https://cdn.3dassets.dev/assets/35006/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35006/v1/poster.webp","blurhash":"UAB#3P%g00x^uf.Rj2D*00OStSn48yMv$]#,","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":82896,"triangles":1856,"vertices":3980,"meshes":9,"materials":8,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.5049999952316284,0.000002592955757024784,-0.33502273312616776],"max":[0.5049999952316284,0.5509948985731349,0.33502273312616776]},"sizeMeters":[1.01,0.551,0.67],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:21.099Z","updatedAt":"2026-09-11T10:55:21.211Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35006/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function SandAndWaterTrayOnLegsNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35006/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35006/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35006/v1/model.glb\" alt=\"Sand and Water Tray on Legs (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35006/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35006/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35005","slug":"nursery-and-primary-classroom-dressing-up-rail-54682750","title":"Dressing Up Rail (Nursery and Primary Classroom)","summary":"A 940 mm dressing up rail at 1.28 m: a beech A-frame with a steel rail of four costumes on hangers, a child height mirror panel and a basket of hats in the base.","description":"A 940 mm dressing up rail at 1.28 m: a beech A-frame with a steel rail of four costumes on hangers, a child height mirror panel and a basket of hats in the base. The costumes and hats are modelled solid and do not swing, because cloth is not a rigid node. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-dressing-up-rail-54682750","cdnUrl":"https://cdn.3dassets.dev/assets/35005/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-dressing-up-rail-54682750","thumbnailUrl":"https://cdn.3dassets.dev/assets/35005/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35005/v1/poster.webp","blurhash":"U9E39m~W000MJY-:xS9G00EL?a-6D*xu-pIB","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":128184,"triangles":2972,"vertices":6459,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.4700039791137505,0,-0.23001282350346208],"max":[0.4700039791137505,1.340000033378601,0.2429734269122888]},"sizeMeters":[0.94,1.34,0.473],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:19.507Z","updatedAt":"2026-09-11T10:55:19.611Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35005/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DressingUpRailNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35005/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35005/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35005/v1/model.glb\" alt=\"Dressing Up Rail (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35005/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35005/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35009","slug":"nursery-and-primary-classroom-small-world-table-8ba1ab02","title":"Small World Play Table (Nursery and Primary Classroom)","summary":"A 940 mm small world table at 420 mm: a rimmed ply top with a printed grass, road and river mat, holding play buildings and trees.","description":"A 940 mm small world table at 420 mm: a rimmed ply top with a printed grass, road and river mat, holding play buildings and trees. The rim keeps loose pieces on the table; the pieces themselves are fixed solids. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-small-world-table-8ba1ab02","cdnUrl":"https://cdn.3dassets.dev/assets/35009/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-small-world-table-8ba1ab02","thumbnailUrl":"https://cdn.3dassets.dev/assets/35009/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35009/v1/poster.webp","blurhash":"UDDvs0xt8_%M~p%LMyM|00a#J7M_00IVx[aw","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":69180,"triangles":1636,"vertices":3375,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.4699999988079071,-0.000005409901883635104,-0.329991148795273],"max":[0.4699999988079071,0.5840068504525343,0.3400133642670065]},"sizeMeters":[0.94,0.584,0.67],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:22.325Z","updatedAt":"2026-09-11T10:55:22.432Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35009/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SmallWorldPlayTableNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35009/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35009/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35009/v1/model.glb\" alt=\"Small World Play Table (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35009/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35009/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35014","slug":"nursery-and-primary-classroom-high-chair-36d08929","title":"Nursery High Chair (Nursery and Primary Classroom)","summary":"A 420 mm nursery high chair with a 540 mm seat: a beech splayed leg frame with a moulded seat and back, a crotch post and a lift up feeding tray.","description":"A 420 mm nursery high chair with a 540 mm seat: a beech splayed leg frame with a moulded seat and back, a crotch post and a lift up feeding tray. The tray is the chair-tray node on its back hinge; the harness is not modelled. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: chair-tray. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-high-chair-36d08929","cdnUrl":"https://cdn.3dassets.dev/assets/35014/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-high-chair-36d08929","thumbnailUrl":"https://cdn.3dassets.dev/assets/35014/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35014/v1/poster.webp","blurhash":"U8D9-M-T00F2??Vr4VpJ4osltQNf=}tRo]nP","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":42216,"triangles":1010,"vertices":1978,"meshes":4,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.20999999344348907,0,-0.25808588997059434],"max":[0.20999999344348907,0.8868012428283691,0.25837566536365003]},"sizeMeters":[0.42,0.887,0.516],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:24.309Z","updatedAt":"2026-09-11T10:55:24.413Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35014/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function NurseryHighChairNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35014/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35014/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35014/v1/model.glb\" alt=\"Nursery High Chair (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35014/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35014/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35015","slug":"nursery-and-primary-classroom-changing-station-unit-6fda4348","title":"Nursery Changing Station Unit (Nursery and Primary Classroom)","summary":"A 960 mm nursery changing unit at 920 mm: a ply carcass of two drawers and a cupboard under a padded changing mat in a raised safety surround, with fixed side steps and a grab rail.","description":"A 960 mm nursery changing unit at 920 mm: a ply carcass of two drawers and a cupboard under a padded changing mat in a raised safety surround, with fixed side steps and a grab rail. The drawers and the cupboard leaf are named nodes; the steps are modelled fixed, because the sprung folding frame is a linkage a rigid node cannot follow. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: drawer-1, drawer-2, cupboard-door-1. Rigid node-transform clips: drawer-open, drawer-close, door-open and door-close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-changing-station-unit-6fda4348","cdnUrl":"https://cdn.3dassets.dev/assets/35015/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-changing-station-unit-6fda4348","thumbnailUrl":"https://cdn.3dassets.dev/assets/35015/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35015/v1/poster.webp","blurhash":"UPG+U8x^01ni~U%1IpNa8_xCocNHT1X9V@V@","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":91532,"triangles":2188,"vertices":4835,"meshes":10,"materials":6,"textures":0,"animations":["drawer-open","drawer-close","door-open","door-close"],"boundingBox":{"min":[-0.47999998927116394,0,-0.3099938868142958],"max":[0.6499999761581421,1.039992641795611,0.32799861619204773]},"sizeMeters":[1.13,1.04,0.638],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:24.785Z","updatedAt":"2026-09-11T10:55:24.884Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35015/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function NurseryChangingStationUnitNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35015/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35015/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35015/v1/model.glb\" alt=\"Nursery Changing Station Unit (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35015/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35015/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35008","slug":"nursery-and-primary-classroom-soft-play-steps-and-wedg-b3118544","title":"Soft Play Steps and Wedge Set (Nursery and Primary Classroom)","summary":"A three step soft play block and a matching foam wedge on a 1.7 m base mat: rounded upholstered shapes in the primaries for a baby room or a climbing corner.","description":"A three step soft play block and a matching foam wedge on a 1.7 m base mat: rounded upholstered shapes in the primaries for a baby room or a climbing corner. One static group; the foam pieces are modelled in their set out positions. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-soft-play-steps-and-wedg-b3118544","cdnUrl":"https://cdn.3dassets.dev/assets/35008/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-soft-play-steps-and-wedg-b3118544","thumbnailUrl":"https://cdn.3dassets.dev/assets/35008/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35008/v1/poster.webp","blurhash":"U8C@1z|z00EKNz%MV;Me002V.k#,j.ICtBx[","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":22776,"triangles":516,"vertices":1054,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.8299999833106995,-0.000026159308400330872,-0.5499954183668396],"max":[0.8700000047683716,0.770063571951833,0.5499954183668396]},"sizeMeters":[1.7,0.77,1.1],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:21.276Z","updatedAt":"2026-09-11T10:55:21.379Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35008/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SoftPlayStepsAndWedgeSetNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35008/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35008/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35008/v1/model.glb\" alt=\"Soft Play Steps and Wedge Set (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35008/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35008/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35011","slug":"nursery-and-primary-classroom-puppet-theatre-frame-6805e67f","title":"Puppet Theatre Frame (Nursery and Primary Classroom)","summary":"An 840 mm puppet theatre at 1.36 m: a beech frame with a fabric valance, a blank name board, a playing counter, side curtains and two hand puppets resting on the sill.","description":"An 840 mm puppet theatre at 1.36 m: a beech frame with a fabric valance, a blank name board, a playing counter, side curtains and two hand puppets resting on the sill. The curtains are modelled open and do not draw, because a gathered curtain is a deforming surface. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-puppet-theatre-frame-6805e67f","cdnUrl":"https://cdn.3dassets.dev/assets/35011/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-puppet-theatre-frame-6805e67f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35011/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35011/v1/poster.webp","blurhash":"U7Dl[@-=00D#;0-:6A0L00RO_NgPCA%M[8D$","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":67160,"triangles":1596,"vertices":3262,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.4200265411600536,0,-0.2100132705800268],"max":[0.4200265411600536,1.409999966621399,0.2100132705800268]},"sizeMeters":[0.84,1.41,0.42],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:22.897Z","updatedAt":"2026-09-11T10:55:22.998Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35011/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PuppetTheatreFrameNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35011/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35011/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35011/v1/model.glb\" alt=\"Puppet Theatre Frame (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35011/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35011/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35007","slug":"nursery-and-primary-classroom-construction-brick-tub-4b667eb6","title":"Construction Brick Tub (Nursery and Primary Classroom)","summary":"A 600 mm round construction tub at 280 mm with rope handles, holding stacking bricks in the four primaries with a handful spilled out onto the floor beside it.","description":"A 600 mm round construction tub at 280 mm with rope handles, holding stacking bricks in the four primaries with a handful spilled out onto the floor beside it. The bricks are separate solids in fixed poses; nothing here is animated. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-construction-brick-tub-4b667eb6","cdnUrl":"https://cdn.3dassets.dev/assets/35007/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-construction-brick-tub-4b667eb6","thumbnailUrl":"https://cdn.3dassets.dev/assets/35007/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35007/v1/poster.webp","blurhash":"UCCOqBWF0L-o,[jXJ6WF0KR%}sR+Aqfn$Soc","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":101532,"triangles":2496,"vertices":5118,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.4234168231487274,-0.000002381038843313199,-0.29694536488891926],"max":[0.47197121381759644,0.2799830458171273,0.4297175705432892]},"sizeMeters":[0.895,0.28,0.727],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:20.084Z","updatedAt":"2026-09-11T10:55:20.247Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35007/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ConstructionBrickTubNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35007/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35007/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35007/v1/model.glb\" alt=\"Construction Brick Tub (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35007/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35007/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35012","slug":"nursery-and-primary-classroom-rocking-toy-fce0d10d","title":"Rocking Toy (Nursery and Primary Classroom)","summary":"A 640 mm rocking toy on curved runners: a moulded body with a padded seat, a back rest, a head and a steel grab handle, sized for a two to four year old.","description":"A 640 mm rocking toy on curved runners: a moulded body with a padded seat, a back rest, a head and a steel grab handle, sized for a two to four year old. The whole toy is the rocker node, pivoted on the centre of the runner arc, which is what makes it rock on the floor rather than about its own seat. Metre units, +Y up, the user side toward +Z, resting on y=0. Named pivoted nodes: rocker. Rigid node-transform clips: rock. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-rocking-toy-fce0d10d","cdnUrl":"https://cdn.3dassets.dev/assets/35012/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-rocking-toy-fce0d10d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35012/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35012/v1/poster.webp","blurhash":"UACQ0rS[00r#CARPz-yD00e9_Kt,]Lt2K9N1","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":53380,"triangles":1192,"vertices":2480,"meshes":7,"materials":7,"textures":0,"animations":["rock"],"boundingBox":{"min":[-0.18199145517238063,0.000004321572567196619,-0.3100000023841858],"max":[0.18199145517238063,0.724329951107502,0.34016308636912573]},"sizeMeters":[0.364,0.724,0.65],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:23.172Z","updatedAt":"2026-09-11T10:55:23.302Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35012/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n  mixer = new AnimationMixer(gltf.scene)\n  mixer.clipAction(gltf.animations[0]).play()\n})\n\n// Call from your render loop; deltaSeconds is time since the previous frame.\nfunction updateAssetAnimation(deltaSeconds) {\n  mixer?.update(deltaSeconds)\n}","r3f":"import { useGLTF, useAnimations } from '@react-three/drei'\nimport { useEffect } from 'react'\n\nexport function RockingToyNurseryAndPrimaryClassroom(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35012/v1/model.glb')\n  const { actions, names } = useAnimations(animations, scene)\n  useEffect(() => {\n    const action = actions[names[0]]\n    action?.reset().play()\n    return () => { action?.stop() }\n  }, [actions, names])\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35012/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35012/v1/model.glb\" alt=\"Rocking Toy (Nursery and Primary Classroom)\" camera-controls auto-rotate autoplay></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35012/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.\n# Clips arrive as actions; play them from the Dope Sheet > Action Editor.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)\nvar player := model.find_child(\"AnimationPlayer\", true, false) as AnimationPlayer\nplayer.play(player.get_animation_list()[0])","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35012/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35013","slug":"nursery-and-primary-classroom-nap-mat-stack-bdac4cf5","title":"Stack of Nap Mats (Nursery and Primary Classroom)","summary":"Five folded nursery nap mats stacked and strapped, 620 mm by 440 mm and 400 mm high, in the four primaries.","description":"Five folded nursery nap mats stacked and strapped, 620 mm by 440 mm and 400 mm high, in the four primaries. The stack is one static group: folded foam is not a rigid node. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-nap-mat-stack-bdac4cf5","cdnUrl":"https://cdn.3dassets.dev/assets/35013/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-nap-mat-stack-bdac4cf5","thumbnailUrl":"https://cdn.3dassets.dev/assets/35013/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35013/v1/poster.webp","blurhash":"UAGHuO=}00oe}t-nKMNH00rqogIpF=Vuz=JQ","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":100136,"triangles":2652,"vertices":5725,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.33038318157196045,0.000010942062230873129,-0.23111857928111243],"max":[0.33038318157196045,0.4199890448247473,0.27000107302264464]},"sizeMeters":[0.661,0.42,0.501],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:24.920Z","updatedAt":"2026-09-11T10:55:25.042Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35013/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StackOfNapMatsNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35013/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35013/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35013/v1/model.glb\" alt=\"Stack of Nap Mats (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35013/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35013/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34996","slug":"nursery-and-primary-classroom-coat-peg-rail-ebc8e1e1","title":"Coat Peg Rail with Coats and Bags (Nursery and Primary Classroom)","summary":"A 1.2 m cloakroom peg rail: a ply board of five double pegs with coloured name plates, hung with children's coats and book bags.","description":"A 1.2 m cloakroom peg rail: a ply board of five double pegs with coloured name plates, hung with children's coats and book bags. Mount the board with its top edge at 1.3 m. Rails butt on peg-left and peg-right at 1.2 m centres. The coats and bags are modelled solid and do not swing, because cloth is not a rigid node. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-coat-peg-rail-ebc8e1e1","cdnUrl":"https://cdn.3dassets.dev/assets/34996/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-coat-peg-rail-ebc8e1e1","thumbnailUrl":"https://cdn.3dassets.dev/assets/34996/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34996/v1/poster.webp","blurhash":"UIHoK$tQD5=??c~UR$E200t9pHEMD%RWR:V?","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":75020,"triangles":1714,"vertices":3664,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.6100000143051147,0,-0.010986663847929769],"max":[0.6100000143051147,0.7099743578945106,0.12999231584105977]},"sizeMeters":[1.22,0.71,0.141],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:14.525Z","updatedAt":"2026-09-11T10:55:14.630Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34996/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CoatPegRailWithCoatsAndBagsNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34996/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34996/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34996/v1/model.glb\" alt=\"Coat Peg Rail with Coats and Bags (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/34996/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/34996/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35026","slug":"nursery-and-primary-classroom-cloakroom-bench-b1e252f5","title":"Cloakroom Bench with Shoe Shelf (Nursery and Primary Classroom)","summary":"A 1.2 m cloakroom bench at 300 mm: a ply seat on sled ends over a shoe shelf of plimsolls and kit bags, sized for a child to sit and change.","description":"A 1.2 m cloakroom bench at 300 mm: a ply seat on sled ends over a shoe shelf of plimsolls and kit bags, sized for a child to sit and change. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-cloakroom-bench-b1e252f5","cdnUrl":"https://cdn.3dassets.dev/assets/35026/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-cloakroom-bench-b1e252f5","thumbnailUrl":"https://cdn.3dassets.dev/assets/35026/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35026/v1/poster.webp","blurhash":"UBD]ewxc01%H~p_3M|D*00%e_2D+0001%L-;","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":45116,"triangles":1144,"vertices":2232,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000000238418579,0.000028839592439357242,-0.17001862304671317],"max":[0.6000000238418579,0.3391999900341034,0.17001862304671317]},"sizeMeters":[1.2,0.339,0.34],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:30.792Z","updatedAt":"2026-09-11T10:55:30.895Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35026/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CloakroomBenchWithShoeShelfNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35026/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35026/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35026/v1/model.glb\" alt=\"Cloakroom Bench with Shoe Shelf (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35026/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35026/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35028","slug":"nursery-and-primary-classroom-welly-rack-7c3cf156","title":"Outdoor Welly Rack (Nursery and Primary Classroom)","summary":"A 940 mm welly rack at 500 mm: a beech frame of eight steel pegs over a drip tray, hung with four pairs of children's wellingtons.","description":"A 940 mm welly rack at 500 mm: a beech frame of eight steel pegs over a drip tray, hung with four pairs of children's wellingtons. The boots are modelled solid on their pegs and do not move. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-welly-rack-7c3cf156","cdnUrl":"https://cdn.3dassets.dev/assets/35028/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-welly-rack-7c3cf156","thumbnailUrl":"https://cdn.3dassets.dev/assets/35028/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35028/v1/poster.webp","blurhash":"UAFrqxR5HXI@-n~V9G4o00I@1IxD5St,-:D%","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":51112,"triangles":1744,"vertices":3522,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.4699999988079071,0.000006094824592184356,-0.21000610316924248],"max":[0.4699999988079071,0.5199938861019215,0.2100113119265964]},"sizeMeters":[0.94,0.52,0.42],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:32.309Z","updatedAt":"2026-09-11T10:55:32.414Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35028/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function OutdoorWellyRackNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35028/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35028/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35028/v1/model.glb\" alt=\"Outdoor Welly Rack (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35028/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35028/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35016","slug":"nursery-and-primary-classroom-buggy-park-frame-193346f1","title":"Buggy Park Frame (Nursery and Primary Classroom)","summary":"A 1.62 m buggy park frame at 620 mm: a steel hooped rack of four numbered bays with coloured floor markings and a blank sign panel, for a nursery entrance lobby.","description":"A 1.62 m buggy park frame at 620 mm: a steel hooped rack of four numbered bays with coloured floor markings and a blank sign panel, for a nursery entrance lobby. The sign face is blank so a consumer can texture it. No buggies are included. Metre units, +Y up, the user side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/nursery-and-primary-classroom-buggy-park-frame-193346f1","cdnUrl":"https://cdn.3dassets.dev/assets/35016/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-buggy-park-frame-193346f1","thumbnailUrl":"https://cdn.3dassets.dev/assets/35016/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35016/v1/poster.webp","blurhash":"U9C?o*[;005?8}yXtkH?0KJ.M_sj~A^jMy4:","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":44628,"triangles":1148,"vertices":2680,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.8399999737739563,-0.00005552097898081643,-0.33851740024064125],"max":[0.8399999737739563,0.9200555376682813,0.33851740024064125]},"sizeMeters":[1.68,0.92,0.677],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:26.062Z","updatedAt":"2026-09-11T10:55:26.159Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35016/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BuggyParkFrameNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35016/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35016/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35016/v1/model.glb\" alt=\"Buggy Park Frame (Nursery and Primary Classroom)\" camera-controls auto-rotate></model-viewer>","blender":"# Blender 4.x: File > Import > glTF 2.0, or from the Python console after downloading the file.\nimport bpy\nbpy.ops.import_scene.gltf(filepath='model.glb')  # from https://cdn.3dassets.dev/assets/35016/v1/model.glb\n# Metres and +Y up are converted to Blender's Z-up scene automatically.","godot":"# Godot 4: copy model.glb into res://models/ and the editor imports it as a scene.\nvar packed := load(\"res://models/model.glb\") as PackedScene\nvar model := packed.instantiate()\nadd_child(model)","unity":"// Unity: import model.glb with glTFast (Package Manager: com.unity.cloud.gltfast) and drag the prefab in,\n// or load it at runtime straight from the CDN:\nusing GLTFast;\nvar gltf = new GltfImport();\nif (await gltf.Load(\"https://cdn.3dassets.dev/assets/35016/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}}]}}