ESPHome Cartridge Player
We calculate the final price from your selected file. You review and accept it before payment.
Saved on this device.
A little ESPHome device to stoke my physical media nostalgia!
- Rating
- 5 / 5
- Likes
- 388
- Downloads
- 1,310
- Makes
- 13
- Views
- 10,858
- Reviews
- 8
Updated at source:
Model information
- Source
- Printables
- Category
- Other Gadgets
- License
- Creative Commons — Attribution — Noncommercial
Bring back the magic of movie night — without the rewinding.
This NFC-powered media player uses 3D-printed cartridges and ESPHome to trigger movies, playlists, or automations in Home Assistant. Just insert a cartridge, and your smart home takes care of the rest.
UPDATES 18/07/2025
- Cartridge Player_Bottom_Buzzer added for use with the buzzer included in the parts kit from our website
- Cartridge_Top_RecessedLabel added for recessed labels (requires support) - Inspired by Bas van der Ploeg @bvdp
- Clearance for cartridges slightly increased for pocket and Player_Top components
🎉🎉 BUY A PARTS KIT HERE 🎉🎉
🔗 Links
✨ Features
- NFC cartridge-based ESP Home device
- Works with ESP32, RC522, and Home Assistant
- Automates anything — movies, music, lighting, games
- Easy to print and put together
🛠 Tutorial Video
🧰 What You’ll Need
- ESP32-S3 Zero
- RC522 NFC module
- NFC stickers (one per cartridge)
- Hardware
- Optional: buzzer for sound feedback
Full BOM, firmware, and config available here
🖨 Print Instructions
All parts should be oriented correctly when you import them into your slicer. Pictured player was printed in Bambulab Light Gray (10104) & Gray (10103)
Filament choice shouldn't matter. I've tested PETG, ABS and PLA without issue.
Cartridges:
- Print with outside faces on the print bed
- No supports required
- Insert NFC tag before snapping halves together
There are cutting and printing templates below for printing your own labels.
Player Housing:
- Use painted supports for the latch on the ‘Cartridge Player_Pocket’ component, and on the cartridge opening on the ‘Cartridge Player_Top’ component.
- Avoid auto supports (bridging is intentional)