Skip to content

quadcom/seedsync

 
 

Repository files navigation

SeedSync

Stars Docker Pulls Image Size License Documentation

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.

Features

  • 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
  • Alpine image — lightweight 45 MB variant available
  • Fully open source!

Documentation

Full documentation is available at nitrobass24.github.io/seedsync

Quick Start (Docker)

Using Docker Compose (Recommended)

  1. Create a docker-compose.yml:
services:
  seedsync:
    image: ghcr.io/nitrobass24/seedsync:latest  # or use the -alpine variant (e.g., :alpine, :0.13-alpine)
    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
  1. Start the container:
docker compose up -d
  1. Access the web UI at http://localhost:8800

Using Docker Run

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 permissions

SSH Key Auth: To use key-based authentication, mount your private key: -v ~/.ssh/id_rsa:/home/seedsync/.ssh/id_rsa:ro

Unraid

SeedSync is available as a Community Application on Unraid.

  1. In the Unraid web UI, go to Docker → Template Repositories and add:
    https://github.com/nitrobass24/unraid-templates
    
  2. Go to the Apps tab, search for SeedSync, and click Install.
  3. Review the default paths and click Apply:
    • Config: /mnt/user/appdata/seedsync
    • Downloads: /mnt/user/downloads/seedsync
  4. Access the web UI at http://<your-unraid-ip>:8800

Note: PUID/PGID default to 99/100 (Unraid's nobody/users), which is correct for most Unraid setups.

Configuration

On first run, access the web UI and configure:

  1. Remote Server: Your seedbox SSH hostname/IP
  2. SSH Credentials: Username and password
  3. Remote Path: Directory on the seedbox to sync from
  4. Local Path: Maps to /downloads in the container

Multiple Path Pairs

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.

SSH Key Authentication

To use password-less SSH key authentication:

  1. Mount your private key into the container (see volume examples above)
  2. In the web UI Settings, enable "Use password-less key-based authentication"
  3. The password field can be left blank when key auth is enabled

Bandwidth Limiting

You can limit download speed in Settings under the Connections section. The Bandwidth Limit field accepts:

  • Numeric values in bytes/sec (e.g., 102400 for 100 KB/s)
  • Values with suffixes: K for KB/s, M for MB/s (e.g., 500K, 2M)
  • 0 or empty for unlimited

Building from Source

# Clone the repository
git clone https://github.com/nitrobass24/seedsync.git
cd seedsync

# Build and run
make build
make run

# View logs
make logs

Environment Variables

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)

Volumes

Path Description
/config Configuration and state files
/downloads Download destination directory
/home/seedsync/.ssh/id_rsa SSH private key (optional, for key-based auth)

Ports

Port Description
8800 Web UI

Troubleshooting

View Logs

docker logs seedsync

Permission Issues

Ensure your PUID and PGID match your host user:

id  # Shows your UID and GID

SSH Connection Issues

  • 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)

Remote Shell Not Found

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/bash

SCP Permission Denied (scanner can't copy to /tmp)

If 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.

Server Script Path Is a Directory

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:

  1. Change Server Script Path to a location outside your sync tree (~ or ~/.local)
  2. Remove the conflicting directory from the remote server: rm -rf /your/sync/path/scanfs
  3. Restart the container

Recommended Setup with Hard Links

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.

Report an Issue

Please report issues on the issues page. Include container logs: docker logs seedsync

License

SeedSync is distributed under Apache License Version 2.0. See LICENSE.txt for more information.


SeedSync Screenshot

About

SeedSync - Fast seedbox file synchronization. Modernized fork with Docker-only deployment, Python 3.12

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 74.8%
  • TypeScript 17.3%
  • SCSS 3.3%
  • HTML 2.5%
  • Shell 0.9%
  • Dockerfile 0.6%
  • Other 0.6%