WALL LAYOUT PLANNER — AI SAVED-URL GUIDE Tool: https://www.lejnel.com/tools/wall-layout/ Format: ?plan= followed by percent-encoded JSON. No Base64 or account needed. Ask for missing measurements or intended positions; do not invent mounting data. Return a clickable link and summarize all inputs and explicit assumptions. ALL dimensions and positions are MILLIMETRES. Convert inches ×25.4 or feet ×304.8 before encoding, regardless of the user's display-unit preference. SCHEMA v: 1. width: wall width, 100–20000. height: floor-to-ceiling height, 100–10000. area: optional object {x,y,width,height}, in mm. x is the area's LEFT edge from wall left, y is its BOTTOM edge above floor. Width and height at least 10 mm; the whole area must fit inside the wall. Omit to use the full wall. Randomize in area searches for positions with whole items inside and no overlaps; failure keeps the old positions. It is a bounded search, not proof a layout is impossible. items: array of 0–12 objects, each with: id: unique i1, i2, etc., i followed by 1–5 digits, no leading zero. name: plain text, at most 45 characters. kind: use custom for new items. Legacy picture, mirror and shelf values remain accepted. All items are independent rectangles with user-entered sizes; the interface has no preset dimensions. width: outside object width, 10–20000. height: outside object height, 10–10000. x: VISUAL CENTRE from LEFT wall edge, 0–20000. y: VISUAL CENTRE ABOVE FLOOR, 0–10000. This axis points upward. These are centre coordinates, not top-left coordinates or fixing positions. Convert top-edge distance t to y=wall height-t-item height/2. Convert left-edge distance l to x=l+item width/2. To fit the item, its centre should be between half its size and wall size minus half its size. Out-of-bounds items and overlapping rectangles are flagged. Add item creates an independent object from the entered name and dimensions. Select an object to update it or delete it using Delete highlighted item or the Delete key. Drag-and-drop keeps the item within the wall; exact numerical input may produce warnings. Positions and saved URLs recalculate after a drop. Keyboard arrows move 1 mm; Shift+arrow moves 10 mm. Names are escaped before display. EXAMPLE JSON { "v": 1, "width": 3000, "height": 2400, "items": [ { "id": "i1", "name": "Picture 1", "kind": "picture", "width": 500, "height": 700, "x": 1000, "y": 1500 }, { "id": "i2", "name": "Mirror", "kind": "mirror", "width": 600, "height": 900, "x": 2000, "y": 1500 } ] } READY-TO-OPEN EXAMPLE https://www.lejnel.com/tools/wall-layout/?plan=%7B%22v%22%3A1%2C%22width%22%3A3000%2C%22height%22%3A2400%2C%22items%22%3A%5B%7B%22id%22%3A%22i1%22%2C%22name%22%3A%22Picture%201%22%2C%22kind%22%3A%22picture%22%2C%22width%22%3A500%2C%22height%22%3A700%2C%22x%22%3A1000%2C%22y%22%3A1500%7D%2C%7B%22id%22%3A%22i2%22%2C%22name%22%3A%22Mirror%22%2C%22kind%22%3A%22mirror%22%2C%22width%22%3A600%2C%22height%22%3A900%2C%22x%22%3A2000%2C%22y%22%3A1500%7D%5D%7D Serialize compact JSON, then percent-encode the query value ONCE. JavaScript: encodeURIComponent(JSON.stringify(state)). Python: urllib.parse.quote( json.dumps(state,separators=(',',':')),safe=''). Encode Unicode, &, #, + and %. Keep decoded JSON under 12000 characters. Bookmark/copy the complete link to reopen these inputs. After edits, save the new link to retain that version. Anyone with it can read names and measurements. Future updates may change calculations; print a fixed record if needed. This is a visual layout aid, not a drilling template or structural/fixing design. Actual mounting holes can differ from the item's centre. Ask about mounting instructions separately; never claim the centre is the fixing location. Brackets, hidden services, loads, doors and furniture are not modelled.