Inspiration
Blind and low-vision visitors often rehearse a route before entering an unfamiliar building. The data they need usually exists — as a flat PDF floor plan nobody can ask questions of. Meanwhile, venue accessibility information goes stale because updating it means editing CAD files. Both problems have the same shape: the floor plan can't listen and can't speak. We built the version that does.
What it does
Spatialize turns a venue plan into a spatial twin you can talk to.
- Upload a plan; a vision model proposes rooms, doors, landmarks, and a route graph in metric coordinates. A deterministic topology validator — doors must sit on room boundaries, routes must pass through their doors, distances must match geometry — decides whether it ships. Failed attempts get their exact errors back and try again.
- Ask questions by voice or text: "How far is the studio from the entrance?" The agent computes over validated geometry only, and answers in a generated voice with the route drawn in 3D.
- Edit by speaking: "Mark the gallery door as not accessible." The change goes through the same validator, and if it strands a destination without a step-free route, the venue tells you so out loud before flagging the new scene version for human review.
- Everything — plans, transcripts, scene versions, narration — is stored in Backblaze B2 with SHA-256 genblaze manifests. Any vertex in the scene traces back to either a model run or a quoted human utterance.
A demo venue loads for every visitor, so judges can try the voice features with zero setup.
How we built it
FastAPI + LangGraph backend, React + Three.js front end, one Docker container on Render. The scene contract is written twice on purpose — Pydantic on the server, Zod in the browser — so no unvalidated geometry crosses the wire in either direction. Extraction uses genblaze's AgentLoop with our validator as the Evaluator; speech-to-text and all three narration tiers run as genblaze pipeline steps, two of them through provider adapters we wrote ourselves (Sarvam Bulbul, self-hosted Kokoro) because they weren't in the SDK's matrix. The demo video was produced by the project's own tooling: Playwright drove the live app, and Kokoro — our open-source narration tier — read the script.
Challenges we ran into
Free-tier engineering was the real boss fight. Gemini's 5-requests-per-minute ceiling starved a multi-step agent mid-conversation, so we added client-side pacing and cross-provider failover. Long voice requests blocked the server's event loop, so Render's health checks killed the instance mid-answer — moving the endpoint into the threadpool fixed a whole class of 502s. Running Kokoro-82M in-process blew the 512MB memory limit, which is why the deployed fallback is Sarvam's API and Kokoro is reserved for larger self-hosted deployments. Two smaller landmines: B2's S3 API rejects master keys outright, and our private bucket returned 401s on "public" sink URLs until we re-signed them server-side.
Accomplishments that we're proud of
- An extraction loop that cannot ship a geometrically broken scene, because the critic is a validator, not another model's opinion
- A voice edit that severs a step-free route gets announced out loud — the gate catching a real accessibility regression is the demo's best moment, and it's not scripted
- Three-tier narration failover, all inside genblaze pipelines, all manifested: commercial primary, API fallback, open-source floor
- 27 automated tests across both halves of the mirrored scene contract
- Per-visitor demo isolation, so no judge inherits another judge's edits
What we learned
A deterministic validator makes a better agent critic than an LLM judge: it never hallucinates approval, and its error messages double as perfect refinement prompts. We also learned that "works in a curl test" and "works in a browser" are separated by autoplay policies, presigned URLs, and event-loop starvation — the last mile of a voice product lives in that gap. And that the best demo insurance is making the empty state real: the server-side demo venue turned every blank-slate visitor into a working session.
What's next for Spatialize
Streaming transcription so words appear as you speak, multi-floor venues with elevator-aware routing, and publishing approved scenes as portable packages a screen-reader can consume offline. The review workflow is already built for teams; connecting it to real venue operators is the step that matters.
Built With
- assemblyai
- backblaze-b2
- docker
- fastapi
- gemini
- genblaze
- kokoro
- langgraph
- openrouter
- pydantic
- python
- react
- render
- sarvam
- three-js
- typescript
- vite
- zod
Log in or sign up for Devpost to join the conversation.