{"data":{"id":302,"slug":"escape-room-and-puzzle-venue","title":"Escape Room and Puzzle Venue","summary":"Realistic escape room models: modular puzzle room walls, a door with a magnetic lock, a false bookcase door, padlocks, dials, levers, valve boards and safes, plus the games master desk, prop store, reception, lockers and signage of the venue around them.","description":"A modern realistic escape room business for building a venue of two or three themed rooms with the operation behind them. The shell is modular: 1.2 by 2.6 m wall modules dressed on both faces, plain painted, walnut panelled, as a venue corridor and as a hidden panel section, a door module with an 800 by 2050 mm leaf on a magnetic lock with a glazed vision port, a false bookcase door whose whole case swings on a concealed hinge, 1.2 m floor tiles plain and with a steel pressure plate in them, and 1.2 m ceiling panels on a tee grid with a camera dome and a speaker. The puzzles are modelled as mechanisms: combination padlocks in three sizes, a key safe with a numbered dial, a keypad wall plate, a three lever panel with red, green and brass knobs, a pipe and valve board with three handwheels and two gauges, a wire patch panel, a balance on a plinth, a UV mark panel with its lamp, a sliding tile frame, a map and pin board, a writing desk with a ledger and quill, a banded chest with hasps, a drawer unit with a false bottom, a mirror on a hidden catch, a candle sconce lever and a floor safe with a spoked handwheel. The venue is the rest of the job: the games master desk with a six monitor bank, talkback microphone and reset tray, the headset, prop store shelving, reception, a waiting sofa, phone and bag lockers, a briefing screen, a leaderboard, venue signage and room name plates, a photo backdrop, drinks vending and a bin. Every leaf, drawer, lever, valve wheel, dial and lid is a named node on its own pivot and ships rigid open, close, spin and tilt clips: node transforms only, no skinning. Padlock shackles stay shut, patch leads and headset cables are modelled in one fixed loop, candle wicks are unlit, pressure plates travel 8 mm and are left static, and the tiles of the sliding puzzle stay where they are, because a flexible run, a flame and fifteen separate tiles are not worth a rigid node transform each. Signs, books, maps, charts, leaderboards and screen faces are abstract blocks and bands, never readable text, so nothing implies a real venue, franchise or brand. Every file is self-contained CC0 geometry with no collision or navigation data.","url":"https://3dassets.dev/packs/escape-room-and-puzzle-venue","coverUrl":"https://cdn.3dassets.dev/assets/35814/v1/poster.webp","assetCount":45,"aiGenerated":true,"aiGeneratedAssetCount":45,"aiModels":["Claude Opus 5"],"aiModelUnspecifiedCount":0,"featured":true,"licenseLabel":"CC0 1.0 Universal","totalBytes":6185088,"totalTriangles":155224,"starterScene":{"id":"35814","slug":"escape-room-and-puzzle-venue-escape-room-f18faa23-starter-scene","title":"Escape Room Venue: Two Themed Rooms and Front of House (Escape Room and Puzzle Venue)","summary":"A working escape room venue on its own 1.2 m floor tiles, 14 by 9 m: two themed rooms side by side built from the pack's wall modules, the corridor between them and the front of house in front. The left room is a panelled study with the false bookcase door in its back wall, a...","description":"A working escape room venue on its own 1.2 m floor tiles, 14 by 9 m: two themed rooms side by side built from the pack's wall modules, the corridor between them and the front of house in front. The left room is a panelled study with the false bookcase door in its back wall, a banded chest, a floor safe, a writing desk with the ledger, a drawer unit with the false bottom, the map board, the UV mark panel, a candle sconce lever, a mirror on a hidden catch and the countdown clock. The right room is the mechanism room: the pipe and valve board, the three lever panel, the wire patch panel, a balance on its plinth, a keypad and two pressure plate tiles in the floor, with a hidden panel section in the party wall between the two. Both rooms close on door modules with magnetic locks and vision ports, and the corridor outside carries their name plates, hint screens and countdown timer boards under a run of ceiling panels with camera domes. Behind the rooms, the games master desk with its six monitor bank, talkback microphone, reset tray and headset, with three bays of prop store shelving against the back wall. In front, reception with the call bell, three banks of phone lockers, the waiting sofa, the briefing screen, the leaderboard, the venue sign, the photo backdrop, drinks vending and a bin.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-escape-room-f18faa23-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/35814/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-escape-room-f18faa23-starter-scene","thumbnailUrl":"https://cdn.3dassets.dev/assets/35814/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35814/v1/poster.webp","blurhash":"U6B|B6t501j^~p%fM{W:00xu?HNF00DixaRP","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":3008212,"triangles":78380,"vertices":169162,"meshes":268,"materials":12,"textures":0,"animations":[],"boundingBox":{"min":[-6.700978419709934,0.000031372485010172646,-4.3599658134018755],"max":[6.675984981515735,2.6539999046325686,4.199911474317897]},"sizeMeters":[13.377,2.654,8.56],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:53:02.849Z","updatedAt":"2026-09-11T17:53:02.957Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35814/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function EscapeRoomVenueTwoThemedRoomsAndFrontOfHouseEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35814/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35814/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35814/v1/model.glb\" alt=\"Escape Room Venue: Two Themed Rooms and Front of House (Escape Room and Puzzle Venue)\" 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/35814/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/35814/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},"assets":[{"id":"35771","slug":"escape-room-and-puzzle-venue-puzzle-room-wall-module-89ab7b10","title":"Puzzle Room Wall Module (Escape Room and Puzzle Venue)","summary":"A 1.2 by 2.6 m puzzle room wall module, 120 mm thick, painted plaster over a stud core and dressed on both faces with a walnut skirting and picture rail. Its wall-left and wall-right ports butt module to module, so a themed room of any size closes on the same grid.","description":"A 1.2 by 2.6 m puzzle room wall module, 120 mm thick, painted plaster over a stud core and dressed on both faces with a walnut skirting and picture rail. Its wall-left and wall-right ports butt module to module, so a themed room of any size closes on the same grid. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-puzzle-room-wall-module-89ab7b10","cdnUrl":"https://cdn.3dassets.dev/assets/35771/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-puzzle-room-wall-module-89ab7b10","thumbnailUrl":"https://cdn.3dassets.dev/assets/35771/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35771/v1/poster.webp","blurhash":"U9DcRB_30000.8xuMxD%00M{~q-:x]t7ROM{","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"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":20188,"triangles":416,"vertices":926,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.599911474317897,0,-0.07593615713505728],"max":[0.599911474317897,2.5999999046325684,0.07593615713505728]},"sizeMeters":[1.2,2.6,0.152],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:30.980Z","updatedAt":"2026-09-11T17:52:31.100Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35771/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PuzzleRoomWallModuleEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35771/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35771/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35771/v1/model.glb\" alt=\"Puzzle Room Wall Module (Escape Room and Puzzle Venue)\" 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/35771/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/35771/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35770","slug":"escape-room-and-puzzle-venue-puzzle-room-wall-module-p-a29fc9ca","title":"Puzzle Room Wall Module, Timber Panelled (Escape Room and Puzzle Venue)","summary":"The same 1.2 by 2.6 m wall module dressed as a study: dark walnut lining with two rows of raised panels either side of a brass dado rail, on both faces. Use it to theme one room of a venue without changing the grid.","description":"The same 1.2 by 2.6 m wall module dressed as a study: dark walnut lining with two rows of raised panels either side of a brass dado rail, on both faces. Use it to theme one room of a venue without changing the grid. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-puzzle-room-wall-module-p-a29fc9ca","cdnUrl":"https://cdn.3dassets.dev/assets/35770/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-puzzle-room-wall-module-p-a29fc9ca","thumbnailUrl":"https://cdn.3dassets.dev/assets/35770/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35770/v1/poster.webp","blurhash":"U4Ach?^P000Mx]t6VsIp0NNc~T$zbvofniNG","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"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":30332,"triangles":640,"vertices":1420,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.599911474317897,0,-0.10097841970993397],"max":[0.599911474317897,2.5999999046325684,0.10097841970993397]},"sizeMeters":[1.2,2.6,0.202],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:30.965Z","updatedAt":"2026-09-11T17:52:31.082Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35770/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PuzzleRoomWallModuleTimberPanelledEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35770/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35770/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35770/v1/model.glb\" alt=\"Puzzle Room Wall Module, Timber Panelled (Escape Room and Puzzle Venue)\" 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/35770/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/35770/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35773","slug":"escape-room-and-puzzle-venue-puzzle-room-wall-hidden-p-7b4a8a2b","title":"Puzzle Room Wall, Hidden Panel Section (Escape Room and Puzzle Venue)","summary":"A panelled wall module with a 700 by 1100 mm section that is really a door: a concealed hinge on its left stile, a brass finger pull and a lined recess behind it with a key bar. Closed it is one more panel in the lining. Same ports as the plain module.","description":"A panelled wall module with a 700 by 1100 mm section that is really a door: a concealed hinge on its left stile, a brass finger pull and a lined recess behind it with a key bar. Closed it is one more panel in the lining. Same ports as the plain module. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: panel. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-puzzle-room-wall-hidden-p-7b4a8a2b","cdnUrl":"https://cdn.3dassets.dev/assets/35773/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-puzzle-room-wall-hidden-p-7b4a8a2b","thumbnailUrl":"https://cdn.3dassets.dev/assets/35773/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35773/v1/poster.webp","blurhash":"U49??zng00N|x[t6MyIW0NkD~9nhbut6nPM|","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"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":45496,"triangles":936,"vertices":2071,"meshes":7,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.599911474317897,0,-0.10097841970993397],"max":[0.599911474317897,2.5999999046325684,0.10399969281653795]},"sizeMeters":[1.2,2.6,0.205],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:31.018Z","updatedAt":"2026-09-11T17:52:31.219Z","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/35773/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 PuzzleRoomWallHiddenPanelSectionEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35773/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/35773/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35773/v1/model.glb\" alt=\"Puzzle Room Wall, Hidden Panel Section (Escape Room and Puzzle Venue)\" 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/35773/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/35773/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35772","slug":"escape-room-and-puzzle-venue-puzzle-room-door-module-3eac049f","title":"Puzzle Room Door Module (Escape Room and Puzzle Venue)","summary":"A 1.2 by 2.6 m wall module with an 800 by 2050 mm doorway in it: a framed timber leaf on a brass lever handle with a glazed vision port in a brass surround, a magnetic lock and armature plate at the head with its status lamp, and a closer arm. Same wall ports as the plain module.","description":"A 1.2 by 2.6 m wall module with an 800 by 2050 mm doorway in it: a framed timber leaf on a brass lever handle with a glazed vision port in a brass surround, a magnetic lock and armature plate at the head with its status lamp, and a closer arm. Same wall ports as the plain module. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: door. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-puzzle-room-door-module-3eac049f","cdnUrl":"https://cdn.3dassets.dev/assets/35772/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-puzzle-room-door-module-3eac049f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35772/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35772/v1/poster.webp","blurhash":"U5A^8v-:000L?^xuDOD%02Rj~B%MtRozRjM{","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"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":103240,"triangles":2288,"vertices":5083,"meshes":9,"materials":8,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.599911474317897,0,-0.07601799478710461],"max":[0.599911474317897,2.5999999046325684,0.08704060383006773]},"sizeMeters":[1.2,2.6,0.163],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:30.998Z","updatedAt":"2026-09-11T17:52:31.107Z","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/35772/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 PuzzleRoomDoorModuleEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35772/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/35772/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35772/v1/model.glb\" alt=\"Puzzle Room Door Module (Escape Room and Puzzle Venue)\" 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/35772/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/35772/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35776","slug":"escape-room-and-puzzle-venue-false-bookcase-door-431c9004","title":"False Bookcase Door (Escape Room and Puzzle Venue)","summary":"A 1.2 m walnut bookcase that is the door out of a study: five shelves of abstract books and a brass candlestick catch on a case 1.08 m wide, on a concealed hinge in its own lining, so the whole case swings out of the wall. Book spines are plain blocks, never readable titles.","description":"A 1.2 m walnut bookcase that is the door out of a study: five shelves of abstract books and a brass candlestick catch on a case 1.08 m wide, on a concealed hinge in its own lining, so the whole case swings out of the wall. Book spines are plain blocks, never readable titles. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: bookcase. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-false-bookcase-door-431c9004","cdnUrl":"https://cdn.3dassets.dev/assets/35776/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-false-bookcase-door-431c9004","thumbnailUrl":"https://cdn.3dassets.dev/assets/35776/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35776/v1/poster.webp","blurhash":"U39j7NxI009Y~Uxs9HE3IBXNk=w5?Gt6E2IW","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"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":375004,"triangles":8828,"vertices":19796,"meshes":5,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.599911474317897,0,-0.1599658134018756],"max":[0.599911474317897,2.5999999046325684,0.1599658134018756]},"sizeMeters":[1.2,2.6,0.32],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:33.888Z","updatedAt":"2026-09-11T17:52:34.008Z","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/35776/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 FalseBookcaseDoorEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35776/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/35776/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35776/v1/model.glb\" alt=\"False Bookcase Door (Escape Room and Puzzle Venue)\" 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/35776/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/35776/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35774","slug":"escape-room-and-puzzle-venue-puzzle-room-floor-tile-5c4ce834","title":"Puzzle Room Floor Tile (Escape Room and Puzzle Venue)","summary":"A 1.2 m square floor tile 54 mm thick: a dark deck carrying a walnut board face with four brass corner studs. Ports at the four edge midpoints tile a room, a corridor or a whole venue in both directions.","description":"A 1.2 m square floor tile 54 mm thick: a dark deck carrying a walnut board face with four brass corner studs. Ports at the four edge midpoints tile a room, a corridor or a whole venue in both directions. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-puzzle-room-floor-tile-5c4ce834","cdnUrl":"https://cdn.3dassets.dev/assets/35774/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-puzzle-room-floor-tile-5c4ce834","thumbnailUrl":"https://cdn.3dassets.dev/assets/35774/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35774/v1/poster.webp","blurhash":"U59Zv6%L01t8-UWCR*od00Io~BRj58oys:Rn","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"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":16300,"triangles":368,"vertices":732,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.597000002861023,0.000031372485010172646,-0.597000002861023],"max":[0.597000002861023,0.06097398418890519,0.597000002861023]},"sizeMeters":[1.194,0.061,1.194],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:33.848Z","updatedAt":"2026-09-11T17:52:33.967Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35774/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PuzzleRoomFloorTileEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35774/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35774/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35774/v1/model.glb\" alt=\"Puzzle Room Floor Tile (Escape Room and Puzzle Venue)\" 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/35774/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/35774/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35775","slug":"escape-room-and-puzzle-venue-pressure-plate-floor-tile-e80ee7e4","title":"Pressure Plate Floor Tile (Escape Room and Puzzle Venue)","summary":"The same 1.2 m floor tile with a 660 mm steel pressure plate in a brass surround set into it and a red state lamp at one corner. The plate travels 8 mm in use, which is too little to read as a clip, so it ships static.","description":"The same 1.2 m floor tile with a 660 mm steel pressure plate in a brass surround set into it and a red state lamp at one corner. The plate travels 8 mm in use, which is too little to read as a clip, so it ships static. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-pressure-plate-floor-tile-e80ee7e4","cdnUrl":"https://cdn.3dassets.dev/assets/35775/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-pressure-plate-floor-tile-e80ee7e4","thumbnailUrl":"https://cdn.3dassets.dev/assets/35775/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35775/v1/poster.webp","blurhash":"U8A0q3xt00Rj%2j?NGa}00NG~qog9aWX%2ja","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"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":25680,"triangles":560,"vertices":1168,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.597000002861023,0.000031372485010172646,-0.597000002861023],"max":[0.597000002861023,0.07199996757414372,0.597000002861023]},"sizeMeters":[1.194,0.072,1.194],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:33.870Z","updatedAt":"2026-09-11T17:52:33.989Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35775/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PressurePlateFloorTileEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35775/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35775/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35775/v1/model.glb\" alt=\"Pressure Plate Floor Tile (Escape Room and Puzzle Venue)\" 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/35775/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/35775/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35777","slug":"escape-room-and-puzzle-venue-room-ceiling-panel-cb081187","title":"Room Ceiling Panel with Camera Dome (Escape Room and Puzzle Venue)","summary":"A 1.2 m square ceiling module on an alloy tee grid: a painted tray panel with a smoked camera dome on its collar and a brass speaker grille, both hanging 90 mm below the face. Ports on the four edges run a ceiling over any room built from the wall modules.","description":"A 1.2 m square ceiling module on an alloy tee grid: a painted tray panel with a smoked camera dome on its collar and a brass speaker grille, both hanging 90 mm below the face. Ports on the four edges run a ceiling over any room built from the wall modules. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-room-ceiling-panel-cb081187","cdnUrl":"https://cdn.3dassets.dev/assets/35777/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-room-ceiling-panel-cb081187","thumbnailUrl":"https://cdn.3dassets.dev/assets/35777/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35777/v1/poster.webp","blurhash":"UBDl{1xu00WB^+kBIVjt00M{~qay00WB%LWB","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"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":42860,"triangles":948,"vertices":2037,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000000238418579,-0.0000021659862372291894,-0.6000000238418579],"max":[0.6000000238418579,0.15996780078098116,0.6000000238418579]},"sizeMeters":[1.2,0.16,1.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:33.927Z","updatedAt":"2026-09-11T17:52:34.045Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35777/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function RoomCeilingPanelWithCameraDomeEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35777/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35777/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35777/v1/model.glb\" alt=\"Room Ceiling Panel with Camera Dome (Escape Room and Puzzle Venue)\" 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/35777/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/35777/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35778","slug":"escape-room-and-puzzle-venue-countdown-wall-clock-efd2767c","title":"Countdown Wall Clock (Escape Room and Puzzle Venue)","summary":"A 380 mm brass cased wall clock for a themed room: a cream dial with plain hour marks, a red countdown arc on the last quarter and two hands on a brass boss. The hands are modelled in one fixed position, because a game clock is counted down by the venue software.","description":"A 380 mm brass cased wall clock for a themed room: a cream dial with plain hour marks, a red countdown arc on the last quarter and two hands on a brass boss. The hands are modelled in one fixed position, because a game clock is counted down by the venue software. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-countdown-wall-clock-efd2767c","cdnUrl":"https://cdn.3dassets.dev/assets/35778/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-countdown-wall-clock-efd2767c","thumbnailUrl":"https://cdn.3dassets.dev/assets/35778/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35778/v1/poster.webp","blurhash":"UDCGGQ%N00Di%1t7RkRP00M_~q%gW=RjRjtR","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":63724,"triangles":1548,"vertices":3164,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.1899999976158142,0.000006327761934210585,-0.000004455741541162239],"max":[0.2030765265226364,0.37722303496427734,0.08400445460905291]},"sizeMeters":[0.393,0.377,0.084],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:36.625Z","updatedAt":"2026-09-11T17:52:36.746Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35778/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CountdownWallClockEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35778/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35778/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35778/v1/model.glb\" alt=\"Countdown Wall Clock (Escape Room and Puzzle Venue)\" 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/35778/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/35778/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35779","slug":"escape-room-and-puzzle-venue-hint-screen-wall-panel-18f9cab7","title":"Hint Screen Wall Panel (Escape Room and Puzzle Venue)","summary":"A 860 by 500 mm hint screen on a wall bracket, the display a games master pushes a clue to: a bezelled case with a lit panel and a status strip, hung on a tilting head. The face is an abstract lit panel, never readable text, so it suits any theme.","description":"A 860 by 500 mm hint screen on a wall bracket, the display a games master pushes a clue to: a bezelled case with a lit panel and a status strip, hung on a tilting head. The face is an abstract lit panel, never readable text, so it suits any theme. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: screen. Rigid node-transform clips: tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-hint-screen-wall-panel-18f9cab7","cdnUrl":"https://cdn.3dassets.dev/assets/35779/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-hint-screen-wall-panel-18f9cab7","thumbnailUrl":"https://cdn.3dassets.dev/assets/35779/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35779/v1/poster.webp","blurhash":"U797nux^00aeAC%hxHI94TITyZxb$+rVM_O[","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":15624,"triangles":352,"vertices":776,"meshes":5,"materials":4,"textures":0,"animations":["tilt"],"boundingBox":{"min":[-0.4300000071525574,0.000007625469032324084,0.0000064407708954706405],"max":[0.4300000071525574,0.6399999856948853,0.10958238265979832]},"sizeMeters":[0.86,0.64,0.11],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:36.646Z","updatedAt":"2026-09-11T17:52:36.763Z","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/35779/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 HintScreenWallPanelEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35779/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/35779/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35779/v1/model.glb\" alt=\"Hint Screen Wall Panel (Escape Room and Puzzle Venue)\" 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/35779/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/35779/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35780","slug":"escape-room-and-puzzle-venue-timer-display-panel-90b797f0","title":"Countdown Timer Display Panel (Escape Room and Puzzle Venue)","summary":"A 860 by 340 mm timer board for over a room door: six seven-segment digits and two colon dots in red on a dark face, under a brass capping. The segments are lit geometry in one fixed pose, not a readable time, and the board is bolted to the wall, so it does not move.","description":"A 860 by 340 mm timer board for over a room door: six seven-segment digits and two colon dots in red on a dark face, under a brass capping. The segments are lit geometry in one fixed pose, not a readable time, and the board is bolted to the wall, so it does not move. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-timer-display-panel-90b797f0","cdnUrl":"https://cdn.3dassets.dev/assets/35780/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-timer-display-panel-90b797f0","thumbnailUrl":"https://cdn.3dassets.dev/assets/35780/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35780/v1/poster.webp","blurhash":"UABD7w%19at6~n?ajGNG0d---VRjMz%GtPV@","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":136012,"triangles":3168,"vertices":7128,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.4449999928474426,0.00001831006637428856,-0.014979397625388309],"max":[0.4449999928474426,0.3640053691573549,0.0820082417014597]},"sizeMeters":[0.89,0.364,0.097],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:36.802Z","updatedAt":"2026-09-11T17:52:37.025Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35780/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CountdownTimerDisplayPanelEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35780/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35780/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35780/v1/model.glb\" alt=\"Countdown Timer Display Panel (Escape Room and Puzzle Venue)\" 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/35780/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/35780/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35781","slug":"escape-room-and-puzzle-venue-corridor-wall-module-9211ac34","title":"Venue Corridor Wall Module (Escape Room and Puzzle Venue)","summary":"A 1.2 by 2.6 m corridor wall module on the same grid as the puzzle room walls: painted over a teal dado band with a brass capping rail and a blank brass module plate, dressed on both faces. Runs the circulation and the front of house between the themed rooms.","description":"A 1.2 by 2.6 m corridor wall module on the same grid as the puzzle room walls: painted over a teal dado band with a brass capping rail and a blank brass module plate, dressed on both faces. Runs the circulation and the front of house between the themed rooms. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-corridor-wall-module-9211ac34","cdnUrl":"https://cdn.3dassets.dev/assets/35781/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-corridor-wall-module-9211ac34","thumbnailUrl":"https://cdn.3dassets.dev/assets/35781/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35781/v1/poster.webp","blurhash":"UBC6_f.8004T~W%29ZD%4UV@?btRADS4-Aw_","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"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":32584,"triangles":672,"vertices":1506,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.599911474317897,-0.000018309336937277765,-0.07598498151573521],"max":[0.599911474317897,2.5999999046325684,0.07598498151573521]},"sizeMeters":[1.2,2.6,0.152],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:37.007Z","updatedAt":"2026-09-11T17:52:37.131Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35781/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function VenueCorridorWallModuleEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35781/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35781/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35781/v1/model.glb\" alt=\"Venue Corridor Wall Module (Escape Room and Puzzle Venue)\" 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/35781/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/35781/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35782","slug":"escape-room-and-puzzle-venue-combination-padlock-9dd9843e","title":"Combination Padlock (Escape Room and Puzzle Venue)","summary":"A 62 mm brass bodied combination padlock: a steel shackle through the case and four coded barrels with index bands across the face. The shackle is modelled closed and stays closed, because a lock that falls open is no longer a puzzle.","description":"A 62 mm brass bodied combination padlock: a steel shackle through the case and four coded barrels with index bands across the face. The shackle is modelled closed and stays closed, because a lock that falls open is no longer a puzzle. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-combination-padlock-9dd9843e","cdnUrl":"https://cdn.3dassets.dev/assets/35782/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-combination-padlock-9dd9843e","thumbnailUrl":"https://cdn.3dassets.dev/assets/35782/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35782/v1/poster.webp","blurhash":"U6BDKB?v00DiM|aJf9tT004n~U?bXU%Ns*Dh","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":65292,"triangles":1632,"vertices":3237,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.03099999949336052,-0.0000018913664473312053,-0.012000945877659786],"max":[0.03099999949336052,0.07299925102117136,0.019619220488606513]},"sizeMeters":[0.062,0.073,0.032],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:39.442Z","updatedAt":"2026-09-11T17:52:39.645Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35782/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CombinationPadlockEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35782/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35782/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35782/v1/model.glb\" alt=\"Combination Padlock (Escape Room and Puzzle Venue)\" 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/35782/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/35782/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35783","slug":"escape-room-and-puzzle-venue-combination-padlock-small-1cc72aa6","title":"Combination Padlock, Small (Escape Room and Puzzle Venue)","summary":"The same combination padlock at 42 mm, the size that closes a small box, a cash tin or a locker hasp. Shackle closed and static.","description":"The same combination padlock at 42 mm, the size that closes a small box, a cash tin or a locker hasp. Shackle closed and static. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-combination-padlock-small-1cc72aa6","cdnUrl":"https://cdn.3dassets.dev/assets/35783/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-combination-padlock-small-1cc72aa6","thumbnailUrl":"https://cdn.3dassets.dev/assets/35783/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35783/v1/poster.webp","blurhash":"U7BWVo~q009FRjRiRjtS0000~o?b%h%hV=Di","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":65368,"triangles":1632,"vertices":3237,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.021080000326037407,-0.0000012859994408045972,-0.008160643456397733],"max":[0.021080000326037407,0.049639491468613864,0.013593294705982167]},"sizeMeters":[0.042,0.05,0.022],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:39.613Z","updatedAt":"2026-09-11T17:52:39.721Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35783/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CombinationPadlockSmallEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35783/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35783/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35783/v1/model.glb\" alt=\"Combination Padlock, Small (Escape Room and Puzzle Venue)\" 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/35783/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/35783/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35784","slug":"escape-room-and-puzzle-venue-combination-padlock-large-e9af5275","title":"Combination Padlock, Large (Escape Room and Puzzle Venue)","summary":"The same combination padlock at 96 mm, the size that closes a chest, a gate hasp or a prop cage. Shackle closed and static.","description":"The same combination padlock at 96 mm, the size that closes a chest, a gate hasp or a prop cage. Shackle closed and static. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-combination-padlock-large-e9af5275","cdnUrl":"https://cdn.3dassets.dev/assets/35784/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-combination-padlock-large-e9af5275","thumbnailUrl":"https://cdn.3dassets.dev/assets/35784/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35784/v1/poster.webp","blurhash":"U6A^8t?b00IAR+VsRktm009F~V?HS%%g$|Dh","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":65212,"triangles":1632,"vertices":3228,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.04805000126361847,-0.0000029335498616944733,-0.018601466903561518],"max":[0.04805000126361847,0.11314884049802401,0.029976212973866587]},"sizeMeters":[0.096,0.113,0.049],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:39.662Z","updatedAt":"2026-09-11T17:52:39.789Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35784/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CombinationPadlockLargeEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35784/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35784/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35784/v1/model.glb\" alt=\"Combination Padlock, Large (Escape Room and Puzzle Venue)\" 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/35784/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/35784/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35785","slug":"escape-room-and-puzzle-venue-key-safe-with-dial-19d64a6b","title":"Key Safe with Combination Dial (Escape Room and Puzzle Venue)","summary":"A 260 by 340 mm wall mounted key safe: a dark case with brass capping rails, a 144 mm combination dial on its own spindle with a red index mark, and three keys on the bar below the cover. The dial turns; the cover is fixed, because the keys behind it are the reward.","description":"A 260 by 340 mm wall mounted key safe: a dark case with brass capping rails, a 144 mm combination dial on its own spindle with a red index mark, and three keys on the bar below the cover. The dial turns; the cover is fixed, because the keys behind it are the reward. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: dial. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-key-safe-with-dial-19d64a6b","cdnUrl":"https://cdn.3dassets.dev/assets/35785/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-key-safe-with-dial-19d64a6b","thumbnailUrl":"https://cdn.3dassets.dev/assets/35785/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35785/v1/poster.webp","blurhash":"U48X5%$_005A_4%LD$D+R~xuRPM|x^%KV=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":87216,"triangles":2060,"vertices":4324,"meshes":6,"materials":4,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.13119752572716206,0,0.000004334767891737978],"max":[0.13119752572716206,0.34119999408721924,0.15000098279521717]},"sizeMeters":[0.262,0.341,0.15],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:39.797Z","updatedAt":"2026-09-11T17:52:39.928Z","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/35785/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 KeySafeWithCombinationDialEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35785/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/35785/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35785/v1/model.glb\" alt=\"Key Safe with Combination Dial (Escape Room and Puzzle Venue)\" 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/35785/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/35785/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35786","slug":"escape-room-and-puzzle-venue-numbered-keypad-wall-plat-04c5a6b9","title":"Numbered Keypad Wall Plate (Escape Room and Puzzle Venue)","summary":"A 160 by 240 mm keypad on a brass wall plate: twelve domed keys in a three by four grid, a narrow lit status window and a red state lamp. The keys are modelled proud and unmarked and nothing on it moves, because a code entry is the venue software rather than the geometry.","description":"A 160 by 240 mm keypad on a brass wall plate: twelve domed keys in a three by four grid, a narrow lit status window and a red state lamp. The keys are modelled proud and unmarked and nothing on it moves, because a code entry is the venue software rather than the geometry. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-numbered-keypad-wall-plat-04c5a6b9","cdnUrl":"https://cdn.3dassets.dev/assets/35786/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-numbered-keypad-wall-plat-04c5a6b9","thumbnailUrl":"https://cdn.3dassets.dev/assets/35786/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35786/v1/poster.webp","blurhash":"U59a8Dx^008^?ZofD+WA4mM{?d-;^$t69IIp","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":44208,"triangles":1002,"vertices":2091,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.08000488117326768,0,-0.000006042478476668382],"max":[0.08000488117326768,0.23999999463558197,0.05000312959957631]},"sizeMeters":[0.16,0.24,0.05],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:42.311Z","updatedAt":"2026-09-11T17:52:42.417Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35786/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function NumberedKeypadWallPlateEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35786/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35786/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35786/v1/model.glb\" alt=\"Numbered Keypad Wall Plate (Escape Room and Puzzle Venue)\" 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/35786/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/35786/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35788","slug":"escape-room-and-puzzle-venue-lever-wall-panel-762737d1","title":"Three Lever Wall Panel (Escape Room and Puzzle Venue)","summary":"A 940 by 580 mm timber board carrying three throw levers in brass quadrants, their knobs in red, green and brass so a clue can name one without naming a number. Each lever is its own node on the quadrant spindle and tips through its slot; the board is fixed.","description":"A 940 by 580 mm timber board carrying three throw levers in brass quadrants, their knobs in red, green and brass so a clue can name one without naming a number. Each lever is its own node on the quadrant spindle and tips through its slot; the board is fixed. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: lever-1, lever-2, lever-3. Rigid node-transform clips: tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-lever-wall-panel-762737d1","cdnUrl":"https://cdn.3dassets.dev/assets/35788/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-lever-wall-panel-762737d1","thumbnailUrl":"https://cdn.3dassets.dev/assets/35788/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35788/v1/poster.webp","blurhash":"U9Du*rI=00jb~U^jE29a01%K^%IpIpRktPoc","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":40116,"triangles":1040,"vertices":2171,"meshes":9,"materials":6,"textures":0,"animations":["tilt"],"boundingBox":{"min":[-0.4699999988079071,-9.231643855467375e-7,-0.000015411411308060424],"max":[0.4699999988079071,0.5800009064750851,0.12600000250339508]},"sizeMeters":[0.94,0.58,0.126],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:42.451Z","updatedAt":"2026-09-11T17:52:42.575Z","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/35788/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 ThreeLeverWallPanelEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35788/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/35788/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35788/v1/model.glb\" alt=\"Three Lever Wall Panel (Escape Room and Puzzle Venue)\" 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/35788/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/35788/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35787","slug":"escape-room-and-puzzle-venue-pipe-valve-puzzle-board-85b74ee9","title":"Pipe and Valve Puzzle Board (Escape Room and Puzzle Venue)","summary":"A 1.3 by 1.66 m floor standing valve board: three runs of flanged pipework on a braced steel frame, three handwheels in red, green and brass on their own spindles, and two brass cased gauges with plain cream dials. Each wheel spins; the pipework and the needles are fixed.","description":"A 1.3 by 1.66 m floor standing valve board: three runs of flanged pipework on a braced steel frame, three handwheels in red, green and brass on their own spindles, and two brass cased gauges with plain cream dials. Each wheel spins; the pipework and the needles are fixed. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: valve-1, valve-2, valve-3. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-pipe-valve-puzzle-board-85b74ee9","cdnUrl":"https://cdn.3dassets.dev/assets/35787/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-pipe-valve-puzzle-board-85b74ee9","thumbnailUrl":"https://cdn.3dassets.dev/assets/35787/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35787/v1/poster.webp","blurhash":"U39jfevh00PT-et94=MwF;56NN}]^i^+E30K","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":92076,"triangles":2600,"vertices":5515,"meshes":11,"materials":6,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.6539999842643738,0,-0.15994689089695768],"max":[0.6500530891354863,1.6620574017234195,0.1999468974534686]},"sizeMeters":[1.304,1.662,0.36],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:42.437Z","updatedAt":"2026-09-11T17:52:42.556Z","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/35787/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 PipeAndValvePuzzleBoardEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35787/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/35787/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35787/v1/model.glb\" alt=\"Pipe and Valve Puzzle Board (Escape Room and Puzzle Venue)\" 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/35787/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/35787/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35789","slug":"escape-room-and-puzzle-venue-wire-patch-panel-dcd7e64a","title":"Wire Patch Panel (Escape Room and Puzzle Venue)","summary":"A 740 by 520 mm patch panel in a dark case with a walnut face: ten brass jack sockets in two rows, four steel plugs seated in them and two coloured leads looped between. The leads are modelled in one fixed loop, because a flexible run cannot be rigged.","description":"A 740 by 520 mm patch panel in a dark case with a walnut face: ten brass jack sockets in two rows, four steel plugs seated in them and two coloured leads looped between. The leads are modelled in one fixed loop, because a flexible run cannot be rigged. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-wire-patch-panel-dcd7e64a","cdnUrl":"https://cdn.3dassets.dev/assets/35789/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-wire-patch-panel-dcd7e64a","thumbnailUrl":"https://cdn.3dassets.dev/assets/35789/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35789/v1/poster.webp","blurhash":"U5A9~IsE00Nd_3=}M{9a03tQ}=aKW,b^WAv|","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":100184,"triangles":2540,"vertices":5003,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.3700000047683716,-0.000006116589464644218,0.000018837111673365714],"max":[0.3700000047683716,0.5200060975159784,0.15595389160000725]},"sizeMeters":[0.74,0.52,0.156],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:42.764Z","updatedAt":"2026-09-11T17:52:42.882Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35789/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WirePatchPanelEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35789/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35789/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35789/v1/model.glb\" alt=\"Wire Patch Panel (Escape Room and Puzzle Venue)\" 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/35789/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/35789/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35790","slug":"escape-room-and-puzzle-venue-weighing-scale-puzzle-pli-af5b57ba","title":"Weighing Scale Puzzle Plinth (Escape Room and Puzzle Venue)","summary":"A 1.29 m tall balance on a tapered walnut plinth: a brass beam on a knife edge carrying two steel pans, with two cast weights on the plinth top. Beam and pans are one node and rock together, which is what a real balance does; the weights are not rigged.","description":"A 1.29 m tall balance on a tapered walnut plinth: a brass beam on a knife edge carrying two steel pans, with two cast weights on the plinth top. Beam and pans are one node and rock together, which is what a real balance does; the weights are not rigged. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: beam. Rigid node-transform clips: tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-weighing-scale-puzzle-pli-af5b57ba","cdnUrl":"https://cdn.3dassets.dev/assets/35790/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-weighing-scale-puzzle-pli-af5b57ba","thumbnailUrl":"https://cdn.3dassets.dev/assets/35790/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35790/v1/poster.webp","blurhash":"U39%I,~B0002KhS4ids902I;~B%000oz_3NG","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":42664,"triangles":932,"vertices":1961,"meshes":6,"materials":5,"textures":0,"animations":["tilt"],"boundingBox":{"min":[-0.4050000011920929,0,-0.26001831543079235],"max":[0.4050000011920929,1.259994984513092,0.26001831543079235]},"sizeMeters":[0.81,1.26,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:45.074Z","updatedAt":"2026-09-11T17:52:45.179Z","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/35790/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 WeighingScalePuzzlePlinthEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35790/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/35790/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35790/v1/model.glb\" alt=\"Weighing Scale Puzzle Plinth (Escape Room and Puzzle Venue)\" 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/35790/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/35790/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35792","slug":"escape-room-and-puzzle-venue-uv-mark-panel-with-torch-c7f10cb4","title":"UV Mark Panel with Torch (Escape Room and Puzzle Venue)","summary":"A 660 by 880 mm framed wall panel with abstract marks that only show under a lamp, and the lamp itself on a brass clip beside it: a dark barrel with a violet lens and a brass collar. The marks are plain blocks and strokes, never readable text, and nothing on it moves.","description":"A 660 by 880 mm framed wall panel with abstract marks that only show under a lamp, and the lamp itself on a brass clip beside it: a dark barrel with a violet lens and a brass collar. The marks are plain blocks and strokes, never readable text, and nothing on it moves. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-uv-mark-panel-with-torch-c7f10cb4","cdnUrl":"https://cdn.3dassets.dev/assets/35792/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-uv-mark-panel-with-torch-c7f10cb4","thumbnailUrl":"https://cdn.3dassets.dev/assets/35792/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35792/v1/poster.webp","blurhash":"UCDlyVxa00IU-p%2M{D*00WC_Nofj=s:a#NG","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":34860,"triangles":728,"vertices":1590,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.32998321303173983,0,0.000018921137109835506],"max":[0.32998321303173983,0.8799999952316284,0.09340500259640147]},"sizeMeters":[0.66,0.88,0.093],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:45.395Z","updatedAt":"2026-09-11T17:52:45.508Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35792/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function UVMarkPanelWithTorchEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35792/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35792/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35792/v1/model.glb\" alt=\"UV Mark Panel with Torch (Escape Room and Puzzle Venue)\" 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/35792/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/35792/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35791","slug":"escape-room-and-puzzle-venue-sliding-tile-puzzle-frame-039fbe26","title":"Sliding Tile Puzzle Frame (Escape Room and Puzzle Venue)","summary":"A 460 mm brass framed sliding tile puzzle on a small walnut easel: fifteen walnut tiles with plain cream faces in a four by four tray, one space empty. The tiles stay put, because fifteen sliding nodes would be fifteen channels nobody reads at card size.","description":"A 460 mm brass framed sliding tile puzzle on a small walnut easel: fifteen walnut tiles with plain cream faces in a four by four tray, one space empty. The tiles stay put, because fifteen sliding nodes would be fifteen channels nobody reads at card size. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-sliding-tile-puzzle-frame-039fbe26","cdnUrl":"https://cdn.3dassets.dev/assets/35791/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-sliding-tile-puzzle-frame-039fbe26","thumbnailUrl":"https://cdn.3dassets.dev/assets/35791/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35791/v1/poster.webp","blurhash":"U78p_dxu00E1~o%24p9aE2kC%2jFIoV[%3t7","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":108928,"triangles":2496,"vertices":5635,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.24998824569919736,0,-0.04500696379146218],"max":[0.24998824569919736,0.7829692959785461,0.06620704572952842]},"sizeMeters":[0.5,0.783,0.111],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:45.379Z","updatedAt":"2026-09-11T17:52:45.491Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35791/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SlidingTilePuzzleFrameEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35791/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35791/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35791/v1/model.glb\" alt=\"Sliding Tile Puzzle Frame (Escape Room and Puzzle Venue)\" 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/35791/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/35791/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35793","slug":"escape-room-and-puzzle-venue-map-and-pin-board-d6dbe24d","title":"Map and Pin Board (Escape Room and Puzzle Venue)","summary":"A 980 by 740 mm walnut framed board with an abstract chart on it: blocks of land, two plotted routes in red and four brass map pins. The chart is deliberately abstract, never a real coastline or a readable label, so it suits any theme. Static geometry.","description":"A 980 by 740 mm walnut framed board with an abstract chart on it: blocks of land, two plotted routes in red and four brass map pins. The chart is deliberately abstract, never a real coastline or a readable label, so it suits any theme. Static geometry. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-map-and-pin-board-d6dbe24d","cdnUrl":"https://cdn.3dassets.dev/assets/35793/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-map-and-pin-board-d6dbe24d","thumbnailUrl":"https://cdn.3dassets.dev/assets/35793/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35793/v1/poster.webp","blurhash":"UFEyYxoz00r]x[-;V]9G00n+_MNZw|enR*Xl","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":37508,"triangles":816,"vertices":1752,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.49000000953674316,-0.000008547615662213293,-0.0004909208056100324],"max":[0.49000000953674316,0.7400085571524053,0.0800061325605471]},"sizeMeters":[0.98,0.74,0.08],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:45.596Z","updatedAt":"2026-09-11T17:52:45.713Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35793/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function MapAndPinBoardEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35793/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35793/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35793/v1/model.glb\" alt=\"Map and Pin Board (Escape Room and Puzzle Venue)\" 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/35793/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/35793/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35794","slug":"escape-room-and-puzzle-venue-study-desk-with-ledger-50b3468c","title":"Study Desk with Ledger and Quill (Escape Room and Puzzle Venue)","summary":"A 1.16 m walnut writing desk with a teal leather top, one drawer on its own slide, and the props on it: an open ledger with plain ruled pages, an inkpot with a quill in it and a brass desk lamp. The ledger, quill and lamp are fixed; the drawer runs out and back.","description":"A 1.16 m walnut writing desk with a teal leather top, one drawer on its own slide, and the props on it: an open ledger with plain ruled pages, an inkpot with a quill in it and a brass desk lamp. The ledger, quill and lamp are fixed; the drawer runs out and back. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: drawer. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-study-desk-with-ledger-50b3468c","cdnUrl":"https://cdn.3dassets.dev/assets/35794/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-study-desk-with-ledger-50b3468c","thumbnailUrl":"https://cdn.3dassets.dev/assets/35794/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35794/v1/poster.webp","blurhash":"U7A0wEt600xY_N%2DiE100S5%hn500NF_N%2","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":76864,"triangles":1740,"vertices":3782,"meshes":8,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.5799999833106995,-0.00003227768325753111,-0.31999388709039045],"max":[0.5799999833106995,1.0607033932163903,0.34000178712690776]},"sizeMeters":[1.16,1.061,0.66],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:48.000Z","updatedAt":"2026-09-11T17:52:48.115Z","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/35794/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 StudyDeskWithLedgerAndQuillEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35794/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/35794/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35794/v1/model.glb\" alt=\"Study Desk with Ledger and Quill (Escape Room and Puzzle Venue)\" 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/35794/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/35794/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35795","slug":"escape-room-and-puzzle-venue-locked-chest-with-hasps-de58081b","title":"Locked Chest with Hasps (Escape Room and Puzzle Venue)","summary":"A 940 by 560 mm banded timber chest 620 mm tall: a coopered lid on its back edge, steel bands round the carcass, brass corner shoes, two hasps on the lid and a padlock through the centre staple. The lid lifts on its hinge; the padlock is modelled closed and stays closed.","description":"A 940 by 560 mm banded timber chest 620 mm tall: a coopered lid on its back edge, steel bands round the carcass, brass corner shoes, two hasps on the lid and a padlock through the centre staple. The lid lifts on its hinge; the padlock is modelled closed and stays closed. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: lid. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-locked-chest-with-hasps-de58081b","cdnUrl":"https://cdn.3dassets.dev/assets/35795/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-locked-chest-with-hasps-de58081b","thumbnailUrl":"https://cdn.3dassets.dev/assets/35795/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35795/v1/poster.webp","blurhash":"U6F5gG~W00Sz^g?Ga%E100MxxTM{9ZNIXSRQ","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":117192,"triangles":2840,"vertices":5789,"meshes":8,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.48500001430511475,-0.000012709895120976977,-0.2870271535820426],"max":[0.48500001430511475,0.5599972468981207,0.34773738618123134]},"sizeMeters":[0.97,0.56,0.635],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:48.098Z","updatedAt":"2026-09-11T17:52:48.214Z","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/35795/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 LockedChestWithHaspsEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35795/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/35795/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35795/v1/model.glb\" alt=\"Locked Chest with Hasps (Escape Room and Puzzle Venue)\" 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/35795/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/35795/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35796","slug":"escape-room-and-puzzle-venue-drawer-unit-with-false-bo-5dedac48","title":"Drawer Unit with a False Bottom (Escape Room and Puzzle Venue)","summary":"A 640 by 880 mm walnut drawer unit of three drawers on a plinth, each a front and a modelled box on its own slide. The bottom drawer carries the trick: a false board lifted clear of the base with a key lying under it, which only shows once the drawer is out.","description":"A 640 by 880 mm walnut drawer unit of three drawers on a plinth, each a front and a modelled box on its own slide. The bottom drawer carries the trick: a false board lifted clear of the base with a key lying under it, which only shows once the drawer is out. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: drawer-3, drawer-2, drawer-1. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-drawer-unit-with-false-bo-5dedac48","cdnUrl":"https://cdn.3dassets.dev/assets/35796/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-drawer-unit-with-false-bo-5dedac48","thumbnailUrl":"https://cdn.3dassets.dev/assets/35796/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35796/v1/poster.webp","blurhash":"UECY%H%101Ip~Vj[D*jZtkR*M|t6xaofR+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":49884,"triangles":1280,"vertices":2791,"meshes":10,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.33501312651951404,0,-0.25501382759501856],"max":[0.33501312651951404,0.9020000100135803,0.27000534440051144]},"sizeMeters":[0.67,0.902,0.525],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":1,"publishedAt":"2026-09-11T17:52:48.169Z","updatedAt":"2026-09-11T19:13:13.132Z","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/35796/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 DrawerUnitWithAFalseBottomEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35796/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/35796/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35796/v1/model.glb\" alt=\"Drawer Unit with a False Bottom (Escape Room and Puzzle Venue)\" 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/35796/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/35796/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35797","slug":"escape-room-and-puzzle-venue-mirror-with-hidden-catch-ebdceb76","title":"Mirror with a Hidden Catch (Escape Room and Puzzle Venue)","summary":"A 720 by 1120 mm brass framed mirror that is really a cupboard door: a concealed hinge on its left stile, a bead catch on the closing edge and a lined recess behind it with a shelf and a brass hook. The mirror swings; the recess is fixed.","description":"A 720 by 1120 mm brass framed mirror that is really a cupboard door: a concealed hinge on its left stile, a bead catch on the closing edge and a lined recess behind it with a shelf and a brass hook. The mirror swings; the recess is fixed. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: mirror. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-mirror-with-hidden-catch-ebdceb76","cdnUrl":"https://cdn.3dassets.dev/assets/35797/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-mirror-with-hidden-catch-ebdceb76","thumbnailUrl":"https://cdn.3dassets.dev/assets/35797/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35797/v1/poster.webp","blurhash":"U49?j=2o00|I?HxZ9tIp5Q=1KPJ8%2xZI.EM","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":33048,"triangles":672,"vertices":1495,"meshes":7,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.3600256299282023,0,0.0000028954124481200827],"max":[0.3600256442333174,1.1200000047683716,0.20700095165876872]},"sizeMeters":[0.72,1.12,0.207],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:48.529Z","updatedAt":"2026-09-11T17:52:48.638Z","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/35797/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 MirrorWithAHiddenCatchEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35797/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/35797/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35797/v1/model.glb\" alt=\"Mirror with a Hidden Catch (Escape Room and Puzzle Venue)\" 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/35797/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/35797/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35800","slug":"escape-room-and-puzzle-venue-candle-sconce-lever-d0c3cae6","title":"Candle Sconce Lever (Escape Room and Puzzle Venue)","summary":"A 430 mm brass wall sconce whose scrolled arm is a lever: the backplate is fixed, the arm, cup and cream candle are one node on the plate boss and tip forward when pulled. There is no flame: a flame is a shader rather than geometry, so the wick is modelled unlit.","description":"A 430 mm brass wall sconce whose scrolled arm is a lever: the backplate is fixed, the arm, cup and cream candle are one node on the plate boss and tip forward when pulled. There is no flame: a flame is a shader rather than geometry, so the wick is modelled unlit. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: lever. Rigid node-transform clips: tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-candle-sconce-lever-d0c3cae6","cdnUrl":"https://cdn.3dassets.dev/assets/35800/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-candle-sconce-lever-d0c3cae6","thumbnailUrl":"https://cdn.3dassets.dev/assets/35800/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35800/v1/poster.webp","blurhash":"U584PT%N004m^+xuD*IA00IU~V^+4mD%-;?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":24104,"triangles":516,"vertices":1058,"meshes":4,"materials":3,"textures":0,"animations":["tilt"],"boundingBox":{"min":[-0.07499450964830828,0,-0.0000024118315788100586],"max":[0.07499450964830828,0.43000001192092896,0.22499999225139616]},"sizeMeters":[0.15,0.43,0.225],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:51.142Z","updatedAt":"2026-09-11T17:52:51.285Z","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/35800/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 CandleSconceLeverEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35800/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/35800/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35800/v1/model.glb\" alt=\"Candle Sconce Lever (Escape Room and Puzzle Venue)\" 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/35800/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/35800/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35798","slug":"escape-room-and-puzzle-venue-safe-with-spoked-handle-215e1ff4","title":"Safe with a Spoked Handle (Escape Room and Puzzle Venue)","summary":"A 740 by 920 mm floor safe 620 mm deep: a dark body with a brass capping and two barrel hinges, a stepped steel door and a five spoked brass handwheel on it. The handle is a child of the door, so it spins on its boss and still travels with the door when that swings open.","description":"A 740 by 920 mm floor safe 620 mm deep: a dark body with a brass capping and two barrel hinges, a stepped steel door and a five spoked brass handwheel on it. The handle is a child of the door, so it spins on its boss and still travels with the door when that swings open. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: door, handle. Rigid node-transform clips: open, close and spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-safe-with-spoked-handle-215e1ff4","cdnUrl":"https://cdn.3dassets.dev/assets/35798/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-safe-with-spoked-handle-215e1ff4","thumbnailUrl":"https://cdn.3dassets.dev/assets/35798/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35798/v1/poster.webp","blurhash":"UFAc^|R-01Rj~UNHD+t6$_RkM}t7t7j@WBa$","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":48916,"triangles":1072,"vertices":2306,"meshes":5,"materials":3,"textures":0,"animations":["open","close","spin"],"boundingBox":{"min":[-0.3800038107997618,0,-0.32001907068810953],"max":[0.3800038107997618,0.949999988079071,0.41559932492479557]},"sizeMeters":[0.76,0.95,0.736],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:50.858Z","updatedAt":"2026-09-11T17:52:50.960Z","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/35798/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 SafeWithASpokedHandleEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35798/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/35798/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35798/v1/model.glb\" alt=\"Safe with a Spoked Handle (Escape Room and Puzzle Venue)\" 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/35798/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/35798/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35799","slug":"escape-room-and-puzzle-venue-games-master-desk-with-mo-acab224e","title":"Games Master Desk with Monitor Bank (Escape Room and Puzzle Venue)","summary":"The desk a games master runs a venue from: a 1.94 m timber top on dark pedestals, a riser carrying six monitors in two rows of three, a keyboard, a gooseneck talkback microphone and one drawer on its slide. Screen faces are plain lit panels, never readable feeds.","description":"The desk a games master runs a venue from: a 1.94 m timber top on dark pedestals, a riser carrying six monitors in two rows of three, a keyboard, a gooseneck talkback microphone and one drawer on its slide. Screen faces are plain lit panels, never readable feeds. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: drawer. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-games-master-desk-with-mo-acab224e","cdnUrl":"https://cdn.3dassets.dev/assets/35799/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-games-master-desk-with-mo-acab224e","thumbnailUrl":"https://cdn.3dassets.dev/assets/35799/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35799/v1/poster.webp","blurhash":"U3Ad4V=r00Otpd^*Hq4:004:~qxAQ+16PD$u","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":237856,"triangles":5606,"vertices":12487,"meshes":8,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.9700000286102295,-0.00003279528975985713,-0.40002473179143744],"max":[0.9700000286102295,1.5100327857530167,0.40900290888993185]},"sizeMeters":[1.94,1.51,0.809],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:50.917Z","updatedAt":"2026-09-11T17:52:51.021Z","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/35799/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 GamesMasterDeskWithMonitorBankEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35799/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/35799/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35799/v1/model.glb\" alt=\"Games Master Desk with Monitor Bank (Escape Room and Puzzle Venue)\" 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/35799/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/35799/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35801","slug":"escape-room-and-puzzle-venue-headset-on-hook-263014df","title":"Games Master Headset on a Hook (Escape Room and Puzzle Venue)","summary":"A talkback headset hanging on a brass wall hook: a sprung band, two padded cups and the boom arm, 300 mm overall. The lead is not modelled past the cup, because a flexible run cannot be rigged and a coiled one would date the model. Static geometry.","description":"A talkback headset hanging on a brass wall hook: a sprung band, two padded cups and the boom arm, 300 mm overall. The lead is not modelled past the cup, because a flexible run cannot be rigged and a coiled one would date the model. Static geometry. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-headset-on-hook-263014df","cdnUrl":"https://cdn.3dassets.dev/assets/35801/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-headset-on-hook-263014df","thumbnailUrl":"https://cdn.3dassets.dev/assets/35801/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35801/v1/poster.webp","blurhash":"U37BGzu600]{+=D+I_?X00DOx]%$YPtRrDsB","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":28424,"triangles":576,"vertices":1380,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.10851151496171951,0.0000013761886541313606,8.444432840551408e-7],"max":[0.10851151496171951,0.1843728870153427,0.14395263261122607]},"sizeMeters":[0.217,0.184,0.144],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:51.306Z","updatedAt":"2026-09-11T17:52:51.431Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35801/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GamesMasterHeadsetOnAHookEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35801/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35801/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35801/v1/model.glb\" alt=\"Games Master Headset on a Hook (Escape Room and Puzzle Venue)\" 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/35801/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/35801/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35802","slug":"escape-room-and-puzzle-venue-reset-tray-with-padlocks-922a0ab0","title":"Reset Tray with Padlocks and Keys (Escape Room and Puzzle Venue)","summary":"The tray a room is reset from: a 480 by 340 mm walnut tray with two compartments holding a pair of small combination padlocks and five loose brass keys. Everything in it is modelled where it lies and nothing moves.","description":"The tray a room is reset from: a 480 by 340 mm walnut tray with two compartments holding a pair of small combination padlocks and five loose brass keys. Everything in it is modelled where it lies and nothing moves. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-reset-tray-with-padlocks-922a0ab0","cdnUrl":"https://cdn.3dassets.dev/assets/35802/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-reset-tray-with-padlocks-922a0ab0","thumbnailUrl":"https://cdn.3dassets.dev/assets/35802/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35802/v1/poster.webp","blurhash":"U4Am0V^*00J5~BxuIoRj00D+~VRk0LM{t6R*","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":175380,"triangles":4432,"vertices":8955,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.23999999463558197,0.000018236205988189647,-0.17000030138529182],"max":[0.27948710322380066,0.08498176468808148,0.17000030138529182]},"sizeMeters":[0.519,0.085,0.34],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:53.799Z","updatedAt":"2026-09-11T17:52:53.919Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35802/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ResetTrayWithPadlocksAndKeysEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35802/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35802/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35802/v1/model.glb\" alt=\"Reset Tray with Padlocks and Keys (Escape Room and Puzzle Venue)\" 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/35802/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/35802/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35803","slug":"escape-room-and-puzzle-venue-prop-store-shelving-d675499a","title":"Prop Store Shelving Bay (Escape Room and Puzzle Venue)","summary":"A 1 m prop store bay 2.2 m tall: a steel post frame with five timber decks, a dark back panel and twelve prop boxes with brass edged lids, plus a coil of rope on top. Its shelf ports run the bays into a wall of store; the stock is fixed.","description":"A 1 m prop store bay 2.2 m tall: a steel post frame with five timber decks, a dark back panel and twelve prop boxes with brass edged lids, plus a coil of rope on top. Its shelf ports run the bays into a wall of store; the stock is fixed. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-prop-store-shelving-d675499a","cdnUrl":"https://cdn.3dassets.dev/assets/35803/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-prop-store-shelving-d675499a","thumbnailUrl":"https://cdn.3dassets.dev/assets/35803/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35803/v1/poster.webp","blurhash":"U3Ac-w~U0002-;j[IAae02NH^%%0W=ofslRP","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"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":108236,"triangles":2500,"vertices":5544,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.4999633886250432,0,-0.23002411460812433],"max":[0.4999633886250432,2.384296285086353,0.23002411460812433]},"sizeMeters":[1,2.384,0.46],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:53.817Z","updatedAt":"2026-09-11T17:52:53.941Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35803/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PropStoreShelvingBayEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35803/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35803/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35803/v1/model.glb\" alt=\"Prop Store Shelving Bay (Escape Room and Puzzle Venue)\" 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/35803/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/35803/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35804","slug":"escape-room-and-puzzle-venue-reception-desk-ce3da671","title":"Venue Reception Desk (Escape Room and Puzzle Venue)","summary":"A 2.2 m walnut reception counter 1.08 m tall with a timber capping, a lower 740 mm work top behind it, a brass foot rail on the visitor side, a small screen and keyboard on the staff side and a call bell and waiver pad on the top. Static geometry.","description":"A 2.2 m walnut reception counter 1.08 m tall with a timber capping, a lower 740 mm work top behind it, a brass foot rail on the visitor side, a small screen and keyboard on the staff side and a call bell and waiver pad on the top. Static geometry. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-reception-desk-ce3da671","cdnUrl":"https://cdn.3dassets.dev/assets/35804/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-reception-desk-ce3da671","thumbnailUrl":"https://cdn.3dassets.dev/assets/35804/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35804/v1/poster.webp","blurhash":"UGD+}5%g4Us9~U-oSiNG00#ktlNb59xZvzIo","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":50632,"triangles":1116,"vertices":2410,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-1.1299999952316284,-0.00003866263550911242,-0.4300067163454725],"max":[1.1299999952316284,1.198038616859142,0.4700067080008222]},"sizeMeters":[2.26,1.198,0.9],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:53.997Z","updatedAt":"2026-09-11T17:52:54.117Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35804/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function VenueReceptionDeskEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35804/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35804/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35804/v1/model.glb\" alt=\"Venue Reception Desk (Escape Room and Puzzle Venue)\" 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/35804/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/35804/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35805","slug":"escape-room-and-puzzle-venue-waiting-sofa-366ba21f","title":"Waiting Area Sofa (Escape Room and Puzzle Venue)","summary":"A 1.86 m two seat waiting sofa on brass feet: a timber frame with a crowned teal seat cushion, a raked back pad and padded arms. Built for the front of house of a venue, where a group waits to be briefed. Static geometry.","description":"A 1.86 m two seat waiting sofa on brass feet: a timber frame with a crowned teal seat cushion, a raked back pad and padded arms. Built for the front of house of a venue, where a group waits to be briefed. Static geometry. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-waiting-sofa-366ba21f","cdnUrl":"https://cdn.3dassets.dev/assets/35805/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-waiting-sofa-366ba21f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35805/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35805/v1/poster.webp","blurhash":"U9D]*cx^00bb.m-:VsI@00RkB=M{*wni9|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":38604,"triangles":880,"vertices":1906,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.9300000071525574,0.00000842264920921515,-0.485422490712568],"max":[0.9300000071525574,1.0001717274302258,0.3999322937692849]},"sizeMeters":[1.86,1,0.885],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:54.129Z","updatedAt":"2026-09-11T17:52:54.324Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35805/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WaitingAreaSofaEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35805/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35805/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35805/v1/model.glb\" alt=\"Waiting Area Sofa (Escape Room and Puzzle Venue)\" 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/35805/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/35805/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35807","slug":"escape-room-and-puzzle-venue-phone-locker-bank-30f5af4f","title":"Phone and Bag Locker Bank (Escape Room and Puzzle Venue)","summary":"A 900 by 1820 mm locker bank of eight cells in two columns: a steel carcass on a plinth with teal doors, vent slots, a brass lock escutcheon and a blank number plate on each. Every door is its own node, opening as one system. Ports run bank to bank.","description":"A 900 by 1820 mm locker bank of eight cells in two columns: a steel carcass on a plinth with teal doors, vent slots, a brass lock escutcheon and a blank number plate on each. Every door is its own node, opening as one system. Ports run bank to bank. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: locker-1, locker-2, locker-3, locker-4, locker-5, locker-6, locker-7, locker-8. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-phone-locker-bank-30f5af4f","cdnUrl":"https://cdn.3dassets.dev/assets/35807/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-phone-locker-bank-30f5af4f","thumbnailUrl":"https://cdn.3dassets.dev/assets/35807/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35807/v1/poster.webp","blurhash":"U9AdWQ?b008w_4t79FRjQ.M{S}x]?IofD%Rj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"modular","title":"Modular"}],"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":53760,"triangles":3648,"vertices":8154,"meshes":26,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.4500656075613955,0,-0.2100125092133199],"max":[0.4500656075613955,1.8200000524520874,0.21799486758738368]},"sizeMeters":[0.9,1.82,0.428],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:56.617Z","updatedAt":"2026-09-11T17:52:56.736Z","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/35807/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 PhoneAndBagLockerBankEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35807/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/35807/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35807/v1/model.glb\" alt=\"Phone and Bag Locker Bank (Escape Room and Puzzle Venue)\" 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/35807/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/35807/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35806","slug":"escape-room-and-puzzle-venue-briefing-screen-on-stand-9d2b7005","title":"Briefing Screen on a Wheeled Stand (Escape Room and Puzzle Venue)","summary":"The screen a group is briefed on before a game: a 1.06 by 0.64 m display in a dark case with a brass capping, on a column stand with four castors, 1.72 m overall. The face is an abstract lit panel with a status strip, never a readable briefing.","description":"The screen a group is briefed on before a game: a 1.06 by 0.64 m display in a dark case with a brass capping, on a column stand with four castors, 1.72 m overall. The face is an abstract lit panel with a status strip, never a readable briefing. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-briefing-screen-on-stand-9d2b7005","cdnUrl":"https://cdn.3dassets.dev/assets/35806/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-briefing-screen-on-stand-9d2b7005","thumbnailUrl":"https://cdn.3dassets.dev/assets/35806/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35806/v1/poster.webp","blurhash":"U67d:?xw00D#_Nt9DiM_xrt7RpM{i@ouXVN1","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":85064,"triangles":2020,"vertices":4407,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.550000011920929,0,-0.35215551132947287],"max":[0.550000011920929,1.7099723739208845,0.35215551132947287]},"sizeMeters":[1.1,1.71,0.704],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:56.578Z","updatedAt":"2026-09-11T17:52:56.688Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35806/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BriefingScreenOnAWheeledStandEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35806/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35806/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35806/v1/model.glb\" alt=\"Briefing Screen on a Wheeled Stand (Escape Room and Puzzle Venue)\" 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/35806/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/35806/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35808","slug":"escape-room-and-puzzle-venue-venue-signage-board-0fa9ccf3","title":"Venue Signage Board (Escape Room and Puzzle Venue)","summary":"A 1.44 by 0.46 m brass framed venue sign for a corridor or a foyer: a dark face carrying five abstract blocks where the lettering would be, over a red rule. The face is deliberately unreadable, so no venue, franchise or brand is implied. Static geometry.","description":"A 1.44 by 0.46 m brass framed venue sign for a corridor or a foyer: a dark face carrying five abstract blocks where the lettering would be, over a red rule. The face is deliberately unreadable, so no venue, franchise or brand is implied. Static geometry. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-venue-signage-board-0fa9ccf3","cdnUrl":"https://cdn.3dassets.dev/assets/35808/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-venue-signage-board-0fa9ccf3","thumbnailUrl":"https://cdn.3dassets.dev/assets/35808/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35808/v1/poster.webp","blurhash":"U6A,n6tS00t6~m~pV{IU00?D~qRQ9ID$%H-;","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":25936,"triangles":544,"vertices":1212,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.7200000286102295,-0.000038763475628394994,0.000038300110032595674],"max":[0.7200000286102295,0.46003877182027864,0.06901522826800273]},"sizeMeters":[1.44,0.46,0.069],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:56.954Z","updatedAt":"2026-09-11T17:52:57.067Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35808/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function VenueSignageBoardEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35808/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35808/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35808/v1/model.glb\" alt=\"Venue Signage Board (Escape Room and Puzzle Venue)\" 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/35808/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/35808/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35809","slug":"escape-room-and-puzzle-venue-room-name-plate-971d62b9","title":"Puzzle Room Name Plate (Escape Room and Puzzle Venue)","summary":"The same board at 540 by 200 mm, the plate that names one puzzle room beside its door: three abstract blocks on a dark face in a brass frame, over a red rule. Unreadable by design.","description":"The same board at 540 by 200 mm, the plate that names one puzzle room beside its door: three abstract blocks on a dark face in a brass frame, over a red rule. Unreadable by design. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-room-name-plate-971d62b9","cdnUrl":"https://cdn.3dassets.dev/assets/35809/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-room-name-plate-971d62b9","thumbnailUrl":"https://cdn.3dassets.dev/assets/35809/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35809/v1/poster.webp","blurhash":"U8BWJ8%L00t2~m^%jZM_00--_3RRD,R#out9","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":21376,"triangles":416,"vertices":947,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.27000001072883606,-0.000008852851626592328,0.000016326782336734125],"max":[0.27000001072883606,0.20000885583185884,0.06900566591996242]},"sizeMeters":[0.54,0.2,0.069],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:56.968Z","updatedAt":"2026-09-11T17:52:57.085Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35809/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PuzzleRoomNamePlateEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35809/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35809/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35809/v1/model.glb\" alt=\"Puzzle Room Name Plate (Escape Room and Puzzle Venue)\" 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/35809/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/35809/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35810","slug":"escape-room-and-puzzle-venue-leaderboard-frame-eedd218e","title":"Leaderboard Frame (Escape Room and Puzzle Venue)","summary":"A 1.16 by 1.56 m brass framed leaderboard on a walnut ground: a header bar and nine rows of abstract name and time blocks, the leading three picked out in brass. Nothing on it is readable, so it carries no venue or person. Static geometry.","description":"A 1.16 by 1.56 m brass framed leaderboard on a walnut ground: a header bar and nine rows of abstract name and time blocks, the leading three picked out in brass. Nothing on it is readable, so it carries no venue or person. Static geometry. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-leaderboard-frame-eedd218e","cdnUrl":"https://cdn.3dassets.dev/assets/35810/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-leaderboard-frame-eedd218e","thumbnailUrl":"https://cdn.3dassets.dev/assets/35810/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35810/v1/poster.webp","blurhash":"U4Ach=-o009a?X%KIa9b0yjY^jt9~V-o9G9a","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":61660,"triangles":1376,"vertices":3157,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.5800189002009078,0,-0.00003841976447654244],"max":[0.5800189002009078,1.559999942779541,0.08603842268510414]},"sizeMeters":[1.16,1.56,0.086],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:59.536Z","updatedAt":"2026-09-11T17:52:59.661Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35810/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function LeaderboardFrameEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35810/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35810/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35810/v1/model.glb\" alt=\"Leaderboard Frame (Escape Room and Puzzle Venue)\" 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/35810/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/35810/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35811","slug":"escape-room-and-puzzle-venue-photo-backdrop-with-frame-0f587850","title":"Photo Backdrop with a Frame Prop (Escape Room and Puzzle Venue)","summary":"The corner a group is photographed in: a 2.1 by 2.24 m teal cloth on a braced steel frame with an abstract block pattern on it, and an oversize brass picture frame prop leaning against the foot. The pattern carries no venue name and the frame is empty.","description":"The corner a group is photographed in: a 2.1 by 2.24 m teal cloth on a braced steel frame with an abstract block pattern on it, and an oversize brass picture frame prop leaning against the foot. The pattern carries no venue name and the frame is empty. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-photo-backdrop-with-frame-0f587850","cdnUrl":"https://cdn.3dassets.dev/assets/35811/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-photo-backdrop-with-frame-0f587850","thumbnailUrl":"https://cdn.3dassets.dev/assets/35811/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35811/v1/poster.webp","blurhash":"U8AnP_yD00Md.8%MDiDiD4RP*JX8nh%MbvD%","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":84976,"triangles":1920,"vertices":4352,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1.049997868174676,0,-0.28992950241310933],"max":[1.049997868174676,2.240000009536743,0.28864149432287706]},"sizeMeters":[2.1,2.24,0.579],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:59.551Z","updatedAt":"2026-09-11T17:52:59.678Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35811/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PhotoBackdropWithAFramePropEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35811/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35811/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35811/v1/model.glb\" alt=\"Photo Backdrop with a Frame Prop (Escape Room and Puzzle Venue)\" 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/35811/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/35811/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"35812","slug":"escape-room-and-puzzle-venue-drinks-vending-machine-d751cf4a","title":"Drinks Vending Machine (Escape Room and Puzzle Venue)","summary":"A 940 by 1920 mm drinks machine for a venue foyer: a dark case on a steel plinth with a red header band, four shelves of plain unbranded cans behind a glazed door on its hinge, a coin fascia and a delivery tray. The door opens and closes; the stock is fixed.","description":"A 940 by 1920 mm drinks machine for a venue foyer: a dark case on a steel plinth with a red header band, four shelves of plain unbranded cans behind a glazed door on its hinge, a coin fascia and a delivery tray. The door opens and closes; the stock is fixed. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: door. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-drinks-vending-machine-d751cf4a","cdnUrl":"https://cdn.3dassets.dev/assets/35812/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-drinks-vending-machine-d751cf4a","thumbnailUrl":"https://cdn.3dassets.dev/assets/35812/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35812/v1/poster.webp","blurhash":"U497V0?H0000~Dnk55S}4oRQ?a-:t-W=VXr=","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":131644,"triangles":3136,"vertices":6561,"meshes":8,"materials":7,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.4699655035797443,0,-0.4000024325400068],"max":[0.4699655035797443,1.9199999570846558,0.4369968063888853]},"sizeMeters":[0.94,1.92,0.837],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:52:59.724Z","updatedAt":"2026-09-11T17:52:59.915Z","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/35812/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 DrinksVendingMachineEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35812/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/35812/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35812/v1/model.glb\" alt=\"Drinks Vending Machine (Escape Room and Puzzle Venue)\" 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/35812/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/35812/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35813","slug":"escape-room-and-puzzle-venue-waste-bin-0a8b0d3a","title":"Pedal Waste Bin (Escape Room and Puzzle Venue)","summary":"A 400 mm pedal bin 660 mm tall for a foyer or a corridor: a dark drum with two brass bands, a pedal and its linkage, and a domed lid with a brass knob on its back hinge. The lid lifts and closes; the pedal linkage is fixed, because a four bar linkage cannot be rigged.","description":"A 400 mm pedal bin 660 mm tall for a foyer or a corridor: a dark drum with two brass bands, a pedal and its linkage, and a domed lid with a brass knob on its back hinge. The lid lifts and closes; the pedal linkage is fixed, because a four bar linkage cannot be rigged. Metre units, +Y up, the player or operator side toward +Z, resting on y=0. Named pivoted nodes: lid. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-waste-bin-0a8b0d3a","cdnUrl":"https://cdn.3dassets.dev/assets/35813/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-waste-bin-0a8b0d3a","thumbnailUrl":"https://cdn.3dassets.dev/assets/35813/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35813/v1/poster.webp","blurhash":"U16RM*~q0000-WRjInt800D%~q-=4TWB?uxu","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":32644,"triangles":720,"vertices":1458,"meshes":5,"materials":3,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.20800000429153442,0,-0.20800000574439764],"max":[0.20800000429153442,0.6639976466970804,0.21442290688614626]},"sizeMeters":[0.416,0.664,0.422],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:53:00.326Z","updatedAt":"2026-09-11T17:53:00.425Z","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/35813/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 PedalWasteBinEscapeRoomAndPuzzleVenue(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/35813/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/35813/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35813/v1/model.glb\" alt=\"Pedal Waste Bin (Escape Room and Puzzle Venue)\" 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/35813/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/35813/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"35814","slug":"escape-room-and-puzzle-venue-escape-room-f18faa23-starter-scene","title":"Escape Room Venue: Two Themed Rooms and Front of House (Escape Room and Puzzle Venue)","summary":"A working escape room venue on its own 1.2 m floor tiles, 14 by 9 m: two themed rooms side by side built from the pack's wall modules, the corridor between them and the front of house in front. The left room is a panelled study with the false bookcase door in its back wall, a...","description":"A working escape room venue on its own 1.2 m floor tiles, 14 by 9 m: two themed rooms side by side built from the pack's wall modules, the corridor between them and the front of house in front. The left room is a panelled study with the false bookcase door in its back wall, a banded chest, a floor safe, a writing desk with the ledger, a drawer unit with the false bottom, the map board, the UV mark panel, a candle sconce lever, a mirror on a hidden catch and the countdown clock. The right room is the mechanism room: the pipe and valve board, the three lever panel, the wire patch panel, a balance on its plinth, a keypad and two pressure plate tiles in the floor, with a hidden panel section in the party wall between the two. Both rooms close on door modules with magnetic locks and vision ports, and the corridor outside carries their name plates, hint screens and countdown timer boards under a run of ceiling panels with camera domes. Behind the rooms, the games master desk with its six monitor bank, talkback microphone, reset tray and headset, with three bays of prop store shelving against the back wall. In front, reception with the call bell, three banks of phone lockers, the waiting sofa, the briefing screen, the leaderboard, the venue sign, the photo backdrop, drinks vending and a bin.","status":"published","url":"https://3dassets.dev/assets/escape-room-and-puzzle-venue-escape-room-f18faa23-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/35814/v1/model.glb","downloadUrl":"https://3dassets.dev/download/escape-room-and-puzzle-venue-escape-room-f18faa23-starter-scene","thumbnailUrl":"https://cdn.3dassets.dev/assets/35814/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/35814/v1/poster.webp","blurhash":"U6B|B6t501j^~p%fM{W:00xu?HNF00DixaRP","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":3008212,"triangles":78380,"vertices":169162,"meshes":268,"materials":12,"textures":0,"animations":[],"boundingBox":{"min":[-6.700978419709934,0.000031372485010172646,-4.3599658134018755],"max":[6.675984981515735,2.6539999046325686,4.199911474317897]},"sizeMeters":[13.377,2.654,8.56],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T17:53:02.849Z","updatedAt":"2026-09-11T17:53:02.957Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/35814/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function EscapeRoomVenueTwoThemedRoomsAndFrontOfHouseEscapeRoomAndPuzzleVenue(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/35814/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/35814/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/35814/v1/model.glb\" alt=\"Escape Room Venue: Two Themed Rooms and Front of House (Escape Room and Puzzle Venue)\" 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/35814/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/35814/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}}],"demo":{"slug":"escape-room-and-puzzle-venue","title":"Escape Room and Puzzle Venue","url":"https://3dassets.dev/demos/escape-room-and-puzzle-venue"}}}