Fetcharr
Gets new media playable first, then cleans up, hunts missing, and enriches what you already have.
Fetcharr
FETCHARR
Step 1 — Process the Grabarr Queue
Downloaders
Grabbers
Find out what is supposed to be here (Grabarr queue) and what actually landed (Complete disk). That pair is this run’s work item.
Happens
- Connect to Grabarr. Keep the queued item, magnet, direct-download URL, and downloader save path / category / tags.
- Downloader category / tag / label is the working media type and forma. Filename guessing does not override a downloader tag.
- Scout Complete drop folders. Loose files at the Complete root count. Pure […] folders are buckets, never titles.
- Skip dotfiles, skip names, and Flagged exact versions (Do Not Download Again).
Does not
- Rename, place to library, or hunt Servarr.
- Treat encryption as a Daily step.
Freeze the related downloader jobs so the file is not still writing while Boxarr moves it. Confirm type / forma against the catalog.
Happens
- Stop/pause related jobs for this run’s work items. Seed/upload may already be settled; pause active downloads.
- Assume the downloader was right (Step 1), then confirm against the catalog. Catalog agrees → keep. Catalog disagrees → catalog wins.
- A dead downloader is reported. It does not abort the rest of the run.
Does not
- Pause every client.
- Remove the job — that is Step 8.
Claim the work item into untyped [Staging]. That is the holding land — not the grabber path, not the downloader path, not the library home.
Happens
- Ensure each library’s [Staging] folder exists before claiming into it.
- Cross-lane live dumps are refused.
- A leftover already in [Staging] can be claimed.
Does not
- Verify the file yet — that is Step 4.
- Place into the live library home — that is Step 7.
Prove that what landed is what the acquisition claimed, and that it is acceptable to keep. First verify gate.
Happens
- MediaInfo and the health probe: video/audio characteristics, language, region, tracks; the file actually opens (known video types).
- Unknown / unsupported types park in Review and drop out of this run.
- A known type that will not open is Do Not Download Again for that exact version and drops out.
- Books, comics, manga, magazines, ROMs skip the video probe; they still need a known type.
Does not
- Place a bad copy into the library.
- Queue the replacement — that is Step 5.
If verification failed: throw the copy away and ask for another. It must not become canonical library content. (Was Reject / Re-queue Failed Media.)
Happens
- Reject the copy.
- Queue a replacement through the server-app stack / Flag refetch.
- This is a decision/action, not a complicated branch.
Does not
- Grab a future release — that is a History action, not this step.
- Keep a failed file “just in case.”
Apply the catalog / conventional name while the file is still in [Staging]. Record original name, new name, history.
Happens
- Inbound naming stays conventional. Broken extensions (video mkv → .mkv) are fixed.
- Fetcharr must not guess a previous name later — the record is the memory.
- Rename happens before the library place (Step 7).
Does not
- Dump unclear forma into Live Action.
- Place the file — that is Step 7.
Keepers leave [Staging] for the live library home. This is the place after verify / check / rename. Rejected copies never take this step.
Happens
- Only files that passed Step 4 and were not rejected in Step 5.
- Destination is the library home for this work (lane / type from Steps 1–2).
- Record the placement (from [Staging], to library home) so History / Stepback can follow.
Does not
- Place a rejected or unverified copy.
- Wipe Complete leftovers — that is Step 9.
Once keepers are in the library (or rejects are gone), take the work off the rest of the stack so nothing keeps hunting a file Boxarr already holds.
Happens
- Remove the matching downloader job.
- Remove matching grabber queue rows (strict title / SxxEyy).
- Unmonitor the grabbed episode/movie on the grabber (History / Stepback can restore).
- Clear matching Jellyseerr (and equivalent request) junk.
Does not
- Pause unrelated downloads.
- Wipe disk leftovers — that is Step 9.
Leave nothing from this acquisition except what is still a live downloader job. Complete for this work should be empty. Active should be queue-only.
Happens
- Active: keep a file only if a downloader job still owns it. No job = remove.
- If every downloader client is down, do not wipe packages.
- Complete after a successful move + verify: empty. Lane buckets stay.
- Encoder junk (nfo/txt/samples) unless the operator opted to preserve auxiliary media.
Does not
- Delete the lane buckets themselves.
- Wipe Active when every downloader is down.
Ask the catalog what this file is called and where it should live now that it is in the library home (not [Staging]).
Happens
- Canonical series name comes from the catalog.
- If the live home moved since last place, note it so History / Stepback can follow.
Does not
- Rename — that already happened in Step 6.
- Invent a name from the filename when the catalog already has one.
Fill empty catalog fields for this work. Do not thrash records that are already complete.
Happens
- Complete current metadata in the catalog → use it. Do not refetch.
- Incomplete → use what exists; queue missing metadata work to the end of this run’s queue; fetch only the affected episode/item.
Does not
- Write sidecars — that is Step 12.
- Refetch a complete catalog record for sport.
Write the configured metadata files beside the media. That is the external representation Kaizen will check.
Happens
- Sidecars live next to the file, not inside it.
Does not
- Lock / hide sidecars — that is Step 13.
- Refresh the media server — that is Step 14.
Hide, archive, and optionally lock the sidecars this run just wrote so they are managed, not casual litter next to the media.
Happens
- Valid managed sidecars are hidden / archived and may be set read-only.
- Do not lock third-party or user-managed sidecar files.
Does not
- Rewrite the sidecar contents — that was Step 12.
- Refresh the media server — that is Step 14.
Tell the media server the file is here, named, and has sidecars — so it is readable.
Happens
- Configurable grabbers / priorities.
- Smallest useful scope first (current season / current work). Whole-library rescan only when that is the smallest practical operation (movies).
Does not
- Scan the whole library as a habit.
Tick Flag and open reports after the package is readable — not at the head of Daily, so ingest is not blocked on report chrome.
Happens
- Replay retryable actions from the last run (stale “running” → failed).
- Load the Flag list (Do Not Download Again for exact versions — already honored at Step 1).
- Tick open reports without a Servarr search.
Does not
- Hunt Servarr.
- Start new grabs.
Default: keep all media. When Autorun turns this on, free space by removing the oldest eligible owned titles — never Kaizen, Review, or Flag.
Happens
- Space-limited policy: type, capacity, max GB, FIFO, age, watched, recency, minimum preserve. Oldest eligible first.
- Holds: unwatched, in-progress, current season, specials, locked titles, Review-parked, protect list.
- After a remove: unmonitor so it is not immediately re-grabbed.
Does not
- Run unless Autorun turns it on. Skipped is honest, not a fake OK.
- Act as Kaizen, Review, or Flag.
Reorganize the container without re-encoding (tracks, language, chapters, attachments). Off until Autorun. Re-mux ≠ transcode.
Happens
- Choose which streams stay.
- Quality check is Step 18 (Check Remux). Failed output parks in Review.
Does not
- Change the codec / resolution / bitrate — that is transcode (Step 19).
- Promote a rewrite that fails the probe.
After re-mux, prove the new file. Do not promote a rewrite that fails. If remux was skipped, this step skips (honest).
Happens
- ffprobe must open the file; streams and format must be readable.
- Failed output parks in Review; the bad rewrite is not canonical.
Does not
- Re-encode or re-mux.
- Replace Step 4 (inbound MediaInfo) or Kaizen’s later verify.
Change encoded media (codec, resolution, bitrate, hardware/software). Off until Autorun.
Happens
- Quality check is Step 20 (Check Transcode). Failed output parks in Review; do not promote.
- If ingest priority puts transcode ahead of viewable, files may stay in [Staging] until this pass succeeds.
Does not
- Only reshuffle streams — that is re-mux (Step 17).
- Promote a rewrite that fails the probe.
After transcode, prove the new file. Do not promote a rewrite that fails. If transcode was skipped, this step skips (honest).
Happens
- ffprobe must open the file; streams and format must be readable.
- Failed output parks in Review; the bad rewrite is not canonical.
Does not
- Re-encode or re-mux.
- Replace Step 4 (inbound MediaInfo).
Against the catalog, note what this run’s parent is still missing — only media this run touched.
Happens
- Example: catalog E1–E10, library has 1, 2, 10 → 3–9 missing → queue acquisition.
Does not
- Sweep the whole library.
- Fire global MissingEpisodeSearch.
Clear stalled / dead downloader jobs that are not actually progressing so they do not sit forever in Active.
Happens
- Identify stalled or timed-out downloads for this run’s work (and obvious dead jobs).
- Remove those jobs from the downloader. Do not wipe a live download.
Does not
- Pause healthy downloads.
- Wipe Complete leftovers — that is Step 9.
Re-check Flag after follow-up work. Honor Do Not Download Again and tick anything this run newly earned.
Happens
- Reload Flag. Exact versions marked Do Not Download Again stay skipped.
- Tick reports opened by later steps (rotate / remux / transcode / missing).
Does not
- Start new grabs from Flag chrome.
- Replace Step 15 (first Flag tick).
Queue acquisition for missing members and failed replacements this run already identified. Do not invent a global hunt.
Happens
- Push the missing / failed list from Steps 5, 21, and 23 onto the grabber / request stack.
- Due / in-window work is strong priority.
Does not
- Sweep titles this run never touched.
- Take over a high-priority grab the operator wants outside Fetcharr’s window.
Push what is already on the acquisition list and due inside Fetcharr’s window. Not a new hunt outside that window.
Happens
- Items already on the list, paused in grabbers, missing from the server-app stack, inside the current acquisition window, or scheduled / currently due.
- Due / in-window = strong priority. Outside the core/time frame = massively deprioritized or paused.
- Sitting Activity (queued / delay / warning / dead client) is not HAVE. Downloading is left alone.
Does not
- Take over a high-priority grab the operator wants outside Fetcharr’s window — they use another client.
Final cleanup and normalization of anything this run touched. Target: catalog → media → sidecars, relationships clean. Scope is the branch being processed, not sibling shows.
Happens
- Catalog: names and paths match; have vs expected; missing members of the parent this run touched.
- Quality (owned files only): language, quality, bitrate, container.
- Sidecars: metadata fleshed out; orphan/mismatched sidecars cleaned.
- Verify touched media (same probe as Step 4).
Does not
- Touch sibling shows.
- Delete third-party or user-managed files. Unknown handling goes to Review.
Autorun options
Undo log
Misfiled after Fetcharr? Undo through a run, or return files to [Staging]. Expanding a run lists each domain grabber (0 files if none).
LOOK stub — grabber breakdown (0 files if none).
LOOK stub — grabber breakdown (0 files if none).
LOOK stub — grabber breakdown (0 files if none).
LOOK stub — grabber breakdown (0 files if none).
LOOK stub — grabber breakdown (0 files if none).
LOOK stub — grabber breakdown (0 files if none).
Playlists
Episode slices only — not a full series, collection, or discography. Pushes to Emby / Jellyfin when keyed.
This week
Slice
Queue
Sitting Servarr Activity and downloader traffic for each Domain Grabber. Date bars share one window when linked. Lamps and speeds catch up in the background.
Sonarr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Radarr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Sportarr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Youtubarr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Lidarr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Soularr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Readarr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Listenarr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Kapowarr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Cardarr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Questarr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Romarr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Whisparr
↓ 0 B/s · ↑ 0 B/sTODAY 0
- Nothing dated today.
UPCOMING 0
- Nothing upcoming.
UNGRABBED 0
- Nothing ungrabbed in this window.
SERVARR QUEUE 0
- No sitting Servarr queue.
GRABBED 0
- No grabs in this window.
DOWNLOADING 0
- Nothing on the downloader.
COMPLETED 0
- No completions in this window.
Day
Metadata
Look up, strip embedded tags, sidecar census, and duplicate intelligence. Strip is remux-only. Dupes never delete.
Lookup
Flag a problem
You flag a bad copy. Boxarr hunts a replacement at max priority — above Fetcharr, never dropped by --stopallothers. Align/Repair find problems; this flags one.
Flag a copy
Recent media
Recent titles from Fetcharr logs in this window.
Align
Light profile rules: SxxExx + bare extensions. No full-name rewrite.
Align / lock
Versions
Repair
Look up by title, then path + health probe. No raw paths. Diagnose only — not a remux, not Review.
Check
Review
Current and Past media with issues — flagged releases plus Boxarr/Fetcharr parked items. Range chips match Queue.
Current Media with issues
Loading.
Past Media with issues
Loading.
Logs
Files is the browse home. Open a folder, or search. Purge old logs under Files. Live job output stays in the pane below.
Files
Loading…
Open a folder.
Purge logs
Help
Supported services, Fetcharr Daily steps, live verbs, and CLI flags.
Supported Services
Every service Boxarr can take, sorted like the Control Panel. Support is a ladder: Unwired (Designed) → Wired (Implemented) → Tested → Verified → Certified. Untested is a flag for services Conner will not test before initial release; community feedback may fill Tested and Verified on those. Certified stays Conner. Empty official links are omitted. This list is the catalog (templates), not your live credentials.
SoT: configuration/supported-services.json5.
Loading catalog…
Fetcharr
Fetcharr is Boxarr’s Daily ingest. It does not replace Sonarr, Radarr, or the downloader. It claims what landed, proves it, names it, places it, and follows up on the parents it touched. Host is site-root Boxarr.exe. The CLI verb is python boxarr.py --fetcharr — that is not the activate path.
Catalog is the source of truth. Downloader tags are the first hypothesis — catalog confirms or corrects. Filename guessing does not override a downloader tag. Face language is downloader. [Staging] spelling is intentional.
Numbers below are run order (1–26). Default = execute. Test Mode (--testfirst / --test / --dryrun) is one global switch — plan only. Rotate, re-mux, and transcode stay off until Autorun; skipped is honest.
Three moves: Claim (1–9) → Place (10–14) → Follow-up (15–26). Queue first, then disk. Rename in [Staging] before the library place. Readable media before Flag. Complete empty after move+verify. Active = live queue jobs only.
- #01Queue
- #02Stop
- #03Stage
- #04Verify
- #05Check
- #06Rename
- #07Library
- #08Remove
- #09Clean
- #10Catalog
- #11Metadata
- #12Sidecars
- #13Lock
- #14Refresh
- #15Flag
- #16Rotate
- #17Re-mux
- #18Check Remux
- #19Transcode
- #20Check Transcode
- #21Missing
- #22Stall
- #23Flags
- #24Add
- #25Push
- #26Kaizen
Claim — steps 1–9
Know what is supposed to be there, move it into [Staging], prove it, rename it, place keepers in the library, then take it off the rest of the stack so nothing keeps hunting a file Boxarr holds.
#01 Process the Grabarr Queue
Find out what is supposed to be here (Grabarr queue) and what actually landed (Complete disk). That pair is this run’s work item.
- How
-
- Connect to Grabarr. Keep the queued item, magnet, direct-download URL, and downloader save path / category / tags.
- Downloader category / tag / label is the working media type and forma. Filename guessing does not override a downloader tag.
- Scout Complete drop folders. Loose files at the Complete root count. Pure […] folders are buckets, never titles.
- Skip dotfiles, skip names, and Flagged exact versions (Do Not Download Again).
- Does not
-
- Rename, place to library, or hunt Servarr.
- Treat encryption as a Daily step.
#02 Stop the Downloader
Freeze the related downloader jobs so the file is not still writing while Boxarr moves it. Confirm type / forma against the catalog.
- How
-
- Stop/pause related jobs for this run’s work items. Seed/upload may already be settled; pause active downloads.
- Assume the downloader was right (Step 1), then confirm against the catalog. Catalog agrees → keep. Catalog disagrees → catalog wins.
- A dead downloader is reported. It does not abort the rest of the run.
- Does not
-
- Pause every client.
- Remove the job — that is Step 8.
#03 Move Media to [Staging]
Claim the work item into untyped [Staging]. That is the holding land — not the grabber path, not the downloader path, not the library home.
- How
-
- Ensure each library’s [Staging] folder exists before claiming into it.
- Cross-lane live dumps are refused.
- A leftover already in [Staging] can be claimed.
- Does not
-
- Verify the file yet — that is Step 4.
- Place into the live library home — that is Step 7.
#04 Verify the Media (in [Staging])
Prove that what landed is what the acquisition claimed, and that it is acceptable to keep. First verify gate.
- How
-
- MediaInfo and the health probe: video/audio characteristics, language, region, tracks; the file actually opens (known video types).
- Unknown / unsupported types park in Review and drop out of this run.
- A known type that will not open is Do Not Download Again for that exact version and drops out.
- Books, comics, manga, magazines, ROMs skip the video probe; they still need a known type.
- Does not
-
- Place a bad copy into the library.
- Queue the replacement — that is Step 5.
#05 Check Media
If verification failed: throw the copy away and ask for another. It must not become canonical library content. (Was Reject / Re-queue Failed Media.)
- How
-
- Reject the copy.
- Queue a replacement through the server-app stack / Flag refetch.
- This is a decision/action, not a complicated branch.
- Does not
-
- Grab a future release — that is a History action, not this step.
- Keep a failed file “just in case.”
#06 Rename Media
Apply the catalog / conventional name while the file is still in [Staging]. Record original name, new name, history.
- How
-
- Inbound naming stays conventional. Broken extensions (video mkv → .mkv) are fixed.
- Fetcharr must not guess a previous name later — the record is the memory.
- Rename happens before the library place (Step 7).
- Does not
-
- Dump unclear forma into Live Action.
- Place the file — that is Step 7.
#07 Move Media to Library
Keepers leave [Staging] for the live library home. This is the place after verify / check / rename. Rejected copies never take this step.
- How
-
- Only files that passed Step 4 and were not rejected in Step 5.
- Destination is the library home for this work (lane / type from Steps 1–2).
- Record the placement (from [Staging], to library home) so History / Stepback can follow.
- Does not
-
- Place a rejected or unverified copy.
- Wipe Complete leftovers — that is Step 9.
#08 Remove from Downloader, Grabber, and Jellyseerr
Once keepers are in the library (or rejects are gone), take the work off the rest of the stack so nothing keeps hunting a file Boxarr already holds.
- How
-
- Remove the matching downloader job.
- Remove matching grabber queue rows (strict title / SxxEyy).
- Unmonitor the grabbed episode/movie on the grabber (History / Stepback can restore).
- Clear matching Jellyseerr (and equivalent request) junk.
- Does not
-
- Pause unrelated downloads.
- Wipe disk leftovers — that is Step 9.
#09 Comprehensive Cleanup
Leave nothing from this acquisition except what is still a live downloader job. Complete for this work should be empty. Active should be queue-only.
- How
-
- Active: keep a file only if a downloader job still owns it. No job = remove.
- If every downloader client is down, do not wipe packages.
- Complete after a successful move + verify: empty. Lane buckets stay.
- Encoder junk (nfo/txt/samples) unless the operator opted to preserve auxiliary media.
- Does not
-
- Delete the lane buckets themselves.
- Wipe Active when every downloader is down.
Place — steps 10–14
Ask the catalog what it is, fill metadata, write sidecars, lock/hide them, and refresh the server so the file is readable. Keepers already left [Staging] in Step 7.
#10 Check Against Catalog
Ask the catalog what this file is called and where it should live now that it is in the library home (not [Staging]).
- How
-
- Canonical series name comes from the catalog.
- If the live home moved since last place, note it so History / Stepback can follow.
- Does not
-
- Rename — that already happened in Step 6.
- Invent a name from the filename when the catalog already has one.
#11 Update / Complete Metadata
Fill empty catalog fields for this work. Do not thrash records that are already complete.
- How
-
- Complete current metadata in the catalog → use it. Do not refetch.
- Incomplete → use what exists; queue missing metadata work to the end of this run’s queue; fetch only the affected episode/item.
- Does not
-
- Write sidecars — that is Step 12.
- Refetch a complete catalog record for sport.
#12 Build Sidecars
Write the configured metadata files beside the media. That is the external representation Kaizen will check.
- How
-
- Sidecars live next to the file, not inside it.
- Does not
-
- Lock / hide sidecars — that is Step 13.
- Refresh the media server — that is Step 14.
#13 Lock / Hide Sidecars
Hide, archive, and optionally lock the sidecars this run just wrote so they are managed, not casual litter next to the media.
- How
-
- Valid managed sidecars are hidden / archived and may be set read-only.
- Do not lock third-party or user-managed sidecar files.
- Does not
-
- Rewrite the sidecar contents — that was Step 12.
- Refresh the media server — that is Step 14.
#14 Refresh Media Server
Tell the media server the file is here, named, and has sidecars — so it is readable.
- How
-
- Configurable grabbers / priorities.
- Smallest useful scope first (current season / current work). Whole-library rescan only when that is the smallest practical operation (movies).
- Does not
-
- Scan the whole library as a habit.
Follow-up — steps 15–26
After the file is readable: tick Flag, optionally rotate / re-mux / transcode (each with its own check), note missing members, clear stalls, re-check Flag, add missing/failed, push what is due, then Kaizen the branch this run touched.
#15 Review Flagged Media
Tick Flag and open reports after the package is readable — not at the head of Daily, so ingest is not blocked on report chrome.
- How
-
- Replay retryable actions from the last run (stale “running” → failed).
- Load the Flag list (Do Not Download Again for exact versions — already honored at Step 1).
- Tick open reports without a Servarr search.
- Does not
-
- Hunt Servarr.
- Start new grabs.
#16 Rotate Media optional
Default: keep all media. When Autorun turns this on, free space by removing the oldest eligible owned titles — never Kaizen, Review, or Flag.
- How
-
- Space-limited policy: type, capacity, max GB, FIFO, age, watched, recency, minimum preserve. Oldest eligible first.
- Holds: unwatched, in-progress, current season, specials, locked titles, Review-parked, protect list.
- After a remove: unmonitor so it is not immediately re-grabbed.
- Does not
-
- Run unless Autorun turns it on. Skipped is honest, not a fake OK.
- Act as Kaizen, Review, or Flag.
#17 Re-mux Media optional
Reorganize the container without re-encoding (tracks, language, chapters, attachments). Off until Autorun. Re-mux ≠ transcode.
- How
-
- Choose which streams stay.
- Quality check is Step 18 (Check Remux). Failed output parks in Review.
- Does not
-
- Change the codec / resolution / bitrate — that is transcode (Step 19).
- Promote a rewrite that fails the probe.
#18 Check Remux optional
After re-mux, prove the new file. Do not promote a rewrite that fails. If remux was skipped, this step skips (honest).
- How
-
- ffprobe must open the file; streams and format must be readable.
- Failed output parks in Review; the bad rewrite is not canonical.
- Does not
-
- Re-encode or re-mux.
- Replace Step 4 (inbound MediaInfo) or Kaizen’s later verify.
#19 Transcode Media optional
Change encoded media (codec, resolution, bitrate, hardware/software). Off until Autorun.
- How
-
- Quality check is Step 20 (Check Transcode). Failed output parks in Review; do not promote.
- If ingest priority puts transcode ahead of viewable, files may stay in [Staging] until this pass succeeds.
- Does not
-
- Only reshuffle streams — that is re-mux (Step 17).
- Promote a rewrite that fails the probe.
#20 Check Transcode optional
After transcode, prove the new file. Do not promote a rewrite that fails. If transcode was skipped, this step skips (honest).
- How
-
- ffprobe must open the file; streams and format must be readable.
- Failed output parks in Review; the bad rewrite is not canonical.
- Does not
-
- Re-encode or re-mux.
- Replace Step 4 (inbound MediaInfo).
#21 Check Library for Missing Content
Against the catalog, note what this run’s parent is still missing — only media this run touched.
- How
-
- Example: catalog E1–E10, library has 1, 2, 10 → 3–9 missing → queue acquisition.
- Does not
-
- Sweep the whole library.
- Fire global MissingEpisodeSearch.
#22 Remove Stall Downloads
Clear stalled / dead downloader jobs that are not actually progressing so they do not sit forever in Active.
- How
-
- Identify stalled or timed-out downloads for this run’s work (and obvious dead jobs).
- Remove those jobs from the downloader. Do not wipe a live download.
- Does not
-
- Pause healthy downloads.
- Wipe Complete leftovers — that is Step 9.
#23 Check Flagged Items
Re-check Flag after follow-up work. Honor Do Not Download Again and tick anything this run newly earned.
- How
-
- Reload Flag. Exact versions marked Do Not Download Again stay skipped.
- Tick reports opened by later steps (rotate / remux / transcode / missing).
- Does not
-
- Start new grabs from Flag chrome.
- Replace Step 15 (first Flag tick).
#24 Add Missing / Failed Items
Queue acquisition for missing members and failed replacements this run already identified. Do not invent a global hunt.
- How
-
- Push the missing / failed list from Steps 5, 21, and 23 onto the grabber / request stack.
- Due / in-window work is strong priority.
- Does not
-
- Sweep titles this run never touched.
- Take over a high-priority grab the operator wants outside Fetcharr’s window.
#25 Push Scheduled Items
Push what is already on the acquisition list and due inside Fetcharr’s window. Not a new hunt outside that window.
- How
-
- Items already on the list, paused in grabbers, missing from the server-app stack, inside the current acquisition window, or scheduled / currently due.
- Due / in-window = strong priority. Outside the core/time frame = massively deprioritized or paused.
- Sitting Activity (queued / delay / warning / dead client) is not HAVE. Downloading is left alone.
- Does not
-
- Take over a high-priority grab the operator wants outside Fetcharr’s window — they use another client.
#26 Kaizen
Final cleanup and normalization of anything this run touched. Target: catalog → media → sidecars, relationships clean. Scope is the branch being processed, not sibling shows.
- How
-
- Catalog: names and paths match; have vs expected; missing members of the parent this run touched.
- Quality (owned files only): language, quality, bitrate, container.
- Sidecars: metadata fleshed out; orphan/mismatched sidecars cleaned.
- Verify touched media (same probe as Step 4).
- Does not
-
- Touch sibling shows.
- Delete third-party or user-managed files. Unknown handling goes to Review.
Verbs
Boxarr work lands as verbs under modules/Boxarr/verbs/<name>/. This list matches what is on disk in Boxarr.test (import 2026-09-17). Mesh stays Metarr; face GUI is not a verb.
- align — forma / kinds / tree alignment (
forma,kinds,tree) - clients — Servarr, push, Jellyseerr, downloader clients (
arr,arr_push,jellyseerr,qbittorrent) - core — actions ledger, components, fs, JSON format, lock, region, versions
- kaizen — own / review-missing / review-pod
- library — adopt, build, catalogue, edge cases, forma homes, home, lookup, policy
- metadata — episode workbook, filemeta, IMDb, mediainfo
- naming — classification, fields, labels, models, numbering, splits
- net — connect, mediaservers, network profile, downloader paths
- ops — control (health / diagnose / panic / pause / start), dupes, marks, purge, repair, rotate, staging clean, strays
- pipeline — daily log / policy, progress, run, stepback
- report — flags, placements
- scan — checkpoint, media inventory, series log, truth
- settings — configref, cred paths, history, services edit
- steps — Daily step01–step17 implementations (
base+ step modules)
Skipped on import (not Boxarr-core verbs): mesh (Metarr), gui (face). See modules/Boxarr/verbs/README.md.
CLI
Maxim: default run = execute (real moves / API). Pass --testfirst (aliases --test / --dryrun) to plan only. There is no --execute flag.
LOOK host (live on Boxarr.test)
Site-root Flask shim: python Boxarr.py (also cli/boxarr_host.py).
--site-root PATH— override site root--direct— direct serve mode--console— console logging--open-browser/--no-browser— browser open behavior
Default LOOK URL: http://127.0.0.1:8787/.
Verb CLI (donor SoT)
Full verb flags live in legacy D:\Sites\Boxarr\cli\parser.py (entry python boxarr.py). Boxarr.test verbs are landed under modules/Boxarr/verbs/; thin cli/ wrappers were not copied in the 2026-09-17 import (see modules/Boxarr/verbs/README.md). Until wrappers land here, use the donor tree for real flag dispatch — names below match that parser.
Entry + common flags
python boxarr.py --fetcharr python boxarr.py --fetcharr --testfirst python boxarr.py --list-steps python boxarr.py --steps 1-5 --fetcharr python boxarr.py --config PATH\to\config.json
Flags by verb home
- pipeline —
--fetcharr/--daily,--steps,--stepback,--list-steps,--logs,--search,--resume-state - ops —
--health/--status,--diagnose/--diag,--panic,--pause,--start,--dupes,--rotate,--repair --check TITLE,--purge,--staging --clean|--ensure - net —
--connect,--show-network - scan —
--mediascan(alias--media; deprecated--scan),--fresh,--limit, media-type selectors - align —
--align [TITLE],--forma, with scan helpers--findhome,--fill - library —
--map(with--all/--arr/--qb/--library),--build --library,--audit --current|--full - metadata —
--metadata --strip|--sidecar(and strip-* family) - report —
--flag/--report(+ scope / reason / quarantine) - core —
--actions,--region,--lock/--unlock,--version - kaizen —
--cleanup [TITLE],--upgrade,--replace, playlist helpers - clients / settings —
--show-creds,--write-example-config,--config - steps — selected via
--steps/--list-stepswhile running--fetcharr
Media-type / forma selectors (compose with verbs)
--series --movies --anime --animation --adult-animation --live-action --talk-shows --sports --documentaries --music --books --comics --manga --roms --private --cards --magazines — and --all where the verb accepts it.
Seek (library hunt — not a standalone verb folder)
python boxarr.py --seek --series --core=YYYY-CC python boxarr.py --seek --movies --year=YYYY --backlog=N
Never fires global MissingEpisodeSearch / MissingMoviesSearch. Mesh (--mesh) is Metarr-lane, not a Boxarr.core verb.
LOOK / GUI aliases (donor)
--gui (aliases --webui / --web / --server), --gui-port, --gui-host, --no-browser, --detach, --gui-stop, --restart.
Bugs
Parked. Use this tab when something in Boxarr is wrong and you want it written down.
Report
Bug report (LOOK).
QA
Alpha. Prefer Copy of /qa/ packs, inlined here.
Overview
Sprite Packs Prefer Copy the /qa/ pack pages (SVG Icon Pack, Fetcharr Mascot, Fetcharr Strips). Artwork stays under assets/.
Sprite Packs
SVG Icon Pack
Icons - assets/svg-libraries/servarr-full-icons-pack.svg
Full pack - live Illustrator layers - Law 8 chevrons - Applications / Vectors default closed
Loading pack.
Fetcharr Mascot
Fetcharr mascot - assets/fetcharr/fetcharr-mascot-strip.svg
Same format as strips: T2 = animation name - T3 = sprites in labeled order - Law 8 chevrons
Mascot art is still WIP. Format is locked - save in Illustrator and refresh. todo / . is the unfinished set. Template layer is skipped.
FPS
Loading mascot.
Fetcharr Strips
Fetcharr strips - assets/fetcharr/fetcharr-strips.svg
T2 = animation name - T3 = sprites in frame order - rows ABC - Law 8 chevrons
Live file (SVG not edited). Frames play in labeled order. Pause a row, or click a thumb to pin a frame.
Search
FPS
Loading strips.
Grabber color tables
LOOK test case — per-Servarr-grabber title / bg / trim. Hex lives in styles/grabbers/*.cs3. Face sample hides when the table is too narrow.
| Grabber | Title | BG | Trim | Face sample |
|---|---|---|---|---|
| Sonarr | #00cafd |
#002630 |
#008cb0 |
Sonarr
paint stub
|
| Radarr | #fec130 |
#302508 |
#b18621 |
Radarr
paint stub
|
| Sportarr | #c77575 |
#300000 |
#a33a3a |
Sportarr
paint stub
|
| Youtubarr | #ff0033 |
#310009 |
#b20023 |
Youtubarr
paint stub
|
| Lidarr | #009151 |
#001008 |
#004426 |
Lidarr
paint stub
|
| Soularr | #009151 |
#001008 |
#004426 |
Soularr
paint stub
|
| Readarr | #e45b5d |
#2e050b |
#881f21 |
Readarr
paint stub
|
| Listenarr | #e45b5d |
#2e050b |
#881f21 |
Listenarr
paint stub
|
| Kapowarr | #e7c400 |
#191500 |
#9a8300 |
Kapowarr
paint stub
|
| Cardarr | #e7c400 |
#191500 |
#9a8300 |
Cardarr
paint stub
|
| Questarr | #e040fb |
#240528 |
#9b2cae |
Questarr
paint stub
|
| Romarr | #e040fb |
#240528 |
#9b2cae |
Romarr
paint stub
|
| Whisparr | #fe69b2 |
#301422 |
#b1497c |
Whisparr
paint stub
|
| Prowlarr | #e89a6c |
#2a0e00 |
#5c2a12 |
Prowlarr
paint stub
|
| Bazarr | #75a0c7 |
#001a30 |
#75a0c7 |
Bazarr
paint stub
|
| Fetcharr | #7ec8e3 |
#002433 |
#7ec8e3 |
Fetcharr
paint stub
|