Close Menu
    Facebook X (Twitter) Instagram
    Wifi PortalWifi Portal
    • Blogging
    • SEO & Digital Marketing
    • WiFi / Internet & Networking
    • Cybersecurity
    • Tech Tools & Mobile / Apps
    • Privacy & Online Earning
    Facebook X (Twitter) Instagram
    Wifi PortalWifi Portal
    Home»Tech Tools & Mobile / Apps»I built a $100 ePaper photo frame that never touches the cloud, and it looks like a real print
    Tech Tools & Mobile / Apps

    I built a $100 ePaper photo frame that never touches the cloud, and it looks like a real print

    adminBy adminApril 13, 2026No Comments7 Mins Read
    Facebook Twitter LinkedIn Telegram Pinterest Tumblr Reddit WhatsApp Email
    I built a $100 ePaper photo frame that never touches the cloud, and it looks like a real print
    Share
    Facebook Twitter LinkedIn Pinterest Email

    Digital photo frames have been around for years, and yet, somehow, the best options still require you to hand your photos to someone else’s server. We’ve got Google’s Nest Hub which pulls from Google Photos and Amazon’s Echo Show that pulls from Amazon Photos. Even dedicated frames from the likes of Aura and Nixplay route everything through their own cloud. They all look great on a shelf, sure, but your device is at the whim of those companies graciously continuing to support them as time goes on.

    I’ve been tinkering with ePaper displays and ESP32 boards for a while now, and after building everything from productivity dashboards to a basic Kindle, I figured it was time to try something a bit more practical. I wanted a photo frame that pulls from my own library, processes images locally, and never phones home. The result is a setup built on the Seeed Studio reTerminal E1002, Immich, Home Assistant, and ESPHome. The reTerminal E1002 costs $100 from Seeed Studio at the time of writing, and it’s perfect for this kind of project.

    It took some work to get right, though it was a lot easier than last time around thanks to the native support ESPHome added for this display. As well, the image quality isn’t going to rival a 4K display anytime soon. But it sits on my shelf, rotates through photos throughout the day, and every piece of the pipeline is something I own and control.

    reTerminal-E1002-Product-Image

    XDA logo

    9/10

    Connectivity

    2.4GHz 802.11 b/g/n Wi-Fi, Bluetooth 5.0

    Battery

    2000mAh

    The reTerminal E1001 and E1002 are the end-game of ESP32 ePaper displays, packing expandable IO, an SHT40 temperature and humidity sensor, a buzzer, microphone, and more, all in a metal-frame. The E1001 is a monochrome display, and the E1002 is a full-color display.


    A $100 screen that looks the part

    ePaper does what LCD never could

    reTerminal E1002 showing an image taken from Immich

    The reTerminal E1002 is one of Seeed Studio’s newest ePaper displays, and it’s the reason this project works as well as it does. It’s a 7.3-inch panel running E Ink’s Spectra 6 technology, which means it has six pigment colors: black, white, red, green, blue, and yellow. These colors get blended at the subpixel level to produce up to 4,096 displayable colors, so while it’s not exactly going to match your phone screen, it’ll still do the job for photos on a shelf.

    The real advantage of ePaper for a photo frame is that it doesn’t need power to hold an image. Once a photo is rendered, it just stays on the display without a backlight or any need to refresh, which in turn, means no active energy consumption. The screen looks like a printed photo from across the room, and it doesn’t blast light at you the way an LCD does. From a distance, it can look like a framed print rather than a typical LCD-based photo frame.

    The hardware itself is built around an ESP32-S3 with 8MB of PSRAM and 32MB of flash, which is more than enough for what I’m asking it to do. It has a built-in temperature and humidity sensor, three physical buttons, a microSD slot, and a metal frame with a mounting hole on the back. Most of the processing happens in my Home Assistant instance, so all it needs is a buffer large enough to hold the resized image.

    The trade-off with a setup like this is the refresh speed. A full screen update takes about 15 seconds because of how the Spectra 6 technology works. It uses voltage waveforms to push pigments forward and pull others back to create each color, so there’s no partial refresh either. But for a photo frame that updates a few times a day, I really don’t care. It refreshes, the new photo appears, and then it sits there looking good until the next one shows up.

    Immich is Google Photos, but without the cloud

    It works perfectly

    A laptop showing a timeline in Immich

    The photo library side of this runs on Immich, which is hands down the best self-hosted alternative to Google Photos I’ve used. It handles automatic backups from my phone, organizes everything into albums, and has a solid API that makes it easy to pull photos programmatically. I’ve been running it on my home server for a while now, and much of the experience feels the same as Google Photos, right down to the mobile app.

    The pipline I’ve built works like this: a Python script running through Pyscript on Home Assistant connects to Immich and grabs a random photo from a designated album. This runs on a fixed schedule using Home Assistant automations, taking in the following data:

    immich_url: http://192.168.x.x:xxxx
    api_key: xxxx
    album_id: xxxx

    It then takes the photo it receives and processes it for the ePaper display, resizing it to 800×480 and dithering it down to the Spectra 6 color palette. This step matters quite a lot, because standard image dithering doesn’t account for how ePaper pigments actually look on the panel.

    As I experienced when first using this panel, the colors on an ePaper screen are far less saturated than their digital hex values would suggest, so I use calibrated palette values that match the real-world output of the display. The processed image gets saved to Home Assistant’s local web directory, where the reTerminal can fetch it. The ESPHome YAML is incredibly simple for this part, as the paths are dynamically set using substitutions at the top of the file.

    online_image:
      - url: "${ha_url}${image_path}"
        id: frame_image
        format: png
        buffer_size: 65536
        type: RGB565
        resize: 800x480
        on_download_finished:
          then:
            - logger.log: "Image downloaded, updating display..."
            - component.update: epaper_display
            - delay: 45s  # Wait for the color e-paper refresh to finish
            - logger.log: "Display refresh complete, entering deep sleep..."
            - deep_sleep.enter: deep_sleep_1
        on_error:
          then:
            - logger.log: "Image download failed"
            - delay: 30s
            - deep_sleep.enter: deep_sleep_1

    I set this up as an automation that runs every few hours, matching the display’s deep sleep cycle. However, I also have a manual trigger through an input boolean in Home Assistant, so I can force a new photo whenever I want. Fetching an image and processing it takes mere seconds, and it’s served to the reTerminal E1002 immediately.

    ESPHome ties the whole thing together

    No cloud dependencies

    reTerminal E1002 showing a photo while on a windowsill

    On the display side, ESPHome handles everything. All of the YAML is pretty straightforward, especially given that there is now official support for the panel in ESPHome. When it wakes up from deep sleep, it connects to WiFi, fetches the latest processed image from Home Assistant’s web server, renders it to the display, reports its battery voltage and sensor readings back to Home Assistant, and goes back to sleep.

    The deep sleep approach means battery life is fantastic if you’re running it unplugged. With four updates a day, you’re looking at weeks of runtime on the built-in 2,000mAh battery. I keep mine unplugged most of the time, and it’s nice to know I could move it anywhere in my home without having to worry about a cable.

    The three physical buttons on the reTerminal give me manual control too. The green button wakes the device and forces an immediate refresh, which is useful when I’ve just pushed some new photos and want to see one right away. I also love that there’s no account, no app, nor a subscription to make all of this work. The entire stack is open source, it runs locally, and if Seeed Studio disappeared tomorrow, the hardware would still work.

    This was one of my longer projects, but that’s exactly the reason I enjoy it. A commercial photo frame can set you back several hundred dollars, locks you into a cloud service, and gives you no control over the device itself. Here, though, I can just tear it down and build something else if I want instead, and it’s a lot cheaper, too. If you want to try it out for yourself, I’ve published the Pyscript and ESPHome YAML on my GitHub.

    built Cloud epaper frame Photo print Real touches
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Telegram Email
    Previous ArticleGalaxy S26 Ultra Vs. OnePlus 15 should NOT be like this.
    Next Article NYT Strands hints and answers for Monday, April 13 (game #771)
    admin
    • Website

    Related Posts

    I tried this Gemini feature and haven’t opened Canva, PowerPoint, or Notion since

    April 15, 2026

    Spotify will now let you buy physical books without leaving the app

    April 15, 2026

    Posts in your Shorts? What to expect from YouTube’s experiment

    April 15, 2026
    Add A Comment
    Leave A Reply Cancel Reply

    Search Blog
    About
    About

    At WifiPortal.tech, we share simple, easy-to-follow guides on cybersecurity, online privacy, and digital opportunities. Our goal is to help everyday users browse safely, protect personal data, and explore smart ways to earn online. Whether you’re new to the digital world or looking to strengthen your online knowledge, our content is here to keep you informed and secure.

    Trending Blogs

    Google Is Replacing Dynamic Search Ads With AI Max

    April 15, 2026

    I tried this Gemini feature and haven’t opened Canva, PowerPoint, or Notion since

    April 15, 2026

    Signed software abused to deploy antivirus-killing scripts

    April 15, 2026

    EFF Calls on Kuwait to Release Journalist Ahmed Shihab-Eldin

    April 15, 2026
    Categories
    • Blogging (63)
    • Cybersecurity (1,330)
    • Privacy & Online Earning (168)
    • SEO & Digital Marketing (816)
    • Tech Tools & Mobile / Apps (1,592)
    • WiFi / Internet & Networking (224)

    Subscribe to Updates

    Stay updated with the latest tips on cybersecurity, online privacy, and digital opportunities straight to your inbox.

    WifiPortal.tech is a blogging platform focused on cybersecurity, online privacy, and digital opportunities. We share easy-to-follow guides, tips, and resources to help you stay safe online and explore new ways of working in the digital world.

    Our Picks

    Google Is Replacing Dynamic Search Ads With AI Max

    April 15, 2026

    I tried this Gemini feature and haven’t opened Canva, PowerPoint, or Notion since

    April 15, 2026

    Signed software abused to deploy antivirus-killing scripts

    April 15, 2026
    Most Popular
    • Google Is Replacing Dynamic Search Ads With AI Max
    • I tried this Gemini feature and haven’t opened Canva, PowerPoint, or Notion since
    • Signed software abused to deploy antivirus-killing scripts
    • EFF Calls on Kuwait to Release Journalist Ahmed Shihab-Eldin
    • How to Show Up in ChatGPT Results and Get Noticed by Customers
    • Spotify will now let you buy physical books without leaving the app
    • Sweden Blames Pro-Russian Group for Cyberattack Last Year on Its Energy Infrastructure
    • The automation drift and how to correct course
    © 2026 WifiPortal.tech. Designed by WifiPortal.tech.
    • Home
    • About Us
    • Contact Us
    • Privacy Policy
    • Terms and Conditions
    • Disclaimer

    Type above and press Enter to search. Press Esc to cancel.