{"id":14967245,"url":"https://github.com/jinglemansweep/inky-frame-web","last_synced_at":"2026-02-14T19:03:05.177Z","repository":{"id":242553963,"uuid":"809877324","full_name":"jinglemansweep/inky-frame-web","owner":"jinglemansweep","description":"Remote Inky Frame Dashboard/Slideshow Manager","archived":false,"fork":false,"pushed_at":"2024-09-01T05:35:08.000Z","size":820,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-05T04:33:43.112Z","etag":null,"topics":["eink","frame","inky","micropython","mqtt","photo","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jinglemansweep.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-03T16:09:05.000Z","updated_at":"2024-06-09T18:23:54.000Z","dependencies_parsed_at":"2024-09-04T20:01:14.243Z","dependency_job_id":"f1d2bcc6-f86f-441f-a87f-d7d3c1919550","html_url":"https://github.com/jinglemansweep/inky-frame-web","commit_stats":null,"previous_names":["jinglemansweep/inky-frame-web"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jinglemansweep/inky-frame-web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jinglemansweep%2Finky-frame-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jinglemansweep%2Finky-frame-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jinglemansweep%2Finky-frame-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jinglemansweep%2Finky-frame-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jinglemansweep","download_url":"https://codeload.github.com/jinglemansweep/inky-frame-web/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jinglemansweep%2Finky-frame-web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29452593,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T15:52:44.973Z","status":"ssl_error","status_checked_at":"2026-02-14T15:52:11.208Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["eink","frame","inky","micropython","mqtt","photo","python"],"created_at":"2024-09-24T13:37:41.644Z","updated_at":"2026-02-14T19:03:05.162Z","avatar_url":"https://github.com/jinglemansweep.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Inky Frame Web\n\n![Inky Frame Web](./docs/logos/logo-medium.png)\n\n[![docker](https://github.com/jinglemansweep/inky-frame-web/actions/workflows/docker.yml/badge.svg)](https://github.com/jinglemansweep/inky-frame-web/actions/workflows/docker.yml) [![mypy](https://github.com/jinglemansweep/inky-frame-web/actions/workflows/mypy.yml/badge.svg)](https://github.com/jinglemansweep/inky-frame-web/actions/workflows/mypy.yml) [![flake8](https://github.com/jinglemansweep/inky-frame-web/actions/workflows/flake8.yml/badge.svg)](https://github.com/jinglemansweep/inky-frame-web/actions/workflows/flake8.yml) [![black](https://github.com/jinglemansweep/inky-frame-web/actions/workflows/black.yml/badge.svg)](https://github.com/jinglemansweep/inky-frame-web/actions/workflows/black.yml) [![codeql](https://github.com/jinglemansweep/inky-frame-web/actions/workflows/codeql.yml/badge.svg)](https://github.com/jinglemansweep/inky-frame-web/actions/workflows/codeql.yml) [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nWeb-based remote photo frame slideshow and gallery manager for use with e-ink displays such as the [Inky Frame](https://learn.pimoroni.com/article/getting-started-with-inky-frame). It might also be useful for the [Inky Impression](https://shop.pimoroni.com/products/inky-impression-5-7?variant=32298701324371) and other simple e-ink displays.\n\n## Features\n\n- :camera: Photo and image slideshow management\n- :cinema: Multiple display output support\n- :calendar: Customisable date and time overlays\n- :snake: Written with [Python](https://www.python.org/), [Flask](https://flask.palletsprojects.com/) and [MicroPython](https://micropython.org/)\n\n## Coming Soon\n\n- :radio_button: Hardware button support\n- :sunny: Weather summary and next hour forecast\n- :incoming_envelope: Announcements and notifications via [MQTT](https://en.wikipedia.org/wiki/MQTT)\n- :satellite: Remote control via MQTT and [Home Assistant](https://www.home-assistant.io/)\n\n## Configuration\n\nProject configuration is provided using [Dynaconf](https://www.dynaconf.com/), meaning that configuration can be provided using one or more TOML files, but can also be overridden at runtime using environment variables. For more information, see [`config.py`](./inkyframeweb/config.py).\n\nThe provided [`settings.toml`](./settings.toml) details all the available options, but they are all commented out. The preferred method of configuration is to override any settings by creating a `settings.local.toml` and/or a `secrets.toml` (for sensitive values), or by setting the equivalent `INKYFRAMEWEB_` environment variables.\n\n### Outputs\n\nTODO: Explain multiple outputs\n\n## Server (Python)\n\n### Docker\n\nPull and start the container image specifying a port and a volume for your photos/images:\n\n    docker run -d --name inkyframeweb \\\n      -v ${PWD}/images/samples:/data/images \\\n      -p 5665:5665 \\\n      ghcr.io/jinglemansweep/inky-frame-web:main\n\nMultiple display outputs can be specified using envionment variables. Remember outputs are zero-based:\n\n    docker run -it --name inkyframeweb \\\n      -v ${PWD}/images/samples:/data/images \\\n      -e INKYFRAMEWEB_GENERAL__DEMO_MODE=true \\\n      -e INKYFRAMEWEB_OUTPUTS__0__IMAGE_PATH=images/samples \\\n      -e INKYFRAMEWEB_OUTPUTS__0__SHOW_DATE=true \\\n      -e INKYFRAMEWEB_OUTPUTS__1__IMAGE_PATH=images/samples \\\n      -e INKYFRAMEWEB_OUTPUTS__1__SHOW_DATE=true \\\n      -e INKYFRAMEWEB_OUTPUTS__1__SHOW_TIME=true \\\n      -p 5665:5665 \\\n      ghcr.io/jinglemansweep/inky-frame-web:main\n\n### Native (Non-Docker)\n\nCreate a Python 3.x virtual environment, and install project dependencies:\n\n    python3 -m venv venv\n    . venv/bin/activate\n    pip install --upgrade pip poetry\n    poetry install\n\nCreate a `settings.local.toml` configuration file overriding any values required, or set the equivalent environment variables.\n\nTo run the project:\n\n    . venv/bin/activate\n    python3 -m inkyframeweb\n\n## Client (MicroPython)\n\nTODO\n\n## Acknowledgements\n\n- Sample photos generated and provided by [Dall-E 2](https://openai.com/index/dall-e-2/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjinglemansweep%2Finky-frame-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjinglemansweep%2Finky-frame-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjinglemansweep%2Finky-frame-web/lists"}