Skip to content

Releases: PylotLight/ShowFlow

v0.1.91

Choose a tag to compare

@github-actions github-actions released this 21 Oct 03:50

v0.1.91

  • No more Cutoff unmet card on the Dashboard. The list now lives where the cutoff is set: Settings → Quality → a profile's Upgrades section has a collapsed Episodes below this cutoff view (loaded only when opened) showing what's still being upgraded, what's been given up on and why.
  • Fix: profiles that allow 4K no longer chase 2160p for every 1080p file. With upgrades on and no explicit "Until", the cutoff used to be the profile's Target (which is really its ceiling, e.g. 2160p) or, with Target = Any, the top resolution (8K). It's now the target capped at 1080p. Turning on Keep upgrading also pre-fills Until with that default instead of copying a 2160p target. An Until you picked yourself is left exactly as it is: if a profile is set to "until 2160p" it keeps that, and the Upgrades section now spells the cutoff out ("files below 1080p (any source) get upgrade searches"); with a cutoff above 1080p it just notes, without any warning, that upgrades keep searching until that resolution and when searches give up. Target's description says it's the ceiling, not the cutoff.
  • Upgrade searches give up. Settings → Quality → Upgrade searches · all profiles: stop searching for an episode's upgrade after 5 misses in a row (6h, 1d, 3d, then a week, so about 11 days), and don't upgrade-search episodes that aired more than 90 days ago. Both are adjustable, 0 = never give up. Given-up episodes aren't searched by auto-grab or counted as below cutoff, but RSS still grabs a better release if one turns up, and a new file, a change to the profile/cutoff or a manual search starts them over. Searches that failed because an indexer was down back off without counting. New episodes.upgrade_misses / upgrade_cutoff_key columns (migration 0013_upgrade_give_up, additive only).
  • Fix: upgrade-search backoff no longer reuses the missing-episode miss counter, so an episode that was missing for a while doesn't start its upgrade searches at the weekly step, and an upgrade miss no longer marks an on-disk episode as "not found" in the pipeline.

v0.1.90

Choose a tag to compare

@github-actions github-actions released this 21 Oct 02:29

v0.1.90

  • Instant updates: Settings > General > Updates has a new Mode setting. Instant (download + activate) turns the release button into a single Update now that downloads, verifies, activates and reconnects in one go: the pipeline card walks Download → Activate → Refresh and the page reloads on the new version. The safety steps stay: the manifest/sha256 is verified, running imports/scans get up to 2 minutes to finish (the panel lists them before you click), the database is backed up when the release brings migrations, and a failed health check rolls back. With auto-download on, Instant mode also applies new releases by itself as soon as nothing is importing or scanning. Staged (download, then activate) is still the default and works exactly as before (Activate by hand or via Auto-activate).
  • Fix: auto-activate ("When idle") could restart ShowFlow in the middle of a manual "Update to vX" download. Updates now run one job at a time: activation (auto or manual) waits for any running download/verify to finish, a second download of the same release (the background watcher and a click, or two tabs) shares the one already running instead of fetching the tarball twice, and nothing new starts once an activation is under way. A manual "Update to" also records the release as staged, so the watcher no longer downloads it again, and a release that's already downloaded and verified isn't fetched a second time.
  • Fix: an in-app update no longer shows Download: Failed with SyntaxError: Unexpected token 'S', "Service Unavailable" is not valid JSON (plus a "Couldn't load update status" banner) when it actually succeeded. That was the supervisor's plain-text 503 while it restarted ShowFlow (e.g. auto-activate applying the release mid-"Update to") being parsed as JSON. The supervisor's 503 is now JSON ({ error, restarting: true, phase }, Retry-After: 2), and the Updates panel never blind-parses responses: 502/503/504s and dropped connections during an update show as "restarting, reconnecting" on step 4 and keep polling with backoff. Once ShowFlow is back it checks what happened: running the target version shows success and reloads, a rollback shows the real error, and an in-progress download/activation moves the stepper to that step. The panel also retries quietly instead of showing the error banner if it loads mid-restart. Note: the panel fix applies to updates made from this release onward, and the JSON 503 only arrives with the next container image (the supervisor isn't swapped by in-app updates).
  • Settings search: a "Search settings…" box on Settings (header on desktop, top of the list on phones) finds any setting across every tab by name, description or synonym (e.g. 4k, discord, debounce, colour). Pick a result and it switches to the right tab, scrolls the row in under the sticky bar and briefly highlights it. / or ⌘F/Ctrl+F focuses it (press ⌘F again for the browser's find), ↑/↓ + Enter to pick, Esc clears. The ⌘K palette lists matching settings too. Results come from one registry (settings/registry.ts) with a test that fails if a setting's anchor goes missing.
  • Fix: the sticky section bar on Settings → General (Updates · Grabbing · Libraries · Defaults) now lines up with the cards below instead of overhanging them by a few px each side, sits flush under the header when stuck (cards no longer scroll past in a strip above it) and turns into a glass tray that matches the panels instead of a detached dark slab. The chip for the section in view is highlighted as you scroll, and clicking a chip lands the heading just under the bar. ?section= deep links (e.g. Quality → "Libraries") now work for any section, not just Updates.

v0.1.89

Choose a tag to compare

@github-actions github-actions released this 21 Oct 01:47

v0.1.89

  • Fix: a watch-folder file skipped as a Duplicate is now held like other skips, so the 3-minute rescan stops re-hashing it. It stays on Manual Import with its Duplicate reason. Holds are now keyed by path + size + mtime, so if a different file lands under the same name (re-download, replaced release) it gets checked again instead of staying stuck.
  • Fix: Force Import no longer says Imported when it failed. Errors (metadata lookup, disk/DB failures, name collisions, dry-run, missing root folder/profile) come back as a failed result with the real message, nothing is logged to History and no file row is recorded. Any failure after the file is placed (not just the DB write) now rolls back, so the existing library file is restored, for movies too. A force import over a Duplicate also keeps the old dedupe record if it fails, and the Force-imported history entry is only written once the import actually lands.

v0.1.88

Choose a tag to compare

@github-actions github-actions released this 21 Oct 01:20

v0.1.88

  • Manual Import explains itself: rows on Activity → Manual Import now show why a file wasn't imported (Not an upgrade, Cutoff met, Upgrades off, Rejected by profile, Duplicate, Unmatched, Can't parse, No root folder, Name collision, Error…) instead of just Resolved. The Existing column shows the library file's quality/size and the score delta, and each row expands into an incoming vs existing comparison (score, quality, codec, HDR, audio, size, group, with differences highlighted), the profile/cutoff state and what Force Import would replace. Reasons are recorded by the importer when it skips a file and re-derived with the same scoring for older files. Phones get cards instead of the table.
  • Fix: library rescans no longer flood Activity → History with Imported … rows for files already in the library. Scans now store file size and refresh unchanged files in place, and a new episode_files.origin column (migration 0012_episode_file_origin) keeps scan/sync rows out of History. Existing spam rows are reclassified (not deleted); real imports and upgrades stay.
  • Fix: long release names (e.g. in the "Remove from blocklist?" confirm) no longer push dialog text and buttons outside the box. Dialogs wrap long tokens, show filename-like descriptions in mono, and scroll instead of overflowing on mobile.

v0.1.87

Choose a tag to compare

@github-actions github-actions released this 16 Oct 12:09

v0.1.87

  • Tidier episode rows: the "why?" text is gone. Each row has one status icon (info when it's on disk, a clock when it hasn't aired, amber when it aired but is missing); tap it for file/release details or why it hasn't been grabbed, as a bottom sheet on small screens and a popover on desktop. TBA titles are greyed, the duplicate status dot is hidden on small screens, and unaired episodes say UPCOMING instead of MISSING.
  • Compact buttons: on small screens pills are normal-case and smaller, and button groups collapse into one row with a ⋮ menu. The Files tab is now "files · size · Organise · ⋮" with Rename folder, Dedupe and Rescan in the menu, and file rows fit badges, size and date on one line.
  • Phones: landscape phones now get the compact layout instead of desktop, the bottom bar, sheets and Add Show respect safe areas (notches/gesture bar), search fields no longer make iOS zoom, small icons get 40px tap targets, and hover-only buttons show on touch.

v0.1.86

Choose a tag to compare

@github-actions github-actions released this 16 Oct 10:47

v0.1.86

  • Compact layout for phones and mini windows: under 768px wide ShowFlow now gets a proper mobile layout. One top bar (no double hamburger, Add Show is a round + next to a ⋮ menu), the Upcoming week strip shows 7 days with today centred instead of clipping, and episode rows are two dense lines with sticky day headers. Show detail opens full-screen with a short backdrop band, Search missing + icon buttons for refresh/organise/monitor/more (Fix match lives in more), sticky Episodes/Files/Settings tabs and the whole page scrolls. Calendar is a tappable month grid with the day's episodes underneath, Library shows 3 posters across, Add Show is full-screen. Short desktop windows get a smaller show banner. Desktop layout is unchanged.

v0.1.85

Choose a tag to compare

@github-actions github-actions released this 15 Oct 05:46

v0.1.85

  • Release groups are yours now: the hardcoded group chips (SubsPlease, Erai-raws, Judas etc) are gone. Each profile has a Release groups row where you type any group or pick from "seen in your library" (groups from your own grabs + files, most common first), each with the usual Prefer / Strong prefer / Avoid / Strong avoid / Must have / Never. Matches the actual group only: leading [Group] or trailing -GROUP, case-insensitive, so -x265/-DL/- 01 don't count. Profiles using the old chips convert on boot with the same mode and weight. The test box shows the parsed group and whether it hit. Anime preset no longer has a group bias.

v0.1.84

Choose a tag to compare

@github-actions github-actions released this 15 Oct 05:10

v0.1.84

  • Quality, reworked: one Quality screen per profile instead of the qualities list + custom formats + per-profile formats juggle. Pick a target/min resolution (plus accept-unknown for anime), skip sources you don't want, and click grouped terms (HEVC, HDR/DV, 10-bit, audio, dual audio, languages like VOSTFR, release groups) as Prefer / Strong prefer / Avoid / Strong avoid / Must have / Never. Custom regex + numeric weights live under Advanced. Presets: 1080p web, 4K HDR, Anime (SubsPlease). "Keep upgrading until" replaces cutoff, and off really means off (no upgrade searches and imports won't replace files).
  • Test a release name: paste a title on the Quality screen to see the parsed resolution/source, every term hit, the score and why it'd be accepted or rejected.
  • Fix: source tiers now actually match real names (1080p.WEB-DL, BluRay.REMUX, 4K/UHD), so Remux > BluRay > WEB-DL > WEBRip > HDTV rank properly instead of most tiers never firing. Duplicate formats (x265/HEVC/H265/265/H.265) count once instead of stacking.
  • Migration: existing profiles convert on first boot. Duplicate formats merge into one term, a custom 2160p format becomes the resolution target, Remux-style source formats drop (the source order covers it), leftover formats stay as custom terms, allowed qualities become min/target and cutoff becomes upgrade-until. A profile with no cutoff ends up with upgrades off, set "keep upgrading until" if you want them. Each profile shows a one-time note of what changed. GET /api/quality/migration-preview shows old vs new decisions on recent grabs.

v0.1.83

Choose a tag to compare

@github-actions github-actions released this 15 Oct 04:08

v0.1.83

  • Faster updates: the update unpacks while it downloads, status polls every 500ms (also during the handoff), and the staged banner estimates how long apply takes. Supervisor apply ~1.1s → ~0.5s. The new image also hashes the binary once and checks readiness every 100ms, so the next update after this one is quicker still.
  • Settings density: setting rows put the label on the left and the control on the right (stacking on narrow widths), one compact 13/12px text scale, a slimmer left nav that becomes a dropdown under 1280px, sticky section pills on General, and Quality rows are tighter so score selects no longer clip.

v0.1.82

Choose a tag to compare

@github-actions github-actions released this 15 Oct 03:36

v0.1.82

  • Fix: v0.1.81 shipped stamped as version main, so the app listed every release as an update and tried to reinstall the running build (ETXTBSY). Builds now get the tag/commit explicitly and fail if the stamp is wrong. The app never re-installs the active release (supervisor installs via temp dir + rename), falls back to the active release's manifest if the version stamp is bad, only offers newer releases (older ones show as previous), and the post-update refresh matches on the active release sha with a 60 attempt cap. Coming from v0.1.81 you'll need to hit Update + Activate once by hand.
  • Settings: General now starts with Updates and Grabbing, Defaults moved down.