Building the Museum of Unlived Lives
Some lives we live. Most we only imagine. We started with a question that wouldn't leave us alone: what happens to the versions of us we never became? The job turned down. The city never moved to. The person who stayed when they could have gone. Everyone carries a few of these quietly. We wanted to build something that took them seriously, not as regret, but as exhibits worth visiting. So we built a museum for them. What it is The Museum of Unlived Lives takes a single counterfactual, a "what if," and turns it into a museum exhibit of the life you didn't live. You type one path you didn't take, and a curator opens a room for it: a title, a short narrative that reads your choice back to you, an artifact on display, and an abstract artwork made only for that life. Each room you open joins your personal gallery, a quiet hall you can walk back through and carry home as a card. It runs on MiniCPM4.1-8B, OpenBMB's compact open model, fully local through llama.cpp. No API, no keys, nothing calling out to the cloud. The whole museum generates on the same machine that serves it. What we set out to prove The brief for Thousand Token Wood was small wood, sharp grain: a small open model doing real creative work, not a giant model hiding in the background. We took that seriously. The constraint was not something to work around; it was the whole point. A museum this intimate does not need a giant model. It needs a careful one. That belief shaped every decision. The hardest parts were not about making the model bigger or louder. They were about making a small model feel deliberate. What we learned A small model writes best when it is given less to hold. Early on, the exhibits drifted into decorative language, pretty but hollow. The breakthrough was in the prompt: asking the model to interpret the person rather than describe a scene, to land on a plain truth instead of reaching for ornament. The voice got sharper the moment we stopped asking for more words and started asking for the right ones. Every room is carved from a handful of tokens, not a novel. Structure and soul are two different jobs. Our biggest engineering lesson came from the abstract artwork on each card. At first we let the model choose the shape, and it kept defaulting to the same one, so almost every exhibit looked alike. The fix was to split the work: the system now assigns one of eight shapes server-side, deterministically, so the same "what if" always gets the same form while different inputs spread across all eight. The model no longer picks the shape; it writes the title, mood, palette, and artifact to match the shape it is given. The model writes the soul, and the system holds the structure. Letting each do only its own job is what finally made the cards feel alive. Small models are messy with structured data, so you build for that. Getting reliable, well-formed output from an 8B model meant locking the schema down hard and adding a repair step, so a malformed response fixes itself once instead of breaking on the person. Most of what makes the museum feel stable rather than like a fragile demo is this unglamorous work underneath. Local is a feature, not a limitation. People assume there is a large model in a data center behind something like this. There isn't. Everything happens on device. Once we leaned into that fully, it stopped feeling like a restriction and started feeling like the most honest thing about the project. What it became Somewhere in the building, it stopped being a tech demo. We would type a real "what if," watch the room open, and feel something. The day it moved us, we knew the small model had done its job. We don't get to live every life. But maybe we can visit them. Built with a small model, and big feelings. Built by @Rime04 and @divmodelhq for the Hugging Face × Gradio Build Small Hackathon, Track 2: Thousand Token Wood.