# mov-renamarr :clapper: 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 :sparkles: - 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 :clipboard: - Linux - `ffprobe` in `PATH` (install via ffmpeg) ## Install :package: From source: ```bash cargo build --release ``` Binary will be at `target/release/mov-renamarr`. Install with Cargo: ```bash # From a git repo cargo install --git --locked # From a local checkout cargo install --path . --locked ``` Download a prebuilt binary from the Releases page. ## Quick start :rocket: Create a default config (with comments) and see the config path: ```bash mov-renamarr ``` Dry-run with TMDb: ```bash mov-renamarr --input /path/to/in --output /path/to/out --dry-run --provider tmdb ``` Rename in place (no network lookups): ```bash mov-renamarr --input /path/to/in --rename-in-place --no-lookup ``` ## Usage :keyboard: ``` mov-renamarr --input --output [flags] ``` Common flags: - `--move` or `--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|N` and `--net-jobs auto|N` ## Configuration :gear: 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_key` or `tmdb.bearer_token` (TMDb read access token supported) - `omdb.api_key` - `quality_tags = ["resolution"]` (or add `codec`, `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"|N` - `sidecars = false` (copy/move sidecars when true) CLI flags override config, and env vars override config as well. Full reference: [docs/CONFIG.md](docs/CONFIG.md) ## Providers :globe_with_meridians: - **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) :robot: 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 :memo: By default, output is printed to stdout. To write a report file: ```bash 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 :shield: Default is **skip** if the destination exists. Options: - `--overwrite` to overwrite - `--suffix` to append ` (1)`, ` (2)`, ... ## Testing :test_tube: ```bash cargo test ``` ## License :scroll: MIT (see `LICENSE`).