A Fabrique of One’s Own: Homebrew Stories for a Closed Box

Someone threw this Lunii « Ma Fabrique à Histoires » in the trash because its selection wheel was broken. I took it home.

One resoldered knob and one new regulator later, it works again. And it now plays a story that no shop sells: made at home, about our own village, read with my own voice.

The Lunii V2 story box held in hand, its small screen showing a helicopter, next to the big yellow selection wheel and the home, pause and OK buttons
The box, working. The name label is pixelated on purpose.

The repair

First the wheel: a broken solder joint on the knob, resoldered. Then, a few stories later, the box started to show NO SD CARD. Merci du cadeau.

The Lunii taken apart on a blue silicone repair mat, the back shell covered in character stickers
Just out of the bin, with all its stickers.
The Lunii V2 with its case open: green board with an ST ARM microcontroller in the middle, the microSD socket at its lower left, USB-C and headphone jack at the top, and the speaker on the right
Inside: microcontroller in the middle, microSD socket on its left, USB-C and jack at the top, speaker on the right.

The 3.3 V rail was at 2.5 V. The regulator, an AP7362-33, had its ground pin not soldered to the board.

A new AP7362-33 voltage regulator, eight pins, still in its tape
The new AP7362-33.

The fix: a new regulator, plus a small wire from its ground pin to the USB-C connector ground. Kapton tape first, because hot air also heats what is next to the part.

Left: the electronics bench with a hot air station, soldering station, fume extractor and a magnifier lamp. Right: the Lunii board seen through the magnifier
The bench, and the board under the magnifier.
The Lunii board inside its shell, almost entirely covered with amber Kapton tape
Kapton tape on everything that must not get hot.

3.3 V again. It boots.

Animated: the opened Lunii box running on the bench, its screen showing the character selection
Case still open, and working.

Then a cleaning: stickers removed with hot air and a scalpel, shells washed with 99.9 % isopropanol.

Left: removed stickers next to a hot air gun and tools. Right: the two shell halves drying next to a bottle of 99.9 percent isopropanol
Stickers off, shells washed.

The format

There is no official way to add your own stories. Thanks to the work of the community, here is what a V2 box wants:

  • Content encrypted with XXTEA (the V3 uses AES-128)
  • A key made from the box’s own .md file (512 bytes on a V2): a story pack plays on one box only
  • MP3, mono, 44.1 kHz, no ID3 tag at all, and 300 ms of silence at the start (if not, the first word is cut)
  • Images: 320 x 240, 16 levels of grey, BMP RLE4
  • The pack itself: small binary files called ni, li, ri, si, bt, nm, plus folders rf/ (images) and sf/ (sounds)
  • A .pi index file that sets the order of the stories on the wheel

One small mistake, and the story does not play.

Close-up of the Lunii board: the microSD socket next to the ST ARM microcontroller
The microSD card holds all the stories.

The pipeline

1. The story: I took photos of places in our village and gave them to an AI agent, with a brief file (STORY_CREATION_PROMPT.md) that explains the format. It wrote a tree of 3 places x 3 companions = 9 branches of 7 sentences each: real places and real habits, turned into children’s stories. 2. The narration is my voice, cloned by a model running locally. The clone reads better than I do. Vexant. Missing lines use a standard TTS voice (edge-tts, fr-FR-DeniseNeural). 3. The images come from Google Imagen 4, always with the same style prompt:

Minimalist white silhouette of {subject} on a solid black background,
flat 2D icon style, high contrast, no writing, no text, no words

Then converted to 320 x 240, 16 greys, RLE4. Same images are kept once (MD5), so the whole story uses only 9 images. 4. A script builds the pack and encrypts it with XXTEA. Another one finds the SD card (lsblk), copies the files, updates the .pi index, checks and unmounts. A third one puts everything back as before.

Animated, silent: the finished custom story playing on the Lunii, an opening screen, then a place to choose, then a companion
The finished story, without sound on purpose.

How AI was used

Almost everywhere, and that is the fun part:

  • the story text: an AI agent, from my photos and my brief
  • the images: Google Imagen 4
  • the voice: my own voice, cloned by a local model
  • the code (compiler, encryption, deployment): written with an AI coding agent (Claude Code), from the community documentation of the format

My part: the photos, the choices, the soldering iron, and checking every story before it reaches the box.

Note: I don’t have much time for the blog these days, so this post was written with the help of an AI, from my own notes, then read and corrected by me. Better to share the content this way than not at all.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *