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.

museum.d9.army
VR Spellbook: step inside a painting
7 days
first gallery pages to last site change
32
Tilt Brush paintings in the folklore gallery
6.9 s → 0.9 s
museum load time after the speed pass, measured live

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.

$3.1k lowlikely $8k$18k high
Piece2024 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

  1. 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
  2. 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
  3. 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
  4. 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

Three.jsWebXRTilt BrushTanStack StartCloudflare WorkersLovableClaude Code

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

Ilian Raykov

You might also like