Robofuse
Blazing fast Real-Debrid utility written in Go. Smartly organizes, repairs, and syncs your library with .strm files for Infuse, Jellyfin, Emby, and Plex.
Install / Use
/learn @itsrenoria/RobofuseREADME
robofuse
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.
✨ Features
- 🚀 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.
🚀 Installation
Prerequisites
- 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.
<a id="install-docker"></a>
1) Docker (Recommended)
-
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
<a id="install-binary"></a>
2) Binary
- 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
<a id="install-go-run"></a>
3) Go 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
Platform Notes
[!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 run
[!NOTE] macOS: if the downloaded binary is quarantined and won't start:
xattr -d com.apple.quarantine ./robofuse 2>/dev/null || true
[!TIP] 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 ~/.zshrc
[!TIP] Windows: run with
.\robofuse.exe runand optionally add the folder containingrobofuse.exeto yourPATH.
<a id="configuration"></a>
⚙️ Configuration
Edit config.json to customize robofuse:
Configuration Options
| 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 and100+concurrent), but results vary by library size and current Real-Debrid load.
[!IMPORTANT] Don't delete
library,library-organized, orcacheby 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.
🎮 Usage
Docker
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
Binary
# One sync run
./robofuse run
# Continuous watch mode
./robofuse watch
# Preview changes only
./robofuse dry-run
Go 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-run
❤️ Support the Project
robofuse 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
🙏 Credits
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.
