Shells tool (housing interiors on a grid)
Updated Oct 13, 2026 Open the tool
The Shells tool at /app/interior draws a GTA V housing shell on a grid: rooms, walls, doors, archways and windows, stairs, up to four floors, the paint on every floor, wall and ceiling, and the spots a housing script reads (where the player appears, the stash, the wardrobe). A shell is the one-piece interior that scripts like ps-housing, qb-houses or qs-housing spawn under the map for a house or an apartment. The tool is in beta behind Tools on the left rail, under Create. Drawing is free; Build resource on the Export step writes the .ydr with its collision embedded, the .ytyp, and the config snippet for the housing script picked (plus shell.json for every script), one shell a day on Free and unlimited on Standard and up.
Starting a shell
The stage opens on Start a shell with four starts: Empty grid, Studio (one room and a bathroom), Two-bedroom apartment (living room, kitchen, hall, two bedrooms, bathroom) and Two-storey house (living room and kitchen below, bedroom and bathroom above a stair). The same four sit in the left column. A start is a worked shell drawn with the tool's own edits, so everything in it can be changed. The shell is kept on the device as a project the moment something is drawn (the address gains the project id, and the shell comes back on a reload or a later visit); the name at the top of the column is edited by clicking it.
The left column lists six steps: Plan, Rooms, Openings, Surfaces (optional), Spots, Export. Clicking a step opens its controls and picks the tool that step uses; the tool strip down the left edge of the stage picks any tool at any time.
The plan and the 3D view
The stage shows the floor in hand from above (Plan) or the whole house from an angle (3D); Tab switches, and the other view sits small in the stage's bottom-right corner (since 2026-10-04: a 3D inset on the plan, a plan inset in 3D, the plan one framed on the floor in hand like a minimap), where a click on it swaps the two; it is left out on a narrow stage. Drawing happens in the plan: the left button draws, the right button pans, the wheel zooms, F frames the shell. In 3D the left button orbits, so the tools that drag (Room, Erase, Wall) wait for the plan (their cursor becomes a hand and a tip says so), while the tools that click (Opening, Stairs, Floor opening, Spot, Paint, Select) work on whatever was clicked. In 3D the roof of the floor in hand is left off and its walls stand whole, so the camera looks in from above and the doors and windows show as they are; Cut the walls (the scissors, or C) shortens those walls to waist height for a deeper look, off by default since 2026-10-04. A person for scale (the figure, or G) stands at the entrance, the site's metre-true size reference with its height said over its head, so a door's size reads at once (the game's doors are 1.3 m wide and 2.3 m tall; its people about 1.85 m). The pointer carries the tool's own glyph, so a press never surprises: a square for Room, an eraser, a wall, a door, a stair, a ring for a floor opening, a pin, a drop for Paint.
Walk (the footprints beside the 3D button, or K; since 2026-10-04): the camera drops to eye height at the entrance, facing its way, with the whole house built and its roofs on. W A S D (or the arrows) walk, Shift runs, a click on the view holds the mouse so moving it looks around (a drag looks too), Esc gives the mouse back, K, Tab or a second Esc leaves the walk. The walls stop you a shoulder short, a door or archway lets you through within its width (a window and a closed door leaf do not), a stair carries you up its ramp onto the landing a level up and back down again, a floor opening is an edge you stop at, and the floor chip follows the floor you are on. It is the way to check how a room feels at the game's scale, and the quickest way to find a hole or a slit. The cut and the person are off while walking (you are the person), and the walk needs a keyboard, so a phone does not offer it.
The plan says its sizes (2026-10-04): a metre ruler runs along the top and left edges of the floor, a room's size (6 × 4 m) shows under its name while it is selected or under the pointer, and a rectangle being drawn or a wall being dragged carries its size at its middle.
Floors are chips at the top of the stage (Floor 1, Floor 2, a plus for another, up to four). The plus opens a small menu (since 2026-10-04): Empty floor, or Copy floor N, which puts the top floor's rooms and partitions on the new floor as rooms of their own with the same names and paint (nothing on them: no openings, stairs, spots or floor openings), so a two-storey house starts from its ground floor. The Rooms step has the same Copy floor N button, and on an empty upper floor it offers the floor below. The floor below the one in hand shows as a faint ghost in the plan so the floors line up; [ and ] move between floors. The undo pile is the two arrows at the right of the toolbar (Ctrl+Z, Ctrl+Y), every edit is one step and the Undo tooltip names it. Small keys (2026-10-04): 1 to 4 pick a floor, Shift while dragging with the Room tool takes tiles away instead, a double click on a tile selects its room with any tool, the arrows nudge a selected spot 10 cm (50 cm with Shift), and Esc clears the selection, then with nothing selected puts the tool down (back to Select). A shell's project card shows its ground-floor plan (drawn flat from the document when the project saves: the tiles in their floor colours, the walls, a stair's arrow, the entrance's ring).
Rooms, walls, stairs and floor openings
Room (R): drag a rectangle on the grid, or click one tile (since 2026-10-04 a click is the smallest drag, for Erase too); its tiles join the room in hand (the one picked in the Rooms list, made for you the first time). Tiles already in another room move over. A room's walls are not drawn: a wall stands wherever two tiles belong to different rooms, or a tile meets nothing. So two rooms are two paint strokes (New room, then tiles), never a wall drawn: a partition from the Wall tool stays inside its room (one name, one floor, one paint), and two rooms always get a wall between them. An open-plan kitchen and living room are one room, with the kitchen's tiles painted under Paint · Floors · Scope One. New room starts another; a room is renamed by its pencil or a double click, removed by its bin (its tiles go with it). Erase (E) drags tiles away, and whatever stood on them. Wall (W) drags along a grid line inside a room for a partition. Stairs (S): pick the direction it climbs (Climbs toward in the panel, or Q on the stage), click the bottom tile; the run is about as long as a floor is high (four tiles on a 1 m grid at 3 m floors, seven at 0.5 m), every tile of the run must be on the floor, and the floor above needs a tile past the top step to land on; the floor above opens over the whole run by itself (the stairwell), so nothing hangs over the stairs. The steps are a person's size (risers under 19 cm); the game walks a ramp under them. Floor opening (H) clicks a tile open: no slab there, a void over the room below.
Handles (2026-10-04, the owner's rule: handles, not numbers): with Select (V) in hand, whatever is selected on the plan wears handles that are dragged. A room (clicked on a tile, or picked in the Rooms list; the Room tool shows them too for the room in hand) has a pill on each of its four edges: dragging one out adds a row of tiles along that edge, dragging it in takes rows away (a room keeps its last row); the new rows show as the same green or red ghost the Room and Erase tools draw, and the change lands as one edit at the drop. A selected door or window has a dot at its middle that slides it along its wall a tile at a time (red where it would not fit). A stair has a dot on its bottom tile that moves the whole run (the direction stays; Q turns it). A partition has a dot at each end that changes its length. A spot has a dot that moves it (a drag on the Spot tool still turns it). Undo takes any of them back.
Mirror east–west and Mirror north–south (Rooms step, since 2026-10-04) flip the whole shell across its middle: every floor, opening, partition, stair and spot turns with it, so a left-handed plan becomes a right-handed one in a click.
The grid is 1 m by default or 0.5 m, chosen on the Plan step before the first tile (it locks once a room is drawn, since every position is counted in tiles); the floor height runs from 2.4 m to 6 m, and a floor sits that high plus the 20 cm slab above the one below (a level is 3.2 m at the default 3 m). A shell is at most 6,000 tiles, 64 rooms, 400 openings, 32 stairs.
Openings and spots
Opening (O): pick a kind, then click near a wall; the ghost on the wall turns teal where it fits. The sizes are the game's, not a building code's (since 2026-10-04): Door 1.3 × 2.3 m, Double door 2.6 × 2.3 m, Archway 1.6 × 2.5 m, Window 1.2 × 1.4 m on a 0.95 m sill, Tall window 1.2 × 2.2 m on a 0.3 m sill, Wide window 2.4 × 1.5 m on a 0.9 m sill. Every kind spans two tiles of a 1 m grid (three for the wide ones) and needs the same wall along all of them. Clicking the same kind on an opening takes it off; another kind replaces it; the Selection panel on the right changes a selected opening's kind too. A kind card is lit only while the Opening tool is in hand; clicking one arms the tool.
Door leaf: a door or double door can carry one of the game's own doors, stood closed in the frame and baked into the shell's model: House front door, Modern front door, Apartment front door, Apartment door, Panel door, Bedroom door, Trailer door, Mansion door (all 1.3 m wide; 2.3 m tall but the modern front door at 2.8 m and the bedroom door at 2.53 m, which need the ceiling for them). The frame is cut to the leaf and bites a centimetre into its edges, so no light shows around a closed door; a double door stands two leaves, the second mirrored. The leaf picker under the kinds sets the leaf for the next door (and for the selected door); the Selection panel has the same picker for a selected door. A leaf is baked closed and solid (the collision fills its frame, the walk stops at it), so it suits the teleport entrance (stand the entrance spot in front of it) or a cupboard, and it seals a door between two rooms. The picker is on Auto by default (since 2026-10-04): a door placed on an outside wall closes with the Apartment door, a door between two rooms is an Open frame, which is how most shells work; picking a leaf or Open frame instead applies it wherever the next door lands. A leaf between two rooms is said as a warning with a one-click Take the leaf out. The presets' entrances carry leaves; their inside doors are open frames.
Windows under the map (2026-10-04): a housing script spawns the shell 25 m inside the terrain, so a window that looks out looks at nothing. Every window therefore has a 4 cm white frame through the wall and holds something: Blinds (the game's venetian blind), Curtains, Frosted glass, Bright sky (a plain daylight gradient of our own) or Clear glass. The Window picker under the opening kinds sets it for the next window and for the selected one (the Selection panel has the same picker); left on Blinds outside · clear between rooms a window picks for itself: blinds when its wall looks out, clear glass between two rooms. A dressing is a thin board in the middle of the wall, lit a little so it reads as daylight behind it (the build puts it on the game's emissive shader); clear glass shows see-through on the stage and is left out of the build until the builder writes the game's glass shader. Every opening onto the outside is solid in the game whatever it shows: a window's cut above its sill and an open door frame are blocked in the collision, so nobody vaults a sill or walks out of the front door into the void (openings between rooms stay open). Two checks say when a shell still looks out: Door to the outside with no leaf (its fix puts a leaf in) and Clear window to the outside (its fix hangs blinds).
A room, stair or opening lit on the stage is the one a check or the Rooms list named; the room's label on the plan lights with it.
Spot (M): the points a housing script reads, each placed once. Entrance (required: where the player appears), Exit, Stash, Wardrobe, Logout, Garage. Place in the Spots step arms the kind; a click on the floor puts it down facing away from the nearest wall, a drag turns it, and the Selection panel has a Facing slider. A spot must stand on a tile.
Surfaces
Paint (P) with Floors, Walls, Ceilings, Outside, Skirting or Panelling picked (a grid of six cards since 2026-10-04): clicking a swatch paints the room in hand (the room last clicked or picked in the Rooms list), and clicking a floor, wall or ceiling on the stage paints that room's surface with the swatch in hand; Scope · One paints the one tile clicked, or (since 2026-10-04) the one wall clicked between its corners, an accent wall that keeps its own paint until the room is painted whole again (the corner posts beside it follow it). Outside is every wall face that looks out of the shell, one material for the whole shell. The swatches are fourteen flat paints and twenty-five sets of the game's own interior textures (oak and plank floors, marble, carpets, lino, tiles; plasters, wallpapers, bathroom tiles, chipped paint, breeze block, brick; grey and white beadboard, dark wood slats, dark oak panels and walnut burl for panelling; ceiling tiles), each tiling every metre or two (the two beadboard pictures are a wainscot section half a metre wide and a metre tall, so they tile that way).
Skirting (2026-10-04): every room starts with a plain white Square board along the foot of its walls (the owner: add it by itself, with a None), and the Skirting board picker at the foot of the Surfaces step, always in view, changes the room in hand's section (Square 12 × 100 mm, Chamfered, Bullnose, Ogee 120 mm, Tall Victorian 150 mm with a step, Shadow gap as a thin dark strip) or takes it off with None. Its material is any paint or wood floor: pick Skirting among the paint targets and click a swatch. Scope · One lays a board on the one wall clicked instead (or a different board there). Boards mitre at the room's corners, run round the outside corners of an L-shaped room and both faces and the free end of a partition, and stop square at a door's or archway's jambs; windows do not cut them. The boards are built into the shell's model (a few hundred triangles for a room) and are not in the collision.
Half-wall panelling (2026-10-04, the owner: "textured half wall skirting, like those wood panel ones"): the Half-wall panelling picker under the skirting one puts a band in its own material up the lower walls of the room in hand, under a dado rail, to the height picked beside it (0.9, 1.0, 1.2 or 1.5 m). Flat band is the band and the rail alone, for a picture that carries its own panels (the dark oak panels by default, which tile every metre, so 1.0 m shows one row); Panelled adds a bottom rail above the skirting and a stile every 60 cm or so for raised panels in a paint or a veneer; Beadboard adds a narrow bead every 10 cm. Picking a style puts Panelling in hand among the paint targets, so a swatch (any paint, wall set or wood floor) changes the panelling's material; Scope · One lays it on the one wall clicked. The band is the wall's own lower slice, so it runs through corners and door jambs and stops at a window whose sill is below the rail; the rail and woodwork are built like the skirting (not in the collision), and a wall picture now starts at the floor of each level. None takes the panelling off.
Right-click menu (2026-10-04, the owner: "quickly select based on the location of the right click, and then add"): a right-click on the house, in 3D or in the plan, selects what it landed on and opens a menu about it (a right-drag still pans). On a wall: Door here, Double door here, Archway here, Window here, Tall window here, Wide window here (placed on the room's side of that wall with the leaf and glazing in hand), Paint this wall ·
This room: a room selected (a tile clicked with Select, a double click on a tile, or the Rooms list) shows in the right panel with pickers for the whole room (the owner, 2026-10-04: "no panelling option when I select the room"): Floor, Walls, Ceiling, Skirting (and its Board material once on), Panelling (and its Height and Panels material once on). They do what the Surfaces step does for the room in hand, from the room itself.
What the pointer is over (2026-10-04, the owner: the tile under a wall lit while hovering the wall): with Select or Paint in hand, the hover lights the thing the click would take: a door or window (its frame), a wall (its straight run between corners, or the one segment when the wall looks out), a stair (its run), else the tile. The selected wall or opening stays lit in teal. In the plan a wall is clicked on its top, and the side of the centre line the click lands on picks the face (the room's side when the other looks out), so a plan click selects and paints a real face too.
This wall: a wall clicked with Select (V) in 3D, or in the plan, shows in the right panel with three pickers of its own, Paint, Skirting and Panelling (and the panelling's Panels material once it has its own), each on Room's until changed: pick a paint for an accent wall, a board section or None, a panelling style or None, and that straight wall between its corners wears it on its own while the rest of the room keeps the room's choices. It is the same thing Scope · One does from the Surfaces step, found from the wall instead of the swatch.
Furniture
Furnish (U; its own step between Surfaces and Spots, since 2026-10-05): the game's own furniture, 438 pieces pulled from the GTA V install and grouped as Seating, Tables, Beds, Storage, Kitchen, Bathroom, Lighting, Electronics, Plants, Rugs, On the wall and Decor, each with a thumbnail and its size. Type in the search or pick a category chip; click a piece and it is in hand; click the floor where it goes. A piece put down within about half a metre of a wall backs onto the wall and turns to face the room; a wall piece (art, a clock, a towel rail, a wall shelf) always hangs on the nearest wall at its mount height; a ceiling light hangs under the ceiling where you click. In 3D a wall clicked with a piece in hand puts it against that wall. , and . turn the piece in hand (or the selected piece) a quarter. The piece stays in hand, so a dining table and six chairs are seven clicks.
A piece selected (Select or Furnish, in 3D or the plan) shows in the right panel with its heading slider, Back onto the nearest wall and Duplicate (the same piece beside it, to its right when that is floor, else its left); Remove is the bin or Delete; the arrows nudge it a tenth of a metre (half with Shift). In the plan a selected piece wears a move dot at its middle and a turn dot off its front: drag the first to move it, the second to turn it (five-degree steps). The right-click menu on a piece offers Turn a quarter, Turn back a quarter, Back onto the nearest wall, Duplicate and Remove; on a tile it offers "
On a table (2026-10-05, stacking): a lamp, a TV, a plant or an ornament put down over a table, a unit or a counter rests on its top instead of the floor (its footprint pulled onto the top if it hangs over), and from then on goes where the table goes: moved, turned or taken away (then it comes down onto the floor). Chairs, sofas, beds and rugs never stack. The right panel says "on
Generated furniture (2026-10-13): Generate beside Add your own (.glb) opens the 3D generator (see image-to-3d.md) made for the shell: a description ("A red leather gaming chair") becomes one piece of furniture standing on its base, and the finished GLB is added as one of the shell's own pieces, exactly as a file would be. It spends credits like any generation; the price shows before Generate.
Your own furniture (2026-10-05): Add your own (.glb) at the top of the Furnish step takes a glTF binary (Y up, metres, under 15 MB and 60,000 triangles; 24 pieces and 40 MB in one shell). The piece is measured and pictured in the browser, named from its file ("my_lamp-v2.glb" reads "My lamp v2") and put in hand; its tile wears a "Yours" badge. With it in hand a small form gives its name, its category (which decides whether it backs onto a wall or rests on a table, like the catalogue's), how it hangs (Floor, Wall with a height, Ceiling; every placement follows a change) and Remove (which takes its placements too; undo brings them back). Its model name is own_<file name> (so it never shadows a game prop) and that is what the game spawns it as. The file's bytes ride with the project on this device, so a shell reopened from the Projects list has them; a project that comes without a file shows the piece with a "File missing" badge and the build refuses until the same file is added again or the piece removed. Own pieces bake into the shell or the props file like the game's; when the script spawns the furniture, each own piece is built as a model of its own (below).
Walking bumps into the furniture (2026-10-05): every standing piece the build gives a collision box (anything 10 cm tall or more, so not a rug) stops the walker a shoulder short of it, turned as the piece is; hung pieces and pieces resting on a table do not stop you (the table does).
Where it comes from. Every piece is one of Rockstar's own props, read from the legacy game install on the dev machine by zoovdev-winapi/scripts/interior_props.py (CodeWalker reads the archives, pymateria writes the GLB), the way the door leaves and the wall textures came. The list is the standalone pieces housing scripts already let players place (the union of ps-housing's and waypoint_housing's furniture lists), with the clutter, weapons and adult props left out; the names are made from the prop's own name ("Corner sofa 05 · apartment"), nothing copied from anyone's labels. Nothing comes from five-forge.
Checks and the facts
The right panel and the Export step list what stands between the shell and the game: no rooms yet, no entrance, an entrance off the floor, a room with no door from the entrance (reachability walks doors and archways, not windows, and stairs between floors), a floor with no stair up to it, an opening that lost its wall, a stair with nothing to land on, a spawn name that is not lowercase letters, digits and underscores, more than 6,000 tiles, a door to the outside with no leaf, a door with a leaf between two rooms (nobody passes a baked leaf), a clear window to the outside, a spot within a shoulder (30 cm) of a wall (the script would put the player inside it), two stairs landing on one tile. Errors will block the build; warnings are said. Every check is a button (since 2026-10-04): it goes to the step where the thing is fixed with the right tool in hand, selects what it is about (the room, the stair, the opening, the entrance) and lights the field or row there for a moment, so a missing spawn name lands in the name field with the caret in it and a missing entrance lands on the Entrance row with the Spot tool armed.
One-click fixes (the wand under a check, since 2026-10-04): a check that can answer itself carries a second button that does it as one edit (undo takes it back), and selects what it made. No door from the entrance offers Add a door from a reached room: a plain door cut in the middle of the longest wall the room shares with a room the entrance already reaches (a wall with a window on it is passed over). No stair up to floor N offers Place a stair up to it: the first run that fits on the floor below with its landing above, in a room the entrance reaches when one has the space. No entrance offers Entrance inside the front door when a door or archway opens onto the outside (a door with a leaf on the ground floor first): the spot stands 0.7 m inside the middle of the frame facing into the room, which is where a teleport script should put the player. Entrance off the floor offers Move it onto the nearest tile. Stair with nothing to land on offers Add the landing tile (the tile joins the room beside it upstairs, or a new Landing room). A bad spawn name with a shell name offers Use
The facts line under the name reads "2 floors · 100 tiles · 10 × 10 m"; the triangle count sits on the Export step, with the furniture's own count and piece count under it once there is furniture.
Furniture checks (2026-10-05): a standing piece whose footprint runs into a wall ("
What the build writes
The Export step is a guide (since 2026-10-04). Housing script comes first: ps-housing, qb-interior or Other (remembered in the browser). Under it the chosen script's snippet shows before any build, written in the browser exactly as the server writes it, with a Copy button and a line saying where it goes (Config.Shells in ps-housing/shared/config.lua; qb-interior/client/main.lua; the offsets in shell.json for anything else); it reads "Place the entrance under Spots to see the snippet" until the entrance stands. Then the checks with their fixes, the files and sizes, the texture size, and three numbered install steps for that script: unzip into resources and ensure <spawn name>, paste the snippet where the script keeps its shells, restart both resources and create a property with the shell. The spawn name hint on the Plan step says to start it with the server's name, since the game has no namespace and two shells with one name clash.
Build resource (signed in, every check passing) sends the shell to the conversion server and downloads <spawn name>.zip, a FiveM resource: fxmanifest.lua (a map resource that registers the archetype with DLC_ITYP_REQUEST), stream/<spawn name>.ydr (walls, floors, ceilings and stairs as one model, the game's textures embedded, LODs, and the collision embedded so the player walks on the floors and stops at the walls), stream/<spawn name>.ytyp (the archetype: lodDist 300, hdTextureDist 60, flags 536870912 like K4MB1's shells), the chosen script's config only (configs/ps-housing.lua, the Config.Shells entry with doorOffset from the entrance spot; or configs/qb-interior.lua, a CreateShell export in the shape of qb-interior's own, with the stash, wardrobe and logout spots as its POI offsets), configs/shell.json always (every spot as an offset in the game's frame, for qs-housing, loaf, bcs, origen, tk or anything else), README.md (the install steps for that script, naming only the configs inside) and report.json. The textures go in at 1024 px (or 512, chosen on the Export step).
Furniture in the build (2026-10-05; a switch under the texture size once the shell has furniture): In the shell (the default: the pieces baked into the shell's model with their textures, their collision a solid box each, nothing for rugs or hung pieces; one file and one hash, the way furnished shells ship), Own props file (stream/<spawn name>_props.ydr, a second drawable holding the furniture with its boxes in a collision bound of its own, the shell left bare; the .ytyp carries both archetypes; for scripts that spawn two objects, or ps-housing through a furniture row) or Script spawns it (nothing baked; the pieces are only listed). Every build with furniture also writes configs/furniture.json: each piece as the game spawns it, relative to the shell's origin (x east, y north, z up, metres; rotation about z in the game's degrees), in the shape ps-housing keeps per property (furnitures rows: id, label, object, position, rotation, type), and the props file's name when there is one. With ps-housing chosen and the furniture not baked in, configs/ps-housing-furniture.sql is one UPDATE properties SET furnitures = … WHERE property_id = <id> with those rows (one row for the props file at the origin): ps-housing has no furniture in Config.Shells; it keeps each property's furniture in the database, relative to the shell, and spawns it with GetOffsetFromEntityInWorldCoords (read in its client/cl_property.lua and server/sv_property.lua on 2026-10-04), so a preset can only arrive as a row. The report carries the shell's collision faces and vertices (the game holds 32,767 vertices in one bound; past 30,000 the build warns) and the furniture file's own. Own pieces (2026-10-05) bake like the game's in the first two modes; with Script spawns it each own piece comes as stream/own_<name>.ydr, a model of its own with its collision from its mesh and an archetype in the .ytyp, so the script spawns it by that name where furniture.json says (furniture.json and shell.json list the own models under own); a piece whose file did not come is listed with a warning in the report.
Every offset is metres from the shell's origin, which is the grid's origin, with the shell at heading 0: x east, y north, z up, and headings in the game's degrees. The entrance is where the housing script puts the player: its spot becomes doorOffset (its facing the heading, the nearest door's width plus 40 cm the zone's width); the z is the floor's height plus 5 cm. The build takes a few seconds for a small shell, up to a minute or two for a large one; the activity pill at the top says where it is (writing the model, sending, building, downloading). Signed in, the zip and the shell's document are also kept in the library as the shell's project folder (Built <name>.zip), so the shell opens again from the library and every build is a version.
One shell a day on Free (and Lite, boosters and referrers; DAY_LIMITS.interior, since 2026-10-03). The count is taken at Build resource and keyed by the shell's project, so building the same shell again that day after a change is the same shell. A second shell shows Unlimited on any plan and "1 shell a day on Free · unlimited on any plan". Standard and up have no limit. Drawing, painting and keeping the project are free.
Common questions
Where is the download?
On the Export step: Build resource downloads <spawn name>.zip once every check passes and you are signed in. Download again gives the same file once more; a change to the shell asks for a new build.
How do I install the shell on my server?
Drop the unzipped folder into your server's resources and ensure it. Then open configs/: ps-housing users paste ps-housing.lua into Config.Shells in ps-housing/shared/config.lua; qb-houses and qb-apartments users paste qb-interior.lua into qb-interior/client/main.lua and call the new export; every other script gets its numbers from shell.json. Restart both resources and create a property with the shell. The Export step shows the same three steps for the script picked there, and the snippet with a Copy button before the build.
The zip has no ps-housing.lua (or no qb-interior.lua).
Since 2026-10-04 the zip carries the config of the script picked on the Export step (Housing script), and shell.json for every script. Pick the other script and build again; a shell built before that date has both.
How do I make a room bigger, or move a door? Select it (V, then click it) in the plan and drag its handles: a pill on each edge of a room grows or shrinks it a row at a time, a dot on a door slides it along its wall, a dot on a stair moves the run, the dots on a partition's ends change its length, a dot on a spot moves it. No numbers to type.
How do I walk through it? In 3D, press K or the footprints button. W A S D walk, Shift runs, click the view and move the mouse to look, Esc frees the mouse, K again leaves. Doors and archways let you through, walls and furniture stop you, stairs carry you up. On a phone there is no walk (it needs a keyboard).
Can I put a lamp on a table? Yes (since 2026-10-05): put it down over the table and it rests on top, and moves with the table from then on. Lights, electronics, plants and decor rest on tables, storage and kitchen units; seating, beds and rugs stay on the floor. Move it off the table and it is back on the floor.
Can I use my own furniture?
Yes (since 2026-10-05): Add your own (.glb) in the Furnish step takes a glTF binary (Y up, metres, under 15 MB and 60,000 triangles; up to 24 pieces and 40 MB in a shell). Name it, pick its category and how it hangs in the form under the grid, then place it like any piece. It bakes into the shell (or the props file) like the game's furniture; with Script spawns it the build writes it as stream/own_<name>.ydr so your script can spawn it by that name. The file stays with the shell's project on this device; on another device the piece shows "File missing" until you add the same file again.
Can I copy the ground floor upstairs? Yes: the plus beside the floor chips offers Copy floor N (the Rooms step has the same button). The rooms and partitions are copied as rooms of their own; openings, stairs and spots are not, so draw the stair and the upstairs doors after. Mirror east–west and Mirror north–south on the Rooms step flip the whole shell.
My window is black / shows nothing in the game. A shell sits under the map, so a window looks at the inside of the terrain. Give it a dressing: select the window and pick Blinds, Curtains, Frosted glass or Bright sky under Window (new windows on an outside wall get blinds by themselves). Clear glass is for a window between two rooms. The check "Clear window to the outside" says which window still looks out, and its wand hangs blinds.
Can the player walk out of the front door or climb through a window? Not since 2026-10-04: every opening onto the outside is solid in the collision, leaf or not, sill or not. Only openings between rooms are open. A door that should be walked through in the game is a prop a housing script spawns, not part of the shell.
How do I add skirting boards? Surfaces step, Skirting: pick a board (Square, Chamfered, Bullnose, Ogee, Tall Victorian, Shadow gap) and a paint or wood; it goes round the room in hand. Scope One puts a board on the one wall clicked. None takes it off. They mitre at the corners and stop at the doors.
Can one wall be a different colour? Yes: Surfaces, Walls, Scope One, then click the wall. The straight wall between its corners takes the swatch (an accent wall). Painting the room's walls again clears it.
The check says no door, no stair, no entrance: what is the wand? A one-click fix. It cuts a door between the unreached room and one the entrance reaches, places a stair where one fits, stands the entrance just inside the front door, moves an entrance onto the floor, adds a missing landing tile, or sets the spawn name from the shell's name. It is one edit: undo takes it back.
The player spawns in the wrong place or facing a wall.
The entrance spot is where the script puts the player, facing the way its arrow points. Move or turn it under Spots and build again; the doorOffset in the config follows it.
Why is there no door, only a hole? A door between two rooms is an open frame by itself (the Auto leaf), because a leaf is one of the game's doors baked closed and solid: nobody walks through it, in the walk or in the game. A door on an outside wall gets the apartment door by itself, which is right for a teleport entrance. Pick a leaf in the picker under the opening kinds (or in the Selection panel for a selected door) for a cupboard or a door nobody opens. A door that opens is a separate prop a housing script spawns; that comes with a later release.
How do I split a room in two? Rooms are painted, not cut: press New room and paint the tiles that become the second room (they move over from the first), and the wall between them appears by itself. A partition from the Wall tool does not split a room. The other way round, painting one room's tiles over another's merges them.
How do I change one wall? Click it with Select (V): the right panel shows its paint, skirting and panelling, each on Room's until you pick something for that wall alone. Or, on the Surfaces step, set Scope · One and click the wall with the swatch in hand.
Why can I not drag a room in 3D? The left button orbits the camera in 3D. Press Tab for the plan, where the left button draws. Clicking tools (openings, stairs, spots, paint) work in both views.
The stair will not go down. Why? Its whole run (four tiles on a 1 m grid at 3 m floors) has to be on the floor, and the floor above needs a tile past its top step to land on: five tiles in a line, four below and one above. Add the floor above and draw a room there first, or turn the stair with Q. The floor above opens over the whole run by itself.
The ceiling hangs over my stairs. Not since 2026-10-04: the stairwell is the whole run, and the stair lands on the tile past it. A shell drawn before that had the landing over the top step; move the stair one tile back or add the landing tile above.
The doors look huge. They are the game's size: its door leaves are 1.3 m wide and 2.3 m tall, and its people about 1.85 m. Turn the person for scale on in 3D (the figure, or G) to see a door beside someone.
My door will not fit. A door or a window needs two tiles of the same wall on a 1 m grid (a double door or a wide window three), with the same rooms on both sides all along. Move it along the wall, or draw the shell on the 0.5 m grid for finer walls.
Can I change the grid to 0.5 m? Only before the first tile. Every position is counted in tiles, so the grid locks once a room is drawn; start a new shell for the other grid.
How do I add furniture?
The Furnish step (or U): pick a piece from the catalogue and click the floor where it goes. Near a wall it backs onto the wall and faces the room; , and . turn it, the right panel's slider turns it finely. Everything is the game's own furniture, so the server needs no extra files for it.
Will the player bump into the furniture?
Yes: every standing piece bakes a solid box into the collision (rugs and pieces on the wall or ceiling do not). Players cannot sit on it or move it; for furniture they can move, choose Script spawns it and give the script configs/furniture.json.
Why is there an SQL file for ps-housing?
ps-housing keeps each property's furniture in its database, relative to the shell, and its shell config has no furniture at all. configs/ps-housing-furniture.sql puts the pieces (or the props file) on one property; after that the owner can move or sell them in game. With In the shell the furniture is part of the model and no SQL is needed.
When should the furniture be its own file?
When the shell is big: the game holds 32,767 vertices in one collision bound, and the build warns past 30,000. A props file gets a bound of its own. ps-housing spawns one object per shell, so with a props file use the SQL row (it spawns the file as one frozen piece at the origin); scripts that read shell.json or furniture.json can spawn both.
Where does the shell go when I leave? It is a project on this device: the address carries its id, and it is listed under Projects. Nothing is uploaded yet.
How is the entrance used by the script?
The entrance is where the housing script puts the player when they enter: the build writes it as the doorOffset relative to the shell, with its facing as the heading. The other spots go into the same config.