Welcome to the September 2026 release of Video Commander. This version is mostly about the workspace: how you start a job, follow it while it runs, and find your way around the app. Here are the highlights:
- Notifications and job history - finished jobs raise a toast and stay in a history behind the bell.
- Command palette - ⌘K searches views, open tabs, Settings sections, and Labs features.
- Status bar - encode progress, job counts, the active source, and FFmpeg status along the bottom of the window.
- Run toolbar - Convert, Analyze, and Delivery start from a toolbar pinned to the top of the view.
- What's New - the release notes for the version you just installed, shipped in the binary.
- A refreshed look - cleaner tables, dialogs, menus, and form controls throughout.
- Themes - light mode, a System option, and eleven community palettes.
- Frame comparison - put any frame of a VMAF run next to its source, with a wipe, a difference map, and an A/B blink.
- Trick-play thumbnails - manifest validation covers thumbnail tracks, and can probe the sprite sheets themselves.
- The vc command line - inspect and validate from a shell, with exit codes for CI.
Version 2026.11.0 is available now from the download page.
Workspace
Notifications and job history
A finished job raises a toast above the bell in the bottom-right corner, carrying View job. Successes clear themselves after fifteen seconds. Failures and warnings stay up until you dismiss them, so a job that failed while you were in another window is still there when you come back.
The bell counts what has arrived since you last looked, and opens the full history: newest first, capped at 200, clearable.
Command palette
⌘K opens a command palette. It searches the four workspace views, your open tabs by filename or path, Settings sections, and Labs features. It can also open a file or save the active tab to a project. ⌘⇧P opens the same palette, for the muscle memory that expects it there.
Status bar
A status bar runs along the bottom of the window. It shows the current encode with a progress bar, percentage, speed against realtime, and time remaining; the number of running and queued jobs; the active tab's source by codec, resolution, frame rate, and size; a warning while debug logging is on; and whether FFmpeg was found, and at what version.
Every item is a button. Clicking the encode goes to that job, the counts go to the Jobs view, and the FFmpeg and debug-logging items go to the Settings section that controls them.
Run toolbar
Convert, Analyze, and Delivery have a run toolbar pinned to the top of the view. Run leads, and Stop sits beside it while a job runs, so both controls stay in one spot for the whole life of the job.
The confirmation dialog that used to appear when a job was queued is gone. The status bar shows the job queued, and a toast reports it finishing. Batch keeps its wizard footer.
What's New
The first launch after an update opens a What's New tab with the release notes for the version you just installed. You can recall it later from the welcome view or the command palette.
The notes ship inside the binary. Nothing is fetched, so the tab works the same offline.
A refreshed look
Tables, dialogs, menus, and form controls are cleaner and more consistent across the app. Data tables are more compact, which puts more rows on screen, and every dialog has a close button. Nothing has moved, and nothing works differently.
The Convert preset picker also takes arrow keys and type-ahead now, so a long preset list is reachable without the mouse.
Themes
Settings has an Appearance section. It carries light, dark, and a System option that follows your operating system, alongside eleven community palettes: the four Catppuccin flavours, the three Rosé Pine variants, the three Tokyo Night variants, and Nord. Each shows a live swatch in the picker, and native file dialogs and context menus follow your choice.
A few surfaces stay dark on every theme: overlays sitting on video, modal scrims, and the command preview and raw manifest views.
Analyze
Frame comparison
Analyze has a Frames tab that puts any frame of a VMAF run up against its source.
Three ways to read the difference: a wipe you drag across the two frames, an amplified difference map, and an A/B blink that swaps between them in place. The difference map states its amplification factor on screen, so a faint map is distinguishable from a map that is merely scaled down. Zoom and pan stay locked across both images, so the two never drift out of alignment while you work.
Validation
Trick-play thumbnails
Manifest validation now covers trick-play thumbnails. For HLS EXT-X-IMAGE-STREAM-INF and EXT-X-TILES tracks it reports a missing sprite URI or resolution, a tile grid that is not a COLSxROWS pair, a missing tile duration, an interval that changes partway through, and tiles that cover less than the playlist's duration.
Those checks read the manifest. vc validate --probe-tiles goes after the sprite sheets themselves: it reads each sheet's header, compares its pixel size against the declared grid, flags sheets wider than 4096 pixels, and reports the sheets it could not fetch. It is off by default, because it costs a request per sheet. Point it at the thumbnail rendition's own playlist rather than the master.
Gating on findings
vc validate exits 1 when a manifest has errors. --fail-on widens that to warnings, or narrows it to named codes, as in --fail-on HLS_006.
QC findings now carry a stable code, such as DRM_TENC_MISSING. The code is what --fail-on matches on and what to cite in a ticket. Messages stay free to be reworded; the code is the contract.
Unknown values are rejected as usage errors rather than silently matching nothing, and codes are checked against the vocabulary of the command you passed them to. A container code given to vc validate is rejected as a typo.
The vc command line
A vc command-line companion ships alongside the app. It runs inspect and manifest validation from a shell, over the same Rust crates the app uses, and it runs standalone: a CI machine does not need the desktop install.
vc inspect --fail-on exits non-zero when a file carries findings you name, which is the piece that makes it useful in a pipeline. Each rule runs the analysis it needs rather than reporting on whatever happened to be parsed. When a container cannot be analysed for a section a rule names, that is reported rather than passed: on stderr even under --quiet, and in fail_on_unanalysed under --json.
Engineering
- The UI components are migrated to shadcn, and the remaining views now use the shared Button. This is what the refreshed look is built on.
- A
vc-coredispatcher sits under both the app and the CLI, so the two run the same analysis rather than two implementations of it. - The legacy hyper 0.14 path is dropped from
vc-remote, clearing the advisory that came with it. - Labs is now reserved for long-running experiments. The status bar and the command palette graduated out of it into the app proper.
- CI installs frontend dependencies with
npm ci, and runs tests and security checks on release branches as well as on main.
Fixes
- The FFmpeg installer finishes on a slow connection. The download gives up when the transfer stalls, rather than at a ten-minute ceiling on the transfer as a whole.
- A failed FFmpeg install says what went wrong: a blocked connection, a stalled transfer, a rejected checksum, or a bad archive.
- The remote file browsers have an up control and a parent row, and the breadcrumb trail is padded so every segment is a real target. A directory with no entries keeps its listing instead of being replaced by a message.
- Keyboard shortcuts fire only in the tab on screen. ⌘↩ reached every encode view that had been opened, and a Player in a background tab kept playing.
- The debug-logging status item opens the Logging section of Settings.
- DRM reports for MKV and AVI include their findings list.
Download
Get 2026.11.0 from the download page, or use the in-app updater. The full release history is on the changelog.
