Companion to the WorldLibs research report and the realistic dynamic worlds report

WorldLibs experience plan

You arrive at a real-looking Earth, built from NASA satellite imagery, with day and night drawn where the sun was in the year on the slider. Give it a nudge and it unrolls into a flat atlas where every library sits as a tiny floor plan of its own room. Pick one and the camera flies there, the plan rises into walls, and your device builds the room while you watch.

Entry screen
A photoreal globe (NASA Blue Marble by day, Black Marble city lights by night) with a time scrubber from 700 BCE to today. It unrolls into an Equal Earth atlas for picking, so the European cluster never hides behind the curve.
First representation
A floor-plan glyph per library, pinned with its lifespan. Outside its dates it fades to a ghost outline. Five shapes cover the whole list, and each shape is one reusable 3D kit, so the legend on the map is the build plan.
The big moment
The fly-in. The camera follows a great circle to the city while the room prefetches, the glyph tilts and extrudes, and a Worker on your device builds the shelves from a seed behind the door.

Try the atlas

A working mock of the atlas the globe unrolls into. Drag the year or press play, switch to Europe, and pick a library to see its card. MVP libraries are in green.

Libraries in this year

    A globe that unrolls into the atlas

    The earlier plan dropped the globe because the European cluster piles up on it and half the pins face away. We keep the fix and add the spectacle back: the globe is what you see first, and picking happens on the flat atlas it unrolls into. The sketch below is drawn from the same land data as the atlas, with the sun where it stood at noon over Panama.

    • Poster frame< 60 KBA still of the globe, sent with the HTML and marked fetchpriority=high, so the first paint is the real thing.
    • Day and night from NASA3 to 4 MBBlue Marble by day and Black Marble city lights at night, as 4k KTX2 textures. Ocean glint, a cloud layer and a thin rim of atmosphere.
    • A terminator on the slider0 KBThe day and night line follows the year and season you scrub to. Pins carry founded and destroyed dates and fade to a ghost outside them.
    • Fly-inroom prefetchPicking a pin flies the camera along a great circle to the city. The room starts downloading the moment the flight begins.
    • See it todayclick to loadThe real street in 3D, on request: OpenFreeMap streets with OpenStreetMap buildings raised as blocks, on Mapterhorn terrain. Free, no key, no bill. Buildings are plain shapes, not a photo mesh.

    Static sketch. The real globe uses NASA Blue Marble and Black Marble textures; the night side glows with city lights.

    OptionGood atBreaks onVerdict
    Realistic globe that unrolls into the atlasA real first impression, then place and time in one flat view for pickingNeeds a poster frame and a lazy 3D chunk to stay fastPick
    Flat atlas onlyInstant paint, every pin in view, works as a plain list on phonesLittle spectacle on landingFolded in as the picking layer
    Google 3D Tiles as the baseThe most realistic Earth on the webCosts $6 per 1,000 loads past 1,000 a month, Google's attribution rules, heavy on phonesNo, free MapLibre view instead
    Timeline onlyThe story of libraries rising and burningLoses place, so you never see that the lost libraries ring the eastern MediterraneanFolded in as the scrubber
    3D hub hall (a Borges-style hexagon with a door per library)Immersion from the first frameA heavy load before you have chosen anythingLater, as a Borges side-room

    Deep zoom uses OpenFreeMap or EOX tiles. Ancient sites take coordinates from Pleiades. Historical borders come from OpenHistoricalMap (CC0), not historical-basemaps, which is GPL.

    Five glyphs, five kits

    The glyph is the library's footprint reduced to its type. The same typology decides how each room gets built: a hall is one bay module repeated down an axis, so the Long Room, Admont and Strahov share most of their geometry and differ in ceilings, wood and paint.

    From map to page

    Five screens, one continuous camera. A poster frame paints first, then the globe's lazy 3D chunk. The fly-in and the extrude animation cover the download of the room.

    1. 01

      Globe, then atlas

      Scrub through time, let the globe unroll, zoom to Europe, tap a glyph.

      Poster under 60 KB first; NASA KTX2 globe, 3 to 4 MB; unrolls to Equal Earth for picking.

    2. cross-fade to room

      02

      Plan rises

      The glyph tilts into perspective and its walls extrude into the room shell.

      Shell and far-end impostor first; a Worker builds bays from the seeded kit behind the door.

    3. 03

      Walk the room

      First-person walk at real scale, with a hotspot on each signature object.

      Baked day and candle lightmaps, three-mesh-bvh capsule collision, joystick and gyro on mobile.

    4. 04

      Pull a book

      Readable spines carry a thin bright band. Tap one and it slides out into your hands.

      InstancedMesh spines from a KTX2 atlas; the hero book is one real mesh.

    5. 05

      Read it

      The book opens to a two-page spread and turns page by page to the end.

      StPageFlip on a CanvasTexture, text from Standard Ebooks or Gutenberg, scans through IIIF.

    Worlds built on arrival

    Rooms are not downloaded as finished models. Each one ships as a hall-kit file of a few KB plus a seed, and your device builds the shelves and books in a Worker while the walls rise. Light and fine detail are too slow to make on a phone, so the build server bakes them once and ships them as textures. Roblox splits work the same way: it streams what is near you, shows a baked stand-in (SLIM) for what is far, and can pause a player at the edge of the loaded area until the next part arrives.

    Your device, first visit · Web Worker, seeded PRNG

    Geometry from parameters

    • Hall shell: walls, vault, floor, windows
    • One InstancedMesh per bay, built bay by bay
    • Thousands of books from 2 to 4 base shapes, with colour, height and lean from the seed
    • Spine titles from one shared atlas

    Never downloaded and never cached. The same seed always rebuilds the same room.

    hall-kit JSON
    + seed
    a few KB

    door holds until
    the next bay exists
    Build server, once · cached forever

    Light and detail

    • Path-traced lightmaps in two variants, daylight and candlelight
    • Shared wood, plaster and gilding atlases
    • A far-end impostor shown while the bays build
    • Unique props: globes, busts, lecterns

    KTX2 and Meshopt glTF with hashed names, 25 MB or less per room. The browser keeps the last 8 rooms.

    Total Library, a Godot project, generates a whole library in real time from a 17 to 18 MB build, so the approach holds up in practice. Generation time on a mid-range Android is still unmeasured and is the first thing Phase A tests.

    Why each room matters

    A faithful room is only half of it. People remember a place for what it held, who worked there and what happened to it. The Digital Library Cave for Dunhuang put 21 zoomable documents and real historical figures inside a 3D hall and logged 14 million visits in a week. Each WorldLibs room gets the same layers, told from sources.

    LayerWhat you getExample
    Cases hold real itemsEvery display case holds a readable item or a catalogue card, with a source and licence lineGulliver's Travels on a Long Room shelf; the Book of Kells as a catalogue card under glass
    Short toursTwo or three five-minute tours per room, plus free roam"Who built the gallery", "What the vault changed"
    People as silhouettesFigures with a footnote each. No invented facesPhilodemus at Herculaneum, Xuanzang at Nalanda, the Mamma Haidara family in Timbuktu
    Phase sliderSwitch the room between building phasesLong Room: the original flat ceiling against the barrel vault of 1859–61
    The place todayWhat is happening to the real buildingThe Old Library closes in 2027 for restoration to about 2030: "visit while it is closed"
    SoundConvolution reverb from an OpenAIR heritage spaceNo library hall is in that set, so it is labelled "proxy acoustic, not this room"
    Sun-true windowsThe time slider sets the sun angle at the library's real latitudeScrub to a winter afternoon in 1750 and low light crosses the Long Room floor

    Following the London Charter and the Seville Principles, the evidence tag drives the renderer: invented elements draw dashed or ghosted, a "show evidence only" toggle hides them, and AI-assisted assets carry a badge with the model and date. No AI-made text, faces or inscriptions appear anywhere.

    Living pages

    Every Joule runs each idea as a loop: predict it, test it, prove it, earn a stamp. We borrow that loop as one shared component and put it on a few books whose central idea you can try with your hands. Each page takes about 2 to 4 days to build.

    BookRoomPredictRevealPhase
    Byrne's Euclid (1847)Long RoomWhich coloured shape comes next in the proof?The proof unfolds step by step, then a slider sandboxA
    Plan of St GallSt GallenWhere do the scriptorium and infirmary sit?The plan lifts into 3D. Cod. Sang. 1092 is CC BY-NC 4.0 on e-codicesB
    Darwin's divergence diagramA later roomWhich lineage splits first?The branching animates through timeB

    Gamification lifts engagement more than learning (Souropetsis et al. 2023), so stamps stay cosmetic. They live on a library card in localStorage under wl.stamps, with no streaks and no leaderboards. The card can be saved as a PNG to share.

    Play, without points

    The feel of a game, with no score. Each pattern below comes from a game that already proved it.

    FromWhat it provedWhat we take
    The Uncensored Library (Minecraft)One conceit, real texts and a minimal UI beat a long feature list. About 300 books and 25M+ visitors reportedWalk in, pull a real book, read it
    Gone HomeObjects carry the story better than markers doLeft-behind objects (marginalia, a ticket slip, a plan fragment) that show up when you walk close
    Return of the Obra DinnA ledger the player fills in by deductionSort claims about Alexandria or Nalanda into attested, inferred or legend
    Play the Past on ruinsDestruction is testimony, never a timer or a win stateA sensitivity pass on Alexandria, Timbuktu 2013 and Weimar 2004
    Assassin's Creed Discovery TourShort narrated tours with combat removedGuided mode with a sourced script per stop

    Three modes ship in Phase A: a guided tour, free roam, and a reader list with no 3D at all. Reduced motion swaps the fly-in and page turns for cross-fades.

    Where AI fits

    AI works at build time and only makes proposals. A person signs off, and everything ships as static files. Nothing generates a world while you wait.

    ToolOutputCostCatchUse
    World Labs MarbleGaussian splats plus collider meshes; renders in SparkAbout $1.20 per worldExport and commercial rights need the Pro plan; terms not yet readOne backdrop, tagged "invented"
    TRELLIS.2GLB with PBR materials from an imageHours on a rented 24 GB GPUMIT licenceProps from licensed photos
    Meshy, Tripo, RodinProps by APIUnder $50 for a few dozen (estimate)Output licences conflict across sourcesFallback after a terms check
    AnySplat, WildGaussiansSplats from a few casual photosResearch codeUnproven on sparse Commons interiorsWatch
    Genie 3Streamed interactive worldsUltra subscriptionUS only, prototype, no exportNone
    HunyuanWorld, Hunyuan3DWorlds and meshesSelf-hostedLicence excludes the EU, UK and South KoreaNone
    In-browser LLM guideA narrator that answers from the evidence rowsAbout 450 MB downloadWebGPU only, battery, can still make things upLater, opt-in

    The most useful AI job is reading sources. A quote-to-JSON step takes a cited quote and has an LLM propose hall-kit parameters. A schema check runs next, then a check that the quote really contains each number. A person signs off and a paradata record is written. Any element without a quote id is tagged "invented" on its own, and the JSON is committed with the code.

    Rooms at true scale

    Drawn to one scale. Every room here takes under about a minute to walk at 1.4 m/s, which keeps each one small enough to model and bake by hand, and sets the camera's walking speed. Dashed edges mark a dimension taken from background knowledge.

    Showing how sure we are

    The report grades every reconstruction as known, probable or speculative. The app shows that grade in the rendering itself, so nobody mistakes a guess about Alexandria for a survey of Ephesus. Every lost room gets a toggle between the fact layer and the guess.

    When it stood

    Lost libraries need a sense of time as much as a sense of place. Each one gets four layers: a lifespan with honest, blurry ends, a then-and-now view, the evidence shading above, and shelves that show what survived and what is known to be gone. Tap a row to see its dated events.

    StandingLost or buriedRediscovered, excavated or rebuiltDate uncertainDamage event

    Books: what you can open

    Every book on a shelf gets a record, but only some can be read. The shelf shows which is which before you reach for it: readable spines carry the bright band, catalog books stay closed, and lost works appear as outlines with their title.

    Data budget and caching

    We store pointers, not copies. Our files hold the checked facts and, for every book, its ID at the source. The pages themselves come from the holder's public API. There is no database: everything we host is static files on a CDN, under 1 GB at full size (facts under 2 MB, a globe of 3 to 4 MB, 30 rooms at up to 25 MB each, a few hundred pre-built texts). Copying the scans is what would make it grow, since the First Folio alone is 920 pages, about 440 MB even at screen size, so we never copy them.

    Each step loads only what that step needs, with file names that change when the content changes. The browser keeps files forever and asks again only for the small per-library manifests. A second visit to a room costs one tiny request.

    WhenWhat loadsBudgetCache rule
    Open the siteOne HTML file with the atlas, the land outline and all 30 library rows inlined, plus the globe poster frame. No API calls.≤ 150 KB compressed, poster < 60 KBService Worker, cache-first, hashed name
    Globe goes liveThe lazy three.js chunk, then the NASA day, night and cloud textures as KTX2.About 170 KB gzip, then 3 to 4 MBCache-first, immutable
    Hover or tap a glyphThat library's manifest: dates, events, sources and its book list with tiers and IDs.5 to 10 KBStale-while-revalidate, so it opens instantly and refreshes quietly
    Enter the roomThe hall-kit JSON and seed, the far-end impostor, then baked lightmaps, atlases and props. Geometry is built on the device and never downloaded.A few KB, then 25 MB or less per roomCache-first, immutable; last 8 rooms kept, geometry never cached
    Look at a catalog bookNothing new: its details are already in the manifest. One cover thumbnail.About 15 KBCache-first
    Open a readable textThe book's table of contents and its first chapter, then the next chapter in the background as you read.20 to 60 KB per chapterCache-first; whole book kept when saved offline
    Open a scanA slim page list from our CDN, then images straight from the holder's IIIF server at spread size (1024 px), the next two spreads prefetched, 256 px thumbnails for the page strip.A few KB, then 270 to 480 KB per page (measured)Runtime cache with a size cap, oldest pages evicted first
    Come back laterReading position, bookmarks and offline books live on the device.0 requestsIndexedDB, with persistent storage requested when you save a book

    Texts are built ahead

    Gutenberg is the one source a browser cannot read directly: its files send no CORS header, and it asks people not to fetch its site by script. So a build step pulls each text once from Standard Ebooks or a Gutenberg mirror, cuts it into chapter files of plain paragraphs and puts them on our CDN. Gilgamesh is 250 KB as plain text.

    Pages are laid out on the device

    The text arrives as paragraphs, not pages. The reader paginates for the current screen and font size, so a phone and a desktop share the same files and changing the font never refetches anything.

    Easy to read

    Every book also opens in a plain reader without the 3D room: adjustable type, light, sepia and dark, and page turns that switch to a fade when reduced motion is on. The 3D page turn is the treat, the plain reader is the workhorse.

    Scans stay at the source

    e-codices and the Bodleian both let any site load their IIIF images, so the browser asks them for exactly the size it draws. The only thing we pre-process is the manifest. The First Folio's is 1.2 MB, so a build step cuts it to a page list of a few KB. If a holder ever blocks browsers, we mirror the few pages a room shows, never the whole book.

    Public APIs feed the build, not the facts

    Wikidata, Wikimedia Commons and Open Library all answer browsers directly, and we use them. They fill IDs, cover images and author dates at build time, where the checks compare them with our sources before anything ships. They don't serve facts live: anyone can edit Wikidata, and Gutendex returned 503 while this page was being checked.

    The first second

    Snappy means something is always on screen and every wait is covered by motion. Budgets: 5 MB before the first room, LCP under 3 s, p95 frame time of 20 ms or less. WebGL is the default; WebGPU ships only after an A/B test wins.

    1. PosterA globe still in the HTML, fetchpriority=high. This is the LCP.< 60 KB
    2. Canvas fades inthree.js loads lazily behind the poster.~160–176 KB gzip
    3. Globe liveNASA textures stream in, sharpest last.3–4 MB
    4. Fly-inThe camera flies to the city while the room prefetches.room prefetch
    5. DoorwayShell and far-end impostor on screen.~200 ms target
    6. Walk inThe door holds until the next bay is built.room ≤ 25 MB

    Keeping it accurate

    LibraryFieldWasNow

    What else would make it trustworthy

    1. An ID for everything. A Wikidata ID for each library, book and author, plus the holder's shelfmark and catalogue link, so records can be checked against the source and kept in sync.
    2. Dates as ranges. Store the earliest and latest year with every date and print "c." or a span when they differ. No invented single years for ancient events.
    3. Say how a book relates to the room. Held here, survived from here and now elsewhere, known to be lost, or only associated. The Book of Kells is held in Dublin; a Gilgamesh tablet from Nineveh is held in London.
    4. Licence gate before the reader. The read button appears only when the record has a licence that allows it. Non-commercial scans are flagged so they can be dropped if the project ever earns money.
    5. Name the edition. The title page of every readable book shows the translator, year and source. Partial works say so, for example "volume 1 of 10", and never claim to be complete.
    6. A weekly link check. A scheduled job reruns every check command in the facts file. A dead manifest or text flips its row to failing and hides the read button until it is fixed.
    7. Ask the people who know. Request floor plans from the libraries for the MVP rooms, and have one specialist read each lost-library scene before it ships: an Assyriologist for Nineveh, a papyrologist for Herculaneum.
    8. Report an error. Every card and title page has a link that opens a report with the fact's ID already filled in.

    Build order

    Each phase proves one thing before the next one spends money on it.

    Phase A

    Prove the loop

    • Poster-first globe with NASA day and night layers, the terminator on the time slider, unrolling into the atlas
    • Long Room built on the device from the seeded hall kit, with day and candle lightmaps and a phase slider for the ceiling against the 1859–61 vault
    • Five Trinity-linked texts: Gulliver's Travels, The Vicar of Wakefield, Dracula, The Picture of Dorian Gray, The Playboy of the Western World
    • Kells, Durrow and Armagh as catalogue cards
    • Byrne's Euclid living page
    • Guided, free and reader modes
    • Budgets checked in CI

    Done when someone can scrub to 1733, fly to Dublin, walk the Long Room, pull Gulliver's Travels and read it to the last page.

    Phase B

    Prove the kits

    • Admont and Strahov reuse the hall bays
    • Celsus with the evidence toggle, as the lost-library template
    • St Gallen with the Plan of St Gall living page, and the Darwin page
    • Library of Congress builds the rotunda kit from HABS photos and data pages (no measured drawings exist)
    • Bodleian First Folio as the first scan reader (CC BY-NC 4.0, so non-commercial only)
    • Quote-to-JSON pipeline, guided tours, evidence ledger, proxy reverb
    • One Marble backdrop, if its size and terms pass

    Done when a new hall room ships in under a week.

    Phase C

    Scale by kit

    • Domed halls: Prunksaal, Labrouste
    • Atria: Peabody, Real Gabinete
    • More halls: Bates, Rose, Wiblingen
    • Lost sites: Dunhuang Cave 17, Nineveh, Villa of the Papyri
    • OpenHistoricalMap borders and the "see it today" 3D street
    • WebGPU A/B, splat hero zones, the opt-in local guide

    Done when the atlas has no greyed-out glyph without a date for its room.

    Borrowed from similar projects

    Seventeen similar projects were checked, along with Every Joule, Total Library and Roblox streaming. None combines real rooms, readable books and evidence tags, but each one settles a question we would otherwise test ourselves.

    ProjectWhat it settlesWhat we do
    Every JouleOne hard idea per page, which the reader predicts, tests and then provesLiving pages for Byrne's Euclid, the Plan of St Gall and Darwin
    Roblox streaming, SLIMA shipped engine pauses the player at the edge of what has loaded instead of showing holesThe door holds until the next bay exists, and the far end shows an impostor
    Total Library (Godot)A whole library can be generated in real time from a 17 to 18 MB buildSeeded hall kits built by a Worker
    The Uncensored LibraryCuration and one clear idea carry a projectEvery room has a reason to exist, stated in one line
    Assassin's Creed Discovery TourShort narrated tours workGuided mode
    Pergamon VR with AI (ISPRS 2025)Academic VR with AI guides, but no evidence shown per elementEvidence tags on every element
    Wonderful EphesusCelsus rebuilt from a laser scan; a scan is the strongest evidence a ruin hasCelsus from the excavation plan and licensed photos
    MyShelves, 3D BookshopThe take-a-book-and-read loop works in a browser, and Foliate JS reads Standard Ebooks EPUBsSame loop, with pre-built text parts
    Mirador, StPageFlipApache-2.0 and MIT, both maintainedMirador for the scan panel, StPageFlip for page turns
    IA BookReader, Turn.jsAGPL, and a licence that restricts commercial useCopy the BookReader UX only; skip Turn.js
    Trinity College DublinThe official page already links to virtual tours and 3D floor plansLink out and credit it, and claim no endorsement
    World Digital LibraryRetired in 2020–21; its address now redirects to a Library of Congress pageKeep every data file exportable
    Library of Babel sitesThe Borges name is crowdedA small Borges side-room, no Babel branding
    Wikidata WikiProject LibrariesLibrary coordinates, labels and images are already modelledLive labels and images by QID through SPARQL

    Ideas beyond the plan

    From the brainstorm in the dynamic worlds report. The tag shows how likely each one is to work.

    IdeaWhat it isOdds
    Sun-true roomsWindow light follows the real sun for the place, date and hour on the sliderhigh
    Far-end impostorA baked picture of the hall's far end shows before the bays existhigh
    The address is the shelfThe URL names the library, bay, shelf and book, so any page can be sharedhigh
    Evidence onlyOne switch hides every invented elementhigh
    Left-behind objectsMarginalia, a ticket slip or a plan fragment appears when you walk closehigh
    Borges side-roomA hexagon room that leads into the reading listhigh
    Library cardStamps from living pages, saved as a PNGhigh
    Evidence ledgerSort claims about Alexandria or Nalanda into attested, inferred or legendmedium-high
    Quote-to-JSONAn LLM turns a cited quote into hall-kit parameters for a person to sign offmedium-high
    Mistranslation pageTwo translations side by side where they disagreemedium
    Unrolling scrollA papyrus reader that unrolls sideways, for Herculaneummedium
    Splat hero zoneOne photoreal Gaussian splat corner per room, the rest built from the kitmedium
    Marble backdropAn AI world seen through a window or doorway, tagged inventedmedium
    See it todayA click-to-load 3D street of the real site from free OpenStreetMap datamedium
    Local guideAn opt-in narrator running in the browser that answers only from evidence rowslow-medium
    Streaming by rumourLoad a room before anyone asks for it, based on guessesnot viable

    Ready to build?

    Yes, for Phase A. The open items below each have a default, so none of them blocks the first commit.

    Planning checks

    18 / 19

    Each check is a command in data/planning-gaps.json that re-proves its status. The one failing check is listed next.

    Open, with a default

    • Long Room bays. No source gives bay count or gallery height. Use photo estimates scaled from 63.7 m and label them "estimated".

    Decided

    • The globe comes first and unrolls into the atlas
    • Rooms are built on the device; light is baked
    • WebGL by default, WebGPU after an A/B test
    • AI runs at build time only and is tagged
    • Cloudflare Pages, free plan. No server and no database: the data is JSON in git, and running cost is $0 on a pages.dev address
    • MIT licence and open source. Texts and scans keep their holders' licences and load from the holder, so none are committed
    • BnF books link out to Gallica. In a real browser its images will not load inside another site

    Needed from the owner to start

    5 / 5

    • GitHub repo. Done: public at github.com/coding-sunshine/worldlibs
    • Criteria sign-off. Done: the 18 Phase A checks froze on 8 Nov 2026
    • Cloudflare. Done: live at worldlibs.pages.dev, deploys on every push to main
    • Trinity email for Long Room drawings: drafted, waiting for the owner to send. Loc.gov and Trinity CAPTCHA pages still need a person

    Measure first in Phase A

    • three.js bundle size on the current release (r187 today)
    • Room build and KTX2 transcode time on a mid-range Android
    • Spark splats under WebGPU, and splat size per room
    • Marble terms and export size