Repository navigation
Releases: Compressarr/Compressarr
Release list
v2.2.0-rc.1
Note
Changes since 2.2.0-beta.5
only - everything else is in the entries below.
Added
- View Log: copy text out of the Monitor page's log. The Monitor page's log panel (now titled Live Log, with a dim "last 200 lines" beside the title) is redrawn every 1.5 seconds, which clears any text you have selected in it. A new View Log button under it opens the same lines in a window that does not refresh by itself, with Copy all and Refresh buttons (Esc or clicking outside closes it).
- Passthrough: all of Compressarr's benefits without re-encoding. A lane's TV and Movie profile dropdowns (and a queued file's own profile on the Monitor page) have a new first choice, Passthrough (no re-encode). A file given it is copied to the Output step instead of being encoded, and everything else runs as usual: filing into the show/movie folders, renaming, the delete / recycle / keep-the-source setting, companion files, Sonarr and Radarr, clearing the title tag, the report, "lands in" routing. The ffmpeg and HandBrake HDR / Dolby Vision checks are skipped (nothing is re-encoded, so nothing can be lost), and a lane that only passes through needs no encoder installed. The Monitor shows a teal Passthrough badge on the queue row and "Copying File in Lane ..." while it runs (with a byte-based percentage; Pause is not offered during a copy, Abort works). Reports show a teal Passthrough badge in place of the profile name. In History a passed-through file counts as a file but its sizes are not counted, so the savings stay the real ones; the report's totals and the notifications leave its bytes out too. A copy needs free space for the copy until the source is removed, and with the keep-the-source setting the library ends up with a second copy.
- Posters on the Monitor queue (optional, off by default). Settings > Queue Posters > Show Posters on Queue puts a small poster beside each file in the queue, and a larger one beside the file being encoded, looked up on TMDB with your own free API key (the card has a Test Key button and the sign-up link). Only the show or movie title (and year) taken from the file name is sent to TMDB, never a path; a TV file is matched by show name, and a movie needs a "(YYYY)" year tag in its name (a file without one gets a neutral placeholder rather than a guess). Each title is looked up once and each picture downloaded once, then served from Compressarr's own data folder (
posters, safe to delete, with a Clear Cached Posters button under Settings > Maintenance), so nothing is fetched on every refresh and the pictures keep showing offline. A picture whose title has not been in the queue for the Retention days period (Settings > Logging & Reports, 30 days by default, 0 keeps everything) is deleted by a daily background cleanup; what was looked up is kept, so the picture is simply downloaded again if that title returns. Poster size (Small, Medium, Large) and Use smaller images (TMDB's lighter picture sizes) are in the card. Nothing is requested while it is off, and the credit "This product uses the TMDB API but is not endorsed or certified by TMDB" is on the card and the About page. - A machine name for notifications. If you run Compressarr on more than one machine, the Message Format card on the Notifications page has an Include machine name checkbox (off by default) and a name field. Ticking it fills the field with the computer's name, which you can change; nothing is added or sent until you tick it and save. With it on, the Minimal, Standard and Detailed styles start the title with it, for example
[Basement NAS] Compressarr run #47 - Success, on Discord, Slack, Telegram, Pushover, ntfy, Gotify, IFTTT and Notifiarr, and so do the daily/weekly digests and the Test button. A Custom style places it with the new{machine}token instead. The Generic Webhook's JSON gets a separatemachinefield and itstitleis left as it was. The desktop toast is unchanged. Names are up to 40 characters, with square brackets and control characters removed. - A preset catalog: more profiles without a new Compressarr release. Profiles > Import > From Catalog (between "From installed HandBrake" and "From a presets file") reads the official catalog, https://github.com/Compressarr/Compressarr-Presets, which is shown on screen as "Importing from:". You tick the profiles you want and Import: nothing is added automatically and nothing is checked on a timer (the catalog is read when you open the tab, or press Check for Updates on the new Preset catalog card on the About page). Catalog profiles are tagged with a lock and "catalog" and are locked like the built-ins (View and Duplicate), but can be deleted - refused, naming the lane, while a lane uses one. Every download is checked against the SHA-256 the catalog lists and the same validators as any other profile before it is stored, and a stored profile that no longer matches what was installed is not offered to lanes (the Profiles page says so). Published versions never change: a profile is named
<name> vN, a newer version is added next to the old one (marked "newer version", never an update), and a version can be marked deprecated with a reason. If a catalog name is already taken (a built-in, one of yours, another catalog profile) the row offers Import as: a new name (default<name> (copy)), and it is saved as one of your own profiles. Built-in profiles are not in the catalog. The profiles you add are included in the automatic backups and in Export/Import configuration, and a restore brings them back with no network. The Profiles page's storage panel has a Catalog (downloaded) box. The first catalog has four profiles: Compressarr UHD HEVC (HDR) v1 (x265 10-bit RF 22, keeps Dolby Vision, HDR10+ and HDR10), Compressarr HD Quality v1 (x265 10-bit RF 20), Compressarr Compatibility (H.264) v1 (your original VeryFastDDtoAAC: x264 8-bit, MP4, AAC, 30 fps cap; SDR only) and Compressarr AV1 (NVENC) v1 (cq 34, needs an RTX 40-series or newer). - AV1 on an NVIDIA GPU is checked on its own. The Encoder page's capability check opened a one-frame GPU session for H.265 only, so an ffmpeg profile using
av1_nvenccould look fine on a GPU that can't encode AV1 (it needs an RTX 40-series or newer) and then fail mid-run.av1_nvencnow has its own test and its own chip on the Encoder page (ticked only when a session really opens), and an AV1 NVENC profile on a GPU without AV1 is flagged on Profiles and Lanes with the real reason. - HandBrake lanes no longer re-encode an HDR file with a profile that would lose the HDR. Before an encode, a lane running a HandBrake profile whose video encoder can't be relied on for HDR reads the file (with ffprobe). An H.264 profile can only produce SDR, so an HDR10, HLG, Dolby Vision or HDR10+ file would come out with washed-out colours; a hardware encoder (NVEnc, QSV, AMF) can't keep Dolby Vision or HDR10+. Such a file is left alone and reported as ERROR 114 (it stays in the queue with its ERROR badge, like other refusals) instead of being re-encoded and replacing the original. HandBrake profiles that keep everything (the 10-bit x265 and SVT-AV1 encoders with both Dolby Vision and HDR10+ passthrough on, as the built-ins do) are never probed, so they pay nothing; a profile with only one of the two on, or an 8-bit x265 / SVT-AV1 encoder (which can't carry either), is checked like any other, and a profile that has switched dynamic-metadata passthrough off has already said it doesn't want it. A lane that really wants it can tick Allow HDR files to lose their HDR (under Advanced on the Lanes page); that never covers a Dolby Vision profile 5 file, which would show wrong colours. If ffprobe isn't installed the check is skipped with one note in the log (install ffmpeg on the Encoder page to turn it on). It also applies to a file an ffmpeg lane hands to a HandBrake fallback profile.
- An ffmpeg profile can now encode Dolby Vision / HDR10+ files anyway. The profile editor's Dolby Vision & HDR10+ section is a three-way choice: refuse the file (the default), encode it with a HandBrake profile, or encode it anyway without Dolby Vision / HDR10+. The last drops the dynamic metadata, so the output is plain HDR10 (the file's HDR10 base layer) and the original is replaced by that lesser copy; choosing it asks for confirmation, the log says what was dropped, and the report tag reads "ffmpeg (Dolby Vision dropped)" or "ffmpeg (HDR10+ dropped)". A Dolby Vision profile 5 file has no HDR10 base layer and would show wrong colours without the Dolby Vision data, so it is still refused (ERROR 112, with that reason). A named HandBrake profile always wins over "encode anyway", and a broken one is never quietly replaced by it. Preview decisions says which of the three will happen to the file you preview.
- An Advanced button in the top bar (on Settings and Encoder, the pages that have something to reveal). It shows
options that are tucked away by default and is remembered per browser: it changes what that browser shows, not any
setting. For now it holds the two things below. - ffmpeg download channel: Stable or Latest. Check/Install used to download whatever the newest development (master)
build was. It now defaults to Stable, the newest numbered release (ffmpeg 9.0 today; it follows 9.1, 10.0 and so on as
BtbN publishes them): bug fixes only, so encodes behave the same from one update to the next. Latest is the
development build, as before. The choice is under Advanced on the Encoder page. Check/Install, the About page's
Check for Updates and the download prompt all follow it, and an ffmpeg that Compressarr installed from the other
channel is reported as that (not "newer") with an offer to switch, and Check/Install now also offers to download...
v2.1.10
Tip
What's new in 2.1.10: a failed encode now stays held (and a kept source is remembered) across a
restart, a source folder's cleanup no longer removes a video that is still waiting in a subfolder,
the license ships with the program, Compressarr has a new home on GitHub, the update check has a
Stable / Stable-and-beta choice, and a bell shows project announcements (on by default, easy to
turn off). New changes only - earlier versions' entries are below.
-
A file whose encode failed now stays held after a restart, and a kept source is remembered across one. The "held" mark that keeps a failed file out of the retry loop (2.1.9) and the size and date that stop a kept source being converted again (below) were saved in memory but not written to the resume file with the file's result. So the next pass, or a restart, found the file as if nothing had happened: a failed encode was tried again and reported again, and a kept source could be converted again. Both are now saved with the result.
-
A source folder's cleanup could remove a video that was still waiting. Input folders are scanned recursively, so a movie folder can hold a subfolder (Extras, Featurettes) with a video that is still queued, skipped, or under the size filter. When the movie next to it finished, the cleanup treated that subfolder as an unmatched leftover and sent the whole thing to the Recycle Bin (or deleted it, if recycling failed). A subfolder is now only cleaned up when nothing at any depth below it is a video; a link (junction) or a folder that can't be read (including one that denies listing) is left alone, and the folder above it then stays too.
-
The license now ships with the program. The installer shows an information page about the GNU General Public License (v3; nothing
to accept), and installs the full license text (LICENSE) and a list of the open-source components Compressarr is built with
(THIRD-PARTY-NOTICES.txt) in the install folder. The About page has a License line linking to both and to the source code, and a
HandBrakeCLI that Compressarr downloads gets a short note beside it saying it is GPL software and where its source is. -
Compressarr has a new home on GitHub: github.com/Compressarr/Compressarr (the organization), with the preset catalog and the announcements next to it. Update checks, announcements and every link in the app use the new address. The old github.com/MrWizardCT/... addresses keep redirecting, so earlier versions keep working.
-
Update channel: Stable, or Stable and beta. A new Settings > Updates choice sets which releases the update check offers. Stable (the default) is real releases only, as before. Stable and beta offers the highest version of any release, so a 2.2 beta counts as newer than 2.1.x. The check now compares versions including their beta tag, so someone on a beta is told when the final release is out.
-
Announcements. A bell in the top bar lights up when the Compressarr project has posted news (releases, betas, the 2.2 release) in the last 30 days that you have not seen; click it to read them. The messages come from a public GitHub repo (Compressarr/Compressarr-Announcements), are fetched once at start-up and then about daily, and are plain text with at most a link to the Compressarr GitHub page or compressarr.tv. Nothing about you or your computer is sent. It is on by default and can be turned off in Settings > Announcements, which stops the requests completely. A new install does not show news from before it was installed, except one welcome message: the project marks a message as a welcome, and an install that has not read it yet shows it as new once, whenever it was posted.
-
With "Maintain" a converted file is no longer converted again on every pass. Maintain leaves the source in the Input folder, but the finished file was forgotten at the end of the pass and then found again as new, so the same file was re-encoded over and over. Compressarr now remembers a converted file whose source was kept, by its size and date: it stays out of the queue and is not encoded again while it is unchanged. Put a different file at the same path (or edit it) and it is converted as new; delete the kept source yourself and it is forgotten.
🛡 VirusTotal GitHub Action analysis:
v2.2.0-beta.5
Note
Changes since 2.2.0-beta.4
only - everything else is in the entries below.
Changed
- Run Now runs the queue without starting monitoring. On the Monitor page, Run Now now works whether monitoring is on or off. With monitoring on it still skips the countdown; with monitoring off it runs one pass and stops, leaving monitoring off. Abort works on it like on any pass. It is unavailable only while a pass is already running.
- The Start/Stop button says just "Start" or "Stop". The word "monitoring" was implied; it stays in the tooltip.
- The top bar's buttons are icon-over-label. On every page the action buttons (Save, Clear changes, Run once, Add lane, Start/Stop monitoring, Pause, Run now, Abort, the Profiles buttons, Back and Duplicate in the profile editors...) now show an icon above a short label, in groups split by thin dividers, instead of boxed text buttons. The full name is the tooltip. The bar is slightly taller (62 px instead of 56).
- Messages in the top toolbar are readable. Success and error messages ("Settings saved.", a failed save, a refused lane change...) were red or green text straight on the dark toolbar, which was hard to read. They are now light chips with an icon and dark text. A long message, or an error that doesn't fit the toolbar, appears in a bar under the toolbar that wraps and shows the whole text, with a close button. This applies to every page.
Added
- A Duplicate button on every lane card. It asks for a name for the new lane and copies the lane exactly as the card shows it, every field. The copy always starts switched off, and appears right after the original.
- Two enabled lanes can't watch the same Input folder. Lanes scan their Input folder including subfolders, so the same folder - or one inside another - would have both lanes pick up the same files. Turning a lane on, or pointing it at a different Input, is now refused when another enabled lane already watches that folder or one around or inside it; the reason is shown under the Input field. Folders are compared by whole folder name (
D:\Media DownloadandD:\Media Download Kidsare different folders). A setup that already overlaps (an upgrade, an import) keeps running exactly as before, with both lanes flagged, and unrelated edits to those lanes still save. Save All now saves lanes one at a time, switching lanes off before switching others on. - The license now comes with the program. The installer shows an information page about the GPLv3 (no "I accept"
step - the GPL grants rights and isn't needed to run the program), and installsLICENSEand a new
THIRD-PARTY-NOTICES.txt(every component Compressarr is built with, with its copyright and license text) into the
install folder. The About page has a License line linking to both, to the source code, and a note that there is no warranty. - About page: an ffmpeg card with Check for Updates, like the HandBrakeCLI one. It shows the installed ffmpeg and checks
for a newer build. ffmpeg's own version is a commit id, so a newer build is recognised from the build Compressarr recorded when
it installed ffmpeg; an ffmpeg you installed yourself (or one installed by an earlier beta) can only be shown the latest build. - About page: "Built with" now lists ffmpeg.
- A downloaded HandBrakeCLI gets a short license note beside it (
LICENSE-NOTICE.txt: GPLv2, with a link to its source),
the same way a downloaded ffmpeg already keeps its license file.
VirusTotal scans (0 detections):
VirusTotal scan:
v2.1.9
Tip
What's new in 2.1.9: a failed encode now waits in the queue instead of being retried every
pass, a renamed library folder is no longer recreated (so a second library can't start by
accident), report "Full Details" links work over http, and History totals are right (the
Today / Last 7 Days clock and failed encodes). Everything else below carries forward from 2.1.8
for context - new changes are in bold.
Added
- A persistent "Install as app" card in Settings > Web UI: installs the mobile-friendly PWA
on demand (Chrome/Edge/Android), shows "Add to Home Screen" instructions on iOS (no installable
prompt exists there), or - if already running as the installed app - explains how to uninstall
it from the browser's own app list, since no web page can trigger that directly. - A new opt-in
{file_list}notification token: this run's filenames, one per line. Deliberately
left out of every built-in Minimal/Standard/Detailed template - it only ever reaches a message
if you type it into a Custom template yourself, since it's the one token that can put a media
filename in front of wherever that channel sends its message. - A close button on every HTML report - most useful in PWA/standalone mode, which has no browser
chrome at all to close a tab with, but available on desktop too. - A "Launch Monitor at Startup" option (Settings > Monitoring): opens the Monitor page in your
default browser as soon as Compressarr launches, independent of whether monitoring itself
auto-starts. - Configuration validation: required fields on Settings and Lanes (HandBrake/FileBot paths,
video extensions, a lane's preset or Output folder) are checked on load and on save, with
invalid fields outlined in red and a toolbar error message pointing you to them. Notifications
validates its own required fields (e.g. a channel's webhook URL) the same way before you save.
Saving still succeeds either way - this is a warning, not a gate - matching how Test Connection
and other checks already behave in this app. - Numbered error-code badges (101-110) on the HTML run report, with a hover tooltip explaining
each one - covers missing HandBrake/presets, a misconfigured lane, and FileBot path problems, so
a problem is identifiable from the report itself, not just the log. - A "Keep Logs of successful HandBrake Encodes" setting (Settings > Maintenance, off by default),
so successful-encode detail logs don't accumulate forever - failed-encode logs are always kept
since the report links to them. - A "Purge Logs & Reports" button (Settings > Maintenance) - same as Clear Logs + Clear History
combined, but a permanent delete instead of Recycle Bin, for a faster cleanup on a large
accumulated backlog.
Changed
- The first-launch "Install as app" toolbar banner is retired, superseded by the persistent
Settings > Web UI card above - the underlying install capability is unchanged, just no longer
a one-time, dismiss-and-it's-gone prompt. - The "Original v1.1 (PowerShell)" credit and link are removed from the About page - v1.1 is no
longer referenced anywhere in the app. - Monitor is now the default page when Compressarr starts (opening the web UI or the tray
icon's "Open Web UI"), instead of Settings - a one-time setup page isn't where you check in
day-to-day. - A configuration change saved while monitoring is already running now actually takes effect on
the next pass, instead of silently having no effect until monitoring is stopped and restarted or
Compressarr itself is restarted - this covers Notifications, Report, PostExec, and Logging
settings, and the Lanes list itself (add/remove/reorder/enable/disable). - The whole app is usable on a phone or tablet: the sidebar becomes a slide-out drawer below
about 760px width, the toolbar's action buttons and status cluster wrap onto their own rows
instead of overlapping, and Monitor's queue rows reflow into a two-line card layout. Requires no
extra setup - just open Compressarr's normal address in a mobile browser. - The HTML report's recovery banner and the activity it's based on now cover every kind of
automatic retry - a failed move, a failed companion-file move, or a deferred Sonarr/Radarr
rescan/cleanup - not just the first two. - Every page's status/save messages now show in the toolbar, replacing each page's own scattered
status element(s) - the same consistent place across Settings, Lanes, and Notifications. - The toolbar shows elapsed time for the run currently in progress ("Monitoring is ON: Running
(Time Elapsed: 2 hrs, 5 min 10 sec)"), ticking up live instead of only updating once per poll. - Checking for updates now happens immediately when Compressarr starts, instead of only relying
on a browser cache that could keep showing "update available" for up to a day after you'd
already upgraded. - Donate page crypto address cards are more compact and show a truncated address (full address on
hover, copy, and in the QR modal) so all six currencies fit in a single row.
Fixed
- A file whose encode failed is no longer retried on every pass. Before, an encode failure
(ERROR 101) flipped the file back to pending on the next rescan, so a file that failed the same
way each time produced a new error report on every poll. It now stays in the queue with its ERROR
badge, untouched, until you remove the row. - A renamed or missing library base folder (TV Shows or Movies) is no longer recreated. Routing a
file used to create the missing base path, which quietly started a second library next to the
renamed one. It is now ERROR 102 (destination unavailable), the file stays put, and it is retried
on the next pass once the folder is back or the setting is corrected. - The HTML report's "Full Details" links now open when the report is viewed over http (the web
UI, or from a phone). They used file:// paths, which a browser blocks from a page served over
http; they now go through the app's own /api/logs/ address (the report itself is unchanged). - History totals and the Today / Last 7 Days rollups were wrong in two ways. The rollup
calculator read the clock once at startup, so Today and Last 7 Days stayed anchored to the day
the app started; it now reads the clock on every request. And a failed encode was recorded with
its original size and no output size, counting as 100% saved and inflating the totals; failed
encodes are now left out of the totals, and old runs in which every file failed are skipped by
the rollups and the daily/weekly digest. - New files could still land above files already waiting in the queue, even after 2.1.7's
queue-order locking. A file only got its permanent position once Compressarr tracked it, and
that only happened when a Lane had nothing else waiting - so during any backlog or long encode,
files that arrived were left untracked and ordered on the Monitor page by live folder-scan
position (not arrival order), and were later locked into that same wrong order once the backlog
drained. Every file is now tracked, at the end of the queue, the first time anything sees it - the
Monitor page's own refresh or a monitoring pass, whichever comes first. A file re-added at a
path that already had a completed or failed entry is also treated as a new arrival and goes to
the end instead of reusing its old position at the top. A monitoring pass also merges in
anything the Monitor page tracked before saving, instead of silently overwriting it. - A file's position in the Monitor page's queue is now permanently locked the moment it first
appears - only an explicit reorder (drag, or move to top/bottom, which is just a reorder under
the hood) can ever change it again. Previously, a file with no explicit position sorted by live
filesystem scan order, which is raw OS enumeration - not alphabetical, and not guaranteed to
place a newly-added file last - so a brand-new file could land anywhere relative to already-known
ones, and a single-file action (skip, preset override, remove) touching one untouched file could
let it jump ahead of still-untouched files sitting alongside it. - A resume-tracking entry belonging to a Lane that's since been deleted or renamed no longer sits
permanently stuck - it's now cleaned up automatically, instead of forever inflating the "Resuming
previous incomplete run" count and blocking the automatic cleanup that clears finished history
once nothing is genuinely outstanding. - An in-progress file could, in rare cases, still show up in the Monitor page's queue as if it
were waiting to be processed, instead of being recognized as the one currently encoding - a name
collision between two different files in different Lane subfolders was enough to trigger it. - A file could show a "Resumed" badge it didn't deserve - a single queue-editing action (skip,
preset override, remove) elsewhere in the same Lane was enough to make every file in that Lane
look like leftover work from an interrupted run, even when nothing had actually been
interrupted. - Daily/Weekly digest notifications always showed "Duration: 0s" regardless of how long the
underlying runs actually took - the digest summary never tracked a duration at all until now. - A queue-control edit (reorder, skip, preset override, or remove) made anywhere in the queue
while a different file was still finishing its own routing, companion-file move, or Sonarr/Radarr
rescan-confirmation wait (which can take up to about two minutes) could be silently lost the
instant that other file's own result was saved - found by an external pre-release code review.
Queue edits are now merged onto the freshest state on disk instead of being overwritten by a
stale in-memory snapshot. - Queue-control actions (reorder, skip, preset override, remove) identified a file by its
filename alone, which could target the wrong file if two different files in different lane
subfolders ...
v2.2.0-beta.4
Note
Changes since 2.2.0-beta.3
only - everything else is in the entries below.
Added
- The Monitor's status line says where the file will land. It now reads, for example, "Compressing File in Lane UHD using ffmpeg profile Compressarr SD-HD and lands in Kids" - the lane you assigned the file to, or its own lane when you haven't.
- Backups can be downloaded. Each backup in the list on the Settings page now has a Download button, so a copy can be kept on another computer. The Backups card also suggests keeping a copy somewhere other than this machine, since backups are saved there by default.
- "Create a desktop shortcut" is now ticked by default in the installer, and an upgrade keeps the choice you made before instead of resetting it every time.
- Browse... buttons on the Encoder page for the HandBrakeCLI, ffmpeg and ffprobe paths. The Profiles import-from-file box has one too, listing only .json files. It opens Compressarr's own folder browser, which lists the programs (.exe files on Windows) in each folder and starts in the folder the path already points to.
Changed
- The run history now lives in Compressarr's own data folder (
%AppData%\Compressarr\Compressarr_History.csv) instead of the Logs folder, so clearing out the logs can't delete it and changing the log folder can't leave it behind. A history file already in the Logs folder is copied across the first time 2.2 needs it, and the old copy is removed. Backup, Restore, Clear History and Purge all use the new location.
Fixed
- A library folder that no longer exists is no longer recreated. If a lane's TV Show or Movie base folder was renamed or its drive was gone, Compressarr used to create the whole folder path again and file the video into it, quietly starting a second, empty library. It now reports ERROR 102 (destination unavailable), names the missing folder, and files the video on the next pass once the folder is back. Compressarr still creates the show, season and movie folders inside an existing base folder. (2.1.x behaves the old way.)
- "Full Details" links on a report now open when the report is viewed in the app. They pointed at a local file path, which a browser refuses to follow from a page served by the app (History page, another device). They now go through the app, and still work when a report is opened straight from disk.
- "Run at login" now follows a restored backup or imported settings. The login entry was only written when Settings was saved, so settings that arrived another way never started Compressarr at login. Compressarr now checks it at startup (without disturbing an entry that already works) and applies it after Import and Restore.
- Uninstalling removes the "run at login" entry. It used to stay behind pointing at a program that no longer existed. An upgrade keeps it.
- Failed encodes no longer count toward the History totals. A file that failed to encode used to be added as "before" size with nothing "after", so every failure showed as 100% saved and inflated the files, before and savings figures (a file that failed on every pass piled up hundreds). Such files are now left out of the totals, the run's report and Errors count still show them. Earlier runs in which every file failed are skipped by the History rollups too. Files that encoded but could not be moved (ERROR 102-104) still count.
- History: "Today" and "Last 7 Days" now follow the real date. On a Compressarr that had been running for days they were stuck on the day it started (the figures at the top of the page no longer matched the reports below). This fix is also in 2.1.x.
- A Lanes field no longer stays red once it holds a valid value. A lane showing a configuration problem now re-checks itself as you edit or Browse, so the red outline (and the warning at the top) clears as soon as the problem is fixed instead of waiting for the next Save.
- A file whose encode failed (ERROR 101) is no longer retried on every pass. It stays in the queue with its ERROR badge and makes no new error report each time monitoring runs, so you can look into the cause first. Remove on its row queues it afresh once you have fixed the problem. Other errors (an abort, a missing preset) are retried as before.
- The Extra CLI options example no longer suggests
--two-pass, which current HandBrakeCLI rejects ("unknown option"). The placeholder and tooltip on the Encoder page now show--verbose=1. - Check/Install no longer calls any file "ffmpeg". It now asks the program at the configured path and says so when it does not answer like ffmpeg (a wrong .exe such as notepad.exe), and that check gives up after 8 seconds instead of 30.
- Custom HandBrake presets used by a lane are no longer missed. The one-time migration only ran on the very first start, so lanes that arrived afterwards (a restored backup, imported settings, or a first start on a clean install) still named presets that only lived in HandBrake's
presets.json. Compressarr now copies any such preset into its own profiles at every startup, after Import settings and after Restoring a backup. Nothing is renamed or repointed by this.
Compatibility
- Going back to 2.1.x needs one manual step. 2.1.x reads the history from the Logs folder, not from the new place. After downgrading, copy
%AppData%\Compressarr\Compressarr_History.csvinto your Logs folder (by default%AppData%\Compressarr\Logs, or whichever folder Settings → Logging points to); without that, the History page starts empty and 2.1.x begins a new file. If you used 2.1.x for a while and then come back to 2.2, copy the file the other way (replacing the one in the app data folder), because 2.2 keeps using its own copy once it exists. A backup made by either version restores into the other.
VirusTotal scans (0 detections): regular installer · Full installer
VirusTotal scan:
v2.2.0-beta.3
Note
Changes since 2.2.0-beta.2
only - everything else is in the entries below.
Fixed
- Uninstalling (or upgrading) while Compressarr was running left it installed. The tray app has no
window to close, so it kept its program file locked: the uninstaller reported success but the
install folder stayed behind. Setup and the uninstaller now stop a running Compressarr first (its
settings are saved as they change), and the install folder is removed as a backstop. - "Launch Compressarr" at the end of Setup now opens the Monitor page as well as starting the app.
- A downloaded HandBrakeCLI now goes under
%AppData%\Compressarr\tools\HandBrakeCLI, next to
ffmpeg, instead of directly in%AppData%\Compressarr. An existing install keeps working from
wherever its saved path points.
The test plan attached to beta.2 still applies (test-plan-2.2.html is attached here too, with the HandBrake install path corrected).
VirusTotal scans (both 0 detections):
- Compressarr-Setup-2.2.0-beta.3.exe - https://www.virustotal.com/gui/file/2768dcb58fccbbb8cac627c41f35eea76158199c61b761a49ecafcdeb546a26f
- Compressarr-Setup-2.2.0-beta.3-Full.exe - https://www.virustotal.com/gui/file/50cb404997e81982dcb61ac02121ef5c3b4e64ca2c6be2171e315be9c617ff27
🛡 VirusTotal GitHub Action analysis:
v2.2.0-beta.2
Warning
Pre-release (beta). The stable release is still 2.1.8.
This build changes where encoding profiles live and adds an optional second encoder - a
test plan is attached (test-plan-2.2.html - open it in a browser, it saves as you go).
Tip
What's new in 2.2.0-beta.2: Compressarr's own encoding profiles (built-ins plus yours,
with an editor and Import - HandBrake's presets.json is no longer used while encoding), new
Encoder and Profiles pages, and ffmpeg as an optional per-lane encoder (experimental).
Everything else below carries forward from 2.2.0-beta.1 for context - new changes are in bold.
Added
- Encoder page (under Monitor). The HandBrake settings moved here from Settings (HandBrakeCLI path
with Check/Install, Extra CLI options), plus an "At a glance" strip and the new ffmpeg card. The
Monitor page shows a Finish setting up notice when a tool a lane needs isn't found. - Profiles page. One list of every profile for both encoders: the built-ins (locked) and your
own. Create, edit, duplicate, delete; renaming updates the lanes and queued files that use a
profile, and delete is refused while one is in use. Import HandBrake presets from an
installed HandBrake or any presets file, with keep-both / replace / skip for name clashes. - HandBrake profile editor. Container, encoder, quality (RF or bitrate), speed, profile/level/
tune, frame rate, deinterlace, crop, audio rules and pass-through list, bitrate/mixdown,
subtitles, chapters - with the exact HandBrake command beside it. Anything the editor doesn't
show is preserved exactly as stored. - ffmpeg (experimental), per lane. A lane's Encoder can be HandBrake (default) or ffmpeg.
Structured ffmpeg profiles (three built-ins: Compressarr SD-HD, Compressarr UHD AV1, HEVC NVENC
(fast)), a profile editor with Preview decisions for a real file, Duplicate as ffmpeg...
from a HandBrake profile (listing what couldn't be carried over), auto-crop and auto-deinterlace,
HandBrake-style track selection, and capability detection (including whether an NVIDIA GPU
session opens). Check/Install uses an ffmpeg already on the computer or downloads BtbN's GPL
build after asking, verified against GitHub's published SHA-256. - Length verification (ERROR 111). After an ffmpeg encode the finished file's length must match
the source's; a truncated result is rejected and the original is left alone. - Dolby Vision / HDR10+ safety (ERROR 112). Such a file on an ffmpeg lane is encoded by HandBrake
using the ffmpeg profile's fallback profile, or refused - never encoded in a way that silently
drops the metadata. - ERROR 113. A lane whose encoder isn't installed is skipped with a clear report entry without
stopping the other lanes. - The report tags files with the encoder that really encoded them (only when it isn't plain HandBrake);
the Monitor queue shows an encoder chip and offers each row its own lane's encoder's profiles. - Scheduler page - an optional day/night schedule (off by default). A new sidebar page (after
Lanes) with a live "Right now" card. Choose when "daytime" is - the same every day, one window for
weekdays and one for weekends, or a window for each day of the week (a window may cross midnight,
and any day can be "Run Off-hours Priority All Day") - then set the encoder's priority for the
daytime and for off-hours (Low through Realtime; a running encode switches priority live at the
boundary, no restart). Optionally only encode during off-hours: no new file starts in the
daytime window, with a choice of finishing the current file first or suspending it until
off-hours. A Run anyway button (Scheduler and Monitor) releases the hold for the rest of the
window, the queue completion estimate counts held time, and the toolbar shows the current mode.
Until you switch it on, nothing changes: encodes run at normal priority at all hours, exactly as
before. Every setting is described on the page itself. - Lane assignment - land a file in a different lane's library. Each queued file has a "Lands
in" dropdown on the Monitor page. Choose another lane and the finished file (and its
subtitles/artwork) is filed into that lane's TV/Movie library - the file itself is never moved,
so Sonarr/Radarr never see it go missing, and its preset, Output folder, queue position and
source-folder cleanup all stay with its own lane. If the destination is offline, or its lane is
deleted, the finished file waits safely in Output and is retried every pass - it is never filed in
the library you were avoiding. The Lanes page warns before you delete a lane that queued files
are set to land in. - Redirects are flagged afterward. The HTML report tags each redirected file and shows a banner
listing them, and the History page highlights a run containing redirects (a violet notice colour,
deliberately not red or yellow) with a "N redirected" tag. The run history CSV gains one column at
the end, so 2.1.x still reads it. - The About page shows pre-release versions in full (e.g. "2.2.0-beta.1").
- A persistent "Install as app" card in Settings > Web UI: installs the mobile-friendly PWA
on demand (Chrome/Edge/Android), shows "Add to Home Screen" instructions on iOS (no installable
prompt exists there), or - if already running as the installed app - explains how to uninstall
it from the browser's own app list, since no web page can trigger that directly. - A new opt-in
{file_list}notification token: this run's filenames, one per line. Deliberately
left out of every built-in Minimal/Standard/Detailed template - it only ever reaches a message
if you type it into a Custom template yourself, since it's the one token that can put a media
filename in front of wherever that channel sends its message. - A close button on every HTML report - most useful in PWA/standalone mode, which has no browser
chrome at all to close a tab with, but available on desktop too. - A "Launch Monitor at Startup" option (Settings > Monitoring): opens the Monitor page in your
default browser as soon as Compressarr launches, independent of whether monitoring itself
auto-starts. - Configuration validation: required fields on Settings and Lanes (HandBrake/FileBot paths,
video extensions, a lane's preset or Output folder) are checked on load and on save, with
invalid fields outlined in red and a toolbar error message pointing you to them. Notifications
validates its own required fields (e.g. a channel's webhook URL) the same way before you save.
Saving still succeeds either way - this is a warning, not a gate - matching how Test Connection
and other checks already behave in this app. - Numbered error-code badges (101-110) on the HTML run report, with a hover tooltip explaining
each one - covers missing HandBrake/presets, a misconfigured lane, and FileBot path problems, so
a problem is identifiable from the report itself, not just the log. - A "Keep Logs of successful HandBrake Encodes" setting (Settings > Maintenance, off by default),
so successful-encode detail logs don't accumulate forever - failed-encode logs are always kept
since the report links to them. - A "Purge Logs & Reports" button (Settings > Maintenance) - same as Clear Logs + Clear History
combined, but a permanent delete instead of Recycle Bin, for a faster cleanup on a large
accumulated backlog.
Changed
- Compressarr always uses its own profiles. HandBrake is handed one generated file (built-ins
plus yours), rewritten only when it is missing or different. The presets.json path, Install/
Merge Presets and Reload controls are gone;HandBrake.PresetsPathstays in the settings file
(hidden) for compatibility and as Import's default location. - First-start migration. The presets your lanes and queued files use are copied from your old
presets.jsoninto your own profiles; a preset that has your built-in's name but a different
recipe is kept as " (yours)" and the lanes are repointed. - Backups and Export config now include your own profiles; restoring a backup restores them.
- Settings no longer has the HandBrake card; "Keep logs of successful HandBrake encodes" is now
"...successful encodes". - A file that FileBot renames now keeps its place in the queue - along with any skip or preset
override - instead of being treated as a brand-new arrival at the end, which silently undid a
manual reorder. The rename is read from FileBot's own output. - Sidebar order is now Monitor, Encoder, Profiles, Lanes, Scheduler, Notifications, History, Settings, About -
Settings moves below History. - Under the hood, with no change in behavior: every rule about which files are tracked, in what
order, and what the Monitor page shows now lives in one place instead of being re-implemented in
the Monitor page, the lane preparation and the next-file picker; and the encode step now talks to
an engine-neutral interface (HandBrake is still the only encoder, with its exact command line
pinned by tests). The automated test suite roughly doubled alongside this. - The first-launch "Install as app" toolbar banner is retired, superseded by the persistent
Settings > Web UI card above - the underlying install capability is unchanged, just no longer
a one-time, dismiss-and-it's-gone prompt. - The "Original v1.1 (PowerShell)" credit and link are removed from the About page - v1.1 is no
longer referenced anywhere in the app. - Monitor is now the default page when Compressarr starts (opening the web UI or the tray
icon's "Open Web UI"), instead of Settings - a one-time setup page isn't where you check in
day-to-day. - A configuration change saved while monitoring is already running now actually takes effect on
the next pass, instead of silently having no effect until ...
v2.2.0-beta.1 (pre-release)
Warning
Pre-release (beta). Please try it on a real install and tell us what you find - the stable
release is still 2.1.8.
Tip
What's new in 2.2.0-beta.1: an optional day/night Scheduler (encode priority by time of
day, with an optional off-hours-only hold), lane assignment (land a file in a different
lane's library without moving it, with the redirect flagged on the report and History), and
FileBot-renamed files keeping their place in the queue. Everything else below carries forward
from 2.1.8 for context - new changes are in bold.
Added
- Scheduler page - an optional day/night schedule (off by default). A new sidebar page (after
Lanes) with a live "Right now" card. Choose when "daytime" is - the same every day, one window for
weekdays and one for weekends, or a window for each day of the week (a window may cross midnight,
and any day can be "Run Off-hours Priority All Day") - then set the encoder's priority for the
daytime and for off-hours (Low through Realtime; a running encode switches priority live at the
boundary, no restart). Optionally only encode during off-hours: no new file starts in the
daytime window, with a choice of finishing the current file first or suspending it until
off-hours. A Run anyway button (Scheduler and Monitor) releases the hold for the rest of the
window, the queue completion estimate counts held time, and the toolbar shows the current mode.
Until you switch it on, nothing changes: encodes run at normal priority at all hours, exactly as
before. Every setting is described on the page itself. - Lane assignment - land a file in a different lane's library. Each queued file has a "Lands
in" dropdown on the Monitor page. Choose another lane and the finished file (and its
subtitles/artwork) is filed into that lane's TV/Movie library - the file itself is never moved,
so Sonarr/Radarr never see it go missing, and its preset, Output folder, queue position and
source-folder cleanup all stay with its own lane. If the destination is offline, or its lane is
deleted, the finished file waits safely in Output and is retried every pass - it is never filed in
the library you were avoiding. The Lanes page warns before you delete a lane that queued files
are set to land in. - Redirects are flagged afterward. The HTML report tags each redirected file and shows a banner
listing them, and the History page highlights a run containing redirects (a violet notice colour,
deliberately not red or yellow) with a "N redirected" tag. The run history CSV gains one column at
the end, so 2.1.x still reads it. - The About page shows pre-release versions in full (e.g. "2.2.0-beta.1").
- A persistent "Install as app" card in Settings > Web UI: installs the mobile-friendly PWA
on demand (Chrome/Edge/Android), shows "Add to Home Screen" instructions on iOS (no installable
prompt exists there), or - if already running as the installed app - explains how to uninstall
it from the browser's own app list, since no web page can trigger that directly. - A new opt-in
{file_list}notification token: this run's filenames, one per line. Deliberately
left out of every built-in Minimal/Standard/Detailed template - it only ever reaches a message
if you type it into a Custom template yourself, since it's the one token that can put a media
filename in front of wherever that channel sends its message. - A close button on every HTML report - most useful in PWA/standalone mode, which has no browser
chrome at all to close a tab with, but available on desktop too. - A "Launch Monitor at Startup" option (Settings > Monitoring): opens the Monitor page in your
default browser as soon as Compressarr launches, independent of whether monitoring itself
auto-starts. - Configuration validation: required fields on Settings and Lanes (HandBrake/FileBot paths,
video extensions, a lane's preset or Output folder) are checked on load and on save, with
invalid fields outlined in red and a toolbar error message pointing you to them. Notifications
validates its own required fields (e.g. a channel's webhook URL) the same way before you save.
Saving still succeeds either way - this is a warning, not a gate - matching how Test Connection
and other checks already behave in this app. - Numbered error-code badges (101-110) on the HTML run report, with a hover tooltip explaining
each one - covers missing HandBrake/presets, a misconfigured lane, and FileBot path problems, so
a problem is identifiable from the report itself, not just the log. - A "Keep Logs of successful HandBrake Encodes" setting (Settings > Maintenance, off by default),
so successful-encode detail logs don't accumulate forever - failed-encode logs are always kept
since the report links to them. - A "Purge Logs & Reports" button (Settings > Maintenance) - same as Clear Logs + Clear History
combined, but a permanent delete instead of Recycle Bin, for a faster cleanup on a large
accumulated backlog.
Changed
- A file that FileBot renames now keeps its place in the queue - along with any skip or preset
override - instead of being treated as a brand-new arrival at the end, which silently undid a
manual reorder. The rename is read from FileBot's own output. - Sidebar order is now Monitor, Lanes, Scheduler, Notifications, History, Settings, About -
Settings moves below History. - Under the hood, with no change in behavior: every rule about which files are tracked, in what
order, and what the Monitor page shows now lives in one place instead of being re-implemented in
the Monitor page, the lane preparation and the next-file picker; and the encode step now talks to
an engine-neutral interface (HandBrake is still the only encoder, with its exact command line
pinned by tests). The automated test suite roughly doubled alongside this. - The first-launch "Install as app" toolbar banner is retired, superseded by the persistent
Settings > Web UI card above - the underlying install capability is unchanged, just no longer
a one-time, dismiss-and-it's-gone prompt. - The "Original v1.1 (PowerShell)" credit and link are removed from the About page - v1.1 is no
longer referenced anywhere in the app. - Monitor is now the default page when Compressarr starts (opening the web UI or the tray
icon's "Open Web UI"), instead of Settings - a one-time setup page isn't where you check in
day-to-day. - A configuration change saved while monitoring is already running now actually takes effect on
the next pass, instead of silently having no effect until monitoring is stopped and restarted or
Compressarr itself is restarted - this covers Notifications, Report, PostExec, and Logging
settings, and the Lanes list itself (add/remove/reorder/enable/disable). - The whole app is usable on a phone or tablet: the sidebar becomes a slide-out drawer below
about 760px width, the toolbar's action buttons and status cluster wrap onto their own rows
instead of overlapping, and Monitor's queue rows reflow into a two-line card layout. Requires no
extra setup - just open Compressarr's normal address in a mobile browser. - The HTML report's recovery banner and the activity it's based on now cover every kind of
automatic retry - a failed move, a failed companion-file move, or a deferred Sonarr/Radarr
rescan/cleanup - not just the first two. - Every page's status/save messages now show in the toolbar, replacing each page's own scattered
status element(s) - the same consistent place across Settings, Lanes, and Notifications. - The toolbar shows elapsed time for the run currently in progress ("Monitoring is ON: Running
(Time Elapsed: 2 hrs, 5 min 10 sec)"), ticking up live instead of only updating once per poll. - Checking for updates now happens immediately when Compressarr starts, instead of only relying
on a browser cache that could keep showing "update available" for up to a day after you'd
already upgraded. - Donate page crypto address cards are more compact and show a truncated address (full address on
hover, copy, and in the QR modal) so all six currencies fit in a single row.
Fixed
- New files could still land above files already waiting in the queue, even after 2.1.7's
queue-order locking. A file only got its permanent position once Compressarr tracked it, and
that only happened when a Lane had nothing else waiting - so during any backlog or long encode,
files that arrived were left untracked and ordered on the Monitor page by live folder-scan
position (not arrival order), and were later locked into that same wrong order once the backlog
drained. Every file is now tracked, at the end of the queue, the first time anything sees it - the
Monitor page's own refresh or a monitoring pass, whichever comes first. A file re-added at a
path that already had a completed or failed entry is also treated as a new arrival and goes to
the end instead of reusing its old position at the top. A monitoring pass also merges in
anything the Monitor page tracked before saving, instead of silently overwriting it. - A file's position in the Monitor page's queue is now permanently locked the moment it first
appears - only an explicit reorder (drag, or move to top/bottom, which is just a reorder under
the hood) can ever change it again. Previously, a file with no explicit position sorted by live
filesystem scan order, which is raw OS enumeration - not alphabetical, and not guaranteed to
place a newly-added file last - so a brand-new file could land anywhere relative to already-known
ones, and a single-file action (skip, preset override, remove) touching one untouched file could
let it jump ahead of still-untouched files sitting alongside it. - A resume-tracking entry belonging to a Lane that's since been deleted or renamed no longer sits
permanently ...
v2.1.8
Tip
What's new in 2.1.8: a follow-up to 2.1.7's queue-order locking, which still let a new file
land above files already waiting. A file's place in the Monitor page's queue is now genuinely
locked from the moment Compressarr first sees it - new arrivals always join at the end, in the
order they actually arrived, and only a manual reorder can move one afterward. Everything else
below carries forward from 2.1.7 for context - new changes are in bold.
Added
- A persistent "Install as app" card in Settings > Web UI: installs the mobile-friendly PWA
on demand (Chrome/Edge/Android), shows "Add to Home Screen" instructions on iOS (no installable
prompt exists there), or - if already running as the installed app - explains how to uninstall
it from the browser's own app list, since no web page can trigger that directly. - A new opt-in
{file_list}notification token: this run's filenames, one per line. Deliberately
left out of every built-in Minimal/Standard/Detailed template - it only ever reaches a message
if you type it into a Custom template yourself, since it's the one token that can put a media
filename in front of wherever that channel sends its message. - A close button on every HTML report - most useful in PWA/standalone mode, which has no browser
chrome at all to close a tab with, but available on desktop too. - A "Launch Monitor at Startup" option (Settings > Monitoring): opens the Monitor page in your
default browser as soon as Compressarr launches, independent of whether monitoring itself
auto-starts. - Configuration validation: required fields on Settings and Lanes (HandBrake/FileBot paths,
video extensions, a lane's preset or Output folder) are checked on load and on save, with
invalid fields outlined in red and a toolbar error message pointing you to them. Notifications
validates its own required fields (e.g. a channel's webhook URL) the same way before you save.
Saving still succeeds either way - this is a warning, not a gate - matching how Test Connection
and other checks already behave in this app. - Numbered error-code badges (101-110) on the HTML run report, with a hover tooltip explaining
each one - covers missing HandBrake/presets, a misconfigured lane, and FileBot path problems, so
a problem is identifiable from the report itself, not just the log. - A "Keep Logs of successful HandBrake Encodes" setting (Settings > Maintenance, off by default),
so successful-encode detail logs don't accumulate forever - failed-encode logs are always kept
since the report links to them. - A "Purge Logs & Reports" button (Settings > Maintenance) - same as Clear Logs + Clear History
combined, but a permanent delete instead of Recycle Bin, for a faster cleanup on a large
accumulated backlog.
Changed
- The first-launch "Install as app" toolbar banner is retired, superseded by the persistent
Settings > Web UI card above - the underlying install capability is unchanged, just no longer
a one-time, dismiss-and-it's-gone prompt. - The "Original v1.1 (PowerShell)" credit and link are removed from the About page - v1.1 is no
longer referenced anywhere in the app. - Monitor is now the default page when Compressarr starts (opening the web UI or the tray
icon's "Open Web UI"), instead of Settings - a one-time setup page isn't where you check in
day-to-day. - A configuration change saved while monitoring is already running now actually takes effect on
the next pass, instead of silently having no effect until monitoring is stopped and restarted or
Compressarr itself is restarted - this covers Notifications, Report, PostExec, and Logging
settings, and the Lanes list itself (add/remove/reorder/enable/disable). - The whole app is usable on a phone or tablet: the sidebar becomes a slide-out drawer below
about 760px width, the toolbar's action buttons and status cluster wrap onto their own rows
instead of overlapping, and Monitor's queue rows reflow into a two-line card layout. Requires no
extra setup - just open Compressarr's normal address in a mobile browser. - The HTML report's recovery banner and the activity it's based on now cover every kind of
automatic retry - a failed move, a failed companion-file move, or a deferred Sonarr/Radarr
rescan/cleanup - not just the first two. - Every page's status/save messages now show in the toolbar, replacing each page's own scattered
status element(s) - the same consistent place across Settings, Lanes, and Notifications. - The toolbar shows elapsed time for the run currently in progress ("Monitoring is ON: Running
(Time Elapsed: 2 hrs, 5 min 10 sec)"), ticking up live instead of only updating once per poll. - Checking for updates now happens immediately when Compressarr starts, instead of only relying
on a browser cache that could keep showing "update available" for up to a day after you'd
already upgraded. - Donate page crypto address cards are more compact and show a truncated address (full address on
hover, copy, and in the QR modal) so all six currencies fit in a single row.
Fixed
- New files could still land above files already waiting in the queue, even after 2.1.7's
queue-order locking. A file only got its permanent position once Compressarr tracked it, and
that only happened when a Lane had nothing else waiting - so during any backlog or long encode,
files that arrived were left untracked and ordered on the Monitor page by live folder-scan
position (not arrival order), and were later locked into that same wrong order once the backlog
drained. Every file is now tracked, at the end of the queue, the first time anything sees it - the
Monitor page's own refresh or a monitoring pass, whichever comes first. A file re-added at a
path that already had a completed or failed entry is also treated as a new arrival and goes to
the end instead of reusing its old position at the top. A monitoring pass also merges in
anything the Monitor page tracked before saving, instead of silently overwriting it. - A file's position in the Monitor page's queue is now permanently locked the moment it first
appears - only an explicit reorder (drag, or move to top/bottom, which is just a reorder under
the hood) can ever change it again. Previously, a file with no explicit position sorted by live
filesystem scan order, which is raw OS enumeration - not alphabetical, and not guaranteed to
place a newly-added file last - so a brand-new file could land anywhere relative to already-known
ones, and a single-file action (skip, preset override, remove) touching one untouched file could
let it jump ahead of still-untouched files sitting alongside it. - A resume-tracking entry belonging to a Lane that's since been deleted or renamed no longer sits
permanently stuck - it's now cleaned up automatically, instead of forever inflating the "Resuming
previous incomplete run" count and blocking the automatic cleanup that clears finished history
once nothing is genuinely outstanding. - An in-progress file could, in rare cases, still show up in the Monitor page's queue as if it
were waiting to be processed, instead of being recognized as the one currently encoding - a name
collision between two different files in different Lane subfolders was enough to trigger it. - A file could show a "Resumed" badge it didn't deserve - a single queue-editing action (skip,
preset override, remove) elsewhere in the same Lane was enough to make every file in that Lane
look like leftover work from an interrupted run, even when nothing had actually been
interrupted. - Daily/Weekly digest notifications always showed "Duration: 0s" regardless of how long the
underlying runs actually took - the digest summary never tracked a duration at all until now. - A queue-control edit (reorder, skip, preset override, or remove) made anywhere in the queue
while a different file was still finishing its own routing, companion-file move, or Sonarr/Radarr
rescan-confirmation wait (which can take up to about two minutes) could be silently lost the
instant that other file's own result was saved - found by an external pre-release code review.
Queue edits are now merged onto the freshest state on disk instead of being overwritten by a
stale in-memory snapshot. - Queue-control actions (reorder, skip, preset override, remove) identified a file by its
filename alone, which could target the wrong file if two different files in different lane
subfolders happened to share the same name - also found by the same review. These now match on
the file's full path instead. - A hung or runaway post-execution command now times out (5 minutes) and is killed instead of
blocking that pass's report and notifications indefinitely, with nothing - not even Abort - able
to interrupt it before. - resume.json is now written atomically (write-to-temp-then-rename) instead of in place,
preventing a corrupted or truncated resume file if Compressarr is killed or crashes mid-write -
this file is rewritten after every single file and every queue-control edit, so it's frequent
enough to matter. - HandBrakeCLI's stderr stream is now fully drained before being read, closing a rare timing gap
where its own "Finished work at" completion line - read to determine success - might not have
fully arrived yet, a plausible source of an occasional false "encode failed" result. - FileBot is now launched with its arguments passed individually instead of built into one
manually-quoted command-line string, removing a class of quoting problems from paths or
arguments containing spaces or special characters. - Sonarr/Radarr URLs are now validated and composed through .NET's own URL handling instead of
bare string concatenation, rejecting a malformed URL up front with a clear error instead of
failing unpredictably later - a custom URL Base (for a reverse-proxy setup) is still respected. - Aborting a run or stopping monitor...
v2.1.7
Tip
What's new in 2.1.7: the Monitor page's queue order is now permanently locked the moment a
file first appears - only a manual reorder (drag, or move to top/bottom) can ever change it
again, and a newly-scanned file always joins at the end instead of possibly landing ahead of
files already in the queue. Settings' Web UI section also gets a persistent "Install as app"
card for installing (or getting uninstall instructions for) the mobile-friendly PWA on demand,
replacing the old one-time toolbar banner; a new opt-in {file_list} notification token for
Custom templates that want filenames; and a close button on every HTML report. Also fixes a
digest notification that always showed 0s for Duration, plus three queue-display bugs (a stale
"Resumed" badge, an in-progress file that could still show as queued, and orphaned tracking
entries left behind by a deleted Lane). Everything else below carries forward from 2.1.6 for
context - new changes are in bold.
Added
- A persistent "Install as app" card in Settings > Web UI: installs the mobile-friendly PWA
on demand (Chrome/Edge/Android), shows "Add to Home Screen" instructions on iOS (no installable
prompt exists there), or - if already running as the installed app - explains how to uninstall
it from the browser's own app list, since no web page can trigger that directly. - A new opt-in
{file_list}notification token: this run's filenames, one per line. Deliberately
left out of every built-in Minimal/Standard/Detailed template - it only ever reaches a message
if you type it into a Custom template yourself, since it's the one token that can put a media
filename in front of wherever that channel sends its message. - A close button on every HTML report - most useful in PWA/standalone mode, which has no browser
chrome at all to close a tab with, but available on desktop too. - A "Launch Monitor at Startup" option (Settings > Monitoring): opens the Monitor page in your
default browser as soon as Compressarr launches, independent of whether monitoring itself
auto-starts. - Configuration validation: required fields on Settings and Lanes (HandBrake/FileBot paths,
video extensions, a lane's preset or Output folder) are checked on load and on save, with
invalid fields outlined in red and a toolbar error message pointing you to them. Notifications
validates its own required fields (e.g. a channel's webhook URL) the same way before you save.
Saving still succeeds either way - this is a warning, not a gate - matching how Test Connection
and other checks already behave in this app. - Numbered error-code badges (101-110) on the HTML run report, with a hover tooltip explaining
each one - covers missing HandBrake/presets, a misconfigured lane, and FileBot path problems, so
a problem is identifiable from the report itself, not just the log. - A "Keep Logs of successful HandBrake Encodes" setting (Settings > Maintenance, off by default),
so successful-encode detail logs don't accumulate forever - failed-encode logs are always kept
since the report links to them. - A "Purge Logs & Reports" button (Settings > Maintenance) - same as Clear Logs + Clear History
combined, but a permanent delete instead of Recycle Bin, for a faster cleanup on a large
accumulated backlog.
Changed
- The first-launch "Install as app" toolbar banner is retired, superseded by the persistent
Settings > Web UI card above - the underlying install capability is unchanged, just no longer
a one-time, dismiss-and-it's-gone prompt. - The "Original v1.1 (PowerShell)" credit and link are removed from the About page - v1.1 is no
longer referenced anywhere in the app. - Monitor is now the default page when Compressarr starts (opening the web UI or the tray
icon's "Open Web UI"), instead of Settings - a one-time setup page isn't where you check in
day-to-day. - A configuration change saved while monitoring is already running now actually takes effect on
the next pass, instead of silently having no effect until monitoring is stopped and restarted or
Compressarr itself is restarted - this covers Notifications, Report, PostExec, and Logging
settings, and the Lanes list itself (add/remove/reorder/enable/disable). - The whole app is usable on a phone or tablet: the sidebar becomes a slide-out drawer below
about 760px width, the toolbar's action buttons and status cluster wrap onto their own rows
instead of overlapping, and Monitor's queue rows reflow into a two-line card layout. Requires no
extra setup - just open Compressarr's normal address in a mobile browser. - The HTML report's recovery banner and the activity it's based on now cover every kind of
automatic retry - a failed move, a failed companion-file move, or a deferred Sonarr/Radarr
rescan/cleanup - not just the first two. - Every page's status/save messages now show in the toolbar, replacing each page's own scattered
status element(s) - the same consistent place across Settings, Lanes, and Notifications. - The toolbar shows elapsed time for the run currently in progress ("Monitoring is ON: Running
(Time Elapsed: 2 hrs, 5 min 10 sec)"), ticking up live instead of only updating once per poll. - Checking for updates now happens immediately when Compressarr starts, instead of only relying
on a browser cache that could keep showing "update available" for up to a day after you'd
already upgraded. - Donate page crypto address cards are more compact and show a truncated address (full address on
hover, copy, and in the QR modal) so all six currencies fit in a single row.
Fixed
- A file's position in the Monitor page's queue is now permanently locked the moment it first
appears - only an explicit reorder (drag, or move to top/bottom, which is just a reorder under
the hood) can ever change it again. Previously, a file with no explicit position sorted by live
filesystem scan order, which is raw OS enumeration - not alphabetical, and not guaranteed to
place a newly-added file last - so a brand-new file could land anywhere relative to already-known
ones, and a single-file action (skip, preset override, remove) touching one untouched file could
let it jump ahead of still-untouched files sitting alongside it. - A resume-tracking entry belonging to a Lane that's since been deleted or renamed no longer sits
permanently stuck - it's now cleaned up automatically, instead of forever inflating the "Resuming
previous incomplete run" count and blocking the automatic cleanup that clears finished history
once nothing is genuinely outstanding. - An in-progress file could, in rare cases, still show up in the Monitor page's queue as if it
were waiting to be processed, instead of being recognized as the one currently encoding - a name
collision between two different files in different Lane subfolders was enough to trigger it. - A file could show a "Resumed" badge it didn't deserve - a single queue-editing action (skip,
preset override, remove) elsewhere in the same Lane was enough to make every file in that Lane
look like leftover work from an interrupted run, even when nothing had actually been
interrupted. - Daily/Weekly digest notifications always showed "Duration: 0s" regardless of how long the
underlying runs actually took - the digest summary never tracked a duration at all until now. - A queue-control edit (reorder, skip, preset override, or remove) made anywhere in the queue
while a different file was still finishing its own routing, companion-file move, or Sonarr/Radarr
rescan-confirmation wait (which can take up to about two minutes) could be silently lost the
instant that other file's own result was saved - found by an external pre-release code review.
Queue edits are now merged onto the freshest state on disk instead of being overwritten by a
stale in-memory snapshot. - Queue-control actions (reorder, skip, preset override, remove) identified a file by its
filename alone, which could target the wrong file if two different files in different lane
subfolders happened to share the same name - also found by the same review. These now match on
the file's full path instead. - A hung or runaway post-execution command now times out (5 minutes) and is killed instead of
blocking that pass's report and notifications indefinitely, with nothing - not even Abort - able
to interrupt it before. - resume.json is now written atomically (write-to-temp-then-rename) instead of in place,
preventing a corrupted or truncated resume file if Compressarr is killed or crashes mid-write -
this file is rewritten after every single file and every queue-control edit, so it's frequent
enough to matter. - HandBrakeCLI's stderr stream is now fully drained before being read, closing a rare timing gap
where its own "Finished work at" completion line - read to determine success - might not have
fully arrived yet, a plausible source of an occasional false "encode failed" result. - FileBot is now launched with its arguments passed individually instead of built into one
manually-quoted command-line string, removing a class of quoting problems from paths or
arguments containing spaces or special characters. - Sonarr/Radarr URLs are now validated and composed through .NET's own URL handling instead of
bare string concatenation, rejecting a malformed URL up front with a clear error instead of
failing unpredictably later - a custom URL Base (for a reverse-proxy setup) is still respected. - Aborting a run or stopping monitoring now actually cancels an in-flight Sonarr/Radarr API call
immediately, instead of waiting for it to finish on its own (up to 15 seconds) before the
abort/stop took effect for that file. - Sonarr/Radarr's post-move library rescan is now actually confirmed complete (real polling of
its own command status, replacing a blind fixed wait) before the now-empty source folder is...