{"data":{"id":286,"slug":"nursery-and-primary-classroom","title":"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.","description":"A modern realistic western nursery and primary classroom interior for early years rooms, reception classes and primary teaching spaces. Furniture is at child height: tables at 530 mm, chairs at 310 and 350 mm, the sink run at 600 mm and pegs at 1.3 m, with rounded corners and the four primaries carrying the trays, chair shells, carpet tiles and displays. Wall and door modules run on a 1.2 m by 2.6 m grid with wall-left and wall-right connectors; floor tiles are 1.2 m square, carpet story mats are 600 mm square, tray units run on a 620 mm module and coat peg rails on 1.2 m centres, so a room, a story corner, a storage wall and a cloakroom are each the same piece repeated. Tray and drawer fronts, the role play kitchen oven and cupboard leaves, the sink and first aid cabinet doors, the fire exit leaf, the sand and water lid, the bin lids, the high chair tray and the drying rack shelves are named nodes on their real hinge or slide axes, each shipping a rigid open and close clip; the trolley castors ship a roll clip, the rocking toy rocks on the centre of its runner arc and the easel's front leaf tilts on its head hinge. Node transforms only, no skinning. What deliberately does not move: the coats, bags, costumes and cushions, because cloth is not a rigid node; the sand and the water, which are settled surfaces rather than bodies; the paper on the easel, the drying rack and the display boards; and the changing unit's folding steps and the bin pedal linkages, which no single rigid node can follow. There are no children or adults in the pack, because nothing here is skinned. Every file is self-contained CC0 geometry with no collision or navigation data.","url":"https://3dassets.dev/packs/nursery-and-primary-classroom","coverUrl":"https://cdn.3dassets.dev/assets/35031/v1/poster.webp","assetCount":50,"aiGenerated":true,"aiGeneratedAssetCount":50,"aiModels":["Claude Opus 5"],"aiModelUnspecifiedCount":0,"featured":true,"licenseLabel":"CC0 1.0 Universal","totalBytes":5719324,"totalTriangles":162596,"starterScene":{"id":"35031","slug":"nursery-and-primary-classroom-nursery-cl-ed2d1cbb-starter-scene","title":"Nursery and Primary Classroom (Nursery and Primary Classroom)","summary":"A working early years classroom: a carpet story corner of mat tiles facing an interactive whiteboard and the teacher's desk, three table groups of child height tables and coloured chairs, a wall run of tray units under display boards and a number frieze, a cloakroom of peg...","description":"A working early years classroom: a carpet story corner of mat tiles facing an interactive whiteboard and the teacher's desk, three table groups of child height tables and coloured chairs, a wall run of tray units under display boards and a number frieze, a cloakroom of peg rails, a bench, a welly rack and a buggy park by the fire exit, a play corner of the role play kitchen, dressing up rail, sand and water tray, small world table and soft play shapes, and a practical corner with the child height sink run, the art drying rack and the paint trolley. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/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","thumbnailUrl":"https://cdn.3dassets.dev/assets/35031/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35031/v1/poster.webp","blurhash":"U5Fr;SyC00-;_4xuaKR*00r^?G9F4mV[EMIU","category":{"slug":"environments","title":"Environments & Scenes"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"kit","title":"Kit / Set"}],"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":2724228,"triangles":78170,"vertices":167333,"meshes":319,"materials":12,"textures":0,"animations":[],"boundingBox":{"min":[-4.32497665000747,-0.000009064742732602452,-3.7249766500074695],"max":[4.32497665000747,2.625999904632568,3.600000023841858]},"sizeMeters":[8.65,2.626,7.325],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:34.773Z","updatedAt":"2026-09-11T10:55:34.874Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35031/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function NurseryAndPrimaryClassroomNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35031/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35031/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35031/v1/model.glb\" alt=\"Nursery and Primary Classroom (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/35031/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/35031/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},"assets":[{"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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);"}},{"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"35030","slug":"nursery-and-primary-classroom-ceiling-light-panel-832cde73","title":"Ceiling Light Panel (Nursery and Primary Classroom)","summary":"A 1.18 m by 320 mm recessed ceiling light panel with a diffuser and a surface mounting channel.","description":"A 1.18 m by 320 mm recessed ceiling light panel with a diffuser and a surface mounting channel. Modelled with the diffuser face downward and the fitting resting on y=0; place it at ceiling height. No light source is included, because a GLB carries geometry, not lighting. 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-ceiling-light-panel-832cde73","cdnUrl":"https://cdn.3dassets.dev/assets/35030/v1/model.glb","downloadUrl":"https://3dassets.dev/download/nursery-and-primary-classroom-ceiling-light-panel-832cde73","thumbnailUrl":"https://cdn.3dassets.dev/assets/35030/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35030/v1/poster.webp","blurhash":"U7BWlJ%M00xtxv_4s:D%00Rl~qRiIA00Rk.8","category":{"slug":"buildings","title":"Buildings & Architecture"},"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":15380,"triangles":320,"vertices":715,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.5899999737739563,-0.000003905408431148505,-0.15998259733822448],"max":[0.5899999737739563,0.1149939714132874,0.15998259733822448]},"sizeMeters":[1.18,0.115,0.32],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:32.643Z","updatedAt":"2026-09-11T10:55:32.766Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35030/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CeilingLightPanelNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35030/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35030/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35030/v1/model.glb\" alt=\"Ceiling Light Panel (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/35030/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/35030/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35031","slug":"nursery-and-primary-classroom-nursery-cl-ed2d1cbb-starter-scene","title":"Nursery and Primary Classroom (Nursery and Primary Classroom)","summary":"A working early years classroom: a carpet story corner of mat tiles facing an interactive whiteboard and the teacher's desk, three table groups of child height tables and coloured chairs, a wall run of tray units under display boards and a number frieze, a cloakroom of peg...","description":"A working early years classroom: a carpet story corner of mat tiles facing an interactive whiteboard and the teacher's desk, three table groups of child height tables and coloured chairs, a wall run of tray units under display boards and a number frieze, a cloakroom of peg rails, a bench, a welly rack and a buggy park by the fire exit, a play corner of the role play kitchen, dressing up rail, sand and water tray, small world table and soft play shapes, and a practical corner with the child height sink run, the art drying rack and the paint trolley. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/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","thumbnailUrl":"https://cdn.3dassets.dev/assets/35031/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35031/v1/poster.webp","blurhash":"U5Fr;SyC00-;_4xuaKR*00r^?G9F4mV[EMIU","category":{"slug":"environments","title":"Environments & Scenes"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"kit","title":"Kit / Set"}],"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":2724228,"triangles":78170,"vertices":167333,"meshes":319,"materials":12,"textures":0,"animations":[],"boundingBox":{"min":[-4.32497665000747,-0.000009064742732602452,-3.7249766500074695],"max":[4.32497665000747,2.625999904632568,3.600000023841858]},"sizeMeters":[8.65,2.626,7.325],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:55:34.773Z","updatedAt":"2026-09-11T10:55:34.874Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35031/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function NurseryAndPrimaryClassroomNurseryAndPrimaryClassroom(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35031/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35031/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35031/v1/model.glb\" alt=\"Nursery and Primary Classroom (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/35031/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/35031/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}}],"demo":{"slug":"nursery-and-primary-classroom","title":"Nursery and Primary Classroom","url":"https://3dassets.dev/demos/nursery-and-primary-classroom"}}}