Synology Photos Slideshow

I have always wanted a photo slideshow feed from the photos stored on my NAS. While Synology Photos includes a slideshow feature, it is limited: it only displays photos in descending order (newest to oldest). This means I rarely see photos from years ago.

As a long-time Synology user with thousands of memories stored in my NAS device, I decided to take matters into my own hands and I developed a web-based slideshow application that displays photos at random.

My solution

This solution is web-based and deployed to the NAS device itself as a Docker container, so there is no need to share your precious memories with third party providers. Everything stays privately in your own NAS device.

The solution consists of 3 “components”:

  • Synology API SDK
  • Synology Photos Slideshow API
  • Synology Photos Slideshow Client

And best of all, everything is OSS.

I feel like I need to mention this, sadly. These projects were not Vibe Coded, but humanly crafted and AI enhanced.

Synology API SDK

A C# SDK to access the Synology NAS APIs in DiskStation Manager (DSM). This is the “heavy lifter” and the code that directly interacts with the official Synology NAS APIs.

This is something really isolated, so I thought it would be a good idea make it a NuGet package, publicly available and ready to be implemented.

Visit the GitHub repo to learn the SDK’s public interface, usage, and which Synology APIs have been implemented.

Synology has many APIs available, however, in this SDK I only implement a handful of them; what I need for the photos slideshow and a few other ones. I have made it really easy to add new API implementations. Having said that, I accept contributions, just follow the guidelines outlines in the repo.

GitHub Repo: https://github.com/esausilva/synology-api-sdk
NuGet Package: https://www.nuget.org/packages/Synology.API.SDK

Stack: C#, .NET Core

Synology Photos Slideshow API

An API to randomly fetch and serve images from Synology NAS devices, optimized for use in slideshow applications. This API implements the Synology API SDK, so no need to implement the SDK separately, just use this API.

The idea behind this API is to download a set of photos selected at random from your NAS device to be displayed in a client slideshow application. Since this is a standalone API, any client application can call it and get the set of randomly selected photos.

Visit the GitHub repo for a full guide on how to deploy the API, get familiarized with the public endpoints, future enhancements and local development.

GitHub Repo: https://github.com/esausilva/synology-photos-slideshow-api
Docker Hub Image: https://hub.docker.com/r/esausilva/synology.photos.slideshow.api

Stack: C#, .NET Core

Synology Photos Slideshow Client

A web application designed to display image slideshows sourced from a Synology NAS device. Built to pair seamlessly with my Synology Photos Slideshow API.

Below you can take a look at the slideshow in action.

Photos in the above animation come from Lorem Picsum, and the animation is sped up to 2x for a faster preview.

Upon loading, the slideshow will set a default interval of 20 seconds and a random display order. These settings can be changed by clicking on the slider icon in the top right corner of the slideshow.

Since the app persists settings in the browser’s IndexedDB, they will not be preserved across different devices.

To get slideshow images for the first time or to refresh the images, press the “Refresh Photos” button on the settings page. This will delete the current set of images and fetch new ones from the Synology NAS.

Visit the GitHub repo for a full guide on how to deploy the client app, future enhancements and local development.

GitHub Repo: https://github.com/esausilva/synology-photos-slideshow-client
Docker Hub Image: https://hub.docker.com/r/esausilva/synology.photos.slideshow.client

Stack: TypeScript, React, TanStack Start, Biome


Both, the Synology Photos Slideshow API and the Synology Photos Slideshow Client, are meant to be deployed to a Synology NAS device and run in local network to keep everything private.

I have them deployed and tested in Synology Container Manager, but they should work on any Docker host. i.e. Portainer.

Important considerations

I highly suggest you create a DHCP reservation in your router for the IP address of your NAS device.

This will make the IP predictable and not change every time your NAS restarts, or DHCP assigns a new IP address.

Future enhancements

The API and client app, although fully functional, they have a very basic functionality at the moment. Below are the enhancements I plan on tackling:

ComponentFeatureDescription
APIScheduled JobsAutomates downloading new photo sets in the background at set intervals.
APIReal-time NotificationsUses SignalR or SSE to notify the client when new photos are available. A predecessor to this is to have the background job feature completed.
APIPermanent FolderA dedicated folder for specific photos (e.g., recent trips) that bypasses the auto-clean process.
APIDelete EndpointAllows removing specific photos from the slideshow without deleting the original NAS files.
APIMetadata RefactoringUpdates endpoints to include photo date, location, and GPS data.
APIBlacklist SystemAn endpoint to permanently prevent specific photos from appearing in the slideshow.
APIDownload ConfigurationEnables the client application to define how many photos are fetched.
ClientManual Delete ButtonAdds a UI button to remove the currently displayed photo from the local rotation.
ClientMetadata OverlayDisplays photo details like date and location with potential Google Maps links.
ClientDownload SettingsA configuration in the sett to set the number of photos to download.

Consider giving back by getting me a coffee (or a couple) by clicking the following button:

Spread the love

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.