Upload custom images, GIFs, animations, scrolling text, patterns, and QR codes — straight from your browser. No app store. No USB cable. No account.
Just bought a round LED badge?
The round LED smart badges sold on Amazon, AliExpress, Temu, and TikTok Shop as:
E87 · L8 · X9 · LED Smart Badge · Anime Smart Badge · Anime LED Pin · Aura Badge · DIY Light Up Pin · Wearable Display Pin · Round LED Name Tag · Smart LED Bluetooth Pin · Akinokai Display Pin · 384x384 Round Pin · Programmable LED Badge · Custom Image Pin · Anime LED Lapel Pin · HiBadge · Bluetooth LED Pin · Round OLED Badge
...all use the same Jieli BLE chip and speak the same protocol. If you have one of these, AuraCast works with it.
The stock Zrun app (also shipped as "LED Badge", "HiBadge", "Badgy") is buggy, ad-filled, and barely works on iOS. AuraCast is the open-source replacement.
E87 or L8...) from the Bluetooth pickerThat's it. The image appears on your badge in seconds.
iPhone / Safari / Firefox? Web Bluetooth isn't available in those browsers. Run the included Python relay on any Mac/PC/Linux and every device on the same Wi-Fi can use AuraCast. See Browser Support.
| Feature | Details | |
|---|---|---|
| ✨ | 29 animated patterns | Matrix Rain, Aurora Ribbons, Fireworks, Clock Face, Flow Field, Reaction Diffusion, Voronoi Crystals, Kaleidoscope, Danmaku, and more. All procedurally generated as seamless loops. |
| 🖼️ | Image upload | Drag-and-drop JPEG, PNG, WebP, or HEIC. Auto-cropped and fitted to the badge's circular 368x368 OLED display. |
| 🎞️ | GIF import | Drop an animated GIF — frames are decoded, circular-cropped, and packed as a looping MJPEG animation on the badge. |
| 🔤 | Text effects | Scrolling marquee, static text, rainbow, glitch, and danmaku modes. Custom colors, fonts, sizes. |
| 🎬 | Video clips | Trim MP4/MOV clips to fit the badge's 900 KB storage. Frame-by-frame preview before sending. |
| 📱 | QR codes | High-contrast circular QR codes that scan right off the badge. |
| 🖼️ | Image sequences | Multi-frame slideshows that loop on-device. |
| 🔋 | Battery + charging | Live battery percentage with charging state indicator. |
| 🔆 | Brightness control | Adjust badge screen brightness via slider. |
| 🩺 | Diagnostics | One-click connection probe for troubleshooting. |
| 🌗 | Material 3 design | Dark/light theme with M3 Expressive design tokens. |
| 📲 | PWA install | Install as a home-screen app on any device. |
| 🔒 | Fully private | Zero analytics. Zero cookies. Zero tracking. Zero network requests beyond your own badge. |
![]() |
![]() |
| Pattern mode — 29 animated loops | Text mode — scrolling, glitch, rainbow |
![]() |
![]() |
| Image upload with circular crop | Video clip trimmer |
If your badge is:
E87, L8, X9, or LED Badge)...it almost certainly works. All these listings use the same Jieli BR23 chipset.
Not supported: Square scrolling-text badges (64x16, 32x8 pixel) use a different protocol entirely. See badgemagic for those.
| Browser | Platform | Method |
|---|---|---|
| Chrome / Edge / Brave / Arc / Opera | Windows, macOS, Linux, Android, ChromeOS | Direct Web Bluetooth |
| Safari | macOS, iOS, iPadOS | Via Python relay (Wi-Fi) |
| Firefox | All | Via Python relay (Wi-Fi) |
| Chrome on iOS | iOS | Via Python relay (iOS Chrome = WebKit) |
cd web && pip install -r requirements.txt && python server.py
Then open http://<your-ip>:8000 on any device. The relay handles Bluetooth on behalf of the browser.
# Clone
git clone https://github.com/Manaiakalani/auracast.git
cd auracast/web
# Install
npm install
# Dev server (HTTPS required for Web Bluetooth)
npm run dev
# Production build
npm run build
auracast/
├── README.md ← You are here
├── PROTOCOL.md ← Full BLE protocol reverse-engineering
├── DESIGN.md ← Brand + design system spec
├── LICENSE ← MIT License
├── web/ ← Svelte 5 web app
│ ├── src/
│ │ ├── App.svelte Main app shell
│ │ ├── lib/ Components, protocol, modes
│ │ ├── patterns/ 29 procedural pattern generators
│ │ └── ...
│ └── README.md Web-specific build details
├── protocol-understanding/ ← Raw BLE captures + analysis
└── docs/screenshots/ ← App screenshots
| Zrun pain point | AuraCast |
|---|---|
| iOS Bluetooth permissions fail silently | Standard Web Bluetooth or Wi-Fi relay |
| Crashes on uploads over ~200 KB | Streaming uploader with retries, tested to 900 KB |
| Fills flash storage, refuses new uploads | Single-slot overwrite — always room for next upload |
| Locked to whichever app the seller bundled | One app for every rebrand of the same chipset |
| Ads, account signup, telemetry | Zero ads, zero tracking, zero accounts, fully local |
| Closed source | MIT-licensed, fully auditable, PRs welcome |
The complete BLE protocol reverse-engineering — every byte of the FE/DC/BA framing, Jieli RCSP authentication handshake, file metadata, windowed data transfer, CRC, and capture format — lives in PROTOCOL.md.
Protocol cracked open by![]() @jumpingmushroom Python e87_badge library, protocol analysis, GIF support, Home Assistant integration |
Web Bluetooth bones by![]() @hybridherbst Original web uploader, BLE reverse-engineering, Jieli RCSP auth, MJPEG streaming |
Built on their shoulders. Painted in Material 3. Shipped over MJPEG.
MIT — use it however you want.
AuraCast — the open badge uploader
Keywords: E87 smart badge · L8 LED badge · X9 LED pin · round LED badge · anime badge app · LED smart pin · Zrun alternative · Zrun replacement · HiBadge alternative · Web Bluetooth badge · BLE LED badge · programmable LED pin · round OLED badge · anime LED lapel pin · Akinokai badge · Jieli badge · custom badge uploader · AuraCast