SeedSync is a tool to sync files from a remote Linux server (like your seedbox) to your local machine. It uses LFTP to transfer files fast!
Note: This is a modernized fork of ipsingh06/seedsync with updated dependencies and Docker-only deployment.
- Built on top of LFTP, the fastest file transfer program
- Web UI — track and control your transfers from anywhere
- Multiple path pairs — sync from multiple remote directories independently
- Exclude patterns — filter out unwanted files with glob patterns
- Multi-select — select multiple files for bulk queue/stop/delete
- Auto-Queue — only sync the files you want based on pattern matching
- Automatically extract your files after sync
- Webhook notifications — HTTP POST on download/extract events
- Delete local and remote files easily
- Dark mode, staging directory, bandwidth limiting, and more
- Lightweight Docker image — ~45 MB Alpine-based, multi-arch (amd64/arm64)
- Fully open source!
Full documentation is available at nitrobass24.github.io/seedsync
- Create a
docker-compose.yml:
services:
seedsync:
image: ghcr.io/nitrobass24/seedsync:latest
container_name: seedsync
ports:
- "8800:8800"
environment:
- PUID=1000 # Your user ID (run 'id' to find)
- PGID=1000 # Your group ID
# - UMASK=002 # Optional: file permission mask (002 for 775/664)
volumes:
- ./config:/config
- /path/to/downloads:/downloads
# Uncomment below to use SSH key authentication
# - ~/.ssh/id_rsa:/home/seedsync/.ssh/id_rsa:ro
restart: unless-stopped- Start the container:
docker compose up -d- Access the web UI at http://localhost:8800
docker run -d \
--name seedsync \
-p 8800:8800 \
-e PUID=1000 \
-e PGID=1000 \
-v /path/to/config:/config \
-v /path/to/downloads:/downloads \
ghcr.io/nitrobass24/seedsync:latest
# Optional: control file permissions with UMASK
# -e UMASK=002 # 775/664 permissionsSSH Key Auth: To use key-based authentication, mount your private key:
-v ~/.ssh/id_rsa:/home/seedsync/.ssh/id_rsa:ro
SeedSync is available as a Community Application on Unraid.
- In the Unraid web UI, go to Docker → Template Repositories and add:
https://github.com/nitrobass24/unraid-templates - Go to the Apps tab, search for SeedSync, and click Install.
- Review the default paths and click Apply:
- Config:
/mnt/user/appdata/seedsync - Downloads:
/mnt/user/downloads/seedsync
- Config:
- Access the web UI at
http://<your-unraid-ip>:8800
Note: PUID/PGID default to
99/100(Unraid'snobody/users), which is correct for most Unraid setups.
On first run, access the web UI and configure:
- Remote Server: Your seedbox SSH hostname/IP
- SSH Credentials: Username and password
- Remote Path: Directory on the seedbox to sync from
- Local Path: Maps to
/downloadsin the container
To sync from multiple remote directories, use Path Pairs in Settings. Each pair has its own remote path, local path, auto-queue toggle, and exclude patterns. Path pairs run independent LFTP and scanner instances.
To use password-less SSH key authentication:
- Mount your private key into the container (see volume examples above)
- In the web UI Settings, enable "Use password-less key-based authentication"
- The password field can be left blank when key auth is enabled
You can limit download speed in Settings under the Connections section. The Bandwidth Limit field accepts:
- Numeric values in bytes/sec (e.g.,
102400for 100 KB/s) - Values with suffixes:
Kfor KB/s,Mfor MB/s (e.g.,500K,2M) 0or empty for unlimited
# Clone the repository
git clone https://github.com/nitrobass24/seedsync.git
cd seedsync
# Build and run
make build
make run
# View logs
make logs| Variable | Default | Description |
|---|---|---|
PUID |
1000 | User ID for file permissions |
PGID |
1000 | Group ID for file permissions |
UMASK |
(unset) | File permission mask (e.g. 002 for 775/664, 000 for 777/666) |
| Path | Description |
|---|---|
/config |
Configuration and state files |
/downloads |
Download destination directory |
/home/seedsync/.ssh/id_rsa |
SSH private key (optional, for key-based auth) |
| Port | Description |
|---|---|
| 8800 | Web UI |
docker logs seedsyncEnsure your PUID and PGID match your host user:
id # Shows your UID and GID- Verify your seedbox allows SSH connections
- Check that the SSH port is correct (default: 22)
- Ensure your credentials are correct
- If using SSH key auth, ensure the key is mounted at
/home/seedsync/.ssh/id_rsa(read-only is fine)
If you see an error about /bin/bash not found, SeedSync will attempt to auto-detect the available shell on your remote server. Check the logs for the detected shell path. If detection fails, create a symlink on the remote server:
sudo ln -s /usr/bin/bash /bin/bashIf you see scp: dest open '/tmp/scanfs': Permission denied in the logs, your remote server doesn't allow writes to /tmp. SeedSync copies its scanner utility there by default.
Fix: open the web UI Settings, find Server Script Path, and change it to a directory you own on the remote server — for example ~ or ~/.local. Save and restart the container.
If you see Server Script Path '...' is a directory on the remote server, the configured path overlaps with your sync directory and a folder named scanfs already exists there.
Fix:
- Change Server Script Path to a location outside your sync tree (
~or~/.local) - Remove the conflicting directory from the remote server:
rm -rf /your/sync/path/scanfs - Restart the container
The preferred way to use SeedSync is with a dedicated completion directory using hard links. Configure your torrent client to hard link completed downloads to a separate folder (e.g., /downloads/complete), point SeedSync at that folder, and enable auto-delete of remote files after syncing. Hard links don't use extra disk space, and your originals remain intact for seeding. Note: both directories must be on the same filesystem for hard links to work.
See the FAQ for a detailed setup guide and qbit-hardlinker for qBittorrent integration.
Please report issues on the issues page.
Include container logs: docker logs seedsync
SeedSync is distributed under Apache License Version 2.0. See LICENSE.txt for more information.

