{"id":47142092,"url":"https://github.com/jtenniswood/espframe","last_synced_at":"2026-05-02T08:11:51.931Z","repository":{"id":343298738,"uuid":"1177114517","full_name":"jtenniswood/espframe","owner":"jtenniswood","description":"Esphome based Immich digital photo frame","archived":false,"fork":false,"pushed_at":"2026-04-25T17:51:44.000Z","size":2212,"stargazers_count":135,"open_issues_count":4,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-25T18:19:38.958Z","etag":null,"topics":["esp32","esphome","immich"],"latest_commit_sha":null,"homepage":"https://jtenniswood.github.io/espframe/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jtenniswood.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-09T17:54:29.000Z","updated_at":"2026-04-25T17:34:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jtenniswood/espframe","commit_stats":null,"previous_names":["jtenniswood/immich-frame","jtenniswood/espframe"],"tags_count":64,"template":false,"template_full_name":null,"purl":"pkg:github/jtenniswood/espframe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtenniswood%2Fespframe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtenniswood%2Fespframe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtenniswood%2Fespframe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtenniswood%2Fespframe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jtenniswood","download_url":"https://codeload.github.com/jtenniswood/espframe/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jtenniswood%2Fespframe/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32527192,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T01:12:54.858Z","status":"online","status_checked_at":"2026-05-02T02:00:05.923Z","response_time":132,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["esp32","esphome","immich"],"created_at":"2026-03-12T22:09:39.422Z","updated_at":"2026-05-02T08:11:51.925Z","avatar_url":"https://github.com/jtenniswood.png","language":"C","funding_links":["https://www.buymeacoffee.com/jtenniswood"],"categories":[],"sub_categories":[],"readme":"# Espframe for Immich\n\nTurn a supported Guition ESP32-P4 touchscreen into a private digital photo frame for your [Immich](https://immich.app/) photo library.\n\nEspframe is for people who want their photos out in the room, not hidden on a phone, and do not want to run another server, cloud account, or subscription just to make that happen. Flash the frame from a browser, connect it to WiFi, point it at Immich, and it starts showing your photos.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/public/espframe.png\" alt=\"Espframe displaying photos on a Guition ESP32-P4 touchscreen\" width=\"700\" /\u003e\n\u003c/p\u003e\n\n## What Espframe Lets You Do\n\n- **Make a real photo frame from your Immich library**  \n  Show photos from the Immich server you already run, without needing a tablet, Raspberry Pi, Home Assistant, or a separate slideshow service.\n\n- **Keep your photos private**  \n  The frame talks directly to your Immich server over your own network. There is no Espframe cloud service and no extra account to trust with your pictures.\n\n- **Choose what appears on the frame**  \n  Show your whole library, favorites, specific albums, specific people, \"on this day\" memories, or photos from a chosen date range.\n\n- **Make portrait photos look better on a wide screen**  \n  Espframe can pair portrait photos from the same day side-by-side, so the display feels more like a composed frame and less like a single narrow image with empty space.\n\n- **Tune the screen for your room**  \n  Adjust brightness, warm up a panel that looks too blue, use a softer night tone after sunset, and schedule the display to turn off overnight.\n\n- **Control it from the frame or a browser**  \n  Use simple touch gestures to wake, sleep, or skip photos. Open the built-in web page on your phone or computer to change photo sources, timing, brightness, Immich settings, and display options.\n\n- **Use Home Assistant if you want to, but do not depend on it**  \n  Espframe works by itself. If you already use Home Assistant, it can also appear there as an ESPHome device for dashboard controls, automations, and updates.\n\n## Who This Is For\n\nEspframe is a good fit if:\n\n- You already use, or plan to use, Immich for your photo library.\n- You want a dedicated photo frame instead of leaving a tablet permanently awake.\n- You prefer local, self-hosted tools over cloud photo-frame services.\n- You are comfortable following a step-by-step browser installer and copying an Immich API key.\n\nIt is not a general-purpose tablet app. It is firmware for specific ESP32-P4 touchscreen hardware.\n\n## Hardware\n\nCurrently documented hardware:\n\n| Item | Link |\n|------|------|\n| 10\" Guition ESP32-P4 panel (`JC8012P4A1`) | [AliExpress](https://s.click.aliexpress.com/e/_c4LLo3rH) |\n| 10\" printable stand | [MakerWorld](https://makerworld.com/en/models/2490049-guition-p4-10inch-screen-stand#profileId-2736046) |\n\n## Getting Started\n\nThe easiest way to install Espframe is with the web installer. You do not need to install developer tools or build firmware yourself.\n\n**[Open the Web Installer](https://jtenniswood.github.io/espframe/install)**\n\nYou will need:\n\n- A supported Guition ESP32-P4 touchscreen\n- A USB-C data cable\n- Chrome or Edge on a desktop computer\n- Your Immich server address\n- An Immich API key\n\nThe full setup guide is here:\n\n**[jtenniswood.github.io/espframe](https://jtenniswood.github.io/espframe/)**\n\n## Everyday Controls\n\nOnce installed, the frame has two main control surfaces:\n\n- **On the touchscreen:** tap to wake, double-tap to skip to the next photo, and press-and-hold to sleep.\n- **In the web settings page:** change the photo source, slideshow speed, date filters, brightness, screen tone, rotation, WiFi, Immich connection, and firmware update options.\n\n## Development\n\nMost people do not need this section. It is here for contributors or anyone who wants to build the docs or firmware locally.\n\n```bash\n# Docs site (live reload)\nnpm ci\nnpm run docs:dev\n\n# Compile firmware locally\ndocker run --rm -v \"${PWD}:/config\" ghcr.io/esphome/esphome:2026.4.0 compile /config/builds/guition-esp32-p4-jc8012p4a1.factory.yaml\n```\n\n### In-Development Firmware Features\n\nIn-progress firmware experiences are built into normal firmware, but must stay off unless the hidden developer setting is enabled. Open the device web UI with `?developer=experimental`, for example `http://\u003cdevice-ip\u003e/?developer=experimental`, then use the **Developer** panel to turn them on for that device.\n\nFirmware code should check `id(developer_features_enabled).state` before running anything experimental. The switch defaults off and persists only when deliberately enabled.\n\n## Support This Project\n\nIf you find this project useful, consider buying me a coffee to support ongoing development.\n\n\u003ca href=\"https://www.buymeacoffee.com/jtenniswood\"\u003e\n  \u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" height=\"60\" style=\"border-radius:999px;\" /\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjtenniswood%2Fespframe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjtenniswood%2Fespframe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjtenniswood%2Fespframe/lists"}