Build Story · Web gallery · Tilt Brush · WebXR
VR Spellbook: step inside a painting
A web gallery and small 3D museum for paintings made in Tilt Brush, shown with the original brushes.

In one look
The problem
A painting made in VR is hard to show. A screenshot loses the room around it, and a single Tilt Brush file can run past 150 MB.
What we built
Open a painting in the browser and it draws with the original Tilt Brush brushes. Beside the gallery sits a small 3D museum: a rotunda and six themed rooms that hold 18 of the paintings. A VR button is there for headsets.
Where it is now
Live and free: 32 folklore paintings, a Top 10 tab with paintings by other artists, and a museum anyone can walk into without a ticket. It is a public preview. VR mode has not yet been tried on a Quest headset.
What this would have cost in 2024
About $8k and 3–5 weeks
2024 team: 2 people: a WebGL developer and a front-end developer who also tunes performance. Built here by one founder working with AI in 7 days.
| Piece | 2024 hours |
|---|---|
| Gallery site: 32 paintings, Top 10 tab, full-screen viewer page, EN/BG titles, thumbnails, SEO | ~19 |
| Tilt Brush web viewer: original brush shaders, big-file splitting, edge hosting | ~68 |
| 3D museum: rotunda, six rooms, 18 paintings, figures, walking, VR button, sound | ~85 |
| Speed pass: draw-call merging, shader precompile, worker decoding, painting slimming, measurements | ~42 |
| Total (PERT) | ~214 |
Method: PERT (O+4M+P)/6 per piece; low = O × $25, likely = PERT × $37.5, high = P × $50 (Accelerance 2024 Eastern-Europe band). These are estimates of what a team would have needed in 2024, not invoices.
How it was built
From first commit to current build in 7 days
- The painting gallery
Gallery pages built beside an earlier Spellbook app: a Top 10 set first, then the folklore paintings added in three rounds on the same day.
10 + 9 + 13 = 32 paintings - Live on the web
The gallery and a full-screen viewer went up as a Lovable site. Paintings keep their original brushes. Files over 24 MB are cut into parts and joined in the browser.
32 paintings · 792 MB · 9 split into 53 files - The museum
A 3D museum in the browser: a rotunda, six themed rooms, 18 paintings on the walls, free entry and a VR button. It was added in one evening.
8 site edits in under 3 hours - Made fast, same look
Museum shapes merged and shaders compiled before the first frame. The five heaviest paintings were slimmed and compared with the originals. A day later, the painting viewer stopped freezing while it compiled brushes.
160 → 36 draw calls · 6.9 s → 0.9 s load · 495 → 194 MB
Who did what
The founder decided
- Anyone can walk into the museum: free entry, no ticket.
- Speed work must leave the paintings looking the same: each slimmed painting was rendered through the viewer and compared with its original.
AI built and checked
- The site shell is a Lovable project, edited from the founder's briefs.
- Claude Code built the viewer module, its packing and slimming scripts, and measured every speed claim on this page.
Stack
Want something like this for your team?
From one call to something live. The same method is in the Claude Operator Pack.
From the founder
You might also like

Shares Three.js · TanStack Start
Shares TanStack Start · Cloudflare Workers

Shares TanStack Start · Lovable