

I created GIFNode: A CYD that automatically pulls and loops GIFs uploaded from a web portal
the idea is that anyone can upload a GIF and then i get surprises every now and then. the web server side process the uploads and optimize them for my CYD screen resolution and store them not accessible by the public. i have opted for python using flask for this.
The Web Server Side (Python & Flask)
- The public portal processes the uploads and automatically optimizes the GIFs to match the CYD screen resolution.
- Uploaded files are stored securely so they aren't accessible by the public.
- The back-end stats and internal files are protected with a simple token system.
- The Stack: Built using Python with Flask, Gunicorn, and Pillow for the image processing.
The Hardware Side (ESP32 / CYD)
- I started with what I already had on hand: a CYD board (ESP32-2432S028).
- It checks the web server every minute for new files.
- When a new GIF is found, it downloads it directly to the SD card (an onboard LED flashes to let me know a new file arrived).
- New downloads are immediately pushed to the front of the playlist so they play first.
- Troll Protection: I also built a simple async server directly on the ESP32 so I can easily delete GIFs if trolling ever get out of hand!
- Libraries Used:
bitbank2/AnimatedGIF,bblanchon/ArduinoJson, andESP32Async/ESPAsyncWebServer.
Next Steps
- I'm still working on cleaning up the code and testing everything out.
- Open Source Plans: I absolutely plan on releasing the code for both the Python server and the ESP32 firmware! Before I release the firmware, I want to put in a little more work to make it easily adaptable for different display modules and screens.
Feel free to try it out by dropping a GIF on the live portal! I'd love to hear your thoughts, optimization tips, or just seeing your GIFs.