A SMART BULB TURNED INTO A TINY OFFLINE LIBRARY

A researcher reprogrammed an ESP32 smart bulb to broadcast an open Wi-Fi network and serve digital books from a 2MB filesystem — no cloud, no Wi-Fi credentials left on the device.

by Rick Osgood

FULL CAD BOM FIRMWARE DOCS

Open-hardware

Built withESP32

difficulty
●●●●○
time
a weekend
license
license not specified
repo
repo ACTIVE23 stars
1
Jump to section

COMPAREE VERDICT

This is a software project that turns an off-the-shelf ESP32 smart bulb into a local Wi-Fi access point serving digital books. The creator spent significant time trying to add microSD storage, failed, and instead repartitioned the flash so about 2MB of the bulb's 4MB holds the web files and books — enough for a few epubs. The result is a working prototype that broadcasts an open network with a captive portal, hosts a small web library, has a password-protected admin page for the light colour, and supports OTA updates — all without cloud services or stored Wi-Fi credentials. The clever part is the constraint: fitting a web server, filesystem, and books into 4MB total. The catch is that it targets one specific bulb sold with Tasmota pre-installed, and a wrong partition layout can brick it. The project is inspired by a cyberpunk short story and framed around banned books, but the firmware itself is just a local server — what you put on it is your decision. With the bulb from the README and the pre-built binaries, installing is a series of web uploads; customising the books means running the Docker build.

GOOD TO KNOW

  • —Firmware source, build script and pre-built binaries are public on Codeberg; the repository has no licence file.
  • —The full build story is on the creator's blog; installation and usage steps are in the README.
  • —Hardware is a single item: the Athom colour bulb with Tasmota pre-installed (ESP32-C3, 4MB).
  • —No schematic or PCB files — this is a software project that reprograms existing hardware.
  • —The firmware includes a web server, captive portal, admin page and a LittleFS partition for book storage.

Parts to buy

3 items

From our check of the build. Exact quantities and part numbers are in the creator’s BOM.

  • Athom colour bulb with Tasmota pre-installed (ESP32-C3, 4MB)Find
  • Ordinary lamp fixture to run it during setupFind
  • Computer with Wi-FiFind

Can I build this?

Printnothing required
BuyAthom colour bulb with Tasmota pre-installed (ESP32-C3, 4MB), an ordinary lamp fixture to run it during setup, a computer with Wi-Fi
Toolsweb browser for flashing; git, Docker and Python 3 if you rebuild the images
Skillsintermediate — following the OTA flashing steps, editing a config file and running a Docker build; no soldering
Timea weekend, mostly building the filesystem image with your own books and testing
Cost$ — essentially the price of the bulb; the creator bought two in case one got bricked
SafetyThe bulb runs on mains voltage. Flash it while screwed into a normal lamp fixture and do not open it — the creator says an opened bulb could not be reassembled safely and could be a fire hazard.

This build involves mains voltage — for adults comfortable with electrical work only.

Build at your own risk. Projects involve tools, electronics and sometimes mains voltage — follow the creator’s safety notes.

More builds like this

All projects

Gallery

cdn.mos.cms.futurecdn.net
cdn.mos.cms.futurecdn.net

Start here

Navigation into the creator’s own docs — we don’t rewrite the guide, we route you to the source.

  1. 1.Read the README on Codeberg (The README covers compatibility, building and installation; the blog explains how it was made.)
  2. 2.Get the Athom colour bulb with Tasmota (This is the bulb the firmware was designed for; it ships with Tasmota pre-installed.)
  3. 3.Check the partition layout (Open the Tasmota Information page and confirm safeboot 832 KB, app0 2880 KB and fs 320 KB before flashing anything.)
  4. 4.Flash the firmware over Wi-Fi (Join the bulb to your Wi-Fi, upload library.bin via Tasmota Firmware Upgrade, then connect to the BannedBookLibrary network and upload the filesystem and safeboot images through ElegantOTA.)
  5. 5.Add your own books and set the admin password (Edit config.toml and password.txt, rebuild the filesystem image and upload it through the admin page.)

Resources

Documentation, files and community threads for this build — we link straight to the original sources and never rehost the creator’s files.

KNOWN ISSUES

  • The firmware targets one specific bulb (the Athom colour bulb with Tasmota 14.3.0 pre-installed). Other bulbs, or a different partition layout, may fail to install and brick the device.
  • A corrupted partition table can only be recovered over serial, which means opening the bulb — buy a spare, as the creator did.
  • Storage is tight: about 2MB is shared by the web pages and the books. The creator's sample epubs were around 350KB each, so expect a handful of books, not a collection.
  • The creator tried and failed to add microSD storage, so do not expect to expand capacity without major rework.
  • Restoring the bulb is only partial: the restore page brings back most of the factory layout, but the safeboot partition cannot yet be returned to the Tasmota version.
  • The captive portal was tested on a recent Android version; other devices may need to open http://192.168.4.1 manually.
  • The project is framed around banned books but the firmware is just a local web server — you are responsible for the legal and ethical implications of what you host.

Can I use any ESP32 smart bulb?

No. The firmware was designed for one specific bulb, the Athom colour bulb sold with Tasmota pre-installed (ESP32-C3, 4MB flash). The README asks you to check that your bulb runs Tasmota with a safeboot partition and the layout safeboot 832 KB / app0 2880 KB / fs 320 KB; with any other layout the install may fail and brick the bulb.

How do I load my own books?

Put the ebook files in library/data/html/books, list them in config.toml, run update_config.py, build the filesystem image with ./build.sh filesystem and upload library.littlefs.bin through the ElegantOTA page on the bulb.

Does this connect to the internet?

No. The bulb broadcasts an open access point called BannedBookLibrary with no internet connection and serves the files locally at http://192.168.4.1. No cloud services are needed.

What happens if I flash the wrong firmware?

The bulb can be bricked. A corrupted partition table can only be recovered over a serial connection, which means opening the bulb, so check the partition layout before you start.

Can I add microSD storage?

The creator tried and gave up: reaching the ESP32 pins meant digging the board out of its potting compound, which in his words effectively destroys the bulb. The 4MB flash is the practical limit.

Community builds

No community builds yet — be the first, we feature the best ones.

Discussion1

FROM THE COMPAREE TEAM

The creator gave up on adding microSD storage after significant effort and decided to live with the 4MB limit for the sake of sanity, convenience, and stealth. Would you have done the same, or kept pushing for expandable storage?

CompareeTEAM1d ago

The sources line up: ESP32-C3 bulb with Tasmota, 4MB flash with about 2MB for web files and books, open access point with captive portal, local web server, OTA updates, no cloud. Code and binaries are public on Codeberg, though the repo has no licence file. The main limitation is that only one bulb model is documented, so stick to the one named in the README.

Rick Osgood

Rick Osgood is a security researcher interested in infosec, open-source software, and making and breaking things. The project was inspired by Ben Brown's short story 'Library,' about anti-corporate tech resistance.

GitHub Web

Star the project on GitHub

DISCLAIMER

  • Comparee is not the author of the projects featured here. All rights to each project belong to its creator — every page links to the original source, and we never host creators’ files.
  • Information is provided without warranty and may become outdated as projects evolve. Prices are indicative bands only — always check the creator’s parts list for current costs.
  • Building and operating any project is at your own responsibility. Protective equipment, safe workshop practice and compliance with local regulations are the builder’s responsibility.