An open API service indexing awesome lists of open source software.

https://github.com/caleb9/syno-photos-util

Helper for a number of tasks unavailable in Synology Photos web interface
https://github.com/caleb9/syno-photos-util

cli rust synology synology-dsm synology-dsm-api synology-nas synology-photos

Last synced: over 1 year ago
JSON representation

Helper for a number of tasks unavailable in Synology Photos web interface

Awesome Lists containing this project

README

          

# syno-photos-util

[![Crates.io
Version](https://img.shields.io/crates/v/syno-photos-util)](https://crates.io/crates/syno-photos-util)
[![build and release](https://github.com/Caleb9/syno-photos-util/actions/workflows/github-actions.yml/badge.svg)](https://github.com/Caleb9/syno-photos-util/actions/workflows/github-actions.yml)

Helper for [Synology
Photos](https://www.synology.com/en-global/dsm/feature/photos)
maintenance.

* List folders containing photos in a Synology Photos album
* Copy album contents into a Synology Photos folder

__If you like the project, give it a star ⭐, or consider becoming a__
[![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/caleb9)
:)

- [syno-photos-util](#syno-photos-util)
- [Why?](#why)
- [Usage](#usage)
- [Login to Synology DSM](#login-to-synology-dsm)
- [List files in an album](#list-files-in-an-album)
- [Export an album to a folder](#export-an-album-to-a-folder)
- [Logout](#logout)
- [Building from source](#building-from-source)
- [TODO](#todo)
- [Credits](#credits)
- [Disclaimer](#disclaimer)

## Why?

This is a console app that queries the Synology Photos API to deduce
locations (folder paths) of photos added to a Synology Photos *album*
or copy photos from an album to a *folder*.

I used it while doing some spring-cleaning of photos on my Synology
NAS (and as a programming exercise in Rust). Maybe someone will find
it handy as well.

## Usage

Download the binary file for your platform from
[Releases](https://github.com/caleb9/syno-photos-util/releases).

> The following command examples omit the version and platform suffix
> from binary name.

Display the help message:

```bash
./syno-photos-util --help
```

```
Usage: syno-photos-util [OPTIONS]

Commands:
login Sign in to Synology DSM
list List file locations (folders) of photos in an album
export Export (accessible) album photos to a folder in the user's personal space
logout Sign out of DSM
status Check DSM sign-in status
check-update Check if new version is available
help Print this message or the help of the given subcommand(s)

Options:
--timeout
HTTP request timeout in seconds

Must be greater or equal to 5. When Synology Photos does not respond within the timeout, an
error is displayed. Try to increase the value for slow connections

[default: 30]

-h, --help
Print help (see a summary with '-h')

-V, --version
Print version
```

Each command supports the `--help` option for a detailed description.

### Login to Synology DSM

Before you can use any of the other commands, you need to sign in to
DSM:

```bash
./syno-photos-util login https://your.nas.address/
```

You can provide your DSM user credentials as arguments (see `login
--help`), or you will be asked to type them in. If multi-factor
authentication (MFA) is enabled, you can use the `--remember` option
to not be asked for an OTP code next time you use the `login` command.

> The address value should be the same as the one you use to open DSM
> in your browser. Unless you use non-standard ports (5000 for HTTP
> and 5001 for HTTPS), you can omit the port - otherwise it needs to
> be specified, e.g., `https://your.nas.address:5042`.

> On successful login, the session id is saved into
> `$HOME/.syno-photos-util` file (in the user profile
> directory on Windows, e.g., `C:\Users\Alice\.syno-photos-util`),
> similarly to a web browser saving a cookie. Do not share this file
> with anyone, as it gives access to your DSM.

### List files in an album

After signing in successfully, you can list the contents of an album,
printing their file-system paths on your NAS:

```bash
./syno-photos-util list "My Album"
```

> The album can either be a normal album or a person's name in the
> People albums.

The output may look like this, for example:

```
'/var/services/homes/alice/Photos/PhotoLibrary/2022/11/mountain.jpg'
'/var/services/photo/beach.jpeg'
Error: no access (owned by bob) 'forest.jpg'
```

In this example, My Album contains 3 photos:
* The `mountain.jpg` photo is in one of the signed-in user's (`alice`
in this case) *Personal Space* folders (located in the user's home
directory).
* The `beach.jpeg` photo is in *Shared Space* (located in the `photo`
shared folder).
* In the case of `forest.jpg`, the physical location of the file is
inaccessible to `alice`. This happens, e.g., when there are other
NAS users (`bob` in this example) having *provider* access to My
Album, and they added photos from their Personal Space. Another
possibility is that My Album is owned by `bob` and shared with
`alice` - depending on permissions, some or all of the photo
locations may be inaccessible.

### Export an album to a folder

```bash
./syno-photos-util export "My Album" "/my folder/my album dump"
```

Note that currently the target folder needs to already exist in
the user's Personal Space.

The command schedules a *background task* to copy the photos from an
album to a folder in Personal Space. Photos inaccessible due to
permissions will not be copied. If there are identically named photos
in the target folder already, they will **not** get overwritten. You
can also inspect the task status in Synology Photos web UI.

Because the login session is saved, it is possible to schedule this
command, e.g., with CRON, to export files added to an album
periodically.

### Logout

You may want to logout from DSM when done:

```bash
./syno-photos-util logout
```

This will remove the session information from
`$HOME/.syno-photos-util`. You may optionally add the `--forget`
option to enforce OTP code verification on the next login (usable only
when MFA is enabled). Alternatively, just deleting the
`$HOME/.syno-photos-util` file has the same effect.

## Building from source

1. [Install Rust](https://www.rust-lang.org/tools/install) if you have
not already.
2. Install the app from
[crates.io](https://crates.io/crates/syno-photos-util) (you can use
the same command to update the app when a new version gets
published):

```bash
cargo install syno-photos-util
```

When building is finished, the binary is then located at
`$HOME/.cargo/bin/syno-photos-util` and should be available on your
`$PATH`.

Alternatively, clone this git repository and build the project with
(in the cloned directory):

```bash
cargo build --release
```

The binary is then located at `target/release/syno-photos-util`.

## TODO

* Add support for "Places" albums

## Credits

* [zeichensatz/SynologyPhotosAPI](https://github.com/zeichensatz/SynologyPhotosAPI)
contains a description of the Synology Photos API that got me
started

## Disclaimer

This project is an independent, open-source application and is not
affiliated, associated, authorized, endorsed by, or in any way
officially connected with Synology Inc. "Synology" and any related
product names, logos, and trademarks are the property of Synology Inc.

The use of Synology Photos in this project is solely for
interoperability purposes, and the project does not provide any
official support from Synology. All trademarks, product names, and
company names mentioned in this repository belong to their respective
owners.