Scoring and Favorites¶
See internal/scoring/scoring.go
for the full, small set of rules. In short: tags or an active download can
force protected outright, and a Jellyfin Favorite mark forces hot;
otherwise items accumulate a score from age, size, a series having ended,
time since last aired, a low-priority quality profile, and
unmonitored/missing state. Items at or above cold_score_threshold are cold
candidates, ranked by that score. (Policy thresholds like these are still
YAML-only for now - not yet exposed in the GUI.)
See the example configuration for every policy setting.
Jellyfin Favorites¶
If Jellyfin is connected and enabled, Coldarr fetches every user's favorited
movies/series and matches them back to Radarr/Sonarr items by path -
anything favorited by anyone is kept on hot storage. That means it is never
moved to cold, and if it is already on cold (you favorited it after
Coldarr moved it), the next plan moves it back to hot, evicting
cold-eligible items from hot first if that's what it takes to make room.
Favoriting takes effect on the very next plan: unlike ordinary hot->cold
packing, the reclaim ignores cooldown_days and min_move_size_gb.
A never-move/keep-hot tag or an active download/import still outranks a
Favorite - those stay protected and are not moved in either direction.
Matching is by path, so this only works correctly if Jellyfin sees the same
paths Radarr/Sonarr do (see Docker's path note).
Coldarr snapshots these favorites before it builds a plan. If the fetch fails for any reason, inventory and planning fail closed: no manual, CLI, or scheduled apply can start without favorite protection. If Jellyfin goes offline after a run starts, the run continues using the snapshot captured before it began; only the post-move refresh may fail. That refresh is logged per item (endpoint, resolved item ID, parameters, response), so a moved item Jellyfin never picked up shows up in the log rather than silently losing its artwork.