{"id":22993485,"url":"https://github.com/caleb9/syno-photo-frame","last_synced_at":"2026-04-25T13:21:28.404Z","repository":{"id":168621871,"uuid":"644004098","full_name":"Caleb9/syno-photo-frame","owner":"Caleb9","description":"Build a digital photo frame for Synology Photos or Immich with Raspberry Pi","archived":false,"fork":false,"pushed_at":"2025-03-24T10:39:41.000Z","size":11822,"stargazers_count":60,"open_issues_count":2,"forks_count":4,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-29T06:04:36.870Z","etag":null,"topics":["digital-photo-frame","diy-solutions","immich","raspberry-pi","rust","slideshow","synology","synology-nas","synology-photos"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Caleb9.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"caleb9"}},"created_at":"2023-05-22T15:49:23.000Z","updated_at":"2025-03-24T10:39:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"6a177df2-2e29-4bff-befa-d387898fe808","html_url":"https://github.com/Caleb9/syno-photo-frame","commit_stats":null,"previous_names":["caleb9/syno-photo-frame"],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Caleb9%2Fsyno-photo-frame","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Caleb9%2Fsyno-photo-frame/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Caleb9%2Fsyno-photo-frame/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Caleb9%2Fsyno-photo-frame/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Caleb9","download_url":"https://codeload.github.com/Caleb9/syno-photo-frame/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247299831,"owners_count":20916190,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["digital-photo-frame","diy-solutions","immich","raspberry-pi","rust","slideshow","synology","synology-nas","synology-photos"],"created_at":"2024-12-15T05:13:03.612Z","updated_at":"2026-04-25T13:21:28.388Z","avatar_url":"https://github.com/Caleb9.png","language":"Rust","funding_links":["https://github.com/sponsors/caleb9"],"categories":[],"sub_categories":[],"readme":"# Syno Photo Frame\n\n[![Crates.io\nVersion](https://img.shields.io/crates/v/syno-photo-frame)](https://crates.io/crates/syno-photo-frame)\n\n[Synology\nPhotos](https://www.synology.com/en-global/dsm/feature/photos) and\n[Immich](https://immich.app/) full-screen slideshow for Raspberry Pi.\n\n\u003cimg src=\"doc/syno-photo-frame.png\" width=600 /\u003e\n\nFeatures include speed control, transition effects, blurry background\nfill, and date and location display.\n\n\u003cimg src=\"doc/Slideshow.png\" width=600 alt=\"Extra space gets blurry background\" /\u003e\n\n__If you like the project, give it a star ⭐, or consider becoming a__\n[![](https://img.shields.io/static/v1?label=Sponsor\u0026message=%E2%9D%A4\u0026logo=GitHub\u0026color=%23fe8e86)](https://github.com/sponsors/caleb9)\n:)\n\n- [Syno Photo Frame](#syno-photo-frame)\n  - [Why?](#why)\n  - [Setup](#setup)\n    - [Synology Photos (NAS)](#synology-photos-nas)\n        - [Limitations](#limitations)\n    - [Alternative: Immich](#alternative-immich)\n        - [Limitations](#limitations-1)\n    - [Raspberry Pi](#raspberry-pi)\n      - [Option 1: Install From Debian Package](#option-1-install-from-debian-package)\n      - [Option 2: Build From Source](#option-2-build-from-source)\n        - [Alternative: Build With Docker](#alternative-build-with-docker)\n  - [Run](#run)\n  - [Optional Stuff](#optional-stuff)\n    - [Increase the Swap Size on Raspberry Pi Zero](#increase-the-swap-size-on-raspberry-pi-zero)\n    - [Auto-start](#auto-start)\n    - [Startup-Shutdown Schedule](#startup-shutdown-schedule)\n    - [Auto Brightness](#auto-brightness)\n    - [Start from a Random Photo and in Random Order](#start-from-a-random-photo-and-in-random-order)\n    - [Change the Transition Effect](#change-the-transition-effect)\n    - [Display Shooting Date and Location](#display-shooting-date-and-location)\n    - [Customize the Splash-Screen](#customize-the-splash-screen)\n  - [Disclaimer](#disclaimer)\n\n## Why?\n\nI developed this app for a DIY digital photo frame project using a\n[Raspberry Pi](https://www.raspberrypi.com/) connected to a monitor\n(it runs great on Pi Zero 2). The goal was to fetch photos directly\nfrom my Synology NAS over LAN.\n\nWhy not use Synology Photos in a web browser directly? There are two\nreasons. First, the current version of Synology Photos web app (1.8.x\nat the time of writing) does not allow slideshow speed adjustments and\nchanges photos every 3 or 4 seconds - way too fast for a photo\nframe. Second, running a full web browser is more resource-demanding\nthan a simple static image app, which matters when using a Raspberry\nPi, especially in the Zero variant.\n\n## Setup\n\n### Synology Photos (NAS)\n\nAssuming the Synology Photos package is installed on DSM:\n\n0. Create an __album__ in Synology Photos and add photos to it (note\n   the distinction between an \"album\" and a \"folder\").\n1. Click the \"Share\" button in the album.\n2. Check the \"Enable share link\" option.\n3. Copy/write down the Share Link - you'll need it when setting up the\n   app on Raspberry Pi later on.\n4. Set Privacy Settings to one of the \"Public\" options.\n5. Optionally, enable Link Protection. If a password is set, you will\n   need to provide it using the `--password` option when running the\n   app on Raspberry Pi. In the case of accessing Synology Photos over\n   the internet or an untrusted LAN, I recommend making sure your\n   share link uses the HTTPS (not HTTP) scheme to prevent exposing the\n   password.\n6. Click Save.\n\n\u003cimg src=\"doc/ShareLink.png\" alt=\"Album Sharing\" /\u003e\n\n##### Limitations\n\n* Accessing Synology Photos via a **Quick Connect** link is not\n  currently supported.\n* Upper limit on number of photos in an album is set to 5000.\n* [Video playback is not\n  supported](https://github.com/Caleb9/syno-photo-frame/issues/15)\n\n### Alternative: Immich\n\nAlternatively, instead of using Synology Photos, photos can also be\nhosted on Immich server. Create an __album__ in Immich, add photos to\nit, and create a share link (click the \"Share\" button in the\nalbum). Optionally set a password (the same recommendation as with\nSynology Photos about using HTTPS scheme when accessing the server\nover the internet applies). Copy/write down the link - you'll need it\nwhen setting up the app on Raspberry Pi later on.\n\n##### Limitations\n\n* Video playback is not supported\n\n### Raspberry Pi\n\nLet's assume that you're starting with a fresh installation of\nRaspberry Pi OS Lite, the network has been set up (so you can access\nSynology Photos or Immich server), and you can access the command line\non your Pi.\n\n#### Option 1: Install From Debian Package\n\n[Releases](https://github.com/Caleb9/syno-photo-frame/releases)\ncontains pre-built .deb packages for arm64 Linux architecture, which\nshould work on Raspberry Pi 3 and up, as well as Zero 2 (assuming the\n64bit version of Raspbian OS *Bookworm* or newer is installed).\n\n- Check the architecture with `dpkg --print-architecture`; it should\n  print \"arm64\".\n- Check the installed version of Debian with `lsb_release -c` and make\n  sure it says \"bookworm\" or \"trixie\".\n\n**For other platforms (including older versions of Debian, such as\n\"bullseye\"), you must build the project from source - see [Option 2:\nBuild From Source](#option-2-build-from-source).**\n\n1. Download the `syno-photo-frame_X.Y.Z_arm64.deb` package from\n   Releases.\n2. Update the system:\n\n   ```bash\n   sudo -- sh -c ' \\\n   apt update \u0026\u0026 \\\n   apt upgrade -y'\n   ```\n\n3. `cd` to the directory where the package has been downloaded and\n   install the app:\n\n   ```bash\n   sudo apt install ./syno-photo-frame_*_arm64.deb\n   ```\n\n#### Option 2: Build From Source\n\nNote: These instructions assume a Debian-based Linux distribution, but\nadjusting them should make it possible to build the app for almost any\nplatform where Rust and [SDL](https://www.libsdl.org/) are available.\n\n1. [Install Rust](https://www.rust-lang.org/tools/install) if you have\n   not already (or use the [Alternative: Build With\n   Docker](#alternative-build-with-docker) approach).\n\n2. Install build dependencies:\n\n   ```bash\n   sudo -- sh -c ' \\\n   apt update \u0026\u0026 \\\n   apt upgrade -y \u0026\u0026 \\\n   apt install -y \\\n       libsdl2-dev \\\n       libsdl2-gfx-dev \\\n       libsdl2-ttf-dev \\\n       libssl-dev'\n   ```\n\n3. Install the app from\n   [crates.io](https://crates.io/crates/syno-photo-frame) (you can use\n   the same command to update the app when a new version gets\n   published):\n\n   ```bash\n   cargo install syno-photo-frame\n   ```\n\nWhen building is finished, the binary is then located at\n`$HOME/.cargo/bin/syno-photo-frame` and should be available on your\n`$PATH`.\n\nAlternatively, clone the git repository and build the project with (in\nthe cloned directory):\n\n```bash\ncargo build --release\n```\n\nThe binary is then located at `target/release/syno-photo-frame`.\n\n##### Alternative: Build With Docker\n\nIf you don't want to install Rust or the build dependencies for some\nreason but have Docker available, you can build the binary and/or\nDebian package in a container using the provided\n[Dockerfile](Dockerfile). See instructions in the file to build the\napp this way.\n\n## Run\n\nDisplay the help message to see various available options:\n\n```bash\nsyno-photo-frame --help\n```\n\nRun the app:\n\n```bash\nsyno-photo-frame {sharing link to Synology Photos or Immich album}\n```\n\nIf everything works as expected, press Ctrl-C to kill the app.\n\n## Optional Stuff\n\n### Increase the Swap Size on Raspberry Pi Zero\n\nA 100 MB swap file may be too small when running on low-memory systems\nsuch as Pi Zero. See [Increasing Swap on a Raspberry\nPi](https://pimylifeup.com/raspberry-pi-swap-file/).\n\n### Auto-start\n\nTo start the slideshow automatically on boot, you can add it to\ncrontab:\n\n```bash\ncrontab -e\n```\n\nAdd something like this at the end of crontab:\n\n```bash\n@reboot    sleep 5 \u0026\u0026 /bin/syno-photo-frame https://{share_link} \u003e\u003e /tmp/syno-photo-frame.log 2\u003e\u00261\n```\n\nRemember to replace your share link with a real one and adjust the\nbinary path depending on the installation method (dpkg or from\ncrates.io). A short `sleep` is required to not start before some\nservices (network) are up - try to increase it if errors occur. The\nabove command redirects error messages to a log file\n`/tmp/syno-photo-frame.log`.\n\nFor other (untested) alternatives, see e.g. [this\narticle](https://www.dexterindustries.com/howto/run-a-program-on-your-raspberry-pi-at-startup/).\n\n### Startup-Shutdown Schedule\n\nA proper digital photo frame doesn't run 24/7. Shutdown can be\nscheduled in software only, but for startup, you'll need a hardware\nsolution, e.g. for Raspberry Pi Zero, I'm using [Witty Pi 4\nMini](https://www.uugear.com/product/witty-pi-4-mini/).\n\n### Auto Brightness\n\nFor my digital photo frame project, I attached a light sensor to Pi's\nGPIO to adjust the monitor's brightness automatically depending on\nambient light. [TSL2591](https://www.adafruit.com/product/1980) is an\nexample of such sensor. Check out my\n[auto-brightness-rpi-tsl2591](https://github.com/Caleb9/auto-brightness-rpi-tsl2591)\nproject to add automatic brightness control to your digital photo\nframe.\n\n### Start from a Random Photo and in Random Order\n\nBy default, photos are displayed in the order of the shooting date. If\nthe album is very large, and the startup-shutdown schedule is short,\npotentially the slideshow might never reach some of the later photos\nin the album. The `--random-start` option solves this problem by\nstarting the slideshow at a randomly selected photo, then continuing\nnormally (in the order of the shooting date). Adding this option to\nthe startup schedule will start at a different photo every time.\n\nAlternatively, use `--order random` to display photos in a completely\nrandom order.\n\n### Change the Transition Effect\n\nUse the `--transition` (or `-t`) option to select the type of\ntransition effect for changing photos. Use `--help` option to display\nvalid values.\n\n### Display Shooting Date and Location\n\nUse the `--display-photo-info` to show shooting date and location (if\navailable) on screen. This setting is off by default.\n\nThe date format is controlled by operating system's locale: `LC_ALL`,\n`LC_TIME`, or `LANG` environment variable, in order of descending\npriority. You can prepend `syno-photo-frame` command with the\nvariable, e.g.\n\n```bash\nLC_ALL=\"en_GB.UTF-8\" syno-photo-frame ...\n```\n\nFind out list of installed locales with `locale -a`.\n\n### Customize the Splash-Screen\n\nYou can replace the default image displayed during loading of the\nfirst photo. Use the `--splash` option to point the app to a .jpeg\nfile location.\n\n## Disclaimer\n\nThis project is an independent, open-source application and is not\naffiliated, associated, authorized, endorsed by, or in any way\nofficially connected with Synology Inc. \"Synology\" and any related\nproduct names, logos, and trademarks are the property of Synology Inc.\n\nThe use of Synology Photos in this project is solely for\ninteroperability purposes, and the project does not provide any\nofficial support from Synology. All trademarks, product names, and\ncompany names mentioned in this repository belong to their respective\nowners.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaleb9%2Fsyno-photo-frame","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcaleb9%2Fsyno-photo-frame","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaleb9%2Fsyno-photo-frame/lists"}