{"data":{"id":"103","slug":"dry-cleaners-and-alterations-shop","title":"Dry Cleaners and Alterations Shop","summary":"Walk a 9 by 9 metre high street dry cleaners: the drop off counter and ticket racks, three garment conveyor rails hung with bagged work, the cleaning plant and presses behind, and the alterations workroom in the corner.","url":"https://3dassets.dev/demos/dry-cleaners-and-alterations-shop","coverUrl":"https://cdn.3dassets.dev/media/dry-cleaners-and-alterations-shop-demo.png","featured":true,"pack":{"slug":"dry-cleaners-and-alterations-shop","title":"Dry Cleaners and Alterations Shop","url":"https://3dassets.dev/packs/dry-cleaners-and-alterations-shop","summary":"A modern high street dry cleaners: a modular counter run and garment conveyor in a tiled shell, the plant behind it with the solvent machine, washer, dryer, boiler and pressing line, and an alterations workroom of sewing tables, cutting table and dummies.","assetCount":47,"totalBytes":6196680,"starterScene":{"slug":"dry-cleaners-and-alterations-shop-dry-cl-88a6d14a-starter-scene","cdnUrl":"https://cdn.3dassets.dev/assets/34981/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-dry-cl-88a6d14a-starter-scene","fileSize":2848792}},"placementCount":114,"assetCount":46,"spawn":{"position":[-2.15,0.046,3.8],"yaw":180},"publishedAt":"2026-09-11T10:52:53.860Z","updatedAt":"2026-09-11T10:52:53.861Z","description":"## What is placed\n\nA whole shop from 46 of the pack's 47 models, on the pack's own tiled floor inside its own 3 m wall panels, under the room preset with the lamps set below them. You start just inside the shop door, facing the service run: five counter modules across the front with the till, the card reader and a collection ticket rack at either end, a price and service board, a window display rail and detergent shelving beside it, benches, an umbrella stand and two clipped shrubs in the waiting corner.\n\nBehind the counter three garment conveyor rail units carry bagged garments, one loaded, one part loaded and one a warm run straight off the press. The plant fills the middle of the shop: the dry cleaning machine with its loading door, a washer extractor, a tumble dryer, a spotting board, a weighing scale and the sorting bin bank, with garment trolleys, a laundry bag stack and a lint and filter trolley between them. The pressing station, the shirt press and the trouser topper stand against the back wall beside the steam boiler, the solvent drum bay and a run of steam pipe modules. The far corner is the alterations workroom: a sewing machine table, an overlocker table, two stools, a cutting table with rule and shears, two tailors dummies wearing work in progress, an ironing board, a pin cushion and chalk tray, a pattern hook rail, an offcut bin, a fabric bolt shelf, a thread and bobbin rack and a button and notions drawer unit.\n\n## What moves\n\nEighteen of the placed models carry rigid node clips. Counter tills and drawer units open and close, the dry cleaning machine, the washer extractor and the tumble dryer swing their loading doors, the press heads on the pressing station, the shirt press and the trouser topper lift and drop, the conveyor rails run their garments round, the sorting bins and the notions drawers pull out, and the trolleys roll. Clips play as you walk up to a model.\n\n## What does not move, and why\n\nGarment fabric, the bags hanging on the conveyor, steam, hoses and thread are static geometry: none of them is reachable with the rigid node transforms this library uses, and faking cloth or vapour with one rigid node costs a consumer more than it gives. There are no staff and no customers in the shop, because nothing here is skinned. The livery is invented: no real cleaning brand, machine manufacturer or shop is named anywhere in the pack.","scene":{"version":1,"spawn":{"position":[-2.15,0.046,3.8],"yaw":180},"ground":{"style":"none"},"environment":{"preset":"room","wallHeight":4,"lampHeight":3.6,"shadows":true},"placements":[{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-3.75,0,3.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-3.75,0,2.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-3.75,0,0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-3.75,0,-0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-3.75,0,-2.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-3.75,0,-3.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-2.25,0,3.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-2.25,0,2.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-2.25,0,0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-2.25,0,-0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-2.25,0,-2.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-2.25,0,-3.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-0.75,0,3.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-0.75,0,2.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-0.75,0,0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-0.75,0,-0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-0.75,0,-2.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[-0.75,0,-3.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[0.75,0,3.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[0.75,0,2.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[0.75,0,0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[0.75,0,-0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[0.75,0,-2.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[0.75,0,-3.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[2.25,0,3.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[2.25,0,2.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[2.25,0,0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[2.25,0,-0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[2.25,0,-2.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[2.25,0,-3.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[3.75,0,3.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[3.75,0,2.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[3.75,0,0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[3.75,0,-0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[3.75,0,-2.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","position":[3.75,0,-3.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-3.75,0.04,4.5],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-door-module-40e9fb22","position":[-2.25,0.04,4.5],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-0.75,0.04,4.5],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-3.75,0.04,0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-2.25,0.04,0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-0.75,0.04,0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[0.75,0.04,0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[2.25,0.04,0.75],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-3.75,0.04,-4.5],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-2.25,0.04,-4.5],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-0.75,0.04,-4.5],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[0.75,0.04,-4.5],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[2.25,0.04,-4.5],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[3.75,0.04,-4.5],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-4.5,0.04,3.75],"rotation":90},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-4.5,0.04,2.25],"rotation":90},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-4.5,0.04,0.75],"rotation":90},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-4.5,0.04,-0.75],"rotation":90},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-4.5,0.04,-2.25],"rotation":90},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[-4.5,0.04,-3.75],"rotation":90},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[4.5,0.04,-0.75],"rotation":-90},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[4.5,0.04,-2.25],"rotation":-90},{"asset":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","position":[4.5,0.04,-3.75],"rotation":-90},{"asset":"dry-cleaners-and-alterations-shop-drop-off-counter-mod-68c7555a","position":[-3,0.04,3.1],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-drop-off-counter-mod-68c7555a","position":[-1.8,0.04,3.1],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-service-counter-modu-db41aab9","position":[-0.6,0.04,3.1],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-drop-off-counter-mod-68c7555a","position":[0.6,0.04,3.1],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-service-counter-modu-db41aab9","position":[1.8,0.04,3.1],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-collection-ticket-ra-4743438d","position":[-2.9,0.99,2.88],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-collection-ticket-ra-4743438d","position":[1.5,0.99,2.88],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-garment-conveyor-rai-5b619b98","position":[-3.2,0.04,1.5],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-garment-conveyor-rai-7ff2e69b","position":[-1.6,0.04,1.5],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-garment-conveyor-rai-8d36cdc0","position":[0,0.04,1.5],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-price-and-service-bo-6de9897d","position":[2.1,1.86,0.82],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-garment-trolley-a667e4f4","position":[2.9,0.04,2.3],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-counter-side-shelvin-2390de48","position":[-4.12,0.04,2.5],"rotation":90},{"asset":"dry-cleaners-and-alterations-shop-shop-window-display--dafc36e7","position":[-3.4,0.04,4.05],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-waiting-bench-727fb175","position":[0.9,0.04,4.05],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-waiting-bench-teal-f970629e","position":[2.6,0.04,4.05],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-umbrella-stand-15129671","position":[-1.15,0.04,4.12],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-plant-pot-a523380f","position":[3.95,0.04,4.05],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-plant-pot-a523380f","position":[-4.1,0.04,3.9],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-dry-cleaning-machine-d685cd73","position":[1,0.04,-0.3],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-washer-extractor-c5cc774a","position":[2.5,0.04,-0.3],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-tumble-dryer-31ff5788","position":[3.7,0.04,-0.3],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-spotting-board-147c7206","position":[-0.4,0.04,-0.35],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-weighing-scale-f870c714","position":[-1.35,0.04,-0.3],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-pressing-station-1dda9bd2","position":[0.6,0.04,-2.3],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-shirt-press-unit-c3bca541","position":[2.3,0.04,-2.3],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-trouser-topper-press-2e038bff","position":[3.7,0.04,-2.3],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-steam-boiler-unit-d67a24e5","position":[3.5,0.04,-4],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-solvent-drum-bay-f5d1a80b","position":[2,0.04,-4.1],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-sorting-bin-bank-137bf086","position":[0.5,0.04,-4.05],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-laundry-bag-stack-99918d5d","position":[-0.65,0.04,-4.1],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-garment-trolley-teal-a9c3a608","position":[2.9,0.04,-1.25],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-garment-trolley-a667e4f4","position":[-0.1,0.04,-1.3],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-lint-and-filter-trol-95bc158f","position":[1.6,0.04,-3.35],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-garment-trolley-a667e4f4","position":[3.55,0.04,-3.35],"rotation":90},{"asset":"dry-cleaners-and-alterations-shop-steam-pipe-run-modul-327ac173","position":[-3,2.42,-1],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-steam-pipe-run-modul-327ac173","position":[-1.5,2.42,-1],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-steam-pipe-run-modul-327ac173","position":[0,2.42,-1],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-steam-pipe-run-modul-327ac173","position":[1.5,2.42,-1],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-steam-pipe-run-modul-327ac173","position":[3,2.42,-1],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-sewing-machine-table-2552a1da","position":[-3.7,0.04,-2],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-overlocker-table-097e4c80","position":[-2.4,0.04,-2],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-sewing-stool-9d089224","position":[-3.7,0.04,-1.3],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-sewing-stool-9d089224","position":[-2.4,0.04,-1.3],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-cutting-table-b3cf21e8","position":[-3.16,0.04,-3.46],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-pin-cushion-and-chal-e63a6928","position":[-2.35,0.9600000000000001,-3.2],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-tailors-dummy-84d411c0","position":[-1.5,0.04,-2.6],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-tailors-dummy-petite-3cbecd32","position":[-1.45,0.04,-4.05],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-fabric-bolt-shelf-05ada191","position":[-4.2,0.04,-3.84],"rotation":90},{"asset":"dry-cleaners-and-alterations-shop-thread-and-bobbin-ra-ac516fae","position":[-4.42,1.02,-2.7],"rotation":90},{"asset":"dry-cleaners-and-alterations-shop-notions-drawer-unit-66f1b9c5","position":[-4.18,0.04,-1.15],"rotation":90},{"asset":"dry-cleaners-and-alterations-shop-pattern-hook-rail-4879bf82","position":[-2.6,1.02,-4.42],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-ironing-board-c63d10d6","position":[-1.6,0.04,-4.3],"rotation":0},{"asset":"dry-cleaners-and-alterations-shop-work-in-progress-gar-82340341","position":[-1.15,0.04,-3.25],"rotation":90},{"asset":"dry-cleaners-and-alterations-shop-offcut-bin-8c1bd846","position":[-2.2,0.04,-2.85],"rotation":0}],"points":[{"position":[-0.6,1.4,3.1],"title":"Drop off counter and ticket rack","text":"Hand the bundle over at the till, take the ticket stub and watch the numbered rack fill up behind the counter. The counter modules repeat along the shop front to make one long service run.","asset":"dry-cleaners-and-alterations-shop-service-counter-modu-db41aab9"},{"position":[-3.2,2,1.5],"title":"Garment conveyor rail","text":"Three rail units carry bagged garments across the back of the shop, loaded, part loaded and a warm run fresh off the press. The rail is what a customer sees first through the window.","asset":"dry-cleaners-and-alterations-shop-garment-conveyor-rai-5b619b98"},{"position":[1,1.3,-0.3],"title":"The cleaning plant","text":"Dry cleaning machine, washer extractor and tumble dryer stand in a row along the plant wall. Each has a loading door that opens, so you can see the drum.","asset":"dry-cleaners-and-alterations-shop-dry-cleaning-machine-d685cd73"},{"position":[0.6,1.2,-2.3],"title":"Pressing station and shirt press","text":"A vacuum table with its iron, a shirt press and a trouser topper finish everything the plant washes. The press heads lift and drop on their own clips.","asset":"dry-cleaners-and-alterations-shop-pressing-station-1dda9bd2"},{"position":[-3.16,1.1,-3.46],"title":"Alterations workroom","text":"Sewing machine and overlocker tables, stools, a cutting table with rule and shears, and two tailors dummies wearing work in progress. This corner is where the shortening and the repairs happen.","asset":"dry-cleaners-and-alterations-shop-sewing-machine-table-2552a1da"},{"position":[-4.2,1.2,-3],"title":"Fabric and notions storage","text":"Bolts of cloth on the shelf, a thread and bobbin rack on the wall and a drawer unit of buttons and zips. Everything the workroom reaches for without standing up.","asset":"dry-cleaners-and-alterations-shop-fabric-bolt-shelf-05ada191"}],"poster":{"position":[-2.1,1.6,3.8],"lookAt":[-2.1,1.2,-2.2]}},"bounds":{"min":[-6.578920865504929,0,-6.578920865504929],"max":[6.578920865504929,5.04,6.579017544918623]},"assets":[{"id":"34947","slug":"dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","title":"Shop floor tile (Dry Cleaners and Alterations Shop)","summary":"A 1.5 m square of grey safety vinyl on the same grid as the walls, with proud welded seams on all four edges so a field of them reads as laid floor rather than one flat plane.","description":"A 1.5 m square of grey safety vinyl on the same grid as the walls, with proud welded seams on all four edges so a field of them reads as laid floor rather than one flat plane. Dimensions 1.50 by 0.05 by 1.50 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Connectors: tile-left, tile-right, tile-front, tile-back (type cleaner-floor). Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","cdnUrl":"https://cdn.3dassets.dev/assets/34947/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-shop-floor-tile-f3cebeca","thumbnailUrl":"https://cdn.3dassets.dev/assets/34947/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34947/v1/poster.webp","blurhash":"U5BN1h-;00tQxtWVa#ju00E0_4M{M{s:R%Wo","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":7228,"triangles":124,"vertices":282,"meshes":2,"materials":2,"textures":0,"animations":[],"boundingBox":{"min":[-0.75,0.000040894355662998705,-0.75],"max":[0.75,0.045963468886410494,0.75]},"sizeMeters":[1.5,0.046,1.5],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:46.459Z","updatedAt":"2026-09-11T10:46:46.555Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34947/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ShopFloorTileDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34947/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34947/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34947/v1/model.glb\" alt=\"Shop floor tile (Dry Cleaners and Alterations Shop)\" 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/34947/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/34947/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34945","slug":"dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","title":"Shop wall panel module (Dry Cleaners and Alterations Shop)","summary":"The 1.5 m by 3 m shop and plant wall: white glazed tile to a 1.05 m dado on both faces with proud courses and perpends, a coved skirting, a teal capping and a plaster bead under the ceiling line.","description":"The 1.5 m by 3 m shop and plant wall: white glazed tile to a 1.05 m dado on both faces with proud courses and perpends, a coved skirting, a teal capping and a plaster bead under the ceiling line. Dimensions 1.50 by 3.00 by 0.16 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Connectors: wall-left, wall-right (type cleaner-wall). Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","cdnUrl":"https://cdn.3dassets.dev/assets/34945/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-shop-wall-panel-modu-c1f04376","thumbnailUrl":"https://cdn.3dassets.dev/assets/34945/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34945/v1/poster.webp","blurhash":"U6FiPv_30000^*-;D+4n00Rj~qo#%N%MMx9F","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":44156,"triangles":952,"vertices":2176,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.750114444410535,0,-0.07892086550492874],"max":[0.750114444410535,3,0.07892086550492874]},"sizeMeters":[1.5,3,0.158],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:45.790Z","updatedAt":"2026-09-11T10:46:45.896Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34945/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ShopWallPanelModuleDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34945/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34945/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34945/v1/model.glb\" alt=\"Shop wall panel module (Dry Cleaners and Alterations Shop)\" 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/34945/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/34945/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34946","slug":"dry-cleaners-and-alterations-shop-shop-door-module-40e9fb22","title":"Shop door module (Dry Cleaners and Alterations Shop)","summary":"The 1.5 m by 3 m shop wall with a half glazed teal door on a real hinge: a tiled dado, a stainless threshold, a transom light and a steel push bar. Couples to the plain wall module on its stiles.","description":"The 1.5 m by 3 m shop wall with a half glazed teal door on a real hinge: a tiled dado, a stainless threshold, a transom light and a steel push bar. Couples to the plain wall module on its stiles. Dimensions 1.50 by 3.00 by 0.16 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: shop-door. Connectors: wall-left, wall-right (type cleaner-wall). Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress 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/dry-cleaners-and-alterations-shop-shop-door-module-40e9fb22","cdnUrl":"https://cdn.3dassets.dev/assets/34946/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-shop-door-module-40e9fb22","thumbnailUrl":"https://cdn.3dassets.dev/assets/34946/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34946/v1/poster.webp","blurhash":"U9DmBgWq00s9~V%M4.D%H?jZXTX8t7xuRjD%","category":{"slug":"buildings","title":"Buildings & Architecture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"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":109396,"triangles":2384,"vertices":5445,"meshes":10,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.750114444410535,0,-0.07901754491862246],"max":[0.750114444410535,3,0.07901754491862246]},"sizeMeters":[1.5,3,0.158],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:46.947Z","updatedAt":"2026-09-11T10:46:47.066Z","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/34946/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 ShopDoorModuleDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34946/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/34946/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34946/v1/model.glb\" alt=\"Shop door module (Dry Cleaners and Alterations Shop)\" 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/34946/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/34946/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34936","slug":"dry-cleaners-and-alterations-shop-drop-off-counter-mod-68c7555a","title":"Drop off counter module (Dry Cleaners and Alterations Shop)","summary":"The same body and the same ports without the pay point: a teal lay down pad for incoming work, a bagging hoop with two covered garments on it and a spike of blank job tickets, which is what a run repeats between till modules.","description":"The same body and the same ports without the pay point: a teal lay down pad for incoming work, a bagging hoop with two covered garments on it and a spike of blank job tickets, which is what a run repeats between till modules. Dimensions 1.20 by 1.42 by 0.74 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Connectors: counter-left, counter-right (type cleaner-counter). Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-drop-off-counter-mod-68c7555a","cdnUrl":"https://cdn.3dassets.dev/assets/34936/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-drop-off-counter-mod-68c7555a","thumbnailUrl":"https://cdn.3dassets.dev/assets/34936/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34936/v1/poster.webp","blurhash":"U7CG}bB:00^PH??HNa9Z00+Ht,JBu40e-o~W","category":{"slug":"props","title":"Props & Furniture"},"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":85056,"triangles":1960,"vertices":4222,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.6000000238418579,-0.000014648981426265695,-0.36001663028267983],"max":[0.6000000238418579,1.4206829376899135,0.3760324660573243]},"sizeMeters":[1.2,1.421,0.736],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:42.054Z","updatedAt":"2026-09-11T10:46:42.172Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34936/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function DropOffCounterModuleDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34936/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34936/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34936/v1/model.glb\" alt=\"Drop off counter module (Dry Cleaners and Alterations Shop)\" 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/34936/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/34936/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34935","slug":"dry-cleaners-and-alterations-shop-service-counter-modu-db41aab9","title":"Service counter module with till and card reader (Dry Cleaners and Alterations Shop)","summary":"The 1.2 m pay point of the counter run: an enamelled carcass on a charcoal plinth with a teal fascia and a stainless deck, carrying a register on a raised plate, a customer display on a stub column, a card reader on a gooseneck and a cash drawer on runners.","description":"The 1.2 m pay point of the counter run: an enamelled carcass on a charcoal plinth with a teal fascia and a stainless deck, carrying a register on a raised plate, a customer display on a stub column, a card reader on a gooseneck and a cash drawer on runners. Dimensions 1.20 by 1.28 by 0.76 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: till-drawer. Connectors: counter-left, counter-right (type cleaner-counter). Couple the modules end to end on their gable ports. Deck height is 0.95 m, so a counter top prop stands at that height above the floor it is placed on. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress 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/dry-cleaners-and-alterations-shop-service-counter-modu-db41aab9","cdnUrl":"https://cdn.3dassets.dev/assets/34935/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-service-counter-modu-db41aab9","thumbnailUrl":"https://cdn.3dassets.dev/assets/34935/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34935/v1/poster.webp","blurhash":"U6Ct2.1c00+GDi_3S#4-00]..8OrT_0K^6~V","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"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":52096,"triangles":1136,"vertices":2465,"meshes":7,"materials":5,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.6000000238418579,0,-0.36001663028267983],"max":[0.6000000238418579,1.2771763801574707,0.4007453887973504]},"sizeMeters":[1.2,1.277,0.761],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:40.988Z","updatedAt":"2026-09-11T10:46:41.108Z","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/34935/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 ServiceCounterModuleWithTillAndCardReaderDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34935/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/34935/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34935/v1/model.glb\" alt=\"Service counter module with till and card reader (Dry Cleaners and Alterations Shop)\" 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/34935/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/34935/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34940","slug":"dry-cleaners-and-alterations-shop-collection-ticket-ra-4743438d","title":"Collection ticket rack (Dry Cleaners and Alterations Shop)","summary":"Sixteen pigeon holes on a teal backboard holding blank job tickets, for the counter top or the wall behind it. Every card face is wordless.","description":"Sixteen pigeon holes on a teal backboard holding blank job tickets, for the counter top or the wall behind it. Every card face is wordless. Dimensions 0.46 by 0.56 by 0.12 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-collection-ticket-ra-4743438d","cdnUrl":"https://cdn.3dassets.dev/assets/34940/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-collection-ticket-ra-4743438d","thumbnailUrl":"https://cdn.3dassets.dev/assets/34940/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34940/v1/poster.webp","blurhash":"UCED6a^k0056%h%ga09F00Io~W%2tRt7i_V@","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"}],"license":{"slug":"cc0-1.0","name":"CC0 1.0 Universal","url":"https://creativecommons.org/publicdomain/zero/1.0/","attributionRequired":false},"contributor":{"username":"3dassets","name":"3D Assets","url":"https://3dassets.dev/u/3dassets"},"stats":{"fileSize":77948,"triangles":1790,"vertices":3995,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.2299935920922019,0,-0.06699743806090472],"max":[0.2299935920922019,0.5619999766349792,0.05200146328371707]},"sizeMeters":[0.46,0.562,0.119],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:43.093Z","updatedAt":"2026-09-11T10:46:43.201Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34940/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CollectionTicketRackDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34940/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34940/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34940/v1/model.glb\" alt=\"Collection ticket rack (Dry Cleaners and Alterations Shop)\" 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/34940/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/34940/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34937","slug":"dry-cleaners-and-alterations-shop-garment-conveyor-rai-5b619b98","title":"Garment conveyor rail unit, loaded (Dry Cleaners and Alterations Shop)","summary":"A 1.6 m bay of the powered rail a cleaner stores finished work on: two posts, a head channel with a teal band, the rail at 2.0 m with seven carrier hooks, a chain drive wheel on the left post and seven bagged garments hanging from it.","description":"A 1.6 m bay of the powered rail a cleaner stores finished work on: two posts, a head channel with a teal band, the rail at 2.0 m with seven carrier hooks, a chain drive wheel on the left post and seven bagged garments hanging from it. Dimensions 1.68 by 2.36 by 0.46 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: rail-wheel. Connectors: rail-left, rail-right (type garment-rail). Couple the units on the rail axis so a run repeats into as long a loop as the shop needs. The garments, their polythene covers and the cloth on the bolts are modelled in one fixed pose: a draped or folded length is not reachable with one rigid node transform. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-garment-conveyor-rai-5b619b98","cdnUrl":"https://cdn.3dassets.dev/assets/34937/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-garment-conveyor-rai-5b619b98","thumbnailUrl":"https://cdn.3dassets.dev/assets/34937/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34937/v1/poster.webp","blurhash":"UF9tfTXS00nN_Noz8_RPIVoextRkIAof%MRj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"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":213612,"triangles":5118,"vertices":10969,"meshes":10,"materials":8,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.8650000149011612,0,-0.23067987370735507],"max":[0.8149739136449782,2.360041005449088,0.2310697476888309]},"sizeMeters":[1.68,2.36,0.462],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:42.075Z","updatedAt":"2026-09-11T10:46:42.198Z","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/34937/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 GarmentConveyorRailUnitLoadedDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34937/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/34937/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34937/v1/model.glb\" alt=\"Garment conveyor rail unit, loaded (Dry Cleaners and Alterations Shop)\" 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/34937/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/34937/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34939","slug":"dry-cleaners-and-alterations-shop-garment-conveyor-rai-7ff2e69b","title":"Garment conveyor rail unit, warm run (Dry Cleaners and Alterations Shop)","summary":"The loaded unit with the garments recoloured into the warm half of the palette, so a long run of rail does not repeat the same four colours down the shop. Geometry, ports and clips are identical.","description":"The loaded unit with the garments recoloured into the warm half of the palette, so a long run of rail does not repeat the same four colours down the shop. Geometry, ports and clips are identical. Dimensions 1.68 by 2.36 by 0.46 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: rail-wheel. Connectors: rail-left, rail-right (type garment-rail). Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-garment-conveyor-rai-7ff2e69b","cdnUrl":"https://cdn.3dassets.dev/assets/34939/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-garment-conveyor-rai-7ff2e69b","thumbnailUrl":"https://cdn.3dassets.dev/assets/34939/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34939/v1/poster.webp","blurhash":"UFAAm$oy00V[_Nt78{RPE3f+xsV@D*f,%MV?","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"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":214612,"triangles":5118,"vertices":10969,"meshes":9,"materials":7,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.8650000149011612,0,-0.23067987370735507],"max":[0.8149739136449782,2.360041005449088,0.2310697476888309]},"sizeMeters":[1.68,2.36,0.462],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:42.815Z","updatedAt":"2026-09-11T10:46:42.915Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\nimport { AnimationMixer } from 'three'\n\nlet mixer\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34939/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 GarmentConveyorRailUnitWarmRunDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34939/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/34939/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34939/v1/model.glb\" alt=\"Garment conveyor rail unit, warm run (Dry Cleaners and Alterations Shop)\" 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/34939/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/34939/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34938","slug":"dry-cleaners-and-alterations-shop-garment-conveyor-rai-8d36cdc0","title":"Garment conveyor rail unit, part loaded (Dry Cleaners and Alterations Shop)","summary":"The same unit with three garments left on it, for the end of a run, a collected bay or a shop part way through a busy afternoon. Identical geometry, ports and drive wheel to the loaded unit.","description":"The same unit with three garments left on it, for the end of a run, a collected bay or a shop part way through a busy afternoon. Identical geometry, ports and drive wheel to the loaded unit. Dimensions 1.68 by 2.36 by 0.44 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: rail-wheel. Connectors: rail-left, rail-right (type garment-rail). Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-garment-conveyor-rai-8d36cdc0","cdnUrl":"https://cdn.3dassets.dev/assets/34938/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-garment-conveyor-rai-8d36cdc0","thumbnailUrl":"https://cdn.3dassets.dev/assets/34938/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34938/v1/poster.webp","blurhash":"UE9tcMSP00w[_No#8_ROM|t6t7MyM_tQtSMy","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"modular","title":"Modular"},{"slug":"animated","title":"Animated"}],"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":128420,"triangles":2966,"vertices":6397,"meshes":10,"materials":8,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.8650000149011612,0,-0.22330008940927262],"max":[0.8149739136449782,2.360041005449088,0.21316677825681443]},"sizeMeters":[1.68,2.36,0.436],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:41.177Z","updatedAt":"2026-09-11T10:46:41.274Z","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/34938/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 GarmentConveyorRailUnitPartLoadedDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34938/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/34938/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34938/v1/model.glb\" alt=\"Garment conveyor rail unit, part loaded (Dry Cleaners and Alterations Shop)\" 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/34938/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/34938/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34941","slug":"dry-cleaners-and-alterations-shop-price-and-service-bo-6de9897d","title":"Price and service board (Dry Cleaners and Alterations Shop)","summary":"The shop tariff board: a teal panel with a pale header and five blank price strips, each with an amber figure block, on two drop rods for hanging over the counter run.","description":"The shop tariff board: a teal panel with a pale header and five blank price strips, each with an amber figure block, on two drop rods for hanging over the counter run. Dimensions 1.34 by 1.00 by 0.07 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. The model rests on the bottom edge of the board at y=0; hang it by placing the top of the drop rods against the soffit or the wall fixing. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-price-and-service-bo-6de9897d","cdnUrl":"https://cdn.3dassets.dev/assets/34941/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-price-and-service-bo-6de9897d","thumbnailUrl":"https://cdn.3dassets.dev/assets/34941/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34941/v1/poster.webp","blurhash":"UDB;j{%g00WmMe%z%MDj00R5_Nxu%1M{Ioxt","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":36668,"triangles":816,"vertices":1825,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.6700000166893005,-0.000013757349388521245,-0.025027619874498853],"max":[0.6700000166893005,0.999968875672167,0.04098672501160291]},"sizeMeters":[1.34,1,0.066],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:43.825Z","updatedAt":"2026-09-11T10:46:43.922Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34941/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PriceAndServiceBoardDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34941/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34941/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34941/v1/model.glb\" alt=\"Price and service board (Dry Cleaners and Alterations Shop)\" 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/34941/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/34941/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34957","slug":"dry-cleaners-and-alterations-shop-garment-trolley-a667e4f4","title":"Garment trolley on castors (Dry Cleaners and Alterations Shop)","summary":"A tubular trolley on four castors: a rail at 1.62 m hung with four covered garments over a slung canvas bin with a teal band, and a teal push bar on the operator side.","description":"A tubular trolley on four castors: a rail at 1.62 m hung with four covered garments over a slung canvas bin with a teal band, and a teal push bar on the operator side. Dimensions 1.06 by 1.66 by 0.52 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: wheel-0, wheel-1, wheel-2, wheel-3. The garments, their polythene covers and the cloth on the bolts are modelled in one fixed pose: a draped or folded length is not reachable with one rigid node transform. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-garment-trolley-a667e4f4","cdnUrl":"https://cdn.3dassets.dev/assets/34957/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-garment-trolley-a667e4f4","thumbnailUrl":"https://cdn.3dassets.dev/assets/34957/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34957/v1/poster.webp","blurhash":"U5Am@[.8008w$^%gR=9E4TVs?^tmEpxu-fE1","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":138868,"triangles":3584,"vertices":7663,"meshes":11,"materials":7,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.5300449407875341,-8.940696794024205e-11,-0.2600244040025598],"max":[0.5300449407875341,1.6607164144515991,0.2600244040025598]},"sizeMeters":[1.06,1.661,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:52.330Z","updatedAt":"2026-09-11T10:46:52.516Z","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/34957/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 GarmentTrolleyOnCastorsDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34957/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/34957/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34957/v1/model.glb\" alt=\"Garment trolley on castors (Dry Cleaners and Alterations Shop)\" 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/34957/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/34957/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34948","slug":"dry-cleaners-and-alterations-shop-counter-side-shelvin-2390de48","title":"Counter side shelving with detergents (Dry Cleaners and Alterations Shop)","summary":"A 0.94 m open steel bay against a teal back panel, stocked with two rows of moulded detergent and finishing bottles, folded covers and two boxed rolls of polythene.","description":"A 0.94 m open steel bay against a teal back panel, stocked with two rows of moulded detergent and finishing bottles, folded covers and two boxed rolls of polythene. Dimensions 0.94 by 1.62 by 0.36 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-counter-side-shelvin-2390de48","cdnUrl":"https://cdn.3dassets.dev/assets/34948/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-counter-side-shelvin-2390de48","thumbnailUrl":"https://cdn.3dassets.dev/assets/34948/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34948/v1/poster.webp","blurhash":"U3BDsQ~q0000PVof#7SJR5jGXlkpt*%Mrd9G","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":116976,"triangles":2860,"vertices":5789,"meshes":8,"materials":8,"textures":0,"animations":[],"boundingBox":{"min":[-0.4700259421165474,0,-0.17996154720776614],"max":[0.4700259421165474,1.6200000047683716,0.17996154720776614]},"sizeMeters":[0.94,1.62,0.36],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:48.575Z","updatedAt":"2026-09-11T10:46:48.677Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34948/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CounterSideShelvingWithDetergentsDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34948/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34948/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34948/v1/model.glb\" alt=\"Counter side shelving with detergents (Dry Cleaners and Alterations Shop)\" 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/34948/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/34948/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34942","slug":"dry-cleaners-and-alterations-shop-shop-window-display--dafc36e7","title":"Shop window display rail (Dry Cleaners and Alterations Shop)","summary":"A 1.2 m chrome rail on two weighted feet under a teal header, hung with five covered garments. The piece a cleaner stands in the window so the street can see finished work.","description":"A 1.2 m chrome rail on two weighted feet under a teal header, hung with five covered garments. The piece a cleaner stands in the window so the street can see finished work. Dimensions 1.23 by 1.79 by 0.50 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. The garments, their polythene covers and the cloth on the bolts are modelled in one fixed pose: a draped or folded length is not reachable with one rigid node transform. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-shop-window-display--dafc36e7","cdnUrl":"https://cdn.3dassets.dev/assets/34942/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-shop-window-display--dafc36e7","thumbnailUrl":"https://cdn.3dassets.dev/assets/34942/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34942/v1/poster.webp","blurhash":"UA9Q?Yxu00Mx?^x]H?IA0KkC?baJ4mRj-;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":131768,"triangles":3130,"vertices":6668,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.6150448676737045,0,-0.25002243332595525],"max":[0.6150448676737045,1.7899999618530273,0.25002243332595525]},"sizeMeters":[1.23,1.79,0.5],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:43.877Z","updatedAt":"2026-09-11T10:46:43.982Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34942/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ShopWindowDisplayRailDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34942/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34942/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34942/v1/model.glb\" alt=\"Shop window display rail (Dry Cleaners and Alterations Shop)\" 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/34942/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/34942/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34943","slug":"dry-cleaners-and-alterations-shop-waiting-bench-727fb175","title":"Waiting bench (Dry Cleaners and Alterations Shop)","summary":"A 1.32 m beech slat bench on a steel sled frame with rubber feet, 0.44 m to the seat, for the customer side of the counter.","description":"A 1.32 m beech slat bench on a steel sled frame with rubber feet, 0.44 m to the seat, for the customer side of the counter. Dimensions 1.32 by 0.47 by 0.40 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-waiting-bench-727fb175","cdnUrl":"https://cdn.3dassets.dev/assets/34943/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-waiting-bench-727fb175","thumbnailUrl":"https://cdn.3dassets.dev/assets/34943/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34943/v1/poster.webp","blurhash":"ULC?cRs;D*of~V-pM|M|4o-:%2Io0Lax-oay","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":31416,"triangles":680,"vertices":1535,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.6600000262260437,-0.000021210387941455675,-0.20103946842134288],"max":[0.6600000262260437,0.4720332050138308,0.20103946842134288]},"sizeMeters":[1.32,0.472,0.402],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:44.657Z","updatedAt":"2026-09-11T10:46:44.778Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34943/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WaitingBenchDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34943/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34943/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34943/v1/model.glb\" alt=\"Waiting bench (Dry Cleaners and Alterations Shop)\" 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/34943/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/34943/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34944","slug":"dry-cleaners-and-alterations-shop-waiting-bench-teal-f970629e","title":"Waiting bench, teal slats (Dry Cleaners and Alterations Shop)","summary":"The same bench with the slats in the house teal rather than beech, for a shop fitted out in one colour. Geometry is identical.","description":"The same bench with the slats in the house teal rather than beech, for a shop fitted out in one colour. Geometry is identical. Dimensions 1.32 by 0.47 by 0.40 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-waiting-bench-teal-f970629e","cdnUrl":"https://cdn.3dassets.dev/assets/34944/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-waiting-bench-teal-f970629e","thumbnailUrl":"https://cdn.3dassets.dev/assets/34944/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34944/v1/poster.webp","blurhash":"UE7obLozMdt7y?yDVsVsDNpctlR5QSRjtlni","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":31464,"triangles":680,"vertices":1535,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.6600000262260437,-0.000021210387941455675,-0.20103946842134288],"max":[0.6600000262260437,0.4720332050138308,0.20103946842134288]},"sizeMeters":[1.32,0.472,0.402],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:46.966Z","updatedAt":"2026-09-11T10:46:47.085Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34944/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WaitingBenchTealSlatsDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34944/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34944/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34944/v1/model.glb\" alt=\"Waiting bench, teal slats (Dry Cleaners and Alterations Shop)\" 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/34944/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/34944/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34949","slug":"dry-cleaners-and-alterations-shop-umbrella-stand-15129671","title":"Umbrella stand (Dry Cleaners and Alterations Shop)","summary":"A galvanised drum with a teal band holding three forgotten umbrellas, for the inside of the shop door.","description":"A galvanised drum with a teal band holding three forgotten umbrellas, for the inside of the shop door. Dimensions 0.40 by 0.97 by 0.35 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-umbrella-stand-15129671","cdnUrl":"https://cdn.3dassets.dev/assets/34949/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-umbrella-stand-15129671","thumbnailUrl":"https://cdn.3dassets.dev/assets/34949/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34949/v1/poster.webp","blurhash":"U36*zO.A004TRskXxmnN4TVq?cX:4TR#.TtA","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":33536,"triangles":694,"vertices":1605,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.16001709104657524,0,-0.1851535298640919],"max":[0.24188887595365915,0.9700236328685855,0.16910409927368164]},"sizeMeters":[0.402,0.97,0.354],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:48.318Z","updatedAt":"2026-09-11T10:46:48.417Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34949/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function UmbrellaStandDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34949/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34949/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34949/v1/model.glb\" alt=\"Umbrella stand (Dry Cleaners and Alterations Shop)\" 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/34949/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/34949/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34951","slug":"dry-cleaners-and-alterations-shop-plant-pot-a523380f","title":"Plant pot with clipped shrub (Dry Cleaners and Alterations Shop)","summary":"A glazed pot with a teal band and a clipped five stem shrub in it, 0.82 m tall: the one soft thing in a shop front of steel and enamel.","description":"A glazed pot with a teal band and a clipped five stem shrub in it, 0.82 m tall: the one soft thing in a shop front of steel and enamel. Dimensions 0.45 by 0.87 by 0.44 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-plant-pot-a523380f","cdnUrl":"https://cdn.3dassets.dev/assets/34951/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-plant-pot-a523380f","thumbnailUrl":"https://cdn.3dassets.dev/assets/34951/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34951/v1/poster.webp","blurhash":"U8Ado:%N00Di0eRj}@tQ00V@?aoy}]oz9te-","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":39856,"triangles":980,"vertices":1894,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.22499999403953552,-0.000007474385528227767,-0.22159412847223886],"max":[0.22499999403953552,0.8700000047683716,0.22159412847223886]},"sizeMeters":[0.45,0.87,0.443],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:49.154Z","updatedAt":"2026-09-11T10:46:49.357Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34951/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PlantPotWithClippedShrubDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34951/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34951/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34951/v1/model.glb\" alt=\"Plant pot with clipped shrub (Dry Cleaners and Alterations Shop)\" 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/34951/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/34951/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34950","slug":"dry-cleaners-and-alterations-shop-dry-cleaning-machine-d685cd73","title":"Dry cleaning machine with loading door (Dry Cleaners and Alterations Shop)","summary":"The solvent machine: a 1.34 m enamelled cabinet on a charcoal plinth with a teal fascia round the loading door, a hinged round door with a glazed port and a lever, a perforated drum behind it, a button trap, a control fascia and the filter and still tower on its flank.","description":"The solvent machine: a 1.34 m enamelled cabinet on a charcoal plinth with a teal fascia round the loading door, a hinged round door with a glazed port and a lever, a perforated drum behind it, a button trap, a control fascia and the filter and still tower on its flank. Dimensions 1.34 by 2.50 by 1.05 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: machine-drum, machine-door. No machine maker, badge or model plate appears on it. The steam, air and vacuum lines are static geometry, and so is the steam itself: a flexible line is not reachable with one rigid node transform, and faking it costs a consumer more than it gives. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Rigid node-transform clips: open, close and spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-dry-cleaning-machine-d685cd73","cdnUrl":"https://cdn.3dassets.dev/assets/34950/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-dry-cleaning-machine-d685cd73","thumbnailUrl":"https://cdn.3dassets.dev/assets/34950/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34950/v1/poster.webp","blurhash":"UBDJhmSv00r[xut7M{M{00nm_NOCIpW9%2t8","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":109124,"triangles":2504,"vertices":5225,"meshes":11,"materials":7,"textures":0,"animations":["open","close","spin"],"boundingBox":{"min":[-0.670023521305151,0,-0.4700662406371129],"max":[0.670023521305151,2.5,0.5849967951630161]},"sizeMeters":[1.34,2.5,1.055],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:48.877Z","updatedAt":"2026-09-11T10:46:48.966Z","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/34950/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 DryCleaningMachineWithLoadingDoorDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34950/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/34950/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34950/v1/model.glb\" alt=\"Dry cleaning machine with loading door (Dry Cleaners and Alterations Shop)\" 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/34950/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/34950/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34952","slug":"dry-cleaners-and-alterations-shop-washer-extractor-c5cc774a","title":"Washer extractor (Dry Cleaners and Alterations Shop)","summary":"The wet cleaning side: a 1.42 m washer extractor on a charcoal plinth with a teal fascia, a hinged round door with a glazed port, a perforated drum, a soap hopper on top and a control panel with a dial gauge.","description":"The wet cleaning side: a 1.42 m washer extractor on a charcoal plinth with a teal fascia, a hinged round door with a glazed port, a perforated drum, a soap hopper on top and a control panel with a dial gauge. Dimensions 0.92 by 1.42 by 1.20 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: machine-drum, machine-door. The steam, air and vacuum lines are static geometry, and so is the steam itself: a flexible line is not reachable with one rigid node transform, and faking it costs a consumer more than it gives. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Rigid node-transform clips: open, close and spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-washer-extractor-c5cc774a","cdnUrl":"https://cdn.3dassets.dev/assets/34952/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-washer-extractor-c5cc774a","thumbnailUrl":"https://cdn.3dassets.dev/assets/34952/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34952/v1/poster.webp","blurhash":"UJFPQroz00sm~qayD%of00V@%MbHxaoLM{Rk","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":86364,"triangles":1944,"vertices":4015,"meshes":11,"materials":7,"textures":0,"animations":["open","close","spin"],"boundingBox":{"min":[-0.4600170760028919,0,-0.6428126212175697],"max":[0.4600170760028919,1.4199999570846558,0.5609967890415319]},"sizeMeters":[0.92,1.42,1.204],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:50.272Z","updatedAt":"2026-09-11T10:46:50.439Z","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/34952/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 WasherExtractorDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34952/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/34952/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34952/v1/model.glb\" alt=\"Washer extractor (Dry Cleaners and Alterations Shop)\" 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/34952/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/34952/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34953","slug":"dry-cleaners-and-alterations-shop-tumble-dryer-31ff5788","title":"Tumble dryer (Dry Cleaners and Alterations Shop)","summary":"A 1.86 m enamelled drying cabinet with an amber plinth stripe, a wide hinged door carrying a large glazed port in a teal ring, a bar handle, a lint filter drawer at the base and the extract duct off the top.","description":"A 1.86 m enamelled drying cabinet with an amber plinth stripe, a wide hinged door carrying a large glazed port in a teal ring, a bar handle, a lint filter drawer at the base and the extract duct off the top. Dimensions 0.94 by 2.08 by 0.99 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: dryer-door. The lint drawer is modelled closed and does not move; the loading door is the part that swings. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress 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/dry-cleaners-and-alterations-shop-tumble-dryer-31ff5788","cdnUrl":"https://cdn.3dassets.dev/assets/34953/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-tumble-dryer-31ff5788","thumbnailUrl":"https://cdn.3dassets.dev/assets/34953/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34953/v1/poster.webp","blurhash":"UAEV]BNF00-p~qa#9FoJ00V@?vShs.WANGoz","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":63708,"triangles":1404,"vertices":2935,"meshes":9,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.46995941412815606,0,-0.45001251617565974],"max":[0.46995941412815606,2.0799999237060547,0.5399996933348665]},"sizeMeters":[0.94,2.08,0.99],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:50.556Z","updatedAt":"2026-09-11T10:46:50.660Z","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/34953/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 TumbleDryerDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34953/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/34953/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34953/v1/model.glb\" alt=\"Tumble dryer (Dry Cleaners and Alterations Shop)\" 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/34953/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/34953/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34960","slug":"dry-cleaners-and-alterations-shop-spotting-board-147c7206","title":"Spotting board with gun and bottles (Dry Cleaners and Alterations Shop)","summary":"The stain table: a perforated pad over an extraction plenum with a teal edge, a rinse bowl and rinse arm, a spotting gun with a real nozzle on its stand, four chemical bottles on the undershelf and a cloth hung on the frame.","description":"The stain table: a perforated pad over an extraction plenum with a teal edge, a rinse bowl and rinse arm, a spotting gun with a real nozzle on its stand, four chemical bottles on the undershelf and a cloth hung on the frame. Dimensions 1.07 by 1.21 by 0.68 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Static geometry. The steam, air and vacuum lines are static geometry, and so is the steam itself: a flexible line is not reachable with one rigid node transform, and faking it costs a consumer more than it gives. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-spotting-board-147c7206","cdnUrl":"https://cdn.3dassets.dev/assets/34960/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-spotting-board-147c7206","thumbnailUrl":"https://cdn.3dassets.dev/assets/34960/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34960/v1/poster.webp","blurhash":"U7B3{K?b00D%_N%MD%IU00D%?vtQ00IU%goz","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":83724,"triangles":1962,"vertices":4162,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.5600000023841858,0,-0.34564665650033277],"max":[0.5100285640280797,1.2114171981811523,0.3300369679300255]},"sizeMeters":[1.07,1.211,0.676],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:54.231Z","updatedAt":"2026-09-11T10:46:54.362Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34960/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SpottingBoardWithGunAndBottlesDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34960/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34960/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34960/v1/model.glb\" alt=\"Spotting board with gun and bottles (Dry Cleaners and Alterations Shop)\" 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/34960/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/34960/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34961","slug":"dry-cleaners-and-alterations-shop-weighing-scale-f870c714","title":"Platform weighing scale (Dry Cleaners and Alterations Shop)","summary":"A low platform scale with a teal deck plate, a steel column and a blank dial head with a single needle, for weighing a bag of incoming work. No figures on the dial.","description":"A low platform scale with a teal deck plate, a steel column and a blank dial head with a single needle, for weighing a bag of incoming work. No figures on the dial. Dimensions 0.56 by 1.13 by 0.46 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-weighing-scale-f870c714","cdnUrl":"https://cdn.3dassets.dev/assets/34961/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-weighing-scale-f870c714","thumbnailUrl":"https://cdn.3dassets.dev/assets/34961/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34961/v1/poster.webp","blurhash":"U48qjGIU00~W}@D%0e_N?IRj9Yx].mx]QmIA","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":25784,"triangles":548,"vertices":1131,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.2800000011920929,0.000018160109768509958,-0.2299935920922019],"max":[0.2800000011920929,1.1299999952316284,0.2299935920922019]},"sizeMeters":[0.56,1.13,0.46],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:54.838Z","updatedAt":"2026-09-11T10:46:54.938Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34961/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PlatformWeighingScaleDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34961/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34961/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34961/v1/model.glb\" alt=\"Platform weighing scale (Dry Cleaners and Alterations Shop)\" 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/34961/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/34961/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34963","slug":"dry-cleaners-and-alterations-shop-pressing-station-1dda9bd2","title":"Pressing station with vacuum table and iron (Dry Cleaners and Alterations Shop)","summary":"The signature machine of the trade: a padded vacuum buck on an enamelled pedestal with a teal fascia and an amber stripe, a hinged press head with a lagged shoulder and a lever, two amber foot pedals and a steam iron with a real soleplate on its rest.","description":"The signature machine of the trade: a padded vacuum buck on an enamelled pedestal with a teal fascia and an amber stripe, a hinged press head with a lagged shoulder and a lever, two amber foot pedals and a steam iron with a real soleplate on its rest. Dimensions 1.50 by 1.35 by 1.04 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: press-head. The head comes down on its own back hinge. The steam, air and vacuum lines are static geometry, and so is the steam itself: a flexible line is not reachable with one rigid node transform, and faking it costs a consumer more than it gives. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress 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/dry-cleaners-and-alterations-shop-pressing-station-1dda9bd2","cdnUrl":"https://cdn.3dassets.dev/assets/34963/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-pressing-station-1dda9bd2","thumbnailUrl":"https://cdn.3dassets.dev/assets/34963/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34963/v1/poster.webp","blurhash":"UCCQ6|%f00IB?cogM_WA00jb_NWn9Et6t8M|","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":65084,"triangles":1376,"vertices":2990,"meshes":10,"materials":6,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.6100000143051147,0.000002384004341271506,-0.38998077333903014],"max":[0.8899999856948853,1.3478318691464524,0.6523583721566849]},"sizeMeters":[1.5,1.348,1.042],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:56.228Z","updatedAt":"2026-09-11T10:46:56.332Z","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/34963/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 PressingStationWithVacuumTableAndIronDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34963/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/34963/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34963/v1/model.glb\" alt=\"Pressing station with vacuum table and iron (Dry Cleaners and Alterations Shop)\" 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/34963/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/34963/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34964","slug":"dry-cleaners-and-alterations-shop-shirt-press-unit-c3bca541","title":"Shirt press unit (Dry Cleaners and Alterations Shop)","summary":"Twin shaped shirt bucks on one 1.36 m pedestal with a teal fascia, a hinged press head over the near buck, a steam column with two dial gauges and a pair of amber foot pedals.","description":"Twin shaped shirt bucks on one 1.36 m pedestal with a teal fascia, a hinged press head over the near buck, a steam column with two dial gauges and a pair of amber foot pedals. Dimensions 1.52 by 1.67 by 1.07 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: press-head. The steam, air and vacuum lines are static geometry, and so is the steam itself: a flexible line is not reachable with one rigid node transform, and faking it costs a consumer more than it gives. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress 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/dry-cleaners-and-alterations-shop-shirt-press-unit-c3bca541","cdnUrl":"https://cdn.3dassets.dev/assets/34964/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-shirt-press-unit-c3bca541","thumbnailUrl":"https://cdn.3dassets.dev/assets/34964/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34964/v1/poster.webp","blurhash":"UDAA,YtR00Z%Vus;bZR$00en?wS~OTNGw{%2","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":67192,"triangles":1440,"vertices":3044,"meshes":11,"materials":7,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.6800000071525574,0,-0.4753747770747685],"max":[0.8359186847907643,1.667983055114746,0.5923583781171494]},"sizeMeters":[1.516,1.668,1.068],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:56.288Z","updatedAt":"2026-09-11T10:46:56.387Z","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/34964/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 ShirtPressUnitDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34964/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/34964/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34964/v1/model.glb\" alt=\"Shirt press unit (Dry Cleaners and Alterations Shop)\" 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/34964/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/34964/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34965","slug":"dry-cleaners-and-alterations-shop-trouser-topper-press-2e038bff","title":"Trouser topper press (Dry Cleaners and Alterations Shop)","summary":"The topper: a shaped waist and hip former on a column over a charcoal base, dressed in a cloth cover inside three teal hoops, with an amber foot pedal and a blank setting plate.","description":"The topper: a shaped waist and hip former on a column over a charcoal base, dressed in a cloth cover inside three teal hoops, with an amber foot pedal and a blank setting plate. Dimensions 0.68 by 1.61 by 0.78 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. The former is inflated by air in use, which is a soft body and not a rigid node, so it is modelled in one fixed pose and left static. The steam, air and vacuum lines are static geometry, and so is the steam itself: a flexible line is not reachable with one rigid node transform, and faking it costs a consumer more than it gives. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-trouser-topper-press-2e038bff","cdnUrl":"https://cdn.3dassets.dev/assets/34965/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-trouser-topper-press-2e038bff","thumbnailUrl":"https://cdn.3dassets.dev/assets/34965/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34965/v1/poster.webp","blurhash":"U38EJJ-;0000EqRl#gx=00RP~q%gxvadRPo#","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":42724,"triangles":896,"vertices":1951,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.33997934310787037,0.000005192651075458521,-0.3732951879501343],"max":[0.33997934310787037,1.6125229597091675,0.4083655774593353]},"sizeMeters":[0.68,1.613,0.782],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:56.715Z","updatedAt":"2026-09-11T10:46:56.846Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34965/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TrouserTopperPressDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34965/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34965/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34965/v1/model.glb\" alt=\"Trouser topper press (Dry Cleaners and Alterations Shop)\" 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/34965/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/34965/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34954","slug":"dry-cleaners-and-alterations-shop-steam-boiler-unit-d67a24e5","title":"Steam boiler unit (Dry Cleaners and Alterations Shop)","summary":"The plant that feeds the presses: a lagged vertical shell with teal jacket bands on a skid, a burner box with an amber sight glass, two dial gauges, a feed tank alongside and amber header pipes rising to the steam main.","description":"The plant that feeds the presses: a lagged vertical shell with teal jacket bands on a skid, a burner box with an amber sight glass, two dial gauges, a feed tank alongside and amber header pipes rising to the steam main. Dimensions 1.20 by 2.22 by 0.94 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Static geometry. The steam, air and vacuum lines are static geometry, and so is the steam itself: a flexible line is not reachable with one rigid node transform, and faking it costs a consumer more than it gives. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-steam-boiler-unit-d67a24e5","cdnUrl":"https://cdn.3dassets.dev/assets/34954/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-steam-boiler-unit-d67a24e5","thumbnailUrl":"https://cdn.3dassets.dev/assets/34954/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34954/v1/poster.webp","blurhash":"UBA^H|tS00I9%Ea$Iuj;00V?~qtTR:t2s,N3","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":58592,"triangles":1328,"vertices":2773,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.5299999713897705,0.000022283009178614144,-0.3799953842792839],"max":[0.6700000166893005,2.2200000286102295,0.556034531331303]},"sizeMeters":[1.2,2.22,0.936],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:51.616Z","updatedAt":"2026-09-11T10:46:51.709Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34954/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SteamBoilerUnitDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34954/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34954/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34954/v1/model.glb\" alt=\"Steam boiler unit (Dry Cleaners and Alterations Shop)\" 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/34954/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/34954/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34955","slug":"dry-cleaners-and-alterations-shop-solvent-drum-bay-f5d1a80b","title":"Solvent drum bay (Dry Cleaners and Alterations Shop)","summary":"A bunded pallet with a steel grate holding two sealed amber drums with rolling hoops and blank labels, a drained drum on its side and a hand pump with a lever and a delivery spout on the first drum.","description":"A bunded pallet with a steel grate holding two sealed amber drums with rolling hoops and blank labels, a drained drum on its side and a hand pump with a lever and a delivery spout on the first drum. Dimensions 1.30 by 1.39 by 0.82 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every drum label is blank: no product, hazard wording or manufacturer appears anywhere. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-solvent-drum-bay-f5d1a80b","cdnUrl":"https://cdn.3dassets.dev/assets/34955/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-solvent-drum-bay-f5d1a80b","thumbnailUrl":"https://cdn.3dassets.dev/assets/34955/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34955/v1/poster.webp","blurhash":"U8E2:q~o000203s;=_IC004p^*_0-.xp^xxa","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":55316,"triangles":1252,"vertices":2707,"meshes":5,"materials":5,"textures":0,"animations":[],"boundingBox":{"min":[-0.6499999761581421,-0.00001537975191134855,-0.41003141902489687],"max":[0.6499999761581421,1.3880043466246794,0.41003141902489687]},"sizeMeters":[1.3,1.388,0.82],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:50.961Z","updatedAt":"2026-09-11T10:46:51.056Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34955/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SolventDrumBayDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34955/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34955/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34955/v1/model.glb\" alt=\"Solvent drum bay (Dry Cleaners and Alterations Shop)\" 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/34955/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/34955/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34959","slug":"dry-cleaners-and-alterations-shop-sorting-bin-bank-137bf086","title":"Sorting bin bank (Dry Cleaners and Alterations Shop)","summary":"Three bagged sorting hoops in a 1.68 m steel frame with blank bay cards, the centre bay under a hinged lid with a teal pull for soiled work.","description":"Three bagged sorting hoops in a 1.68 m steel frame with blank bay cards, the centre bay under a hinged lid with a teal pull for soiled work. Dimensions 1.68 by 0.95 by 0.59 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: bin-lid. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress 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/dry-cleaners-and-alterations-shop-sorting-bin-bank-137bf086","cdnUrl":"https://cdn.3dassets.dev/assets/34959/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-sorting-bin-bank-137bf086","thumbnailUrl":"https://cdn.3dassets.dev/assets/34959/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34959/v1/poster.webp","blurhash":"U6DADT_400EgKi%$V?VE005P_L#RQ+VYXoOt","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":84228,"triangles":2056,"vertices":4186,"meshes":8,"materials":7,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.8399999737739563,-0.00001066090018908561,-0.29698781384231954],"max":[0.8399999737739563,0.9499992387441275,0.29698781384231954]},"sizeMeters":[1.68,0.95,0.594],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:54.349Z","updatedAt":"2026-09-11T10:46:54.607Z","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/34959/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 SortingBinBankDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34959/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/34959/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34959/v1/model.glb\" alt=\"Sorting bin bank (Dry Cleaners and Alterations Shop)\" 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/34959/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/34959/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34962","slug":"dry-cleaners-and-alterations-shop-laundry-bag-stack-99918d5d","title":"Laundry bag stack (Dry Cleaners and Alterations Shop)","summary":"Four tied polythene bags of sorted work stacked and offset on the plant floor, each with the cloth reading through the cover and a teal tie at the neck.","description":"Four tied polythene bags of sorted work stacked and offset on the plant floor, each with the cloth reading through the cover and a teal tie at the neck. Dimensions 0.66 by 1.33 by 0.50 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. The garments, their polythene covers and the cloth on the bolts are modelled in one fixed pose: a draped or folded length is not reachable with one rigid node transform. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-laundry-bag-stack-99918d5d","cdnUrl":"https://cdn.3dassets.dev/assets/34962/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-laundry-bag-stack-99918d5d","thumbnailUrl":"https://cdn.3dassets.dev/assets/34962/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34962/v1/poster.webp","blurhash":"U9C%Kp%f00DiNyogr;Rj00M{_Mx[$wRiOHtR","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":40480,"triangles":1024,"vertices":1908,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.3350096876904763,0,-0.26317418398708536],"max":[0.32000967219326865,1.3300000429153442,0.2415741759762211]},"sizeMeters":[0.655,1.33,0.505],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:56.727Z","updatedAt":"2026-09-11T10:46:56.906Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34962/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function LaundryBagStackDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34962/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34962/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34962/v1/model.glb\" alt=\"Laundry bag stack (Dry Cleaners and Alterations Shop)\" 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/34962/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/34962/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34958","slug":"dry-cleaners-and-alterations-shop-garment-trolley-teal-a9c3a608","title":"Garment trolley, teal canvas (Dry Cleaners and Alterations Shop)","summary":"The same trolley with the canvas bin and its garments in the house teal, so a plant full of trolleys does not read as one repeated object. Geometry and clips are identical.","description":"The same trolley with the canvas bin and its garments in the house teal, so a plant full of trolleys does not read as one repeated object. Geometry and clips are identical. Dimensions 1.06 by 1.66 by 0.52 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: wheel-0, wheel-1, wheel-2, wheel-3. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-garment-trolley-teal-a9c3a608","cdnUrl":"https://cdn.3dassets.dev/assets/34958/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-garment-trolley-teal-a9c3a608","thumbnailUrl":"https://cdn.3dassets.dev/assets/34958/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34958/v1/poster.webp","blurhash":"U59*Py%#00HX=w%gJBDiD4iw.lk=1gxu^4IU","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":138132,"triangles":3584,"vertices":7663,"meshes":10,"materials":6,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.5300449407875341,-8.940696794024205e-11,-0.2600244040025598],"max":[0.5300449407875341,1.6607164144515991,0.2600244040025598]},"sizeMeters":[1.06,1.661,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:53.788Z","updatedAt":"2026-09-11T10:46:53.891Z","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/34958/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 GarmentTrolleyTealCanvasDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34958/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/34958/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34958/v1/model.glb\" alt=\"Garment trolley, teal canvas (Dry Cleaners and Alterations Shop)\" 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/34958/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/34958/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34956","slug":"dry-cleaners-and-alterations-shop-lint-and-filter-trol-95bc158f","title":"Lint and filter trolley (Dry Cleaners and Alterations Shop)","summary":"An open mesh cage trolley on four castors with a teal push handle, loaded with four pulled panel filters on edge and a wad of lint on top of them.","description":"An open mesh cage trolley on four castors with a teal push handle, loaded with four pulled panel filters on edge and a wad of lint on top of them. Dimensions 0.74 by 0.98 by 0.52 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: wheel-0, wheel-1, wheel-2, wheel-3. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Rigid node-transform clips: roll. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-lint-and-filter-trol-95bc158f","cdnUrl":"https://cdn.3dassets.dev/assets/34956/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-lint-and-filter-trol-95bc158f","thumbnailUrl":"https://cdn.3dassets.dev/assets/34956/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34956/v1/poster.webp","blurhash":"U9C?+TyC00Mx.9tRITRP00R*~qs:-oogIpRj","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":77200,"triangles":2024,"vertices":4445,"meshes":9,"materials":5,"textures":0,"animations":["roll"],"boundingBox":{"min":[-0.37002288439099995,5.66244127975235e-10,-0.2600065080090463],"max":[0.37002288439099995,0.9760097060819263,0.2600065080090463]},"sizeMeters":[0.74,0.976,0.52],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:53.060Z","updatedAt":"2026-09-11T10:46:53.175Z","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/34956/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 LintAndFilterTrolleyDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34956/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/34956/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34956/v1/model.glb\" alt=\"Lint and filter trolley (Dry Cleaners and Alterations Shop)\" 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/34956/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/34956/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34966","slug":"dry-cleaners-and-alterations-shop-steam-pipe-run-modul-327ac173","title":"Steam pipe run module (Dry Cleaners and Alterations Shop)","summary":"A 1.5 m bay of the lagged amber steam main and its stainless condensate return, with four teal banding straps and two drop hangers up to a fixing plate.","description":"A 1.5 m bay of the lagged amber steam main and its stainless condensate return, with four teal banding straps and two drop hangers up to a fixing plate. Dimensions 1.50 by 0.54 by 0.26 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Connectors: pipe-left, pipe-right (type steam-pipe). The model rests on the underside of the steam pipe at y=0; hang a run by placing the top of the hanger plates against the soffit, and couple the bays on the pipe axis ports. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-steam-pipe-run-modul-327ac173","cdnUrl":"https://cdn.3dassets.dev/assets/34966/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-steam-pipe-run-modul-327ac173","thumbnailUrl":"https://cdn.3dassets.dev/assets/34966/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34966/v1/poster.webp","blurhash":"U6Amr1RWIWWH9g~o%NM{00R;_0t5~m9J9Gxs","category":{"slug":"props","title":"Props & Furniture"},"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":29984,"triangles":664,"vertices":1450,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.75,-0.000005888470658910183,-0.061005889156112325],"max":[0.75,0.5369625203274494,0.19802752704734683]},"sizeMeters":[1.5,0.537,0.259],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:57.950Z","updatedAt":"2026-09-11T10:46:58.052Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34966/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SteamPipeRunModuleDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34966/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34966/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34966/v1/model.glb\" alt=\"Steam pipe run module (Dry Cleaners and Alterations Shop)\" 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/34966/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/34966/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34967","slug":"dry-cleaners-and-alterations-shop-sewing-machine-table-2552a1da","title":"Sewing machine on a table (Dry Cleaners and Alterations Shop)","summary":"A beech topped steel table with a domestic weight machine on it: bed, arm, head with a needle bar and presser foot, a teal badge plate, two thread cones on pins, a knee lever under the top and a length of work under the foot.","description":"A beech topped steel table with a domestic weight machine on it: bed, arm, head with a needle bar and presser foot, a teal badge plate, two thread cones on pins, a knee lever under the top and a length of work under the foot. Dimensions 1.06 by 1.15 by 0.60 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: balance-wheel. The balance wheel turns. Thread, the work under the foot and the knee lever linkage are static: a flexible line is not reachable with one rigid node transform. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-sewing-machine-table-2552a1da","cdnUrl":"https://cdn.3dassets.dev/assets/34967/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-sewing-machine-table-2552a1da","thumbnailUrl":"https://cdn.3dassets.dev/assets/34967/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34967/v1/poster.webp","blurhash":"UDBWi4kX00Vr~qx]9FIA01xZ%MIp01V@-;Sh","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":71036,"triangles":1560,"vertices":3391,"meshes":8,"materials":6,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.5299999713897705,0,-0.29001432804402555],"max":[0.5299999713897705,1.149999976158142,0.30698427160984176]},"sizeMeters":[1.06,1.15,0.597],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:59.096Z","updatedAt":"2026-09-11T10:46:59.205Z","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/34967/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 SewingMachineOnATableDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34967/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/34967/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34967/v1/model.glb\" alt=\"Sewing machine on a table (Dry Cleaners and Alterations Shop)\" 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/34967/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/34967/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34968","slug":"dry-cleaners-and-alterations-shop-overlocker-table-097e4c80","title":"Overlocker on a table (Dry Cleaners and Alterations Shop)","summary":"The same table carrying the second machine every alterations room has: a squarer teal head, a four cone thread tree on a crossbar and a polythene trim chute hanging off the right end.","description":"The same table carrying the second machine every alterations room has: a squarer teal head, a four cone thread tree on a crossbar and a polythene trim chute hanging off the right end. Dimensions 1.06 by 1.25 by 0.60 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: balance-wheel. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Rigid node-transform clips: spin. No skinning. No collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-overlocker-table-097e4c80","cdnUrl":"https://cdn.3dassets.dev/assets/34968/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-overlocker-table-097e4c80","thumbnailUrl":"https://cdn.3dassets.dev/assets/34968/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34968/v1/poster.webp","blurhash":"U6A138pI00rC_MtRDPMe00xU_39w4Us9pcJC","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":87532,"triangles":1928,"vertices":4180,"meshes":10,"materials":8,"textures":0,"animations":["spin"],"boundingBox":{"min":[-0.5299999713897705,0,-0.29001432804402555],"max":[0.5299999713897705,1.246000051498413,0.3069974241375961]},"sizeMeters":[1.06,1.246,0.597],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:58.510Z","updatedAt":"2026-09-11T10:46:58.612Z","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/34968/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 OverlockerOnATableDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34968/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/34968/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34968/v1/model.glb\" alt=\"Overlocker on a table (Dry Cleaners and Alterations Shop)\" 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/34968/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/34968/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34977","slug":"dry-cleaners-and-alterations-shop-sewing-stool-9d089224","title":"Sewing stool (Dry Cleaners and Alterations Shop)","summary":"A height adjustable stool on a five star base with a gas column, a teal seat pad and a small teal back rest on a stem. Seat at 0.62 m.","description":"A height adjustable stool on a five star base with a gas column, a teal seat pad and a small teal back rest on a stem. Seat at 0.62 m. Dimensions 0.54 by 0.81 by 0.57 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-sewing-stool-9d089224","cdnUrl":"https://cdn.3dassets.dev/assets/34977/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-sewing-stool-9d089224","thumbnailUrl":"https://cdn.3dassets.dev/assets/34977/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34977/v1/poster.webp","blurhash":"U66Ivq%M009aP;M_m7%gH?R5tlyEzVw^Y6OF","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":33916,"triangles":810,"vertices":1637,"meshes":3,"materials":3,"textures":0,"animations":[],"boundingBox":{"min":[-0.24445294007050944,0.000004304726137549508,-0.28531694412231445],"max":[0.2960183487771745,0.8121705113991967,0.28531694412231445]},"sizeMeters":[0.54,0.812,0.571],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:47:04.278Z","updatedAt":"2026-09-11T10:47:04.385Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34977/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function SewingStoolDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34977/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34977/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34977/v1/model.glb\" alt=\"Sewing stool (Dry Cleaners and Alterations Shop)\" 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/34977/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/34977/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34969","slug":"dry-cleaners-and-alterations-shop-cutting-table-b3cf21e8","title":"Cutting table with rule and shears (Dry Cleaners and Alterations Shop)","summary":"A 2.2 m by 1.1 m beech cutting table on a braced steel frame, with a steel rule and proud division ticks let into the near edge, shears with two ground blades and two bows lying open on it, a cut length under a chalked pattern and four bolts racked underneath.","description":"A 2.2 m by 1.1 m beech cutting table on a braced steel frame, with a steel rule and proud division ticks let into the near edge, shears with two ground blades and two bows lying open on it, a cut length under a chalked pattern and four bolts racked underneath. Dimensions 2.20 by 0.95 by 1.12 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-cutting-table-b3cf21e8","cdnUrl":"https://cdn.3dassets.dev/assets/34969/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-cutting-table-b3cf21e8","thumbnailUrl":"https://cdn.3dassets.dev/assets/34969/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34969/v1/poster.webp","blurhash":"UJC?r?o#4nt3~px]IoRP00%2%MIV0LnhxtR.","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":80140,"triangles":1846,"vertices":3984,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-1.100000023841858,0.00001754191963221352,-0.550083937823807],"max":[1.100000023841858,0.9529954797681259,0.5680576788070135]},"sizeMeters":[2.2,0.953,1.118],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:59.599Z","updatedAt":"2026-09-11T10:46:59.703Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34969/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function CuttingTableWithRuleAndShearsDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34969/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34969/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34969/v1/model.glb\" alt=\"Cutting table with rule and shears (Dry Cleaners and Alterations Shop)\" 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/34969/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/34969/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34980","slug":"dry-cleaners-and-alterations-shop-pin-cushion-and-chal-e63a6928","title":"Pin cushion and chalk tray (Dry Cleaners and Alterations Shop)","summary":"A shallow enamelled tray with a teal lip holding a pinched cushion stuck with seven real pins, three tailor's chalk wedges and a coiled tape measure. Sits on a cutting table corner.","description":"A shallow enamelled tray with a teal lip holding a pinched cushion stuck with seven real pins, three tailor's chalk wedges and a coiled tape measure. Sits on a cutting table corner. Dimensions 0.32 by 0.10 by 0.21 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-pin-cushion-and-chal-e63a6928","cdnUrl":"https://cdn.3dassets.dev/assets/34980/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-pin-cushion-and-chal-e63a6928","thumbnailUrl":"https://cdn.3dassets.dev/assets/34980/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34980/v1/poster.webp","blurhash":"U8D]rFxv00xT9F-:%MMy00Rh_NNN~p9FE2oz","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":39156,"triangles":824,"vertices":1795,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.15800000727176666,0.000007538213654224163,-0.1030059558500772],"max":[0.15800000727176666,0.09698874573478386,0.1030059558500772]},"sizeMeters":[0.316,0.097,0.206],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:47:04.909Z","updatedAt":"2026-09-11T10:47:05.098Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34980/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PinCushionAndChalkTrayDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34980/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34980/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34980/v1/model.glb\" alt=\"Pin cushion and chalk tray (Dry Cleaners and Alterations Shop)\" 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/34980/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/34980/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34970","slug":"dry-cleaners-and-alterations-shop-tailors-dummy-84d411c0","title":"Tailor's dummy (Dry Cleaners and Alterations Shop)","summary":"A padded torso form with shoulders, bust, waist and hip on a steel column and a four leg cast base, with a teal taped waistline, an adjusting wheel and a beech neck cap. 1.4 m tall.","description":"A padded torso form with shoulders, bust, waist and hip on a steel column and a four leg cast base, with a teal taped waistline, an adjusting wheel and a beech neck cap. 1.4 m tall. Dimensions 0.60 by 1.34 by 0.59 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-tailors-dummy-84d411c0","cdnUrl":"https://cdn.3dassets.dev/assets/34970/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-tailors-dummy-84d411c0","thumbnailUrl":"https://cdn.3dassets.dev/assets/34970/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34970/v1/poster.webp","blurhash":"U67BWV%M008_x]oMMwR%n2jYXoX98^Rj.A%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":35756,"triangles":796,"vertices":1611,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.30000001192092896,0.000006407024599475175,-0.2954588575304513],"max":[0.30000001192092896,1.3400027481867198,0.2954588575304513]},"sizeMeters":[0.6,1.34,0.591],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:46:59.893Z","updatedAt":"2026-09-11T10:46:59.988Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34970/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TailorSDummyDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34970/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34970/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34970/v1/model.glb\" alt=\"Tailor's dummy (Dry Cleaners and Alterations Shop)\" 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/34970/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/34970/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34971","slug":"dry-cleaners-and-alterations-shop-tailors-dummy-petite-3cbecd32","title":"Tailor's dummy, petite block (Dry Cleaners and Alterations Shop)","summary":"The smaller block on the same stand, for the second size an alterations room keeps beside the first. Identical construction at 0.84 scale on the form and the base.","description":"The smaller block on the same stand, for the second size an alterations room keeps beside the first. Identical construction at 0.84 scale on the form and the base. Dimensions 0.50 by 1.20 by 0.50 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-tailors-dummy-petite-3cbecd32","cdnUrl":"https://cdn.3dassets.dev/assets/34971/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-tailors-dummy-petite-3cbecd32","thumbnailUrl":"https://cdn.3dassets.dev/assets/34971/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34971/v1/poster.webp","blurhash":"U56uL-%g004m%%ogH;M_Q+V@tntR8^WA.At8","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":35984,"triangles":796,"vertices":1618,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.25200000405311584,0.000006407734026991907,-0.24818543445533925],"max":[0.25200000405311584,1.2000000476837158,0.24818543445533925]},"sizeMeters":[0.504,1.2,0.496],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:47:00.380Z","updatedAt":"2026-09-11T10:47:00.480Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34971/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function TailorSDummyPetiteBlockDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34971/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34971/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34971/v1/model.glb\" alt=\"Tailor's dummy, petite block (Dry Cleaners and Alterations Shop)\" 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/34971/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/34971/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34972","slug":"dry-cleaners-and-alterations-shop-fabric-bolt-shelf-05ada191","title":"Fabric bolt shelf (Dry Cleaners and Alterations Shop)","summary":"A 1.1 m steel bay racked with twenty rolled bolts of cloth across four decks, cycling through the pack's four cloth colours: the wall of colour a white workroom is built around.","description":"A 1.1 m steel bay racked with twenty rolled bolts of cloth across four decks, cycling through the pack's four cloth colours: the wall of colour a white workroom is built around. Dimensions 1.10 by 1.80 by 0.44 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. The garments, their polythene covers and the cloth on the bolts are modelled in one fixed pose: a draped or folded length is not reachable with one rigid node transform. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-fabric-bolt-shelf-05ada191","cdnUrl":"https://cdn.3dassets.dev/assets/34972/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-fabric-bolt-shelf-05ada191","thumbnailUrl":"https://cdn.3dassets.dev/assets/34972/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34972/v1/poster.webp","blurhash":"U4C%BR_N0000~qt74oM|R4ROXlx^%KtSN2Mw","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":53176,"triangles":1600,"vertices":3391,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.5500472891184104,0,-0.2199529956686423],"max":[0.5500472891184104,1.7999999523162842,0.2199529956686423]},"sizeMeters":[1.1,1.8,0.44],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:47:00.935Z","updatedAt":"2026-09-11T10:47:01.042Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34972/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function FabricBoltShelfDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34972/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34972/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34972/v1/model.glb\" alt=\"Fabric bolt shelf (Dry Cleaners and Alterations Shop)\" 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/34972/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/34972/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34973","slug":"dry-cleaners-and-alterations-shop-thread-and-bobbin-ra-ac516fae","title":"Thread and bobbin rack (Dry Cleaners and Alterations Shop)","summary":"A pegged beech board under a teal rail holding eighteen thread cones in four colours, with a tray of seven wound bobbins along the bottom.","description":"A pegged beech board under a teal rail holding eighteen thread cones in four colours, with a tray of seven wound bobbins along the bottom. Dimensions 0.82 by 0.66 by 0.18 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. The model rests on the bottom edge of the board at y=0; hang it flat against a wall at working height. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-thread-and-bobbin-ra-ac516fae","cdnUrl":"https://cdn.3dassets.dev/assets/34973/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-thread-and-bobbin-ra-ac516fae","thumbnailUrl":"https://cdn.3dassets.dev/assets/34973/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34973/v1/poster.webp","blurhash":"U7GS0}9v00oy.5~pE30100xr^%M~xvtRM_I9","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":109652,"triangles":2864,"vertices":6178,"meshes":7,"materials":7,"textures":0,"animations":[],"boundingBox":{"min":[-0.4099999964237213,-0.00001951585440418402,-0.010010071020812923],"max":[0.4099999964237213,0.6600195420804479,0.17500683331185238]},"sizeMeters":[0.82,0.66,0.185],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:47:01.459Z","updatedAt":"2026-09-11T10:47:01.557Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34973/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function ThreadAndBobbinRackDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34973/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34973/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34973/v1/model.glb\" alt=\"Thread and bobbin rack (Dry Cleaners and Alterations Shop)\" 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/34973/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/34973/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34974","slug":"dry-cleaners-and-alterations-shop-notions-drawer-unit-66f1b9c5","title":"Button and notions drawer unit (Dry Cleaners and Alterations Shop)","summary":"A 1.04 m chest of four teal drawers with blank label windows and recessed pulls under a beech top, with loose buttons and a zip on the top. The top drawer runs on its slides and pulls out with its box.","description":"A 1.04 m chest of four teal drawers with blank label windows and recessed pulls under a beech top, with loose buttons and a zip on the top. The top drawer runs on its slides and pulls out with its box. Dimensions 0.65 by 1.05 by 0.50 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: notions-drawer. The three lower fronts are modelled closed and do not move. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress 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/dry-cleaners-and-alterations-shop-notions-drawer-unit-66f1b9c5","cdnUrl":"https://cdn.3dassets.dev/assets/34974/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-notions-drawer-unit-66f1b9c5","thumbnailUrl":"https://cdn.3dassets.dev/assets/34974/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34974/v1/poster.webp","blurhash":"UID,TCEL00=y~Voz9aRjHq%2TKELs.jYV[j]","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":63740,"triangles":1368,"vertices":3101,"meshes":11,"materials":7,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.32499998807907104,0.000018160109768509958,-0.2350092995253001],"max":[0.32499998807907104,1.0520000457763672,0.26075736201134725]},"sizeMeters":[0.65,1.052,0.496],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:47:01.617Z","updatedAt":"2026-09-11T10:47:01.719Z","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/34974/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 ButtonAndNotionsDrawerUnitDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34974/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/34974/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34974/v1/model.glb\" alt=\"Button and notions drawer unit (Dry Cleaners and Alterations Shop)\" 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/34974/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/34974/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}},{"id":"34975","slug":"dry-cleaners-and-alterations-shop-pattern-hook-rail-4879bf82","title":"Pattern hook rail (Dry Cleaners and Alterations Shop)","summary":"A beech wall rail under a teal bead with six hooks and rings, hung with paper patterns and blank job envelopes at three different drops.","description":"A beech wall rail under a teal bead with six hooks and rings, hung with paper patterns and blank job envelopes at three different drops. Dimensions 1.24 by 0.82 by 0.09 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. The model rests on the tips of the longest sheets at y=0; hang it by placing the rail against the wall at about 1.9 m. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-pattern-hook-rail-4879bf82","cdnUrl":"https://cdn.3dassets.dev/assets/34975/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-pattern-hook-rail-4879bf82","thumbnailUrl":"https://cdn.3dassets.dev/assets/34975/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34975/v1/poster.webp","blurhash":"UIF68]of00Rj~p?aRjIU00?H?bM{D%M_t7t7","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":45980,"triangles":1004,"vertices":2267,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.6200000047683716,-0.000010150119652774237,-0.014985809008348347],"max":[0.6200000047683716,0.8200331188895921,0.07986301493930145]},"sizeMeters":[1.24,0.82,0.095],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:47:03.145Z","updatedAt":"2026-09-11T10:47:03.271Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34975/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function PatternHookRailDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34975/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34975/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34975/v1/model.glb\" alt=\"Pattern hook rail (Dry Cleaners and Alterations Shop)\" 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/34975/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/34975/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34976","slug":"dry-cleaners-and-alterations-shop-ironing-board-c63d10d6","title":"Ironing board with iron (Dry Cleaners and Alterations Shop)","summary":"A 1.28 m covered board on two crossed leg frames with a teal iron rest at the square end, carrying a small steam iron with a real soleplate, a shrouded body and a grip with a trigger.","description":"A 1.28 m covered board on two crossed leg frames with a teal iron rest at the square end, carrying a small steam iron with a real soleplate, a shrouded body and a grip with a trigger. Dimensions 1.28 by 1.07 by 0.38 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-ironing-board-c63d10d6","cdnUrl":"https://cdn.3dassets.dev/assets/34976/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-ironing-board-c63d10d6","thumbnailUrl":"https://cdn.3dassets.dev/assets/34976/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34976/v1/poster.webp","blurhash":"UB8qjMbc4Ts:.Tx]aJRP9Y%g%MMw8^t8tTRO","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":28380,"triangles":658,"vertices":1300,"meshes":4,"materials":4,"textures":0,"animations":[],"boundingBox":{"min":[-0.6399999856948853,0.000013532934726667722,-0.19002532611546796],"max":[0.6399999856948853,1.070384412692069,0.19002532611546796]},"sizeMeters":[1.28,1.07,0.38],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:47:02.696Z","updatedAt":"2026-09-11T10:47:02.796Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34976/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function IroningBoardWithIronDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34976/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34976/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34976/v1/model.glb\" alt=\"Ironing board with iron (Dry Cleaners and Alterations Shop)\" 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/34976/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/34976/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34978","slug":"dry-cleaners-and-alterations-shop-work-in-progress-gar-82340341","title":"Work in progress garment rail (Dry Cleaners and Alterations Shop)","summary":"A 1.42 m wheeled rail carrying five part finished alterations, uncovered so the pinned hems show, each with a blank job tag hanging beside it.","description":"A 1.42 m wheeled rail carrying five part finished alterations, uncovered so the pinned hems show, each with a blank job tag hanging beside it. Dimensions 1.32 by 1.68 by 0.52 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. The castors are modelled into the base frame and are static on this piece. The garments, their polythene covers and the cloth on the bolts are modelled in one fixed pose: a draped or folded length is not reachable with one rigid node transform. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress anywhere in this pack. Static geometry; no rig, collision or navigation data.","status":"published","url":"https://3dassets.dev/assets/dry-cleaners-and-alterations-shop-work-in-progress-gar-82340341","cdnUrl":"https://cdn.3dassets.dev/assets/34978/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-work-in-progress-gar-82340341","thumbnailUrl":"https://cdn.3dassets.dev/assets/34978/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34978/v1/poster.webp","blurhash":"U28g{a.S004T?Hx^58D$00et_2Sr8wxF?uI.","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":116688,"triangles":2740,"vertices":5921,"meshes":6,"materials":6,"textures":0,"animations":[],"boundingBox":{"min":[-0.6599941782776231,0,-0.25856243103909043],"max":[0.6599941782776231,1.6807163953781128,0.25856243103909043]},"sizeMeters":[1.32,1.681,0.517],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:47:03.525Z","updatedAt":"2026-09-11T10:47:03.621Z","usage":{"threejs":"import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'\n\nconst loader = new GLTFLoader()\nloader.load('https://cdn.3dassets.dev/assets/34978/v1/model.glb', (gltf) => {\n  scene.add(gltf.scene)\n})","r3f":"import { useGLTF } from '@react-three/drei'\n\nexport function WorkInProgressGarmentRailDryCleanersAndAlterationsShop(props) {\n  const { scene } = useGLTF('https://cdn.3dassets.dev/assets/34978/v1/model.glb')\n  return <primitive object={scene} {...props} />\n}\nuseGLTF.preload('https://cdn.3dassets.dev/assets/34978/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34978/v1/model.glb\" alt=\"Work in progress garment rail (Dry Cleaners and Alterations Shop)\" 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/34978/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/34978/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);"}},{"id":"34979","slug":"dry-cleaners-and-alterations-shop-offcut-bin-8c1bd846","title":"Offcut bin (Dry Cleaners and Alterations Shop)","summary":"A 0.66 m enamelled bin with two teal bands and a pedal linkage, its hinged lid held ajar by a scrap of cloth hanging over the rim, for the side of the cutting table.","description":"A 0.66 m enamelled bin with two teal bands and a pedal linkage, its hinged lid held ajar by a scrap of cloth hanging over the rim, for the side of the cutting table. Dimensions 0.53 by 0.74 by 0.51 m (X by Y by Z). Metre units, +Y up, customer or operator side toward +Z, resting on y=0. Named pivoted nodes: bin-lid. Every ticket, tariff strip and label is blank: no shop name, machine maker or trade dress 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/dry-cleaners-and-alterations-shop-offcut-bin-8c1bd846","cdnUrl":"https://cdn.3dassets.dev/assets/34979/v1/model.glb","downloadUrl":"https://3dassets.dev/download/dry-cleaners-and-alterations-shop-offcut-bin-8c1bd846","thumbnailUrl":"https://cdn.3dassets.dev/assets/34979/v1/thumb.webp","posterUrl":"https://cdn.3dassets.dev/assets/34979/v1/poster.webp","blurhash":"U9F6IMtR00VY%MxaRjIV00n%_NS#M{ozs;RP","category":{"slug":"props","title":"Props & Furniture"},"tags":[{"slug":"modern","title":"Modern"},{"slug":"realistic","title":"Realistic"},{"slug":"interior","title":"Interior"},{"slug":"animated","title":"Animated"}],"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":26040,"triangles":520,"vertices":1096,"meshes":6,"materials":4,"textures":0,"animations":["open","close"],"boundingBox":{"min":[-0.26499998569488525,0,-0.22501585797181967],"max":[0.26499998569488525,0.7359972129087388,0.2849995193462218]},"sizeMeters":[0.53,0.736,0.51],"hasDraco":false,"hasMeshopt":false,"hasKTX2":false,"extensionsUsed":["KHR_mesh_quantization"]},"aiGenerated":true,"aiModel":"Claude Opus 5","downloads":0,"publishedAt":"2026-09-11T10:47:04.580Z","updatedAt":"2026-09-11T10:47:04.701Z","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/34979/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 OffcutBinDryCleanersAndAlterationsShop(props) {\n  const { scene, animations } = useGLTF('https://cdn.3dassets.dev/assets/34979/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/34979/v1/model.glb')","modelViewer":"<model-viewer src=\"https://cdn.3dassets.dev/assets/34979/v1/model.glb\" alt=\"Offcut bin (Dry Cleaners and Alterations Shop)\" 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/34979/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/34979/v1/model.glb\")) await gltf.InstantiateMainSceneAsync(transform);\n// Clips import as legacy AnimationClips on the root; GetComponent<Animation>().Play() starts the first."}}]}}