A high-performance Real-Debrid STRM file generator for your media server.
robofuse is a lightweight, blazing-fast service that interacts with the Real-Debrid API to automatically organize your movie and TV library. It generates .strm files for use with media players like Infuse, Jellyfin, Emby, and Plex (no longer supports .strm files).
Rewritten from the ground up in Go, robofuse is designed for speed, efficiency, and stability.
- 🚀 Blazing Fast: Built with Go's concurrent worker pools for maximum performance.
- 🔄 Smart Sync: Only updates what's changed. Adds new files, updates modified ones, and cleans up orphans.
- 🧹 Auto-Repair: Automatically detects dead downloads and re-adds them using cached magnet links.
- 📦 Paginator: Handles large libraries with ease by paginating through your Real-Debrid downloads.
- ⏱️ Watch Mode: Set it and forget it. Runs continuously in the background to keep your library fresh.
- 🛡️ Rate Limit Protection: Smartly respects separate rate limits for different API endpoints.
- 🎯 Deduplication: Automatically handles duplicate downloads, keeping only the latest version.
- 📝 Metadata Parsing: Integrated ptt-go parsing for cleaner, better-organized file names.
- Real-Debrid Account: You need an API token from your Real-Debrid Account Panel.
- Install method: Choose Docker (recommended), Binary, or Go Run.
- Go version:
1.21+is required only for Go Run.
-
Clone the repository:
git clone https://github.com/itsrenoria/robofuse.git cd robofuse -
Edit
config.jsonbased on Configuration:nano config.json
-
Build and start robofuse:
docker compose up -d --build
-
View logs:
docker compose logs -f
- Open the Releases page and download the asset for your platform.
- Extract the archive.
- Edit the included
config.jsonbased on Configuration. - Run directly from the extracted folder:
./robofuse run
- Clone the repository:
git clone https://github.com/itsrenoria/robofuse.git cd robofuse - Edit
config.jsonbased on Configuration. - Run directly:
go run ./cmd/robofuse run
Note
Optional explicit config path: use -c (or --config) if your config file is not in the current directory.
./robofuse -c /absolute/path/to/config.json run
go run ./cmd/robofuse -c /absolute/path/to/config.json runNote
macOS: if the downloaded binary is quarantined and won't start:
xattr -d com.apple.quarantine ./robofuse 2>/dev/null || trueTip
Linux/macOS optional global install (zsh example):
mkdir -p ~/.local/bin
install -m 755 ./robofuse ~/.local/bin/robofuse
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrcTip
Windows: run with .\robofuse.exe run and optionally add the folder containing robofuse.exe to your PATH.
Edit config.json to customize robofuse:
| Key | Type | Default | Description |
|---|---|---|---|
token |
string | Required | Your Real-Debrid API Token. |
output_dir |
string | ./library |
Where raw STRM files will be generated. |
organized_dir |
string | ./library-organized |
Where renamed/organized STRM files will be placed if ptt_rename is set to true. |
cache_dir |
string | ./cache |
Directory for storing state/cache. |
concurrent_requests |
int | 50 |
Max concurrent worker threads for processing. |
general_rate_limit |
int | 250 |
Request limit per minute for general API calls. |
torrents_rate_limit |
int | 25 |
Request limit per minute for download endpoints. |
watch_mode |
bool | false |
If set to false, robofuse will only run a single sync cycle. If set to true, robofuse will run in watch mode, which will run continuously in the background syncing every watch_mode_interval seconds. |
watch_mode_interval |
int | 60 |
Seconds to wait between sync cycles in watch mode. |
repair_torrents |
bool | true |
Automatically attempt to repair dead downloads by re-adding magnets. |
min_file_size_mb |
int | 150 |
Ignore files smaller than this size (prevents samples), subtitles are ignored. |
ptt_rename |
bool | true |
Use PTT logic to clean/rename files. |
log_level |
string | "info" |
Logging verbosity (debug, info, warn, error). |
file_expiry_days |
int | 6 |
Days to consider a file as expired from downloads in real-debrid. |
Tip
The default rate limits are conservative and tuned for stability. You can raise them (for example 600+ general and 100+ concurrent), but results vary by library size and current Real-Debrid load.
Important
Don't delete library, library-organized, or cache by hand. These folders are part of the state/tracking system. If you need to reset, stop the service, back up what you need, then clear them intentionally.
The included docker-compose.yml builds and runs robofuse:
services:
robofuse:
build: .
container_name: robofuse
restart: unless-stopped
volumes:
- ./config.json:/data/config.json
- ./library:/app/library
- ./library-organized:/app/library-organized
- ./cache:/app/cache# Start in background
docker compose up -d --build
# View logs
docker compose logs -f
# Stop
docker compose down
# Rebuild after code changes
docker compose up -d --build# One sync run
./robofuse run
# Continuous watch mode
./robofuse watch
# Preview changes only
./robofuse dry-run# One sync run
go run ./cmd/robofuse run
# Continuous watch mode
go run ./cmd/robofuse watch
# Preview changes only
go run ./cmd/robofuse dry-runrobofuse is a passion project developed and maintained for free. If you find it useful, please consider supporting its development.
- ⭐ Star the Repository on GitHub
- 🤝 Contribute:
- Bug Reports: Open an issue describing the bug with steps to reproduce
- Feature Requests: Open an issue describing the new feature and why it would be useful
- Code Contributions: Submit a pull request with your improvements
This project wouldn't be possible without the foundational work of the open-source community.
- ptt-go: Our Go port of the excellent dreulavelle/PTT filename parsing library.
- Decypharr: Portions of this codebase were inspired by or repurposed from Decypharr (Copyright (c) 2025 Mukhtar Akere), used under the MIT License.
Not affiliated with Real-Debrid.
