4.3 KiB
mov-renamarr 🎬
Fast, safe CLI to rename movie files into Radarr-compatible folders and filenames on Linux. It uses ffprobe for media details, filename parsing for hints, and optional online metadata (TMDb/OMDb) with caching. Default action is copy; move/rename-in-place are opt-in.
Features ✨
- Radarr-style output:
Title (Year)/Title (Year) [quality] [id].ext - Safe defaults: copy by default, skip on collision (opt-in overwrite/suffix)
- Metadata providers: TMDb, OMDb, or both (auto picks TMDb if available)
- Optional local LLM (Ollama) for filename parsing and lookup assist
- SQLite cache to reduce repeated lookups
- Reports in text/json/csv (stdout by default)
- Concurrency controls with sensible defaults
Requirements 📋
- Linux
ffprobeinPATH(install via ffmpeg)
Install 📦
From source:
cargo build --release
Binary will be at target/release/mov-renamarr.
Install with Cargo:
# From a git repo
cargo install --git <repo-url> --locked
# From a local checkout
cargo install --path . --locked
Download a prebuilt binary from the Releases page.
Quick start 🚀
Create a default config (with comments) and see the config path:
mov-renamarr
Dry-run with TMDb:
mov-renamarr --input /path/to/in --output /path/to/out --dry-run --provider tmdb
Rename in place (no network lookups):
mov-renamarr --input /path/to/in --rename-in-place --no-lookup
Usage ⌨️
mov-renamarr --input <dir> --output <dir> [flags]
Common flags:
--moveor--rename-in-place(default is copy)--provider auto|tmdb|omdb|both--no-lookup(skip external lookups)--report [path]and--report-format text|json|csv--sidecars(copy/move subtitle/nfo/etc files)--quality-tags resolution,codec,source--min-score 0-100(match threshold)--jobs auto|Nand--net-jobs auto|N--dry-run-summary(suppress per-file output in dry-run)--explain(show top candidates when skipped)--print-config(print effective config and exit)--completions bash|zsh|fish
Help & version ℹ️
mov-renamarr --help
mov-renamarr --version
Shell completions 🐚
Generate completions:
mov-renamarr --completions bash
mov-renamarr --completions zsh
mov-renamarr --completions fish
Pre-generated scripts are also available in completions/.
Configuration ⚙️
Default config location:
$XDG_CONFIG_HOME/mov-renamarr/config.toml (fallback ~/.config/mov-renamarr/config.toml)
Cache location:
$XDG_CACHE_HOME/mov-renamarr/cache.db (fallback ~/.cache/mov-renamarr/cache.db)
The app creates a commented default config on first run and prints the path.
Key options (TOML):
provider = "auto"|"tmdb"|"omdb"|"both"tmdb.api_keyortmdb.bearer_token(TMDb read access token supported)omdb.api_keyquality_tags = ["resolution"](or addcodec,source)llm.mode = "off"|"parse"|"assist"llm.endpoint = "http://localhost:11434"llm.model = "Qwen2.5:latest"(recommended for accuracy:Qwen2.5:14b)jobs = "auto"|N,net_jobs = "auto"|Nsidecars = false(copy/move sidecars when true)
CLI flags override config, and env vars override config as well. Full reference: docs/CONFIG.md
Providers 🌐
- TMDb: preferred when available. Supports API key or read-access bearer token.
- OMDb: optional, API key required.
- Auto: uses TMDb if configured, else OMDb.
- No-lookup:
--no-lookup(or--offline) uses filename/LLM only.
LLM (optional) 🤖
If enabled, Ollama is used for:
- filename parsing (
llm.mode = "parse") - lookup assistance (
llm.mode = "assist")
LLM output is treated as hints; provider results (when enabled) remain the source of truth.
Reports 📝
By default, output is printed to stdout. To write a report file:
mov-renamarr --input ... --output ... --report
This creates mov-renamarr-report-YYYYMMDD-HHMMSS.txt in the current directory.
Formats: --report-format text|json|csv
Safety and collisions 🛡️
Default is skip if the destination exists. Options:
--overwriteto overwrite--suffixto append(1),(2), ...
Testing 🧪
cargo test
License 📜
MIT (see LICENSE).