Commit graph

68 commits

Author SHA1 Message Date
soulis-1256
692d535418
fix(bazarr): lower min scores for non-English subtitle languages
TRaSH 90/80 skips OpenSubtitles.com results that miss hash and source.
Use 70/50 when any selected language is not English, enable greeksubs
for Greek, and search wanted after wiring.
2026-08-23 23:41:05 +03:00
soulis-1256
a758a59aa5
feat(bazarr): multi-language subtitles and OpenSubtitles edit flow
Pick extra subtitle languages in setup and config edit (Jellyfin preferred
first, Bazarr downloads all). Config edit OpenSubtitles goes straight to
username/password, ignores leftover fzf Enter, and cancel leaves secrets.
2026-08-23 23:23:23 +03:00
soulis-1256
4d3bdf88a9
docs: add disaster recovery and restore from backup mode to README 2026-08-22 17:55:41 +03:00
soulis-1256
1568e6c2bc
feat(setup): add restore from backup archive mode to setup wizard
- Add option 3 (Restore from backup) to interactive setup mode prompt
- Support --restore, --restore=FILE, --express, and --manual CLI flags
- Implement restore_from_backup_wizard to extract archive, configure runtime paths, and boot restored stack
- Add test_setup_restore.sh unit test suite
2026-08-22 17:51:21 +03:00
soulis-1256
c7d9ff1648
docs: overhaul and restructure README
- Add project badges and quick-navigation links
- Categorize CLI commands into functional groups
- Add default service ports table and directory layout
- Streamline installation steps and format advanced options
- Refine tone across stack, features, and legal sections
2026-08-22 16:36:45 +03:00
soulis-1256
2ca21c6b01
fix(cli, compose): optimize startup speed, clean progress output, and show dashboard on start 2026-08-20 22:50:12 +03:00
soulis-1256
dc45fe8db6
Clarify and condition leftover cleanup prompts 2026-08-20 18:44:48 +03:00
soulis-1256
0115f9d648
Standardize quality profiles to 4K/1080p, disable recycle bin, add migration 003, and update API docs 2026-08-20 18:29:09 +03:00
soulis-1256
f2e1377468
Isolate request-delete queue drains and support WEB/BluRay quality profiles 2026-08-20 18:06:46 +03:00
soulis-1256
54f3aaa7cd
Close the wiring blank gap and label uninstall removals.
Skip wait newlines when an API key is already present, and say
config/media were removed instead of listing them like a live status.
2026-08-19 00:05:43 +03:00
soulis-1256
f5e7d18edf
Cancel qB grabs when a Seerr request is deleted.
Drain the *arr queue before title delete, trust queue and history hashes,
and match leftover torrents by title and year so an in-progress release
name is removed instead of left downloading.
2026-08-18 23:57:18 +03:00
soulis-1256
0890007d81
Stop setup when an install already exists.
Setup is first-time only: a complete tree prints the path and exits
(use upgrade, config edit, or uninstall). Incomplete leftovers from a
failed attempt are offered for cleanup. Uninstall is quieter and
remembers earlier install/media paths so stray trees still get found.
2026-08-18 23:22:08 +03:00
soulis-1256
784977aeee
Use one quality choice for Radarr, Sonarr, and Seerr.
Express asks the same question as manual. The pick is stored as
QUALITY_TIER and applied to movies and TV, including Seerr. Compose
up hides sidecar Dockerfile output behind a spinner.
2026-08-18 23:07:29 +03:00
soulis-1256
31b7ab8cc0
Make Prowlarr wiring logs say what happened
Indexer add-but-not-on is a full sentence. VPN search routing
talks about searches, not Gluetun HTTP proxies. Do not invent
FlareSolverr or paste our own jargon around Prowlarr's error.
2026-08-16 22:11:00 +03:00
soulis-1256
d1686a846d
Say why a Prowlarr indexer was left off
Replace the jargon "enabled save failed" with a plain note that
Prowlarr could not test the indexer.
2026-08-16 21:59:49 +03:00
soulis-1256
881403b128
Route Prowlarr indexer HTTP through Gluetun
Enable Gluetun's HTTP proxy and add it as a Prowlarr indexer proxy
when VPN is on so searches leave via the tunnel, not the host ISP.
Remove the managed proxy when VPN is off. Log the real Prowlarr error
when an indexer can only be saved disabled, instead of always blaming
FlareSolverr.
2026-08-16 21:58:54 +03:00
soulis-1256
edac50f8a2
Fix specials wipe, leftover torrent dirs, and default-stack pins
Keep TV specials when a request covers only regular seasons. Encode
first-run passwords, default missing config-show fields, and strip
Windows CRLF on Python, Dockerfiles, and migrations. Pin express-stack
images. After Sonarr title delete, remove leftover torrents/ dirs even
when qB already dropped the torrent. Document that only the default
stack is supported.
2026-08-16 21:19:15 +03:00
soulis-1256
7d2d0d1770
Do not remap existing *arr titles when applying quality defaults
Add New still opens on the assemblrr profile. Library movies and
shows keep whatever quality profile they already have.
2026-08-16 16:29:43 +03:00
soulis-1256
4d388f5435
Write auth secrets only after every UI accepts the new login
A partial failure used to replace secrets and point at config apply,
which does not retry password changes. Keep the old secrets and ask
for config edit again.
2026-08-16 16:26:10 +03:00
soulis-1256
ea26dc794e
Make PATH assemblrr a wrapper around the install CLI
Stop copying cli.sh and a lib subset to ~/.local/bin. Setup and upgrade
write a short wrapper that execs $INSTALL_DIR/cli.sh. Leftover PATH libs
are removed. update-cli now points at upgrade.
2026-08-16 16:20:22 +03:00
soulis-1256
962e322fdb
Add config apply, full auth change, and *arr quality defaults
Re-wire without replacing compose. Update the shared login on every
UI. Make assemblrr quality profiles the Radarr/Sonarr Add New default.
config edit is picker-only. Forward Seerr Host headers, chmod only the
VPN secrets just written, and ignore Python cache files.
2026-08-16 15:58:48 +03:00
soulis-1256
e3c4b661e5
Make Bazarr provider picker match the indexer desired-set contract
Edit mode preselects enabled providers. Ctrl-O saves that set.
Empty confirm asks before disabling all. Esc still means no change.
2026-08-16 15:07:06 +03:00
soulis-1256
97d33b6a09
List purge in assemblrr --help and the README command table 2026-08-16 15:02:43 +03:00
soulis-1256
d4808f96a5
Fix remaining merge-review correctness bugs
Hold media-purge-watch when *arr shows a queue or upgrade delete.
config edit vpn retargets Radarr/Sonarr qB host and clears tun0 when
VPN is off. Start waits on the service catalog (missing ≠ ready).
Empty indexer confirm no longer wipes Prowlarr. Wire only minSeeders.
Existing-media import is optional.
2026-08-16 14:56:36 +03:00
soulis-1256
1bcd530f31
Merge origin/main to keep bootstrap --ref / ASSEMBLRR_REF
Main added install-ref one-liners; keep those bootstraps and README
examples so a later merge back to main does not drop --ref.
2026-08-16 14:52:25 +03:00
soulis-1256
bdd5f263b5
Tick elapsed seconds on blocking waits, not just API polls
Recyclarr sync, backup/restore archives, git fetches, and Prowlarr
indexer sync now use wait_while/wait_inline. Compose up/pull keep
their own progress instead of a fake overlay.
2026-08-16 14:40:25 +03:00
soulis-1256
1149dfaae4
Show elapsed seconds on wait lines instead of dots
Radarr and the other polls now rewrite one line as
'Waiting for Radarr API (12s)' instead of a growing dot trail.
2026-08-16 14:36:25 +03:00
soulis-1256
5f1ad302ea
Share detected install/media paths on status and uninstall
print_detected_locations is the single block both commands use.
Uninstall now names every path it removes or keeps.
2026-08-16 14:30:50 +03:00
soulis-1256
2493fddceb
Skip Hub pulls for local sidecars and strip CR from sourced .env
vpn-watchdog and media-purge-watch are build-only images; pull_policy
build stops the 'pull access denied' noise. Windows clones left CRLF
in .env.example so config.sh died with $'\\r' on /mnt/e — strip CR
when generating and sourcing .env.
2026-08-16 14:27:28 +03:00
soulis-1256
843d8dfc61
Record external-drive paths early and make uninstall find leftovers
A hung copy onto /mnt/e left the home pointer pointing at ~/assemblrr,
so uninstall --force --media never touched the E: trees. Write
INSTALL_DIRECTORY and MEDIA_DIRECTORY as soon as paths are chosen,
scan mounted drives for leftover assemblrr dirs, time out stuck
USB/WSL I/O, and let r refresh the drive picker (WSL automount).
2026-08-16 14:15:46 +03:00
soulis-1256
229ca00795
Use pacman -Syu when installing Arch packages
-Sy without -u is a partial upgrade and can install jq against a
newer glibc than the system has. Warn first, then run a full -Syu,
and fail if jq still cannot execute.
2026-08-16 13:54:32 +03:00
soulis-1256
6a142c75d8
Fix Recyclarr image, CLI PATH, and add drive path picker
Pin Recyclarr to ghcr.io/recyclarr/recyclarr:8 (:latest is unpublished)
and write ~/.local/bin into bashrc/zshrc/fish so the early CLI still
works after a failed setup on Arch/WSL. Setup now picks install/media
paths from an fzf list of home plus mounted drives.
2026-08-16 13:49:00 +03:00
soulis-1256
9ac07caf12
Scope TV request-delete to requested seasons
Seerr's DELETE /api/v1/media/:id/file is title-scoped and would wipe
every remaining season. For a TV request that is only a subset, the
gateway now deletes those Sonarr episode files and unmonitors them,
then drops the request. Movies and last remaining seasons still use
the title-level cascade.

media-purge --seasons and the inotify watcher match that: a season
path never title-purges (other seasons may only be monitored). qB
cleanup requires a season token, refuses multi-season and S01-03
packs, and uses the same title-boundary rules as title-level. *arr
recycle bin is /data/media/.recycle with 7-day cleanup.

Sonarr uncertainty (missing key, failed episodefile list, empty TV
season list) returns 502 and leaves the request. The gateway mounts
config/sonarr/ as a directory so first install cannot replace
config.xml with a Docker-created directory.
2026-08-16 12:04:27 +03:00
soulis-1256
e11ac87d7a
Fix Jellyfin empty-series after Sonarr season-pack imports
Fire Sonarr refresh once on import complete, skip a second
/Library/Refresh so it cannot cancel a running scan, and heal
series that still show 0 episodes despite video on disk.
2026-08-14 11:45:10 +03:00
soulis-1256
710540fc40
Add modular config edit and wait for healthy services
Section-based `config edit` (setup vs edit copy), qB Automatic Torrent
Management so category folders are used, upgrade --skip-stack/--skip-wire,
and a port-forwarding warning instead of a provider allowlist.
2026-08-13 21:50:59 +03:00
soulis-1256
0696a83e2d
Fix fresh-install stalls and harden default-on sidecars
qBittorrent 5.x does not bind WireGuard's tun0 unless told to, so tracker
and DHT packets left via eth0 and Gluetun dropped them (stalledDL). Bind
the session to tun0 on VPN installs. Build sidecar images on the host
instead of apk at start, move vpn-watchdog off Gluetun's netns, ignore
non-video inotify events, and stop start/upgrade from aborting or
re-prompting.
2026-08-13 01:25:20 +03:00
soulis-1256
6b1fb22adc
Verify OpenSubtitles.com login during setup
Explain that the website accepts email but Bazarr/API need the profile
username; reject @-looking usernames and live-test credentials via the
OpenSubtitles REST login before storing secrets.
2026-08-12 15:44:02 +03:00
soulis-1256
cea83b1d9d
Document mid-setup uninstall after early CLI bootstrap
Align uninstall.md with early operator CLI install, discovery pointer,
and abort paths (PATH CLI, install-tree cli.sh, or manual cleanup).
2026-08-12 15:36:02 +03:00
soulis-1256
fd4e7f33e1
Quiet setup copies and install CLI early for abort/uninstall
Per-file copy noise goes to the setup log only. Bootstrap the install
tree and operator CLI as soon as the path is known so users can run
uninstall after mid-setup abort; improve CLI discovery and partial-tree
uninstall resilience.
2026-08-12 15:33:44 +03:00
soulis-1256
0858a5a629
Drop Portainer from default stack; harden upgrade and setup UX
Remove Portainer from managed compose and catalog; leave a custom.yaml
example for optional use. Upgrade/start use compose --remove-orphans and
migration 002 removes leftover Portainer containers unless custom.yaml
keeps it. Fix setup double URL list when status is unhealthy, share
OpenSubtitles y/N on express, and tone down indexer/provider prompts.
2026-08-12 15:26:21 +03:00
soulis-1256
987fd0ccac
Select Bazarr providers via fzf from the live image
Drop hardcoded subtitle-provider defaults. Wire-up lists providers
from the running Bazarr container and enables only user selections
(plus OpenSubtitles.com when credentials were saved).
2026-08-12 15:08:59 +03:00
soulis-1256
0708ff92de
Support install ref in bootstrap one-liner
Clone a branch/tag via --ref/--branch or ASSEMBLRR_REF so the stable
main bootstrap can install non-default refs.
2026-08-12 14:53:02 +03:00
soulis-1256
a72875a77a
Use synthetic titles in media-purge match self-tests.
Avoid hardcoding real movie names in fixture data; keep only abstract
prefix/year cases that exercise the matcher rules.
2026-08-12 14:29:40 +03:00
soulis-1256
c2920808eb
Harden media-purge qB matching and refresh Jellyfin on delete.
Prefer history hashes filtered by library folder key, then exact folder-key
match only (no sequel prefix hits). Refuse ambiguous multi-matches. Ignore
partial file-delete events. Best-effort Jellyfin library refresh after purge.
2026-08-12 14:26:27 +03:00
soulis-1256
7339d1b8b4
Add seerr-gateway so delete request fully purges media.
Stock Seerr only drops the request row; intercept DELETE /api/v1/request/:id
to cascade media file delete (*arr + purge hooks) before removing the request.
2026-08-12 14:06:49 +03:00
soulis-1256
c180732db1
Add media purge cascade, seed defaults, and wire on upgrade.
Hardlink-safe cleanup: Seerr/Jellyfin/*arr deletes remove library files and
qB torrents via purge hooks and media-purge-watch. Indexers get seed ratio/time
so completed downloads can leave torrents/. Upgrade always re-wires services;
drop user-facing config sync. Live e2e covers Radarr, Seerr, and Jellyfin APIs.
2026-08-12 13:19:49 +03:00
soulis-1256
c00377844e
Import existing media into Radarr/Sonarr during config sync.
Unmapped folders under movie/TV roots are looked up and added with the
default quality profile (no search), then rescanned and synced to Bazarr.
Enables Netflix-like reinstall/keep-media and fills Bazarr for disk libraries.
2026-08-11 23:05:48 +03:00
soulis-1256
22562555c9
Replace services.txt cheat-sheet with assemblrr status dashboard.
Drop writing ~/assemblrr_services.txt; status now shows live state and
localhost URLs for each service, with --docker for raw compose ps.
Health parsing is fixed under set -e; uninstall cleans legacy txt.
2026-08-11 22:55:23 +03:00
soulis-1256
06729f5e5d
Fix Bazarr API key discovery for config.yaml and upgrade re-source.
Modern Bazarr stores settings in config.yaml (not config.ini). Read
auth.apikey from yaml or ini so upgrade/config sync can wire providers.
2026-08-11 22:46:49 +03:00
soulis-1256
b4d792f2b0
Add assemblrr upgrade engine with git/--from transport and Bazarr migration.
Introduce managed-file apply, ordered migrations, backup-first upgrade CLI,
and migration 001_add_bazarr (skip if user already defined Bazarr). Local
--from uses the same apply path as production git fetch of main.
2026-08-11 22:34:34 +03:00