Photo organization guide

How to Install Photos At Last Agent on a Synology NAS

Install Photos At Last Agent 0.6.1 on Synology DSM 7.2 using Container Manager, configure folder permissions, and connect the desktop app.

This walkthrough installs Photos At Last Agent 0.6.1 on a Synology NAS with Container Manager. The agent processes photos on the NAS; the desktop app connects to it over your local network. The instructions below are for Synology DSM 7.2 or newer, not a generic QNAP setup. The agent is optional and is available with both Free and Early Access.

Before you begin

You need:

  • A Synology NAS with an Intel or AMD (x86_64) processor and DSM 7.2 or newer.
  • Container Manager installed from DSM Package Center.
  • The Photos-At-Last-Agent-0.6.1-amd64.zip package, available from the download page.
  • A Mac or Windows computer running Photos At Last on the same trusted local network.
  • A backup of important photos before allowing any file moves.

This package does not support ARM-based Synology models. If SSH is enabled, check the NAS processor with:

uname -m

Continue only if it returns x86_64. You can also check the processor in DSM’s system information. Do not forward the agent’s port from your internet router.

Synology DSM system information showing DSM 7.2 and an AMD Ryzen processor
DSM system information: check the DSM version and CPU. Open the image for a larger view.

1. Import the Docker image

  1. Extract Photos-At-Last-Agent-0.6.1-amd64.zip on your computer.
  2. Open Container Manager in DSM. If it is not installed, install it from Package Center first.
  3. Open Image and choose Action → Import → Add from file.
  4. Select photos-at-last-agent-0.6.1-amd64.tar from the extracted package. Import the .tar file, not the outer ZIP.
  5. Wait until photos-at-last-agent:0.6.1 appears in the image list.

Check: The image and its 0.6.1 tag are visible in Container Manager before you create a Project.

Container Manager Image list showing photos-at-last-agent with tag 0.6.1
The imported image appears in Container Manager with tag 0.6.1.

2. Prepare folders and a dedicated DSM user

Decide which Synology shared folders contain your source media and target library. This example uses /volume1/photo as the target and /volume1/photo-inbox as a source. Substitute the actual paths on your NAS.

Create a persistent folder for the agent at /volume1/docker/photos-at-last-agent (or adapt the path consistently in the YAML below). The agent stores target indexes and license status under its cache subdirectory. Do not delete this folder when updating the container.

Create a dedicated DSM user for the agent and give it read/write access to the source folder, target folder, and persistent agent folder. File moves may require write access to the source as well as the target. Keep access limited to the folders the agent needs.

With SSH enabled, find that user’s numeric IDs:

id YOUR_DSM_AGENT_USER

For example, uid=1036(...) gid=100(...) means you would use 1036:100 for user: in the YAML. Use your NAS’s values; these numbers are only an example.

Check: The three host folders exist, the dedicated user can access them, and you have written down that user’s UID and GID.

DSM user permissions showing read and write access for the relevant shared folders
Grant the dedicated agent user access to the folders used by your Project.

3. Generate an API token

The desktop app uses an API token to authenticate with the agent. On macOS or Linux, generate a strong random token:

openssl rand -hex 32

Save the resulting token privately. You will enter the same value in the Synology Project and the desktop app. Do not post it in a screenshot or support request. The Project YAML stores the token as a configuration value, so restrict access to the Project and NAS administrator account.

4. Create the Container Manager Project

  1. Open Container Manager → Project → Create.
  2. Set the project name to photos-at-last-agent and the project path to /volume1/docker/photos-at-last-agent.
  3. Choose to create the Project using YAML.
  4. Paste the configuration below, then replace the example values described after it.
name: photos-at-last-agent
services:
  photos-at-last-agent:
    image: photos-at-last-agent:0.6.1
    container_name: photos-at-last-agent
    user: "1036:100"
    restart: unless-stopped
    ports:
      - "8765:8765"
    environment:
      PHOTO_AGENT_API_TOKEN: "REPLACE_WITH_YOUR_RANDOM_API_TOKEN"
      PHOTO_AGENT_ALLOWED_ROOTS: "/photos,/inbox"
      PHOTO_AGENT_CACHE_DIR: "/data/cache"
      TZ: "Europe/Amsterdam"
      # PHOTO_AGENT_LICENSE_KEY: "PASTE_YOUR_PHOTOS_AT_LAST_LICENSE_KEY"
    volumes:
      - /volume1/photo:/photos
      - /volume1/photo-inbox:/inbox
      - /volume1/docker/photos-at-last-agent:/data

Before starting, make these changes:

  1. Replace 1036:100 with the UID:GID of your dedicated DSM user.
  2. Replace REPLACE_WITH_YOUR_RANDOM_API_TOKEN with the token from step 3.
  3. Change the host paths before each : in volumes: to match your NAS. The container paths after each :/photos, /inbox, and /data—are the paths the agent sees.
  4. Keep every selectable media root in PHOTO_AGENT_ALLOWED_ROOTS. If you change /photos or /inbox in volumes:, update the allowed roots too.
  5. Change TZ to your timezone if needed. For Unlimited, uncomment PHOTO_AGENT_LICENSE_KEY and enter your license key; leave it commented out for Free.

Do not add a build: section. The Project must use the image imported in step 1. Review the paths and token before creating the Project.

Check: The imported image tag, UID:GID, token, allowed roots, and all three volume paths match your NAS.

Container Manager Project YAML editor with the API token and license key hidden
A configured Project in Container Manager. The token and license key are hidden in this example.

5. Start the Project and check the health endpoint

  1. Build/start the Project in Container Manager. Its container should become Running.
  2. Open Container Manager → Container → photos-at-last-agent → Log and check for errors.
  3. From a computer on the same local network, open:
http://YOUR_NAS_IP:8765/health

The expected response is:

{"status":"ok"}

If DSM Firewall is enabled, allow TCP port 8765 from your local network only. Never forward this port through your internet router or expose the agent directly to the public internet. A /data/cache permission error means the dedicated DSM user needs read/write access to the persistent agent folder.

Check: The container stays Running, the log has no relevant error, and the health URL returns {"status":"ok"}.

Browser showing the agent health endpoint returning status ok
The health endpoint returns {"status":"ok"} on the local network.

6. Connect Photos At Last on your computer

  1. Open the Photos At Last desktop app and go to Processing settings.
  2. Select Remote agent.
  3. Enter http://YOUR_NAS_IP:8765 as the agent address, replacing YOUR_NAS_IP with your NAS’s local IP address.
  4. Enter the API token from step 3.
  5. Choose Test connection, then save the settings.
  6. Select your source and target folders through the server folder picker.

The app uses container paths such as /photos and /inbox, not Synology host paths such as /volume1/photo. Start with a small test collection, review the planned changes, and verify the result on the NAS before processing a larger library. Keep your original files and backup until you have checked the result.

Check: Test connection succeeds and the folder picker shows the expected mounted folders.

Photos At Last processing settings showing Remote agent selected and a successful test connection
Photos At Last reports a successful connection to the agent.

For advice on handling the wider collection, see how to organize photos across multiple hard drives.

Updating the agent later

  1. Download and extract the new agent package.
  2. Import its new .tar image in Container Manager.
  3. Change image: in the Project YAML to the new version tag.
  4. Rebuild the Project and check that it runs and responds to the health check.

Keep /volume1/docker/photos-at-last-agent (or your equivalent persistent folder). The cache and target indexes stored there are reused by the replacement container.

Troubleshooting

  • The image cannot be imported: Select the extracted .tar, not the ZIP or a Docker Desktop image.raw file. Confirm the NAS reports x86_64.
  • The container cannot access photos: Check DSM shared-folder permissions, the numeric user: value, and the matching volumes: paths.
  • A folder is missing in the desktop folder picker: Confirm that it is mounted under volumes: and its container path is listed in PHOTO_AGENT_ALLOWED_ROOTS. Restart the Project after changing the YAML.
  • The desktop app cannot connect: Check that the container is Running, the health URL works, the NAS IP is correct, DSM Firewall permits local TCP 8765, and both sides use the same API token.

If a problem remains, contact us with your DSM version, NAS model, and relevant error text. Do not send your API token, license key, or private photos.