Fast, reliable seedbox->home file sync over rclone/SFTP with a web UI, chunked validation, and netwo
2.3K
A modernized fork of SeedSync - Fast file synchronization from remote Linux servers using rclone with multi-threaded SFTP streaming.
RapidCopy automatically syncs files from a remote Linux server to your local machine. It connects via SSH, monitors remote directories for new files, and downloads them over SSH using rclone with multi-threaded SFTP streaming for high throughput. Once downloaded, files are optionally validated and extracted, all managed through a modern web UI.
You don't need to install anything on the remote server. All you need are SSH credentials.
RapidCopy is a comprehensive rewrite and modernization of the original SeedSync project. The following features have been added since forking:
The transfer engine was replaced with rclone over SFTP. Large (1080p+) files are split across multiple parallel streams, which on a benchmarked seedbox→home link raised single-file throughput from ~13 MB/s (single stream) to ~49 MB/s (~3.8× faster).
--multi-thread-streams, --multi-thread-cutoff, buffer/mmap)Sync multiple remote/local directory combinations in a single RapidCopy instance. Each path pair operates independently with its own scanner, auto-queue settings, and file tracking. Files in the dashboard are tagged with their path pair for easy identification.
path_pairs.jsonAutomatically verify file integrity after download by comparing chunk-level checksums between remote and local copies. This catches silent corruption, incomplete transfers, and bit-rot before you rely on the downloaded files.
Mount NFS or SMB/CIFS network shares directly from the RapidCopy UI. Download files straight to NAS or network storage without intermediate local copies.
Toggle between light and dark themes from the sidebar. Theme preference is persisted across sessions.
Control bandwidth usage with configurable rate limits to prevent saturating your connection. Set limits like 10M (10 MB/s), 500K (500 KB/s), or 0 for unlimited.
Set log verbosity (DEBUG, INFO, WARNING, ERROR, CRITICAL) and optionally enable JSON-formatted log output for integration with log aggregation systems like ELK or Splunk.
| union types, list[] generics)Optional auto-update support via an external update server. Check for and apply updates without manual intervention.
docker run -d \
--name rapidcopy \
-p 8800:8800 \
-v /path/to/config:/config \
-v /path/to/downloads:/downloads \
-v ~/.ssh/id_rsa:/home/rapidcopy/.ssh/id_rsa:ro \
rccypher/rapidcopy:latest
For multiple download destinations, add additional volume mounts:
docker run -d \
--name rapidcopy \
-p 8800:8800 \
-v /path/to/config:/config \
-v /path/to/tv_downloads:/downloads/tv_shows \
-v /path/to/movie_downloads:/downloads/movies \
-v ~/.ssh/id_rsa:/home/rapidcopy/.ssh/id_rsa:ro \
rccypher/rapidcopy:latest
Access the web UI at http://localhost:8800
RapidCopy generates a random API key on first startup and stores it in the config ([Web] api_key in settings.cfg). All /server/* API routes require it. The web UI — served over your trusted LAN — receives the key automatically (injected into the page) and authenticates itself, so you just open the page.
For external or scripted API access, read the key from the config and send it as an X-Api-Key header (or a ?apikey= query parameter for the SSE stream):
# Retrieve the generated key
docker exec rapidcopy grep '^api_key' /config/settings.cfg
services:
rapidcopy:
build: .
image: rccypher/rapidcopy:latest
container_name: rapidcopy
restart: unless-stopped
ports:
- "8800:8800"
volumes:
- ./config:/config
- /path/to/downloads:/downloads
- ~/.ssh/id_rsa:/home/rapidcopy/.ssh/id_rsa:ro
RapidCopy is configured via the web UI Settings page or by editing the config files directly.
Configured via the Settings UI or path_pairs.json in your config directory:
{
"version": 1,
"path_pairs": [
{
"id": "unique-id-001",
"name": "Movies",
"remote_path": "/seedbox/complete/movies",
"local_path": "/downloads/movies",
"enabled": true,
"auto_queue": true
},
{
"id": "unique-id-002",
"name": "TV Shows",
"remote_path": "/seedbox/complete/tv",
"local_path": "/downloads/tv",
"enabled": true,
"auto_queue": true
}
]
}
| Setting | Default | Description |
|---|---|---|
enabled | True | Enable post-download file validation |
algorithm | xxh128 | Hash algorithm (xxh128, md5, sha256, sha1) |
default_chunk_size | 52428800 (50MB) | Base chunk size for validation |
max_chunk_size | 104857600 (100MB) | Maximum chunk size after adaptive scaling |
validate_after_file | True | Validate immediately after each file completes |
max_retries | 3 | Number of retry attempts for corrupt chunks |
enable_adaptive_sizing | True | Automatically scale chunk size based on file size and network conditions |
| Setting | Description | Example |
|---|---|---|
rate_limit | Maximum download speed | 10M (10 MB/s), 500K (500 KB/s), 0 (unlimited) |
| Setting | Description | Values |
|---|---|---|
log_level | Minimum log level | DEBUG, INFO, WARNING, ERROR, CRITICAL |
log_format | Log output format | standard, json |
# Python unit tests (via Docker)
cd src/python
docker-compose -f ../docker/test/python/compose.yml run --rm tests pytest tests/unittests/ -q
# Angular unit tests
cd src/angular
npx ng test
# Playwright E2E tests (start dev server first)
cd src/angular && npx ng serve --port 8800 &
cd src/e2e-playwright && npx playwright test --project=ui-only
| Tool | Status | Description |
|---|---|---|
| Ruff | 0 issues | Fast Python linter |
| Mypy | 0 errors | Static type checking |
| Pytest | 408 passing | Python unit tests |
| Playwright | 62 passing | E2E UI tests |
RapidCopy/
├── src/
│ ├── python/ # Python backend
│ │ ├── common/ # Shared utilities, config, models
│ │ ├── controller/ # Business logic, scanning, validation
│ │ ├── rclone/ # rclone transfer backend (SFTP, multi-threaded)
│ │ ├── model/ # Data models (ModelFile, states)
│ │ ├── ssh/ # SSH utilities
│ │ ├── system/ # File system operations
│ │ ├── web/ # Web server, API, SSE streaming
│ │ └── tests/ # Python test suite
│ ├── angular/ # Web frontend (Angular 18)
│ ├── e2e-playwright/ # Playwright E2E tests
│ └── docker/ # Docker build configs
├── doc/ # Documentation
├── Dockerfile # Multi-stage Docker build
└── docker-compose.yml # Compose template
settings.cfg)Contributions are welcome! Please:
ruff check .) and type checking (mypy .)See Developer Readme for detailed setup instructions.
Please report issues on the issues page. Include logs if possible:
docker logs <container id>~/.rapidcopy/log/rapidcopy.logRapidCopy is based on SeedSync by ipsingh06.
RapidCopy is distributed under Apache License Version 2.0. See LICENSE.txt for more information.
Content type
Image
Digest
sha256:4490b8c07…
Size
276.8 MB
Last updated
3 months ago
docker pull rccypher/rapidcopy