{"data":{"id":276,"slug":"tattoo-and-piercing-studio","title":"Tattoo and Piercing Studio","summary":"A realistic tattoo studio: two artists booths of chair, work light, tray, machine and drawers behind ported flash art and divider panels, a sterile area and piercing bay, and a reception and waiting front, on modular floor, wall and door bays.","description":"Everything a developer needs to build a working tattoo and piercing studio, from the booth out to the front door. The booth is the heart of it: a studio chair with a black upholstered seat and leg rest, a recline back and a sliding headrest, in an upright pose, a reclined working pose and laid flat as a bed; an arm mounted work light whose jointed arm and round head both tilt; a rolling castored tray table set out with a row of coloured ink caps, a machine cradle and a wipe pack; a tattoo machine on its stand with a coil frame, a knurled grip, the tube and the needle bar standing out of it, in two colourways; a power supply with a lit readout and its foot pedal; a stepped ink rack of bottles; a four drawer cartridge unit on castors; a padded armrest on a stand; an artists stool whose seat spins on a five star castored base; a free standing booth divider that tiles on its ports so booths repeat; a privacy curtain on a rail; a wall mirror; a portfolio stand with a tilting board; and a stencil printer on its shelf. Behind the wall is the half that keeps it safe: a piercing bed with a raised head section and paper roll, a laid out instrument tray with real jawed forceps, clamps and a sleeved needle, two bench top autoclaves whose round doors open onto a real chamber recess, an ultrasonic cleaner with a hinged lid, a loaded sterile pouch rack, a glazed sterile store, a sharps bin, a pedal bin, a wall hung wash basin with its dispensers, a glove and wipe rack, a castored cleaning trolley and a barrier film dispenser. The front of house is a timber fronted reception desk with a screen, a glazed jewellery case of rings, barbells and studs, sofa runs in two colours, low tables of portfolios, a neon style sign, a price board, coat hooks and plants. The building itself is modular: a 2 m floor tile in two colourways, a 2 m wall bay in two, a door bay that shares the wall ports, a 1 m flash art panel in three colourways that tiles into a whole wall of art, and a suspended light bar. All of the art is abstract shape, band and line: there is no readable imagery, no lettering and no studio, artist or brand name anywhere. There is no skin, no tattooed subject, no blood and nobody in the building. What moves is rigid node transforms only: chair backs and headrests, light arms and heads, autoclave and sterile store doors, cartridge drawers, bin and cleaner lids, stool seats, trolley and tray castors and the portfolio board. What does not move is said in each description and it is always the same reason: clip cords, mains leads, film and curtain fabric are flexible and this library has no skinning; the gas lifts are height changes rather than rotations; and the pedal bin push rod, the foot pedal and the forceps hinge are linkages one rigid node cannot carry. All original CC0 geometry.","url":"https://3dassets.dev/packs/tattoo-and-piercing-studio","coverUrl":"https://cdn.3dassets.dev/assets/34565/v1/poster.webp","assetCount":53,"aiGenerated":true,"aiGeneratedAssetCount":53,"aiModels":["Claude Opus 5"],"aiModelUnspecifiedCount":0,"featured":true,"licenseLabel":"CC0 1.0 Universal","totalBytes":4437252,"totalTriangles":187188,"starterScene":{"id":"34565","slug":"tattoo-and-piercing-studio-tattoo-studio-858ca7b3-starter-scene","title":"Tattoo studio floor (Tattoo and Piercing Studio)","summary":"A whole studio laid from 2 m floor tiles and 2 m wall bays: two artists booths side by side behind runs of flash art and a mirror, divided by free standing panels, each with its chair, work light on an arm, stool, rolling tray of ink caps and a machine on its stand, armrest,...","description":"A whole studio laid from 2 m floor tiles and 2 m wall bays: two artists booths side by side behind runs of flash art and a mirror, divided by free standing panels, each with its chair, work light on an arm, stool, rolling tray of ink caps and a machine on its stand, armrest, power supply and cartridge drawers; the sterile area behind the wall with two autoclave benches, an ultrasonic cleaner, a pouch rack, two sterile stores, a wash basin, dispensers, sharps and pedal bins and a cleaning trolley; a piercing bay in its own corner with the bed, instrument tray, light, stool and mirror; and a reception desk, jewellery case, two facing sofa runs, portfolio tables, plants and a neon style sign at the front.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-tattoo-studio-858ca7b3-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/34565/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-tattoo-studio-858ca7b3-starter-scene","thumbnailUrl":"https://cdn.3dassets.dev/assets/34565/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34565/v1/poster.webp","blurhash":"U4Csge-;00x[.7NGjGV@00E1_4H@8x=}I.OU","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":1575144,"triangles":70492,"vertices":77307,"meshes":292,"materials":12,"textures":0,"animations":[],"boundingBox":{"min":[-10.001199960708618,-0.06003021399493349,-8.07300638030249],"max":[6,2.8079955441581594,6.001199960708618]},"sizeMeters":[16.001,2.868,14.074],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":1,"publishedAt":"2026-09-11T09:06:32.235Z","updatedAt":"2026-09-11T10:09:40.655Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34565/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TattooStudioFloorTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34565/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34565/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34565/v1/model.glb\" alt=\"Tattoo studio floor (Tattoo and Piercing Studio)\" 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/34565/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/34565/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},"assets":[{"id":"34515","slug":"tattoo-and-piercing-studio-tattoo-chair-f06b5534","title":"Tattoo Chair (Tattoo and Piercing Studio)","summary":"A tattoo studio chair in the upright position: a weighted base and lift column under a black upholstered seat and leg rest, with a recline back, a sliding headrest and side rails for the artist.","description":"A tattoo studio chair in the upright position: a weighted base and lift column under a black upholstered seat and leg rest, with a recline back, a sliding headrest and side rails for the artist. Overall 0.65 by 1.44 by 1.64 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The client sits head toward -Z, so the artist works from -X and the tray table stands at +X. The lift column is static: it is a gas ram, which changes the height of the seat rather than turning about a pivot, and a rigid node transform cannot carry that. Rigid node-transform clips: back-tilt and headrest-tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-tattoo-chair-f06b5534","cdnUrl":"https://cdn.3dassets.dev/assets/34515/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-tattoo-chair-f06b5534","thumbnailUrl":"https://cdn.3dassets.dev/assets/34515/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34515/v1/poster.webp","blurhash":"U48;Mrog00SfWU00-;~X009F^,%M?b~qIo4-","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":45764,"triangles":1692,"vertices":1839,"meshes":10,"materials":4,"textures":0,"animations":["back-tilt","headrest-tilt"],"boundingBox":{"min":[-0.3250267138034965,0.000019071879192866792,-0.7664694153590982],"max":[0.3250267138034965,1.442229598340174,0.8700000047683716]},"sizeMeters":[0.65,1.442,1.636],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:04.368Z","updatedAt":"2026-09-11T09:06:04.481Z","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/34515/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 TattooChairTattooAndPiercingStudio(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34515/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/34515/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34515/v1/model.glb\" alt=\"Tattoo Chair (Tattoo and Piercing Studio)\" 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/34515/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/34515/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34516","slug":"tattoo-and-piercing-studio-tattoo-chair-reclined-d0d96ca0","title":"Tattoo Chair Reclined (Tattoo and Piercing Studio)","summary":"The studio chair reclined to the working angle, back dropped and headrest with it, for a booth that should read as mid session rather than waiting for one.","description":"The studio chair reclined to the working angle, back dropped and headrest with it, for a booth that should read as mid session rather than waiting for one. Overall 0.65 by 0.98 by 1.99 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The recline pose is baked into the geometry, so the back and headrest nodes are present for assembly but carry no clips here. Use the plain chair when the recline should animate. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-tattoo-chair-reclined-d0d96ca0","cdnUrl":"https://cdn.3dassets.dev/assets/34516/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-tattoo-chair-reclined-d0d96ca0","thumbnailUrl":"https://cdn.3dassets.dev/assets/34516/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34516/v1/poster.webp","blurhash":"U48;S.-q009Y.800xu^,0000^,-=-p~qM{4-","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":44340,"triangles":1692,"vertices":1839,"meshes":10,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.3250267138034965,0.000019071879192866792,-1.121603882771263],"max":[0.3250267138034965,0.9825732329834458,0.8700000047683716]},"sizeMeters":[0.65,0.983,1.992],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:04.407Z","updatedAt":"2026-09-11T09:06:04.523Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34516/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TattooChairReclinedTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34516/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34516/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34516/v1/model.glb\" alt=\"Tattoo Chair Reclined (Tattoo and Piercing Studio)\" 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/34516/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/34516/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34517","slug":"tattoo-and-piercing-studio-tattoo-bed-flat-a3e9c365","title":"Tattoo Bed Flat (Tattoo and Piercing Studio)","summary":"The same chair laid out flat as a bed, back, seat and leg rest in one line, for back pieces and leg work where a client lies down rather than sits.","description":"The same chair laid out flat as a bed, back, seat and leg rest in one line, for back pieces and leg work where a client lies down rather than sits. Overall 0.65 by 0.85 by 2.03 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The flat pose is baked into the geometry. The headrest sits in line with the back, so the bed is a continuous 1.9 m surface. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-tattoo-bed-flat-a3e9c365","cdnUrl":"https://cdn.3dassets.dev/assets/34517/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-tattoo-bed-flat-a3e9c365","thumbnailUrl":"https://cdn.3dassets.dev/assets/34517/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34517/v1/poster.webp","blurhash":"U58|;Z_4009Zxu9Yt7%M0000-qxun$^,RjE0","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":44276,"triangles":1692,"vertices":1839,"meshes":10,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.3250267138034965,0.000019071879192866792,-1.1600042433637814],"max":[0.3250267138034965,0.8499809501745257,0.8700000047683716]},"sizeMeters":[0.65,0.85,2.03],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:04.444Z","updatedAt":"2026-09-11T09:06:04.569Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34517/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TattooBedFlatTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34517/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34517/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34517/v1/model.glb\" alt=\"Tattoo Bed Flat (Tattoo and Piercing Studio)\" 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/34517/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/34517/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34514","slug":"tattoo-and-piercing-studio-artists-stool-4b12a1fb","title":"Artists Stool (Tattoo and Piercing Studio)","summary":"A rolling artists stool: a five star castored base and gas column under a round black seat with a magenta band, at the height an artist works from beside a chair.","description":"A rolling artists stool: a five star castored base and gas column under a round black seat with a magenta band, at the height an artist works from beside a chair. Overall 0.55 by 0.57 by 0.53 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The seat spins on its column. The gas lift is static: it is a height change, not a rotation, and there is no skinning here. The castors are modelled but static, since a stool that rolls is the whole model moving. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-artists-stool-4b12a1fb","cdnUrl":"https://cdn.3dassets.dev/assets/34514/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-artists-stool-4b12a1fb","thumbnailUrl":"https://cdn.3dassets.dev/assets/34514/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34514/v1/poster.webp","blurhash":"U47nI7xu00IU~qof4nRj0KR*-qt70dR%?Hs;","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":45908,"triangles":1176,"vertices":2260,"meshes":5,"materials":4,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.2772746980190277,0.00000599899685121974,-0.24032931319456768],"max":[0.2772746980190277,0.5749864097263376,0.28998488477450085]},"sizeMeters":[0.555,0.575,0.53],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:04.334Z","updatedAt":"2026-09-11T09:06:04.455Z","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/34514/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 ArtistsStoolTattooAndPiercingStudio(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34514/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/34514/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34514/v1/model.glb\" alt=\"Artists Stool (Tattoo and Piercing Studio)\" 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/34514/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/34514/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34519","slug":"tattoo-and-piercing-studio-work-light-arm-e9019615","title":"Work Light Arm (Tattoo and Piercing Studio)","summary":"An arm mounted work light: a castored base and post carrying a jointed arm and a round lamp head on its yoke, the light an artist pulls over the piece being worked.","description":"An arm mounted work light: a castored base and post carrying a jointed arm and a round lamp head on its yoke, the light an artist pulls over the piece being worked. Overall 0.44 by 1.84 by 1.20 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The head node is parented to the arm node, so tilting the arm carries the head and the head still tilts on its own yoke. There is no power cable: a cable is flexible and this library has no skinning. Rigid node-transform clips: arm-tilt and head-tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-work-light-arm-e9019615","cdnUrl":"https://cdn.3dassets.dev/assets/34519/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-work-light-arm-e9019615","thumbnailUrl":"https://cdn.3dassets.dev/assets/34519/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34519/v1/poster.webp","blurhash":"U69tAZMx00?v~q%M4.9Y00xu^+9F0KE1?H?b","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":33852,"triangles":816,"vertices":1326,"meshes":10,"materials":5,"textures":0,"animations":["arm-tilt","head-tilt"],"boundingBox":{"min":[-0.2199999988079071,-0.0000032041217480037465,-0.2199999988079071],"max":[0.2199999988079071,1.843429321245475,0.9800000178813935]},"sizeMeters":[0.44,1.843,1.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:06.123Z","updatedAt":"2026-09-11T09:06:06.252Z","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/34519/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 WorkLightArmTattooAndPiercingStudio(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34519/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/34519/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34519/v1/model.glb\" alt=\"Work Light Arm (Tattoo and Piercing Studio)\" 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/34519/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/34519/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34518","slug":"tattoo-and-piercing-studio-rolling-tray-table-93236166","title":"Rolling Tray Table (Tattoo and Piercing Studio)","summary":"A rolling stainless tray table set out for a session: a castored frame under a lipped top with a row of coloured ink caps, a machine cradle, a wipe pack and a lower shelf.","description":"A rolling stainless tray table set out for a session: a castored frame under a lipped top with a row of coloured ink caps, a machine cradle, a wipe pack and a lower shelf. Overall 0.56 by 0.82 by 0.42 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The four castors spin as named nodes; the frame does not, because a trolley crossing a room is the whole model moving. The ink caps are empty cups: there is no liquid anywhere in this pack. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-rolling-tray-table-93236166","cdnUrl":"https://cdn.3dassets.dev/assets/34518/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-rolling-tray-table-93236166","thumbnailUrl":"https://cdn.3dassets.dev/assets/34518/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34518/v1/poster.webp","blurhash":"UD9j+Ss:00R*_NofDiRkD%j@xuWWM{oft7af","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":57260,"triangles":2084,"vertices":3135,"meshes":11,"materials":7,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.2800008789268549,-0.000002109063480235096,-0.21001940518917772],"max":[0.2800008789268549,0.8238595964165193,0.21001940518917772]},"sizeMeters":[0.56,0.824,0.42],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:07.156Z","updatedAt":"2026-09-11T09:06:07.264Z","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/34518/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 RollingTrayTableTattooAndPiercingStudio(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34518/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/34518/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34518/v1/model.glb\" alt=\"Rolling Tray Table (Tattoo and Piercing Studio)\" 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/34518/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/34518/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34520","slug":"tattoo-and-piercing-studio-tattoo-machine-stand-cf77d28d","title":"Tattoo Machine Stand (Tattoo and Piercing Studio)","summary":"A tattoo machine resting on its stand: a weighted disc base and post under a cradle, with a coil frame, a knurled grip, the tube and the needle bar standing out of it.","description":"A tattoo machine resting on its stand: a weighted disc base and post under a cradle, with a coil frame, a knurled grip, the tube and the needle bar standing out of it. Overall 0.19 by 0.38 by 0.26 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The clip cord is absent and so is any grip wrap: both are flexible, and this library has no skinning. Nothing on this model moves; the machine lifts off the cradle as a whole object in a scene. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-tattoo-machine-stand-cf77d28d","cdnUrl":"https://cdn.3dassets.dev/assets/34520/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-tattoo-machine-stand-cf77d28d","thumbnailUrl":"https://cdn.3dassets.dev/assets/34520/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34520/v1/poster.webp","blurhash":"U78z_gM{00%M%gWCMxt600t7~qRj4Ut6.8NG","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":57868,"triangles":2692,"vertices":2325,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.09401128856667532,0,-0.09399549117319284],"max":[0.09401128856667532,0.37720000743865967,0.16299549689523873]},"sizeMeters":[0.188,0.377,0.257],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:06.137Z","updatedAt":"2026-09-11T09:06:06.268Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34520/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TattooMachineStandTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34520/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34520/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34520/v1/model.glb\" alt=\"Tattoo Machine Stand (Tattoo and Piercing Studio)\" 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/34520/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/34520/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34521","slug":"tattoo-and-piercing-studio-tattoo-machine-stand-magent-1b7ff4a8","title":"Tattoo Machine Stand Magenta (Tattoo and Piercing Studio)","summary":"The machine and stand with a magenta frame, so a second booth reads as a different artists station from the same camera.","description":"The machine and stand with a magenta frame, so a second booth reads as a different artists station from the same camera. Overall 0.19 by 0.38 by 0.26 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-tattoo-machine-stand-magent-1b7ff4a8","cdnUrl":"https://cdn.3dassets.dev/assets/34521/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-tattoo-machine-stand-magent-1b7ff4a8","thumbnailUrl":"https://cdn.3dassets.dev/assets/34521/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34521/v1/poster.webp","blurhash":"U89QXGM{00%3-pWVEKs:00s;~XNZ0ds:^kNG","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":57136,"triangles":2692,"vertices":2325,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.09401128856667532,0,-0.09399549117319284],"max":[0.09401128856667532,0.37720000743865967,0.16299549689523873]},"sizeMeters":[0.188,0.377,0.257],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:06.398Z","updatedAt":"2026-09-11T09:06:06.509Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34521/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TattooMachineStandMagentaTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34521/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34521/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34521/v1/model.glb\" alt=\"Tattoo Machine Stand Magenta (Tattoo and Piercing Studio)\" 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/34521/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/34521/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34522","slug":"tattoo-and-piercing-studio-power-supply-and-pedal-2853ca76","title":"Power Supply And Pedal (Tattoo and Piercing Studio)","summary":"A studio power supply with its foot pedal: a cased unit with a lit readout, two dials and a clip socket, beside a sprung pedal plate on the floor.","description":"A studio power supply with its foot pedal: a cased unit with a lit readout, two dials and a clip socket, beside a sprung pedal plate on the floor. Overall 0.46 by 0.11 by 0.24 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The supply and the pedal are one model because they are never used apart. The lead is a short rigid tail only, and the pedal plate does not move: a real one travels a few millimetres on a spring, which is below anything a viewer would read. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-power-supply-and-pedal-2853ca76","cdnUrl":"https://cdn.3dassets.dev/assets/34522/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-power-supply-and-pedal-2853ca76","thumbnailUrl":"https://cdn.3dassets.dev/assets/34522/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34522/v1/poster.webp","blurhash":"UA9%C[^l0c5j}v=~JO9r00M{xvsm1E4-v*^l","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":20048,"triangles":556,"vertices":789,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.0860000029206276,0.000010681228732260795,-0.09600555650289816],"max":[0.3700000047683716,0.11399394042216254,0.1400165549226549]},"sizeMeters":[0.456,0.114,0.236],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:09.073Z","updatedAt":"2026-09-11T09:06:09.300Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34522/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PowerSupplyAndPedalTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34522/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34522/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34522/v1/model.glb\" alt=\"Power Supply And Pedal (Tattoo and Piercing Studio)\" 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/34522/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/34522/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34523","slug":"tattoo-and-piercing-studio-ink-bottle-rack-dd314947","title":"Ink Bottle Rack (Tattoo and Piercing Studio)","summary":"A stepped ink rack: three tiers of bottles in their caps, sitting on a white frame with a coloured front rail, the colour an otherwise clinical booth gets its palette from.","description":"A stepped ink rack: three tiers of bottles in their caps, sitting on a white frame with a coloured front rail, the colour an otherwise clinical booth gets its palette from. Overall 0.46 by 0.34 by 0.30 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The bottles are sealed and their bodies are tinted glass with no liquid inside: there is no fluid anywhere in this pack. Nothing moves; lift a bottle out as a separate object if a scene needs one in a hand. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-ink-bottle-rack-dd314947","cdnUrl":"https://cdn.3dassets.dev/assets/34523/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-ink-bottle-rack-dd314947","thumbnailUrl":"https://cdn.3dassets.dev/assets/34523/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34523/v1/poster.webp","blurhash":"UCHLSb~V00g400_2_3My00IU%fxu~X8{VubD","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":123660,"triangles":6564,"vertices":7641,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.23100000619888306,0.0000022355360001780067,-0.1500015286465831],"max":[0.23100000619888306,0.3410093990951903,0.1540020308074605]},"sizeMeters":[0.462,0.341,0.304],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:09.170Z","updatedAt":"2026-09-11T09:06:09.286Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34523/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function InkBottleRackTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34523/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34523/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34523/v1/model.glb\" alt=\"Ink Bottle Rack (Tattoo and Piercing Studio)\" 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/34523/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/34523/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34524","slug":"tattoo-and-piercing-studio-needle-cartridge-drawer-uni-69a9dbd4","title":"Needle Cartridge Drawer Unit (Tattoo and Piercing Studio)","summary":"A four drawer cartridge unit on castors: a white carcass with a steel top, coloured drawer fronts with full width handles and a label card on each.","description":"A four drawer cartridge unit on castors: a white carcass with a steel top, coloured drawer fronts with full width handles and a label card on each. Overall 0.50 by 0.75 by 0.52 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Each drawer front is a panel on its own node: there is no box behind it, so a drawer travels a little over its own depth. The castors spin as named nodes. Rigid node-transform clips: open, close and roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-needle-cartridge-drawer-uni-69a9dbd4","cdnUrl":"https://cdn.3dassets.dev/assets/34524/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-needle-cartridge-drawer-uni-69a9dbd4","thumbnailUrl":"https://cdn.3dassets.dev/assets/34524/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34524/v1/poster.webp","blurhash":"UEDcgt9F00_3_Nt7IARj01-;xuDj%2WBIot7","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":20652,"triangles":1364,"vertices":1544,"meshes":19,"materials":4,"textures":0,"animations":["open","close","roll"],"boundingBox":{"min":[-0.25099998712539673,-0.000001638364893370714,-0.25099998712539673],"max":[0.25099998712539673,0.7541350666550105,0.2690008827044678]},"sizeMeters":[0.502,0.754,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:08.206Z","updatedAt":"2026-09-11T09:06:08.322Z","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/34524/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 NeedleCartridgeDrawerUnitTattooAndPiercingStudio(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34524/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/34524/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34524/v1/model.glb\" alt=\"Needle Cartridge Drawer Unit (Tattoo and Piercing Studio)\" 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/34524/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/34524/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34525","slug":"tattoo-and-piercing-studio-armrest-on-stand-1872d4a3","title":"Armrest On Stand (Tattoo and Piercing Studio)","summary":"A padded armrest on a stand: a weighted disc base and post under a black padded rest with magenta piping and a clamp collar, the piece an arm is worked over.","description":"A padded armrest on a stand: a weighted disc base and post under a black padded rest with magenta piping and a clamp collar, the piece an arm is worked over. Overall 0.33 by 0.77 by 0.44 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The height collar is modelled but static: raising a stand is a height change, not a rotation. The pad is one piece with the shell. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-armrest-on-stand-1872d4a3","cdnUrl":"https://cdn.3dassets.dev/assets/34525/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-armrest-on-stand-1872d4a3","thumbnailUrl":"https://cdn.3dassets.dev/assets/34525/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34525/v1/poster.webp","blurhash":"U38gT|-p009ay;VumAyBnBM{Su-q8xIoyC=z","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":22288,"triangles":736,"vertices":890,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.16501116497858745,0,-0.2199999988079071],"max":[0.16501116497858745,0.765999972820282,0.2199999988079071]},"sizeMeters":[0.33,0.766,0.44],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:09.064Z","updatedAt":"2026-09-11T09:06:09.204Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34525/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ArmrestOnStandTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34525/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34525/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34525/v1/model.glb\" alt=\"Armrest On Stand (Tattoo and Piercing Studio)\" 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/34525/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/34525/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34526","slug":"tattoo-and-piercing-studio-booth-divider-panel-84aca573","title":"Booth Divider Panel (Tattoo and Piercing Studio)","summary":"A 1.6 m free standing booth divider: a white infill panel in a steel frame on flat feet, with two coloured bands across it, the piece a row of booths is separated by.","description":"A 1.6 m free standing booth divider: a white infill panel in a steel frame on flat feet, with two coloured bands across it, the piece a row of booths is separated by. Overall 1.70 by 1.90 by 0.34 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Tiles on a 1.6 m grid through divider-left and divider-right, so a run of panels is one booth wall. Two panels meet frame to frame at their own ends rather than overlapping. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-booth-divider-panel-84aca573","cdnUrl":"https://cdn.3dassets.dev/assets/34526/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-booth-divider-panel-84aca573","thumbnailUrl":"https://cdn.3dassets.dev/assets/34526/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34526/v1/poster.webp","blurhash":"UFECqPxu00IU-;xuMxD%00ay~XjabHkCj[ae","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"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":15400,"triangles":564,"vertices":524,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.8500000238418579,-0.00002624670338785204,-0.16996368774107648],"max":[0.8500000238418579,1.899999976158142,0.16996368774107648]},"sizeMeters":[1.7,1.9,0.34],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:11.322Z","updatedAt":"2026-09-11T09:06:11.427Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34526/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BoothDividerPanelTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34526/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34526/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34526/v1/model.glb\" alt=\"Booth Divider Panel (Tattoo and Piercing Studio)\" 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/34526/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/34526/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34527","slug":"tattoo-and-piercing-studio-booth-divider-panel-teal-63a717e1","title":"Booth Divider Panel Teal (Tattoo and Piercing Studio)","summary":"The booth divider with teal bands, for a studio that gives each artists booth its own colour.","description":"The booth divider with teal bands, for a studio that gives each artists booth its own colour. Overall 1.70 by 1.90 by 0.34 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-booth-divider-panel-teal-63a717e1","cdnUrl":"https://cdn.3dassets.dev/assets/34527/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-booth-divider-panel-teal-63a717e1","thumbnailUrl":"https://cdn.3dassets.dev/assets/34527/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34527/v1/poster.webp","blurhash":"UFD,Dwxu00IU-;xuIUD%00ay_NbHj[oMj[WB","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"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":15444,"triangles":564,"vertices":524,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.8500000238418579,-0.00002624670338785204,-0.16996368774107648],"max":[0.8500000238418579,1.899999976158142,0.16996368774107648]},"sizeMeters":[1.7,1.9,0.34],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:10.871Z","updatedAt":"2026-09-11T09:06:10.971Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34527/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BoothDividerPanelTealTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34527/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34527/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34527/v1/model.glb\" alt=\"Booth Divider Panel Teal (Tattoo and Piercing Studio)\" 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/34527/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/34527/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34529","slug":"tattoo-and-piercing-studio-privacy-curtain-rail-5e1bb661","title":"Privacy Curtain Rail (Tattoo and Piercing Studio)","summary":"A free standing privacy curtain: a steel rail on two posts and flat feet, with a pleated curtain hanging from its rings, drawn back to one side.","description":"A free standing privacy curtain: a steel rail on two posts and flat feet, with a pleated curtain hanging from its rings, drawn back to one side. Overall 2.18 by 2.01 by 0.28 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The curtain is static. Fabric needs skinning to draw and this library has none, so it is modelled as fixed pleats gathered to one side, which is the pose a curtain spends most of its life in. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-privacy-curtain-rail-5e1bb661","cdnUrl":"https://cdn.3dassets.dev/assets/34529/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-privacy-curtain-rail-5e1bb661","thumbnailUrl":"https://cdn.3dassets.dev/assets/34529/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34529/v1/poster.webp","blurhash":"U57ehoLe00*K.m%#HrDND4ml*JUGHs%2%hEL","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":92384,"triangles":5080,"vertices":3637,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1.090000033378601,-0.0000358598767090032,-0.1399798620702888],"max":[1.090000033378601,2.00600004196167,0.1399798620702888]},"sizeMeters":[2.18,2.006,0.28],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:11.135Z","updatedAt":"2026-09-11T09:06:11.261Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34529/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PrivacyCurtainRailTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34529/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34529/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34529/v1/model.glb\" alt=\"Privacy Curtain Rail (Tattoo and Piercing Studio)\" 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/34529/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/34529/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34528","slug":"tattoo-and-piercing-studio-mirror-wall-panel-d6b55bd5","title":"Mirror Wall Panel (Tattoo and Piercing Studio)","summary":"A wall mounted mirror panel: a polished sheet in a dark frame with a magenta reveal, the mirror a client checks a finished piece in.","description":"A wall mounted mirror panel: a polished sheet in a dark frame with a magenta reveal, the mirror a client checks a finished piece in. Overall 1.00 by 1.80 by 0.06 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. A wall piece: it rests on y=0 so it can be dropped straight onto a floor, and a scene hangs it by raising it, typically to 0.8 m. The mirror face is a polished metal material, not a real reflection. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-mirror-wall-panel-d6b55bd5","cdnUrl":"https://cdn.3dassets.dev/assets/34528/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-mirror-wall-panel-d6b55bd5","thumbnailUrl":"https://cdn.3dassets.dev/assets/34528/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34528/v1/poster.webp","blurhash":"U48piz}c000wS{t7wNRQIVNtTEspX8s;nkNF","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":5516,"triangles":132,"vertices":150,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.5000579652974853,2.3841858265427618e-8,-0.030967742135997192],"max":[0.5000579652974853,1.7999999523162842,0.030967742135997192]},"sizeMeters":[1,1.8,0.062],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:11.122Z","updatedAt":"2026-09-11T09:06:11.244Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34528/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function MirrorWallPanelTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34528/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34528/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34528/v1/model.glb\" alt=\"Mirror Wall Panel (Tattoo and Piercing Studio)\" 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/34528/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/34528/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34530","slug":"tattoo-and-piercing-studio-portfolio-stand-522babb2","title":"Portfolio Stand (Tattoo and Piercing Studio)","summary":"A portfolio stand: an A frame easel in steel with a tilting board, a ledge and a bound portfolio open on it, for the front of a booth.","description":"A portfolio stand: an A frame easel in steel with a tilting board, a ledge and a bound portfolio open on it, for the front of a booth. Overall 0.63 by 1.33 by 0.51 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The board tilts on its ledge; the frame does not. The artwork on it is abstract colour blocking, and nothing in this pack carries readable imagery. Rigid node-transform clips: tilt. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-portfolio-stand-522babb2","cdnUrl":"https://cdn.3dassets.dev/assets/34530/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-portfolio-stand-522babb2","thumbnailUrl":"https://cdn.3dassets.dev/assets/34530/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34530/v1/poster.webp","blurhash":"U8AAO7-;004n~q%24n9Y00WU~Xxa0KNG^,%M","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":19560,"triangles":492,"vertices":760,"meshes":5,"materials":4,"textures":0,"animations":["tilt"],"boundingBox":{"min":[-0.31744282497464565,0,-0.3156067767632791],"max":[0.31744282497464565,1.3266563415527344,0.1973302999032327]},"sizeMeters":[0.635,1.327,0.513],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:12.710Z","updatedAt":"2026-09-11T09:06:12.824Z","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/34530/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 PortfolioStandTattooAndPiercingStudio(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34530/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/34530/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34530/v1/model.glb\" alt=\"Portfolio Stand (Tattoo and Piercing Studio)\" 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/34530/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/34530/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34531","slug":"tattoo-and-piercing-studio-stencil-printer-shelf-7f9f3da5","title":"Stencil Printer Shelf (Tattoo and Piercing Studio)","summary":"A stencil printer on its shelf unit: a two shelf white stand with a thermal printer on top, a paper slot, a stack of stencil sheets and a box of spare thermal paper below.","description":"A stencil printer on its shelf unit: a two shelf white stand with a thermal printer on top, a paper slot, a stack of stencil sheets and a box of spare thermal paper below. Overall 0.54 by 1.07 by 0.59 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The lid and the paper path are modelled closed. The printer has no readable text or brand on it anywhere. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-stencil-printer-shelf-7f9f3da5","cdnUrl":"https://cdn.3dassets.dev/assets/34531/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-stencil-printer-shelf-7f9f3da5","thumbnailUrl":"https://cdn.3dassets.dev/assets/34531/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34531/v1/poster.webp","blurhash":"U6DJP09F00X5_4xuD$IU00-;~qM{9FW.%geo","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":29032,"triangles":1104,"vertices":1142,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.2709999978542328,-7.1525572131747595e-9,-0.21098913374002295],"max":[0.2709999978542328,1.0700000524520874,0.3799999952316284]},"sizeMeters":[0.542,1.07,0.591],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:12.931Z","updatedAt":"2026-09-11T09:06:13.033Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34531/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StencilPrinterShelfTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34531/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34531/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34531/v1/model.glb\" alt=\"Stencil Printer Shelf (Tattoo and Piercing Studio)\" 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/34531/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/34531/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34532","slug":"tattoo-and-piercing-studio-piercing-bed-fb687174","title":"Piercing Bed (Tattoo and Piercing Studio)","summary":"A piercing bed: a stainless frame on adjustable feet under a black padded top with magenta piping, a raised head section and a paper roll on its holder at the head end.","description":"A piercing bed: a stainless frame on adjustable feet under a black padded top with magenta piping, a raised head section and a paper roll on its holder at the head end. Overall 0.60 by 1.29 by 1.82 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The head section is raised in the geometry and does not move: the frame under a real one is a gas strut, a height change rather than a rotation, and there is no skinning here. The paper sheet hanging off the head end is a flat panel. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-piercing-bed-fb687174","cdnUrl":"https://cdn.3dassets.dev/assets/34532/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-piercing-bed-fb687174","thumbnailUrl":"https://cdn.3dassets.dev/assets/34532/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34532/v1/poster.webp","blurhash":"U49%r4IVD$_3?c00IT_400D%%3tRWm~D%gNF","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":36560,"triangles":1420,"vertices":1525,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.3000080189473658,0.000050092630853926234,-0.9750000238418579],"max":[0.3000080189473658,1.2899498650022256,0.8500000238418579]},"sizeMeters":[0.6,1.29,1.825],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:13.973Z","updatedAt":"2026-09-11T09:06:14.108Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34532/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PiercingBedTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34532/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34532/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34532/v1/model.glb\" alt=\"Piercing Bed (Tattoo and Piercing Studio)\" 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/34532/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/34532/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34533","slug":"tattoo-and-piercing-studio-instrument-tray-set-aebe0da4","title":"Instrument Tray Set (Tattoo and Piercing Studio)","summary":"A laid out instrument tray: a stainless tray on a folded blue liner with slotted forceps, a pair of ring handled clamps, a sleeved needle, a marker and a gauze pack.","description":"A laid out instrument tray: a stainless tray on a folded blue liner with slotted forceps, a pair of ring handled clamps, a sleeved needle, a marker and a gauze pack. Overall 0.34 by 0.19 by 0.24 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. A bench top model: it rests on y=0 so it sits straight on a tray table or a bench. The forceps are modelled open with real jaws and do not close, since a scissor linkage is two nodes turning about one pin and a rigid transform carries one. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-instrument-tray-set-aebe0da4","cdnUrl":"https://cdn.3dassets.dev/assets/34533/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-instrument-tray-set-aebe0da4","thumbnailUrl":"https://cdn.3dassets.dev/assets/34533/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34533/v1/poster.webp","blurhash":"UBA1IsX74Ti{DOt8o~Rj00en%#g3?^Inrrxu","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":72112,"triangles":3128,"vertices":3048,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.17000000178813934,0.00000613413500664961,-0.12000183237280383],"max":[0.17000000178813934,0.19400070082208337,0.12000183237280383]},"sizeMeters":[0.34,0.194,0.24],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:14.264Z","updatedAt":"2026-09-11T09:06:14.371Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34533/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function InstrumentTraySetTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34533/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34533/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34533/v1/model.glb\" alt=\"Instrument Tray Set (Tattoo and Piercing Studio)\" 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/34533/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/34533/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34534","slug":"tattoo-and-piercing-studio-autoclave-bench-8047d595","title":"Autoclave Bench (Tattoo and Piercing Studio)","summary":"A bench top autoclave on its stand: a white cased steriliser with a lit panel and a round hinged door onto a real chamber recess, standing on a stainless bench with a lower shelf.","description":"A bench top autoclave on its stand: a white cased steriliser with a lit panel and a round hinged door onto a real chamber recess, standing on a stainless bench with a lower shelf. Overall 0.98 by 1.31 by 0.65 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The chamber behind the door is a recess with its tray rails in it, so the door opening onto it reads. There is no water and no steam anywhere in this pack. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-autoclave-bench-8047d595","cdnUrl":"https://cdn.3dassets.dev/assets/34534/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-autoclave-bench-8047d595","thumbnailUrl":"https://cdn.3dassets.dev/assets/34534/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34534/v1/poster.webp","blurhash":"UCB:v*My00x[~qoMD$WB00t7_3Rj00kC%LjH","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":46188,"triangles":1640,"vertices":1883,"meshes":9,"materials":7,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.492000013589859,-7.1525572131747595e-9,-0.31198389484451094],"max":[0.492000013589859,1.308018264658964,0.33999832775869276]},"sizeMeters":[0.984,1.308,0.652],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:14.510Z","updatedAt":"2026-09-11T09:06:14.616Z","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/34534/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 AutoclaveBenchTattooAndPiercingStudio(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34534/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/34534/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34534/v1/model.glb\" alt=\"Autoclave Bench (Tattoo and Piercing Studio)\" 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/34534/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/34534/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34535","slug":"tattoo-and-piercing-studio-autoclave-bench-open-08189d41","title":"Autoclave Bench Open (Tattoo and Piercing Studio)","summary":"The autoclave with its door standing open on the chamber, for a sterile area that should read as mid cycle without animating anything.","description":"The autoclave with its door standing open on the chamber, for a sterile area that should read as mid cycle without animating anything. Overall 0.98 by 1.31 by 0.91 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-autoclave-bench-open-08189d41","cdnUrl":"https://cdn.3dassets.dev/assets/34535/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-autoclave-bench-open-08189d41","thumbnailUrl":"https://cdn.3dassets.dev/assets/34535/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34535/v1/poster.webp","blurhash":"UEC6$4RP00x]~qs;IUR*00t7?bM|00WA%Lj]","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":47640,"triangles":1640,"vertices":1882,"meshes":9,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.492000013589859,-7.1525572131747595e-9,-0.31198389484451094],"max":[0.492000013589859,1.308018264658964,0.5971367239952088]},"sizeMeters":[0.984,1.308,0.909],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:14.799Z","updatedAt":"2026-09-11T09:06:14.909Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34535/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function AutoclaveBenchOpenTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34535/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34535/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34535/v1/model.glb\" alt=\"Autoclave Bench Open (Tattoo and Piercing Studio)\" 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/34535/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/34535/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34536","slug":"tattoo-and-piercing-studio-ultrasonic-cleaner-a114a6d9","title":"Ultrasonic Cleaner (Tattoo and Piercing Studio)","summary":"A benchtop ultrasonic cleaner: a stainless cased tank with a hinged lid, a basket in the well, a timer dial and a lit readout on the fascia.","description":"A benchtop ultrasonic cleaner: a stainless cased tank with a hinged lid, a basket in the well, a timer dial and a lit readout on the fascia. Overall 0.40 by 0.24 by 0.31 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The tank is dry: there is no fluid anywhere in this pack. The basket sits in the well as part of the body, and only the lid moves. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-ultrasonic-cleaner-a114a6d9","cdnUrl":"https://cdn.3dassets.dev/assets/34536/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-ultrasonic-cleaner-a114a6d9","thumbnailUrl":"https://cdn.3dassets.dev/assets/34536/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34536/v1/poster.webp","blurhash":"U4Bf;P.R00$l[MtkBzrv00H@=}EK0vm-{nTb","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":23928,"triangles":752,"vertices":929,"meshes":10,"materials":7,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.20200000703334808,-0.000004122010497417672,-0.15201630217704795],"max":[0.20200000703334808,0.24199764885029823,0.15999914126683115]},"sizeMeters":[0.404,0.242,0.312],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:15.855Z","updatedAt":"2026-09-11T09:06:15.953Z","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/34536/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 UltrasonicCleanerTattooAndPiercingStudio(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34536/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/34536/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34536/v1/model.glb\" alt=\"Ultrasonic Cleaner (Tattoo and Piercing Studio)\" 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/34536/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/34536/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34537","slug":"tattoo-and-piercing-studio-sterile-pouch-rack-b2530e82","title":"Sterile Pouch Rack (Tattoo and Piercing Studio)","summary":"A sterile pouch rack: an angled steel wire rack in three tiers, loaded with sealed pouches whose indicator strips face out.","description":"A sterile pouch rack: an angled steel wire rack in three tiers, loaded with sealed pouches whose indicator strips face out. Overall 0.56 by 1.21 by 0.36 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The pouches are sealed and blank: no text, no brand and no readable label anywhere. Nothing moves; take a pouch out as a separate object if a scene needs one in a hand. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-sterile-pouch-rack-b2530e82","cdnUrl":"https://cdn.3dassets.dev/assets/34537/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-sterile-pouch-rack-b2530e82","thumbnailUrl":"https://cdn.3dassets.dev/assets/34537/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34537/v1/poster.webp","blurhash":"U6A0?%t700Rj~qof4nRjD%j[%MWBNFofxuWB","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":90544,"triangles":3348,"vertices":4120,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.2800000011920929,-0.000010147364530147668,-0.1700128131759619],"max":[0.2800000011920929,1.2100000381469727,0.19001282390479796]},"sizeMeters":[0.56,1.21,0.36],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:16.040Z","updatedAt":"2026-09-11T09:06:16.141Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34537/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SterilePouchRackTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34537/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34537/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34537/v1/model.glb\" alt=\"Sterile Pouch Rack (Tattoo and Piercing Studio)\" 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/34537/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/34537/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34538","slug":"tattoo-and-piercing-studio-sterile-store-cabinet-a33777ba","title":"Sterile Store Cabinet (Tattoo and Piercing Studio)","summary":"A glazed sterile store: an open carcass on a dark plinth with three loaded shelves behind a pair of framed glass doors, and a coloured header above them.","description":"A glazed sterile store: an open carcass on a dark plinth with three loaded shelves behind a pair of framed glass doors, and a coloured header above them. Overall 0.90 by 1.65 by 0.43 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The carcass is open sided with its shelves modelled, so whatever is inside reads the moment a door opens. Both leaves hinge on their outer edges. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-sterile-store-cabinet-a33777ba","cdnUrl":"https://cdn.3dassets.dev/assets/34538/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-sterile-store-cabinet-a33777ba","thumbnailUrl":"https://cdn.3dassets.dev/assets/34538/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34538/v1/poster.webp","blurhash":"U9D0Aa8_00~q~DaL9Yg2Dj%MkWD%~Xt74nIn","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":73288,"triangles":3240,"vertices":3108,"meshes":10,"materials":8,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.4500412066939291,0.00001068317511031952,-0.20996886555805894],"max":[0.4500412066939291,1.6449999809265137,0.22097332647017082]},"sizeMeters":[0.9,1.645,0.431],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:16.370Z","updatedAt":"2026-09-11T09:06:16.468Z","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/34538/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 SterileStoreCabinetTattooAndPiercingStudio(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34538/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/34538/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34538/v1/model.glb\" alt=\"Sterile Store Cabinet (Tattoo and Piercing Studio)\" 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/34538/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/34538/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34539","slug":"tattoo-and-piercing-studio-sterile-store-cabinet-open-74c6306c","title":"Sterile Store Cabinet Open (Tattoo and Piercing Studio)","summary":"The sterile store with both doors standing open on its stock, for a set dressed as being restocked.","description":"The sterile store with both doors standing open on its stock, for a set dressed as being restocked. Overall 1.00 by 1.65 by 0.46 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-sterile-store-cabinet-open-74c6306c","cdnUrl":"https://cdn.3dassets.dev/assets/34539/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-sterile-store-cabinet-open-74c6306c","thumbnailUrl":"https://cdn.3dassets.dev/assets/34539/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34539/v1/poster.webp","blurhash":"UDFPEL~q0000^+%3E1E100IA%M%g-pjaIUR*","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":74216,"triangles":3240,"vertices":3108,"meshes":10,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.49839772725392095,0.00001068317511031952,-0.24842126371575493],"max":[0.49839772725392095,1.6449999809265137,0.20996886555805894]},"sizeMeters":[0.997,1.645,0.458],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:17.620Z","updatedAt":"2026-09-11T09:06:17.734Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34539/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SterileStoreCabinetOpenTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34539/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34539/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34539/v1/model.glb\" alt=\"Sterile Store Cabinet Open (Tattoo and Piercing Studio)\" 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/34539/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/34539/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34540","slug":"tattoo-and-piercing-studio-sharps-bin-a379b087","title":"Sharps Bin (Tattoo and Piercing Studio)","summary":"A yellow sharps bin: a moulded body with a magenta lid, a slotted aperture and a blank hazard panel, the container every needle in a studio ends in.","description":"A yellow sharps bin: a moulded body with a magenta lid, a slotted aperture and a blank hazard panel, the container every needle in a studio ends in. Overall 0.27 by 0.39 by 0.23 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The lid is moulded into the body: a sharps lid latches shut once and is never reopened, so it is deliberately not a moving node. The hazard panel is blank, with no text or symbol on it. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-sharps-bin-a379b087","cdnUrl":"https://cdn.3dassets.dev/assets/34540/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-sharps-bin-a379b087","thumbnailUrl":"https://cdn.3dassets.dev/assets/34540/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34540/v1/poster.webp","blurhash":"UBHB3n?I00Mc.,sDPIaj02RO-.xwL8NIVgxU","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":11564,"triangles":360,"vertices":364,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.13500000536441803,-5.9604645663569045e-9,-0.11500977049310981],"max":[0.13500000536441803,0.3899945072641225,0.11500977049310981]},"sizeMeters":[0.27,0.39,0.23],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:17.602Z","updatedAt":"2026-09-11T09:06:17.699Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34540/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SharpsBinTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34540/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34540/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34540/v1/model.glb\" alt=\"Sharps Bin (Tattoo and Piercing Studio)\" 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/34540/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/34540/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34541","slug":"tattoo-and-piercing-studio-pedal-waste-bin-4b2059d5","title":"Pedal Waste Bin (Tattoo and Piercing Studio)","summary":"A stainless pedal bin: a cylindrical body on a base ring with a hinged lid, a foot pedal at the front and a coloured band round the waist.","description":"A stainless pedal bin: a cylindrical body on a base ring with a hinged lid, a foot pedal at the front and a coloured band round the waist. Overall 0.34 by 0.62 by 0.38 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The lid lifts as a node. The pedal and its push rod are modelled but static: a pedal bin is a four bar linkage and one rigid node cannot carry it. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-pedal-waste-bin-4b2059d5","cdnUrl":"https://cdn.3dassets.dev/assets/34541/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-pedal-waste-bin-4b2059d5","thumbnailUrl":"https://cdn.3dassets.dev/assets/34541/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34541/v1/poster.webp","blurhash":"U47Br{xu00D*qFV@Z3tk9ts9$jNd9sR+-WxZ","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":27264,"triangles":1032,"vertices":1077,"meshes":5,"materials":3,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.17200001142919064,-0.00000656162650593782,-0.17200000569224358],"max":[0.17200001142919064,0.6170050676040906,0.20999999344348907]},"sizeMeters":[0.344,0.617,0.382],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:17.940Z","updatedAt":"2026-09-11T09:06:18.040Z","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/34541/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 PedalWasteBinTattooAndPiercingStudio(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34541/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/34541/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34541/v1/model.glb\" alt=\"Pedal Waste Bin (Tattoo and Piercing Studio)\" 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/34541/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/34541/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34542","slug":"tattoo-and-piercing-studio-hand-wash-basin-ea08fbac","title":"Hand Wash Basin (Tattoo and Piercing Studio)","summary":"A wall hung hand wash basin: a white bowl on a bracket under a tiled splashback, with a long lever mixer, a wall soap dispenser and a paper towel holder beside it.","description":"A wall hung hand wash basin: a white bowl on a bracket under a tiled splashback, with a long lever mixer, a wall soap dispenser and a paper towel holder beside it. Overall 0.90 by 1.52 by 0.46 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. A wall piece with the splashback resting on y=0, so it drops onto a floor and a scene raises it. The mixer lever does not turn and there is no water anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-hand-wash-basin-ea08fbac","cdnUrl":"https://cdn.3dassets.dev/assets/34542/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-hand-wash-basin-ea08fbac","thumbnailUrl":"https://cdn.3dassets.dev/assets/34542/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34542/v1/poster.webp","blurhash":"U8DJYN8_00_N~q%M4nD%00kC_3n$oza{M{n%","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":38192,"triangles":1084,"vertices":1644,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.45001128337815993,9.53674295089968e-9,-0.20959333594358992],"max":[0.45001128337815993,1.5199999809265137,0.2500056401989639]},"sizeMeters":[0.9,1.52,0.46],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:18.122Z","updatedAt":"2026-09-11T09:06:18.220Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34542/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function HandWashBasinTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34542/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34542/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34542/v1/model.glb\" alt=\"Hand Wash Basin (Tattoo and Piercing Studio)\" 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/34542/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/34542/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34544","slug":"tattoo-and-piercing-studio-glove-and-wipe-dispenser-68cddb1f","title":"Glove And Wipe Dispenser (Tattoo and Piercing Studio)","summary":"A wall bracket of consumables: three glove boxes in a steel rack with their openings torn out, a wipe tub below and a spare box on top.","description":"A wall bracket of consumables: three glove boxes in a steel rack with their openings torn out, a wipe tub below and a spare box on top. Overall 0.76 by 0.58 by 0.20 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. A wall piece resting on y=0, so a scene raises it to about 1.3 m. Every box is blank, with no text or brand on it. Nothing moves. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-glove-and-wipe-dispenser-68cddb1f","cdnUrl":"https://cdn.3dassets.dev/assets/34544/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-glove-and-wipe-dispenser-68cddb1f","thumbnailUrl":"https://cdn.3dassets.dev/assets/34544/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34544/v1/poster.webp","blurhash":"UAD0P[Md00yDS$R5%2b^00tR~qnmMcyDNHiw","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":39800,"triangles":1136,"vertices":1775,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.30000001192092896,0.000010703280072410504,-0.12001190678585356],"max":[0.46000000834465027,0.5811752824808956,0.08001190022934264]},"sizeMeters":[0.76,0.581,0.2],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:20.605Z","updatedAt":"2026-09-11T09:06:20.703Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34544/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function GloveAndWipeDispenserTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34544/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34544/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34544/v1/model.glb\" alt=\"Glove And Wipe Dispenser (Tattoo and Piercing Studio)\" 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/34544/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/34544/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34543","slug":"tattoo-and-piercing-studio-cleaning-trolley-652846b8","title":"Cleaning Trolley (Tattoo and Piercing Studio)","summary":"A studio cleaning trolley: a castored frame with a bucket, spray bottles, a roll of blue paper, a bin bag hoop and a mop resting in its clip.","description":"A studio cleaning trolley: a castored frame with a bucket, spray bottles, a roll of blue paper, a bin bag hoop and a mop resting in its clip. Overall 0.53 by 1.50 by 0.71 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The four castors spin as named nodes; the trolley crossing a room is the whole model moving. The mop head is a solid block and the bag is fixed pleats: cloth and film need skinning, which this library does not have. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-cleaning-trolley-652846b8","cdnUrl":"https://cdn.3dassets.dev/assets/34543/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-cleaning-trolley-652846b8","thumbnailUrl":"https://cdn.3dassets.dev/assets/34543/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34543/v1/poster.webp","blurhash":"U67nn2XS00n4EfS2$%xG00sW_4NZiInik?S~","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":62944,"triangles":2120,"vertices":3062,"meshes":10,"materials":6,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.2679995936274649,-0.0000023498608700267543,-0.27000001192092893],"max":[0.2650060985785006,1.4992601871490479,0.4399797868730639]},"sizeMeters":[0.533,1.499,0.71],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:19.509Z","updatedAt":"2026-09-11T09:06:19.618Z","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/34543/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 CleaningTrolleyTattooAndPiercingStudio(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34543/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/34543/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34543/v1/model.glb\" alt=\"Cleaning Trolley (Tattoo and Piercing Studio)\" 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/34543/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/34543/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34545","slug":"tattoo-and-piercing-studio-barrier-film-roll-34c18eb0","title":"Barrier Film Roll (Tattoo and Piercing Studio)","summary":"A barrier film dispenser: a roll of blue protective film on a steel spindle in a wall bracket, with a torn leading sheet and a serrated cutter bar.","description":"A barrier film dispenser: a roll of blue protective film on a steel spindle in a wall bracket, with a torn leading sheet and a serrated cutter bar. Overall 0.36 by 0.29 by 0.17 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. A wall piece resting on y=0, so a scene raises it above a bench. The roll does not turn: film unwinding is the sheet changing shape, which needs skinning and this library has none. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-barrier-film-roll-34c18eb0","cdnUrl":"https://cdn.3dassets.dev/assets/34545/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-barrier-film-roll-34c18eb0","thumbnailUrl":"https://cdn.3dassets.dev/assets/34545/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34545/v1/poster.webp","blurhash":"UD98}B*JD4MJyDxuV@M{D4n4o}M{rDo}cYM{","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":23788,"triangles":732,"vertices":1032,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.18000000715255737,-0.00000855052257558997,-0.07499251391444309],"max":[0.18000000715255737,0.29000213757476456,0.09799250837121112]},"sizeMeters":[0.36,0.29,0.173],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:20.772Z","updatedAt":"2026-09-11T09:06:20.870Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34545/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BarrierFilmRollTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34545/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34545/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34545/v1/model.glb\" alt=\"Barrier Film Roll (Tattoo and Piercing Studio)\" 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/34545/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/34545/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34546","slug":"tattoo-and-piercing-studio-reception-desk-856d6ac8","title":"Reception Desk (Tattoo and Piercing Studio)","summary":"A studio reception desk: a timber fronted counter with a raised client top, a staff worktop with a screen on a stand, a card terminal, an appointment book and a shelf of aftercare boxes under it.","description":"A studio reception desk: a timber fronted counter with a raised client top, a staff worktop with a screen on a stand, a card terminal, an appointment book and a shelf of aftercare boxes under it. Overall 1.94 by 1.36 by 0.71 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The client side is toward +Z. Nothing on the desk moves and there is no lettering anywhere on it: the screen, the book and the terminal are all blank. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-reception-desk-856d6ac8","cdnUrl":"https://cdn.3dassets.dev/assets/34546/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-reception-desk-856d6ac8","thumbnailUrl":"https://cdn.3dassets.dev/assets/34546/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34546/v1/poster.webp","blurhash":"UBGbP2~W00Rj0-^+-n9G0058%MnN#5M{T0WB","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":49632,"triangles":1992,"vertices":1952,"meshes":9,"materials":9,"textures":0,"animations":[],"boundingBox":{"min":[-0.9700000286102295,-0.000032643887668160065,-0.3300540230314001],"max":[0.9700000286102295,1.3599893348361152,0.37998993057525343]},"sizeMeters":[1.94,1.36,0.71],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:19.878Z","updatedAt":"2026-09-11T09:06:20.070Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34546/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ReceptionDeskTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34546/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34546/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34546/v1/model.glb\" alt=\"Reception Desk (Tattoo and Piercing Studio)\" 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/34546/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/34546/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34547","slug":"tattoo-and-piercing-studio-jewellery-display-case-2a8530d5","title":"Jewellery Display Case (Tattoo and Piercing Studio)","summary":"A glazed jewellery case: a white plinth cabinet with a glass top and front over two lined trays of barbells, rings and studs, lit from a strip under the header.","description":"A glazed jewellery case: a white plinth cabinet with a glass top and front over two lined trays of barbells, rings and studs, lit from a strip under the header. Overall 1.22 by 1.26 by 0.54 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. The jewellery is abstract rings, barbells and studs, at real scale and with no branding. Nothing moves; the case is sealed geometry with no opening leaf. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-jewellery-display-case-2a8530d5","cdnUrl":"https://cdn.3dassets.dev/assets/34547/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-jewellery-display-case-2a8530d5","thumbnailUrl":"https://cdn.3dassets.dev/assets/34547/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34547/v1/poster.webp","blurhash":"UDF$YA?b00ITx^%Ne-IT00IU-;xu~WR*9Ze.","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":84856,"triangles":4708,"vertices":4140,"meshes":9,"materials":9,"textures":0,"animations":[],"boundingBox":{"min":[-0.6119999885559082,-0.000049291914781146584,-0.2719605650002313],"max":[0.6119999885559082,1.2599792447162037,0.2719605650002313]},"sizeMeters":[1.224,1.26,0.544],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:22.375Z","updatedAt":"2026-09-11T09:06:22.472Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34547/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function JewelleryDisplayCaseTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34547/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34547/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34547/v1/model.glb\" alt=\"Jewellery Display Case (Tattoo and Piercing Studio)\" 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/34547/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/34547/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34548","slug":"tattoo-and-piercing-studio-waiting-sofa-run-db17f744","title":"Waiting Sofa Run (Tattoo and Piercing Studio)","summary":"A three seat waiting sofa: a low dark frame on steel feet with three magenta seat and back cushions and padded arms, the colour a studio waiting area is built round.","description":"A three seat waiting sofa: a low dark frame on steel feet with three magenta seat and back cushions and padded arms, the colour a studio waiting area is built round. Overall 2.00 by 0.88 by 0.76 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry. The cushions are separate blocks so a run of two sofas reads as seats rather than one slab. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-waiting-sofa-run-db17f744","cdnUrl":"https://cdn.3dassets.dev/assets/34548/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-waiting-sofa-run-db17f744","thumbnailUrl":"https://cdn.3dassets.dev/assets/34548/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34548/v1/poster.webp","blurhash":"UJE,]pxa0^WU}c$+J5I.0vw}=gNZ1XS0sDjb","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":31920,"triangles":1264,"vertices":1348,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.000019530260785188824,-0.38004699850459306],"max":[1,0.8800515716649151,0.38004699850459306]},"sizeMeters":[2,0.88,0.76],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:22.692Z","updatedAt":"2026-09-11T09:06:22.808Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34548/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WaitingSofaRunTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34548/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34548/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34548/v1/model.glb\" alt=\"Waiting Sofa Run (Tattoo and Piercing Studio)\" 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/34548/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/34548/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34549","slug":"tattoo-and-piercing-studio-waiting-sofa-run-teal-1fe21915","title":"Waiting Sofa Run Teal (Tattoo and Piercing Studio)","summary":"The waiting sofa with teal cushions, for the second run facing the first across the low table.","description":"The waiting sofa with teal cushions, for the second run facing the first across the low table. Overall 2.00 by 0.88 by 0.76 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-waiting-sofa-run-teal-1fe21915","cdnUrl":"https://cdn.3dassets.dev/assets/34549/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-waiting-sofa-run-teal-1fe21915","thumbnailUrl":"https://cdn.3dassets.dev/assets/34549/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34549/v1/poster.webp","blurhash":"UE7{pttRHXV[y?tlZ$R5D4kqt,VsQRaKXSX7","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":31956,"triangles":1264,"vertices":1348,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.000019530260785188824,-0.38004699850459306],"max":[1,0.8800515716649151,0.38004699850459306]},"sizeMeters":[2,0.88,0.76],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:23.463Z","updatedAt":"2026-09-11T09:06:23.579Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34549/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WaitingSofaRunTealTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34549/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34549/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34549/v1/model.glb\" alt=\"Waiting Sofa Run Teal (Tattoo and Piercing Studio)\" 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/34549/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/34549/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34550","slug":"tattoo-and-piercing-studio-low-table-with-portfolios-530bb892","title":"Low Table With Portfolios (Tattoo and Piercing Studio)","summary":"A low waiting table: a timber top on a black frame with two bound portfolio books, a stack of flash sheets and a small tray of aftercare cards on it.","description":"A low waiting table: a timber top on a black frame with two bound portfolio books, a stack of flash sheets and a small tray of aftercare cards on it. Overall 1.10 by 0.49 by 0.68 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry. The portfolio covers and the flash sheets are blank colour blocks: nothing in this pack carries readable imagery. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-low-table-with-portfolios-530bb892","cdnUrl":"https://cdn.3dassets.dev/assets/34550/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-low-table-with-portfolios-530bb892","thumbnailUrl":"https://cdn.3dassets.dev/assets/34550/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34550/v1/poster.webp","blurhash":"UEB|1yg40L$|~ptRIVjE00xZ-oIV00V@%LNH","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":31780,"triangles":1188,"vertices":1178,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.5519999861717224,0.00003916257632052833,-0.3420118936508777],"max":[0.5519999861717224,0.49200604403572307,0.3420118936508777]},"sizeMeters":[1.104,0.492,0.684],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:22.487Z","updatedAt":"2026-09-11T09:06:22.670Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34550/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function LowTableWithPortfoliosTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34550/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34550/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34550/v1/model.glb\" alt=\"Low Table With Portfolios (Tattoo and Piercing Studio)\" 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/34550/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/34550/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34553","slug":"tattoo-and-piercing-studio-flash-art-wall-panel-50099717","title":"Flash Art Wall Panel (Tattoo and Piercing Studio)","summary":"A 1 m flash art panel: a framed board of abstract discs, arcs, bands and line runs in magenta and yellow, the repeating unit a whole wall of studio art is built from.","description":"A 1 m flash art panel: a framed board of abstract discs, arcs, bands and line runs in magenta and yellow, the repeating unit a whole wall of studio art is built from. Overall 1.00 by 2.20 by 0.52 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Tiles on a 1 m grid through flash-left and flash-right, so a run of panels is a wall of art. It stands on y=0 against a wall, and the artwork is abstract colour and line only, with no imagery, lettering or brand anywhere. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-flash-art-wall-panel-50099717","cdnUrl":"https://cdn.3dassets.dev/assets/34553/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-flash-art-wall-panel-50099717","thumbnailUrl":"https://cdn.3dassets.dev/assets/34553/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34553/v1/poster.webp","blurhash":"U9CsaK-;004oxZxtR-E200M{~W%MNGkWt8Vs","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"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":34712,"triangles":1516,"vertices":1366,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.49996339404325046,-2.3841858265427618e-8,-0.21799049226333345],"max":[0.49996339404325046,2.200000047683716,0.3019904836802646]},"sizeMeters":[1,2.2,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:24.763Z","updatedAt":"2026-09-11T09:06:24.870Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34553/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FlashArtWallPanelTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34553/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34553/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34553/v1/model.glb\" alt=\"Flash Art Wall Panel (Tattoo and Piercing Studio)\" 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/34553/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/34553/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34551","slug":"tattoo-and-piercing-studio-flash-art-wall-panel-teal-bb16a049","title":"Flash Art Wall Panel Teal (Tattoo and Piercing Studio)","summary":"The flash panel in teal and orange, so a run of panels alternates colourways instead of repeating one.","description":"The flash panel in teal and orange, so a run of panels alternates colourways instead of repeating one. Overall 1.00 by 2.20 by 0.52 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-flash-art-wall-panel-teal-bb16a049","cdnUrl":"https://cdn.3dassets.dev/assets/34551/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-flash-art-wall-panel-teal-bb16a049","thumbnailUrl":"https://cdn.3dassets.dev/assets/34551/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34551/v1/poster.webp","blurhash":"U8CZY5?H004nxZxtR-E100M{~q%MRQogtRRi","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"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":34756,"triangles":1516,"vertices":1366,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.49996339404325046,-2.3841858265427618e-8,-0.21799049226333345],"max":[0.49996339404325046,2.200000047683716,0.3019904836802646]},"sizeMeters":[1,2.2,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:25.489Z","updatedAt":"2026-09-11T09:06:25.601Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34551/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FlashArtWallPanelTealTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34551/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34551/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34551/v1/model.glb\" alt=\"Flash Art Wall Panel Teal (Tattoo and Piercing Studio)\" 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/34551/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/34551/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34552","slug":"tattoo-and-piercing-studio-flash-art-wall-panel-mono-ccff1d68","title":"Flash Art Wall Panel Mono (Tattoo and Piercing Studio)","summary":"The flash panel in black and steel, the quiet unit that lets a colourful run breathe between booths.","description":"The flash panel in black and steel, the quiet unit that lets a colourful run breathe between booths. Overall 1.00 by 2.20 by 0.52 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-flash-art-wall-panel-mono-ccff1d68","cdnUrl":"https://cdn.3dassets.dev/assets/34552/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-flash-art-wall-panel-mono-ccff1d68","thumbnailUrl":"https://cdn.3dassets.dev/assets/34552/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34552/v1/poster.webp","blurhash":"U7B|Ka?b004nofxuflIU00M{~q-:V@t7t7M{","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"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":33880,"triangles":1516,"vertices":1366,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.49996339404325046,-2.3841858265427618e-8,-0.21799049226333345],"max":[0.49996339404325046,2.200000047683716,0.3019904836802646]},"sizeMeters":[1,2.2,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:24.453Z","updatedAt":"2026-09-11T09:06:24.553Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34552/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FlashArtWallPanelMonoTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34552/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34552/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34552/v1/model.glb\" alt=\"Flash Art Wall Panel Mono (Tattoo and Piercing Studio)\" 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/34552/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/34552/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34554","slug":"tattoo-and-piercing-studio-studio-sign-panel-46111c93","title":"Studio Sign Panel (Tattoo and Piercing Studio)","summary":"A neon style studio sign: a dark backing panel carrying a bent magenta tube run, a teal arc and a row of mounting standoffs, with no lettering on it.","description":"A neon style studio sign: a dark backing panel carrying a bent magenta tube run, a teal arc and a row of mounting standoffs, with no lettering on it. Overall 1.40 by 0.70 by 0.11 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. A wall piece resting on y=0, so a scene raises it. The tube is a coloured material and not an emissive one, so it reads as an unlit sign in daylight and takes a light from the scene the way the rest of the pack does. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-studio-sign-panel-46111c93","cdnUrl":"https://cdn.3dassets.dev/assets/34554/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-studio-sign-panel-46111c93","thumbnailUrl":"https://cdn.3dassets.dev/assets/34554/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34554/v1/poster.webp","blurhash":"UAE30f%300tR%3~qt79Z00f+~XaySd9ZW;-W","category":{"slug":"icons","title":"3D Icons & UI"},"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":31440,"triangles":1112,"vertices":1266,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.699999988079071,-0.00005340441044116018,-0.041430523728880585],"max":[0.699999988079071,0.7000533984499768,0.06799615764681269]},"sizeMeters":[1.4,0.7,0.109],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:25.353Z","updatedAt":"2026-09-11T09:06:25.458Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34554/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StudioSignPanelTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34554/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34554/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34554/v1/model.glb\" alt=\"Studio Sign Panel (Tattoo and Piercing Studio)\" 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/34554/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/34554/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34555","slug":"tattoo-and-piercing-studio-price-board-480dde11","title":"Price Board (Tattoo and Piercing Studio)","summary":"A studio price board: a dark framed board with a steel rail and blank slide in strips, for minimum charges and hourly rates a developer fills in themselves.","description":"A studio price board: a dark framed board with a steel rail and blank slide in strips, for minimum charges and hourly rates a developer fills in themselves. Overall 0.70 by 1.00 by 0.07 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. A wall piece resting on y=0. Every strip is blank: no prices, no lettering and no studio name anywhere on it. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-price-board-480dde11","cdnUrl":"https://cdn.3dassets.dev/assets/34555/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-price-board-480dde11","thumbnailUrl":"https://cdn.3dassets.dev/assets/34555/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34555/v1/poster.webp","blurhash":"UDCi~?xu00IUt8tRRjIU00WB~qt7a}ofj@WB","category":{"slug":"icons","title":"3D Icons & UI"},"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":14288,"triangles":372,"vertices":553,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.3500167851802118,0,-0.02300729464043663],"max":[0.3500167851802118,1,0.04299807818221939]},"sizeMeters":[0.7,1,0.066],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:27.501Z","updatedAt":"2026-09-11T09:06:27.614Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34555/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PriceBoardTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34555/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34555/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34555/v1/model.glb\" alt=\"Price Board (Tattoo and Piercing Studio)\" 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/34555/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/34555/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34556","slug":"tattoo-and-piercing-studio-coat-hook-rail-ca2a14fe","title":"Coat Hook Rail (Tattoo and Piercing Studio)","summary":"A wall coat rail: a timber backboard with five steel double hooks and a magenta reveal along its lower edge.","description":"A wall coat rail: a timber backboard with five steel double hooks and a magenta reveal along its lower edge. Overall 1.00 by 0.16 by 0.11 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. A wall piece resting on y=0, so a scene raises it to about 1.6 m. Static geometry. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-coat-hook-rail-ca2a14fe","cdnUrl":"https://cdn.3dassets.dev/assets/34556/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-coat-hook-rail-ca2a14fe","thumbnailUrl":"https://cdn.3dassets.dev/assets/34556/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34556/v1/poster.webp","blurhash":"U8CPYBV|4.jc?H~VNHIV00-.^+NG4:00-n-:","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":34676,"triangles":1140,"vertices":1570,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.5019999742507935,-0.000019532740134331483,-0.016974882396004493],"max":[0.5019999742507935,0.16001953095199495,0.09444367540508963]},"sizeMeters":[1.004,0.16,0.111],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:26.569Z","updatedAt":"2026-09-11T09:06:26.666Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34556/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CoatHookRailTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34556/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34556/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34556/v1/model.glb\" alt=\"Coat Hook Rail (Tattoo and Piercing Studio)\" 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/34556/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/34556/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34557","slug":"tattoo-and-piercing-studio-studio-plant-pot-7ee5b536","title":"Studio Plant Pot (Tattoo and Piercing Studio)","summary":"A tall studio plant: a matt pot on a stand with a broad leaved plant in it, the one living thing in a room of steel and vinyl.","description":"A tall studio plant: a matt pot on a stand with a broad leaved plant in it, the one living thing in a room of steel and vinyl. Overall 0.81 by 1.67 by 0.85 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry. The leaves are flat blades, which is what a plant can be at this tier without spending a whole model budget on foliage. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-studio-plant-pot-7ee5b536","cdnUrl":"https://cdn.3dassets.dev/assets/34557/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-studio-plant-pot-7ee5b536","thumbnailUrl":"https://cdn.3dassets.dev/assets/34557/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34557/v1/poster.webp","blurhash":"UA8}Yu%f00DP.joyMMVu4-M{?I%M#?afInS1","category":{"slug":"nature","title":"Nature & Landscape"},"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":40208,"triangles":1036,"vertices":1894,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.3854339414310546,0,-0.45830182202491654],"max":[0.42452242905617665,1.6724330186843872,0.39578847058448685]},"sizeMeters":[0.81,1.672,0.854],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:27.090Z","updatedAt":"2026-09-11T09:06:27.202Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34557/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StudioPlantPotTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34557/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34557/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34557/v1/model.glb\" alt=\"Studio Plant Pot (Tattoo and Piercing Studio)\" 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/34557/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/34557/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34558","slug":"tattoo-and-piercing-studio-studio-wall-module-aa71c8e0","title":"Studio Wall Module (Tattoo and Piercing Studio)","summary":"A 2 m by 2.7 m studio wall bay: a painted wall with a dark skirting and a magenta picture rail, the piece a studio plan is drawn with.","description":"A 2 m by 2.7 m studio wall bay: a painted wall with a dark skirting and a magenta picture rail, the piece a studio plan is drawn with. Overall 2.00 by 2.70 by 0.15 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Tiles on the 2 m wall grid through wall-left and wall-right, and it shares those ports with the door bay, so a run mixes both. Two bays meet face to face at their own ends rather than overlapping. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-studio-wall-module-aa71c8e0","cdnUrl":"https://cdn.3dassets.dev/assets/34558/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-studio-wall-module-aa71c8e0","thumbnailUrl":"https://cdn.3dassets.dev/assets/34558/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34558/v1/poster.webp","blurhash":"UCG+RF-;00IU~q?bD%4n00R*~qjbxut7NGM{","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"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":7656,"triangles":324,"vertices":278,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.9999237302152423,-2.3841858265427618e-8,-0.07297610588992276],"max":[0.9999237302152423,2.700000047683716,0.07297610588992276]},"sizeMeters":[2,2.7,0.146],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:27.371Z","updatedAt":"2026-09-11T09:06:27.486Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34558/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StudioWallModuleTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34558/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34558/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34558/v1/model.glb\" alt=\"Studio Wall Module (Tattoo and Piercing Studio)\" 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/34558/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/34558/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34559","slug":"tattoo-and-piercing-studio-studio-wall-module-dark-79d4b714","title":"Studio Wall Module Dark (Tattoo and Piercing Studio)","summary":"The wall bay in studio black with a teal rail, the wall a run of flash art and a mirror hang best against.","description":"The wall bay in studio black with a teal rail, the wall a run of flash art and a mirror hang best against. Overall 2.00 by 2.70 by 0.15 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-studio-wall-module-dark-79d4b714","cdnUrl":"https://cdn.3dassets.dev/assets/34559/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-studio-wall-module-dark-79d4b714","thumbnailUrl":"https://cdn.3dassets.dev/assets/34559/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34559/v1/poster.webp","blurhash":"U15r0,-;00Di?c%ME0D$DhV@x^oz%hxuMwE0","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"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":8452,"triangles":324,"vertices":278,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.9999237302152423,-2.3841858265427618e-8,-0.07300638030248906],"max":[0.9999237302152423,2.700000047683716,0.07300638030248906]},"sizeMeters":[2,2.7,0.146],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:28.478Z","updatedAt":"2026-09-11T09:06:28.607Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34559/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StudioWallModuleDarkTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34559/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34559/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34559/v1/model.glb\" alt=\"Studio Wall Module Dark (Tattoo and Piercing Studio)\" 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/34559/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/34559/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34560","slug":"tattoo-and-piercing-studio-studio-door-module-1b7645dd","title":"Studio Door Module (Tattoo and Piercing Studio)","summary":"A 2 m wall bay with a studio door: piers and a head over a lined opening, a hinged leaf with a vision panel and a magenta kick panel, a lever handle both sides and a blank sign plate on the pier.","description":"A 2 m wall bay with a studio door: piers and a head over a lined opening, a hinged leaf with a vision panel and a magenta kick panel, a lever handle both sides and a blank sign plate on the pier. Overall 2.00 by 2.70 by 0.16 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Same wall ports as the plain bay, so a door drops into any position in a run. The leaf sits inside the opening and clears the lining on both faces, so nothing shares a plane with the wall. Rigid node-transform clips: open and close. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-studio-door-module-1b7645dd","cdnUrl":"https://cdn.3dassets.dev/assets/34560/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-studio-door-module-1b7645dd","thumbnailUrl":"https://cdn.3dassets.dev/assets/34560/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34560/v1/poster.webp","blurhash":"U9E{kO9F00?H~q%M4n9F00xu_3M{s;t7R%M{","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"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":33792,"triangles":1272,"vertices":1213,"meshes":8,"materials":7,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.9999237302152423,-2.3841858265427618e-8,-0.07904952779540968],"max":[0.9999237302152423,2.700000047683716,0.07904952779540968]},"sizeMeters":[2,2.7,0.158],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:28.994Z","updatedAt":"2026-09-11T09:06:29.098Z","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/34560/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 StudioDoorModuleTattooAndPiercingStudio(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34560/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/34560/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34560/v1/model.glb\" alt=\"Studio Door Module (Tattoo and Piercing Studio)\" 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/34560/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/34560/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34562","slug":"tattoo-and-piercing-studio-studio-door-module-open-ddfa1882","title":"Studio Door Module Open (Tattoo and Piercing Studio)","summary":"The studio door bay with the leaf standing open, for a plan that needs to see into the sterile area from the floor without animating anything.","description":"The studio door bay with the leaf standing open, for a plan that needs to see into the sterile area from the floor without animating anything. Overall 2.00 by 2.70 by 0.97 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-studio-door-module-open-ddfa1882","cdnUrl":"https://cdn.3dassets.dev/assets/34562/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-studio-door-module-open-ddfa1882","thumbnailUrl":"https://cdn.3dassets.dev/assets/34562/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34562/v1/poster.webp","blurhash":"UDEMI7RP00kW~qbH4nae4nt7%MM{xus;NFRj","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"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":33264,"triangles":1272,"vertices":1211,"meshes":8,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.9999237302152423,-2.3841858265427618e-8,-0.07904952779540968],"max":[0.9999237302152423,2.700000047683716,0.8899718172914834]},"sizeMeters":[2,2.7,0.969],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:29.228Z","updatedAt":"2026-09-11T09:06:29.328Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34562/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StudioDoorModuleOpenTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34562/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34562/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34562/v1/model.glb\" alt=\"Studio Door Module Open (Tattoo and Piercing Studio)\" 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/34562/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/34562/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34561","slug":"tattoo-and-piercing-studio-studio-floor-tile-915d931e","title":"Studio Floor Tile (Tattoo and Piercing Studio)","summary":"A 2 m square of welded studio vinyl: a grey field with the welded seam grid and a magenta route inlay along one edge, the tile every room in this pack stands on.","description":"A 2 m square of welded studio vinyl: a grey field with the welded seam grid and a magenta route inlay along one edge, the tile every room in this pack stands on. Overall 2.00 by 0.07 by 2.00 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Tiles on the 2 m floor grid through floor-north, floor-south, floor-east and floor-west, so a studio floor of any shape is this one tile repeated. The inlay runs along Z, so a turn is a tile rotated 90 degrees. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-studio-floor-tile-915d931e","cdnUrl":"https://cdn.3dassets.dev/assets/34561/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-studio-floor-tile-915d931e","thumbnailUrl":"https://cdn.3dassets.dev/assets/34561/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34561/v1/poster.webp","blurhash":"U7D04M-p00NZ-qjuNsj]00I-~qnP0wbaw4V@","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"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":6136,"triangles":84,"vertices":196,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-1.0011999607086182,-0.000030213994933490917,-1.0011999607086182],"max":[1,0.06604014699371107,1.0011999607086182]},"sizeMeters":[2.001,0.066,2.002],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:29.158Z","updatedAt":"2026-09-11T09:06:29.263Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34561/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StudioFloorTileTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34561/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34561/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34561/v1/model.glb\" alt=\"Studio Floor Tile (Tattoo and Piercing Studio)\" 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/34561/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/34561/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34563","slug":"tattoo-and-piercing-studio-studio-floor-tile-dark-0e1db7b4","title":"Studio Floor Tile Dark (Tattoo and Piercing Studio)","summary":"The studio floor tile in near black with a teal inlay, for the booth half of a floor where the clinical grey would read as a corridor.","description":"The studio floor tile in near black with a teal inlay, for the booth half of a floor where the clinical grey would read as a corridor. Overall 2.00 by 0.07 by 2.00 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-studio-floor-tile-dark-0e1db7b4","cdnUrl":"https://cdn.3dassets.dev/assets/34563/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-studio-floor-tile-dark-0e1db7b4","thumbnailUrl":"https://cdn.3dassets.dev/assets/34563/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34563/v1/poster.webp","blurhash":"U37e3V%#00Vs.SfkMdjb00MJ?wpH4Tae%}bu","category":{"slug":"roads-infrastructure","title":"Roads & Infrastructure"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"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":5884,"triangles":84,"vertices":196,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-1,0.0000048987274103781675,-1.0011999607086182],"max":[1,0.06604014699371107,1]},"sizeMeters":[2,0.066,2.001],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:31.171Z","updatedAt":"2026-09-11T09:06:31.281Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34563/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function StudioFloorTileDarkTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34563/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34563/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34563/v1/model.glb\" alt=\"Studio Floor Tile Dark (Tattoo and Piercing Studio)\" 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/34563/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/34563/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34564","slug":"tattoo-and-piercing-studio-ceiling-light-bar-fa0d499e","title":"Ceiling Light Bar (Tattoo and Piercing Studio)","summary":"A 1.6 m suspended light bar: a black channel with a lit diffuser under it, hung from two drop rods, the fitting a booth row is lit by.","description":"A 1.6 m suspended light bar: a black channel with a lit diffuser under it, hung from two drop rods, the fitting a booth row is lit by. Overall 1.60 by 0.36 by 0.15 m (X by Y by Z). Metre units, +Y up, the side a client or an artist approaches from toward +Z, resting on y=0. Hangs from the ceiling: it rests on y=0 so it drops onto a floor, and a scene raises it, typically so the drop rods meet a 2.7 m ceiling. Static geometry. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-ceiling-light-bar-fa0d499e","cdnUrl":"https://cdn.3dassets.dev/assets/34564/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-ceiling-light-bar-fa0d499e","thumbnailUrl":"https://cdn.3dassets.dev/assets/34564/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34564/v1/poster.webp","blurhash":"U371TW=}v4=fD%~D-qid0055t,Xm.8004-Kz","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":15068,"triangles":436,"vertices":534,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.800000011920929,0.000020447177831499352,-0.07396832379626264],"max":[0.800000011920929,0.35799554415815943,0.07396832379626264]},"sizeMeters":[1.6,0.358,0.148],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:31.811Z","updatedAt":"2026-09-11T09:06:31.912Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34564/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CeilingLightBarTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34564/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34564/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34564/v1/model.glb\" alt=\"Ceiling Light Bar (Tattoo and Piercing Studio)\" 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/34564/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/34564/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34565","slug":"tattoo-and-piercing-studio-tattoo-studio-858ca7b3-starter-scene","title":"Tattoo studio floor (Tattoo and Piercing Studio)","summary":"A whole studio laid from 2 m floor tiles and 2 m wall bays: two artists booths side by side behind runs of flash art and a mirror, divided by free standing panels, each with its chair, work light on an arm, stool, rolling tray of ink caps and a machine on its stand, armrest,...","description":"A whole studio laid from 2 m floor tiles and 2 m wall bays: two artists booths side by side behind runs of flash art and a mirror, divided by free standing panels, each with its chair, work light on an arm, stool, rolling tray of ink caps and a machine on its stand, armrest, power supply and cartridge drawers; the sterile area behind the wall with two autoclave benches, an ultrasonic cleaner, a pouch rack, two sterile stores, a wash basin, dispensers, sharps and pedal bins and a cleaning trolley; a piercing bay in its own corner with the bed, instrument tray, light, stool and mirror; and a reception desk, jewellery case, two facing sofa runs, portfolio tables, plants and a neon style sign at the front.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-tattoo-studio-858ca7b3-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/34565/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-tattoo-studio-858ca7b3-starter-scene","thumbnailUrl":"https://cdn.3dassets.dev/assets/34565/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34565/v1/poster.webp","blurhash":"U4Csge-;00x[.7NGjGV@00E1_4H@8x=}I.OU","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":1575144,"triangles":70492,"vertices":77307,"meshes":292,"materials":12,"textures":0,"animations":[],"boundingBox":{"min":[-10.001199960708618,-0.06003021399493349,-8.07300638030249],"max":[6,2.8079955441581594,6.001199960708618]},"sizeMeters":[16.001,2.868,14.074],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":1,"publishedAt":"2026-09-11T09:06:32.235Z","updatedAt":"2026-09-11T10:09:40.655Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34565/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TattooStudioFloorTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34565/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34565/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34565/v1/model.glb\" alt=\"Tattoo studio floor (Tattoo and Piercing Studio)\" 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/34565/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/34565/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34566","slug":"tattoo-and-piercing-studio-booth-mid-session-a5bb8549","title":"Booth, mid session (Tattoo and Piercing Studio)","summary":"One artists booth at room scale with the chair reclined into the working position: the light arm pulled over it, the stool drawn up, the tray table set out with ink caps and the machine on its stand, the armrest across the chair, the power supply and pedal at the floor, and...","description":"One artists booth at room scale with the chair reclined into the working position: the light arm pulled over it, the stool drawn up, the tray table set out with ink caps and the machine on its stand, the armrest across the chair, the power supply and pedal at the floor, and the cartridge drawers, ink rack, stencil printer and portfolio stand behind, against a wall of flash art with a mirror beside it and dividers closing the booth in.","status":"published","url":"https://3dassets.dev/assets/tattoo-and-piercing-studio-booth-mid-session-a5bb8549","cdnUrl":"https://cdn.3dassets.dev/assets/34566/v1/model.glb","downloadUrl":"https://3dassets.dev/download/tattoo-and-piercing-studio-booth-mid-session-a5bb8549","thumbnailUrl":"https://cdn.3dassets.dev/assets/34566/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34566/v1/poster.webp","blurhash":"U9CQ0+0000=|?aITIUoJ00~Wf,NwD*?bofbv","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":879336,"triangles":37712,"vertices":43236,"meshes":155,"materials":11,"textures":0,"animations":[],"boundingBox":{"min":[-4,-0.05999510127258962,-4.127990492263334],"max":[2.1699636877410766,2.8079955441581594,2]},"sizeMeters":[6.17,2.868,6.128],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T09:06:32.089Z","updatedAt":"2026-09-11T09:06:32.193Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34566/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function BoothMidSessionTattooAndPiercingStudio(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34566/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34566/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34566/v1/model.glb\" alt=\"Booth, mid session (Tattoo and Piercing Studio)\" 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/34566/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/34566/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}}],"demo":{"slug":"tattoo-and-piercing-studio","title":"Tattoo and Piercing Studio","url":"https://3dassets.dev/demos/tattoo-and-piercing-studio"}}}