Hoppa till innehåll
HemProjektFotoFilmOmKontakt
← Alla projekt

AI · 2026

Hus byggda av annonser

Efter Stockholms slott och Farnsworth House undrade jag om det gick att bygga måttsatta 3D-modeller av bostäder och lokaler ur det en annons redan innehåller: planritningen, fotona och texten. Det gick, men det var mycket svårare än det ser ut. Så här byggde jag det, och allt som gick fel.

Omslagsbild för projektet Hus byggda av annonser

I september lät jag Claude bygga Stockholms slott i SketchUp, och därefter Farnsworth House i Blender. Samma AI, två helt olika resultat. Slottet byggdes på Wikipedia och såg ut som ett kontorskomplex. Farnsworth byggdes på en uppmätning hos Library of Congress och blev ett hus jag kunde gå in i. Skillnaden satt i datan: vilken källa som hade rätt, och om någon hade mätt.

Det där satt kvar. För det finns ett ställe där måttsatta ritningar publiceras varje dag, av människor som har ett intresse av att de ska stämma: bostadsannonser. Planritningen är ritad i skala. Fotona visar hur högt fönstren sitter. Objektstexten ger boarea och takhöjd. Allt som behövs för en 3D-modell ligger redan ute. Ingen har bara byggt den.

Så jag försökte. Regeln var att ingen skulle behöva göra något extra: ingen mätning på plats, ingen ny arbetsinsats för mäklaren eller fotografen. Modellen ska falla ut ur det som ändå publiceras.

En bostadsvåning som 3D-modell sedd snett uppifrån, med rumsnamn och ytor angivna som ungefärliga.
Den första modellen, byggd enbart ur annonsens planritning och text. Alla ytor står som cirkavärden.

Det här är resultatet, och jag kan säga det direkt: det är svårare än det ser ut. Några mäklare tittar på det just nu, och jag vet inte vad de tycker än. Du kan själv gå runt i den första modellen, mäta i den och dra i solen: vaning3d.vercel.app/klara-ostra-kyrkogata-8.

Så fungerar det, kort

En annons har en planritning, några tiotals foton och en text. Planritningen läses av: väggar, öppningar, rumsytor. Ur det byggs en volym i Blender för renderingar och film, och samma siffror byggs om i webbläsaren med three.js, så att den som tittar kan vrida, mäta och flytta solen. Båda utgår från exakt samma data. Webbsidan laddar ingen 3D-fil, geometrin ligger inbakad som ungefär 14 kB text. Den första versionen använde en exporterad 3D-fil och sidan vägde 2,7 MB. Nu väger den 45 kB.

Skalan är en av få saker som är enkla. Planritningarna levereras i 1:100 och 300 dpi, vilket ger 118,11 pixlar per meter. Boarean från annonsen används inte för att räkna ut skalan, utan som kontroll: rummen tillsammans ska vara mindre än bostaden, och skillnaden är innerväggarna. Blir de större är något fel.

Kontrollbild: väggarna i mörkgrått, fönster i orange, och det som finns i ritningen men inte i modellen i rött.
Kontrollbilden. Grått är fångat, orange är fönster, rött finns i ritningen men inte i modellen. Den ska tittas på varje gång.
Samma plan uppdelad i rum, varje rum i en egen färg.
Rumsindelningen. Breda valvade öppningar ger medvetet ett gemensamt rum.

Allt annat var svårare än jag trodde.

Utmaning ett: 24 procent av väggarna försvann

Första versionen rensade bort möbellinjer med ett filter som letade efter raka, rektangulära former. Det åt upp allt som var snett eller runt: trapphusets rundade vägg, diagonalerna kring den öppna spisen, tornrummet. Nästan en fjärdedel av väggarna var borta, och ingen såg det förrän någon tittade på resultatet. Nu mäts i stället hur tjock en linje är lokalt. En vägg är en vägg för att den är tjock, inte för att den är rak.

Nästa fel kom direkt efter. Väggarna byggdes som rektanglar, och varje diagonal blev en trappa av tunna skivor. Skivor under en viss storlek föll dessutom bort, så resultatet såg ut som en persienn. Det löstes med polygoner. En snedställd vägg är nu en snedställd vägg.

Våningens väggar extruderade i Blender, med rumsskyltar på golven.
Tidig rendering i Blender. Väggarna är polygoner, så rundade trapphus blir runda.

Utmaning två: brasklappen blev en stolpe

Längst ned på ritningen står det ”viss avvikelse kan förekomma”. Bokstäverna var tjocka nog att räknas som väggar. Jag tittade på en bild av modellen och frågade vad det var för pinne i ena hörnet. Det var bokstaven m, byggd som en tre meter hög stolpe bredvid huset. Nu räknas inget som ligger utanför husets fotavtryck. Priset: tre terrasspelare på en villa försvann också.

Utmaning tre: varje byrå ritar på sitt sätt

Jag trodde först att annonserna hade ett gemensamt format, eftersom många byråer använder samma systemleverantör. Det var fel, och jag fick bevisa det själv. Jag körde samma inläsning mot en annons hos vardera av fyra byråer som leverantören själv lyfter fram. Hos en fungerade allt. Hos de andra tre hittades ingen ritning, och i ett fall lästes adressen som priset. Sajterna är byggda på samma plattform men ser olika ut under huven. Varje ny byrå är ett nytt pussel.

Och själva ritningarna ser olika ut:

  • En byrå ritar mörkgrönt på gräddvitt papper. En annan ritar vitt på svart. En tredje ritar väggarna i så ljust grått att de ligger ovanför det jag läser.
  • En byrås logotyp gick igenom som planritning, eftersom även den är gråtonad. Regeln blev i stället att en ritning är bläck på papper, med få toner och en tydlig botten. Det var mätt över 37 ritningar och 174 foton.
  • En byrås galleri såg ut att innehålla två bilder. Det låg 79 i HTML-koden, bara utan filändelse.

Ingen av byråerna har gjort fel. De ritar för människor som tittar på dem, inte för en dator som läser dem.

Utmaning fyra: fönster och dörrar är nästan samma sak

På en planritning är ett fönster och en dörr nästan likadana glapp i väggen. Det som skiljer dem åt är ett tunt dubbelstreck, och vissa byråer ritar inte det heller. Hålen i ytterväggen blev den röda tråden genom veckan. Av 147 annonser hade 118 minst ett hål, och när jag klippte ut varje hål ur ritningen var nästan inget av dem ett saknat fönster. De satt på kanter jag själv hade hittat på.

Jag gjorde det enda som går att göra med en sådan sak: jag pekade ut facit för hand. Jag byggde en klicksida som visar ett ställe i ritningen och frågar vad som står där, och klickade mig igenom 774 ställen i 130 ritningar. Det tog en kväll. Sedan kunde jag mäta avläsningen mot något annat än min egen känsla. Siffrorna blev sämre än jag hoppats, och därför användbara: av alla ställen var 39 procent rätt, och bara 7 av 173 fönster hittades. Efter tre justeringar är det 56 procent rätt och 41 procent av fönstren.

Ett exempel på vad facit lärde mig: bryggningen, som letar efter öppningar, nådde 2,2 meter. Formtestet, som bedömer dem, tillät 3,6. Två gränser som var satta var för sig, och allt som låg emellan var osynligt. Glaspartierna var just så breda. En enda rättning, att de två ska härledas ur samma siffra, flyttade fönstren från 4 till 38 procent.

Jag kom också med en tanke som visade sig hålla: väggar är raka 99 gånger av 100. Ritningens böjda kanter är nästan alltid fel, inte sanna. Nu rätas de ut, och raka luckor blir öppningar av okänt slag.

Mätfel som såg friska ut

Det farligaste under veckan var inte de fel som syntes. Det var de som såg bra ut. Jag hittade sju mätfel som alla gav ett friskt resultat, och facit fångade alla sju. Tre av dem:

  • Modellen som jag tränade att känna igen vad som står i en ritning fick först 71 procent rätt. Det var för högt. Punkterna i facit kom ur den avläsning som då gällde, så kanten gick per definition rakt genom varje punkt. Med rättad avläsning blev det 65.
  • Totalsiffran ensam var värdelös. 516 av 774 punkter var ”ingen kant”, så den som svarar det på allt får mer än hälften rätt. Det är medelvärdet över klasserna som visar något.
  • En ritning som inte gick att läsa kom ut som noll fel. Noll fel läses som friskhet. Noll fönster i en bostad är inte ett bra resultat, det är en ritning som inte lästs. Nu dömer jag de ritningarna röda.

Regeln jag tog med mig: något som saknas får aldrig räknas som noll fel.

Ljuset, solen och filmen

Solen är beräknad, inte målad. Jag tog solpositionen ur NOAA:s beräkning för husets läge, och samma funktion körs i Blender och i webbläsaren, så att renderingen och den interaktiva modellen visar samma sol. Det svaga ledet är väderstrecket. Planritningarna har ingen norrpil, så det får läsas ur objektstexten och fotona, och bekräftas mot karta (OpenStreetMap hjälper till att föreslå det).

Solens väg över våningen, 24 sekunder. Samma beräkning körs i Blender och i webbläsaren.

Men ljuset gav tre egna problem:

  • Ett fast utfyllnadsljus i modellen gav först en platt grå skiva, eftersom alla lodräta väggar fick samma ton när solen stod på andra sidan. Jag lade till ett svagt ljus förankrat i modellen. Första försöket hade ett tecken fel i riktningen, och väggkrönen blev nästan svarta. Mer kontrast, sämre bild.
  • Glaset blev blankt, och filmens följeljus sitter strax bakom kameran. Resultatet var en vit prick mitt i varje fönster, på exakt samma ställe i varje bild. Så länge fönstren var grå syntes den inte. Mot himlen såg den ut som en sol på fel plats.
  • Filmen loopar, och solen vandrade först två timmar under den. Då skilde sig sista bilden från den första på 18 procent av bildytan, vilket syns som ett hack varje varv. Nu står solen still i filmen. Det är också det sanna valet, eftersom vandringen tar 88 sekunder och solen inte flyttar sig två timmar på 88 sekunder. Skillnaden är nu 0,02 procent.
Ett rum inifrån i Blender, med solfläck på golvet.
Inifrån i Blender. Solen är beräknad för våningens läge, inte målad.
Vandringen renderad i Blender, 54 sekunder. Vägen räknas ur ritningen: genom dörröppningarna, minst 30 cm från väggarna.
Filmen på objektsidan, 88 sekunder. Den börjar och slutar på samma vy, så den loopar utan hack.

Himlen är en kupol med solglöd i rätt väderstreck, så att ett fönster har en riktning. Under horisonten är det sidans egen pappersfärg, eftersom jag inte vet vad som finns där nere. En illustrerad utsikt vore en uppgift om bostaden som någon annan får svara för.

Webbsidans modell vid middagstid, med knappar för 3D, planvy, mät, sikt och ett reglage för solen.
Webbsidan: 3D, planvy, mätverktyg, siktverktyg och ett reglage för solen den 21 juni.

Det jag valde att inte göra

De flesta av de sakerna handlar om var modellen slutar. Det är en illustration, inte en uppmätning. Ritningen bär själv brasklappen att viss avvikelse kan förekomma, och publicerar en mäklare rumsytorna blir de en marknadsföringsuppgift som mäklaren svarar för. Därför står alla ytor som cirkavärden, och där skalan är okänd visas de inte alls.

  • Ingen utsikt, inga träd och ingen stadssiluett. Utsikten är det dyraste som finns i en Stockholmsvåning, och en påhittad horisont är ett löfte.
  • Inga förslag på ombyggnad. Ritningen visar inte var stammarna går eller vilka väggar som bär.
  • Möbler bara som stiliserade siluetter, för att ge en känsla för storlek, aldrig som inredning.
  • Kundens bilder och ritningar publiceras inte. Fotona tillhör fotografen. De används för att läsa höjder och står aldrig på någon sida.
  • Modellen får aldrig själv hitta på en planlösning. Finns två ritningar av samma våning är de mäklarens egna, och sidan visar dem som valbara alternativ.

Sedan blev det lokaler

Efter en vecka pausade jag bostäderna. En lokal som står ledig har ofta längre exponeringstid än en bostad som är såld på en vecka, och därmed mer att vinna på en modell. Samma avläsning fick nya problem. Bara 40 av 284 ritningar hos en uthyrare var ritade i deras egen mall, och av dem blev noll klara utan handpåläggning. Mallens skyltfönster är tunna glaslinjer i en lucka, utan den dubbellinje som avläsningen känner igen. Flera av lokalerna ligger på fyra halvplan, där planen måste passas mot varandra via en trappa ritad i båda. Och ett kontors fönster stack upp genom taket, tills jag lärde byggaren att inget fönster når högre än undertaket.

Lokalerna fick också omgivningen. Huset och grannhusen kommer ur Stockholms öppna 3D-data, och gatunamnen ur OpenStreetMap, med lokalen markerad i husets fotavtryck. Där läget inte är godkänt markeras hela våningen i stället. Vilken våning är säkert, var på den är det inte.

Därför byggde jag också en granskning: en sida där en människa svarar på modellens egna frågor om yta, varje lucka i fasaden, rummen, höjderna och läget, och sedan godkänner den. Godkännandet sparar ett avtryck av geometrin. Ändras något efteråt är godkännandet borta. Antalet frågor per modell är måttet på hur mycket handpåläggning som återstår, och det är det talet som ska ned.

Det jag har lärt mig

Det är åtta dagar och 163 commits, cirka 12 500 rader kod och över hundra tester. Av de 89 annonser som lästes hade 27 inga fel alls och 65 högst två. Det är bra, och det är inte klart. Flaskhalsen har flyttat sig flera gånger: från hur jag läser ritningarna, till vad jag vågar kalla färdigt, till hur mycket en människa behöver titta.

Lärdomen är samma som med slottet. Verktyget är inte det svåra. Det svåra är att veta vilken källa som har rätt, och att bygga in kontroller som säger ifrån när den inte har det. Wikipedia var för ungefärlig, Library of Congress var mer än jag kan förvänta mig. En planritning i en annons ligger mittemellan: mätt i skala av någon som kan sitt yrke, men ritad för att säljas, och med en brasklapp längst ned. Boarean är kontrollen. Facit är den andra. Och en människa som tittar på bilden är den tredje.

Härnäst ska jag se vad mäklarna säger.

Var allt kommer ifrån