Repository navigation
Releases: adamkbritsch/visionary
Release list
Visionary 0.6
Install without cloning:
- Download and unzip
Visionary-v0.6.zip. - Drag Visionary.app to /Applications (required: macOS App Translocation would otherwise run it from a randomized read-only path and the privacy grants would not stick).
- Right-click → Open the first time (not notarized; macOS asks once).
- Install DaVinci Resolve Studio 18.6.0 and Topaz Video AI 7.0.1 (exact builds — see the README requirements box).
- Open Settings → Setup in the app for everything else: NAS connection, media folders, one-click dependency installs, permissions, and the Resolve projects + Dolby Vision preset import.
Requires the exact hardware/software pins in the README (2.0-backing-scale display, 140 W-class Mac). The pipeline names anything missing instead of failing mid-run. Upgrading from 0.5 keeps your Screen Recording and Accessibility grants.
Since 0.5
Dolby Vision profile 7 → 8.1, in place, with no re-encode. Blu-ray remuxes carry Dolby Vision as profile 7, which most streaming players only play as HDR10. The Movies pane has a new DV 7 filter listing every movie known to be profile 7 (read from the RPU itself — a release name says "DV" for 7 and 8.1 alike). Tap one to queue it, or Queue all.
These never touch Topaz, Resolve or the capped re-encode: the file has already proven it carries Dolby Vision, so the HDR10 video is copied bit for bit, dovi_tool rewrites each RPU to 8.1 (the enhancement layer — MEL, FEL, or a separate 1080p EL track — is dropped), and mkvmerge puts every other track, chapter and attachment back unchanged.
- Verified twice before anything is replaced: DV 8.1 side data and RPU, frame count, duration, track count, chapters, attachments, start and end timestamps on the Mac, then the copy staged on the NAS is read back — sampled ranges must match byte for byte and its head must read profile 8.
- Replaced under the exact same name, with one rename that keeps the original's permissions — so Plex keeps the item, its artwork and watch state — and is refused if the original changed while it was being converted. No backup is kept.
- Runs beside the upscales, not in their queue. It needs no GPU, only uses Mac disk above Visionary's own free-space floor, and resumes every transfer from where it stopped after a Stop or a relaunch.
- Outranks the upscales' cached downloads. When a movie needs room, the sources the upscale pipeline downloaded ahead for later items are cleared — the furthest-off first, each downloading again in its turn — and the download-ahead never takes the room a movie in progress still needs.
- One transfer at a time, over the wire. Downloads and uploads take turns (only the local conversion overlaps a transfer), and at home they are pinned to the Mac's wired Ethernet link to the NAS — never Wi-Fi while a cable is connected; away from home they go over Tailscale. The panel shows which link is in use.
- A network blip is not a failure. A dropped connection is retried, and a movie whose upload or swap does fail gets 5 attempts in all, each resuming from its verified converted file after a pause (1, 5, 15, then 30 minutes). When the fifth fails, its files are deleted from the Mac and its staged copy from the NAS, so nothing that failed is left holding disk.
- Plex comes first. Transfers are throttled whenever anyone has a Plex session open, a movie is never replaced while it is playing, and Plex is only asked to rescan and re-analyze once nobody is streaming.
- Over FTP, like the rest of Visionary — the NAS's local network at home, Tailscale away from it, so it keeps converting wherever the Mac is. Needs only
brew install mkvtoolnix(the lane names anything missing). - The verification knows two release quirks: a last block that holds only the final frame's Dolby Vision enhancement layer (no picture, so the new file has one frame fewer), and a video track that starts a millisecond after the audio (carried over exactly). It now also checks the video's last timestamp.
New look. A new Visionary logo and app icon (Icon Composer glass on macOS 26).
Settings → NAS network: Ethernet first (default), Wi-Fi first, or Ethernet only. It decides which of the Mac's links the NAS transfers take — both the upscale pipeline's downloads and uploads (which now go straight over the LAN instead of through Tailscale when the chosen link reaches the NAS) and the Dolby Vision 7 → 8.1 lane. Ethernet only makes the DV lane wait for a cable rather than use Wi-Fi; upscales still reach the NAS however they can. A transfer that loses its link mid-way is retried once over the old route instead of counting as a failure.
Movies filters are named for the source and run up the ladder: 1080p & below, 4K SDR, 4K HDR10, DV 7, DV 8.1, then Unwatched (the route each takes is in the chip's tooltip). DV 8.1 lists the Dolby Vision movies a best-of combine can still improve — it appears once Shuttle has found a seedbox copy. Already-Dolby-Vision movies are no longer counted under the upscale chips, and the web dashboard's movie picker can queue profile 7 movies too.
Visionary 0.5
Install without cloning:
- Download and unzip
Visionary-v0.5.zip. - Drag Visionary.app to /Applications (required: macOS App Translocation would otherwise run it from a randomized read-only path and the privacy grants would not stick).
- Right-click → Open the first time (not notarized; macOS asks once).
- Install DaVinci Resolve Studio 18.6.0 and Topaz Video AI 7.0.1 (exact builds — see the README requirements box).
- Open Settings → Setup in the app for everything else: NAS connection, media folders, one-click dependency installs, permissions, and the Resolve projects + Dolby Vision preset import.
Requires the exact hardware/software pins in the README (2.0-backing-scale display, 140 W-class Mac). The pipeline names anything missing instead of failing mid-run. Upgrading from 0.4 keeps your Screen Recording and Accessibility grants.
Want to see the output first? The README links sample stills from the pilot of Lost: HDR side-by-sides and zoomed crops against the 1080p original.
Since 0.4
YouTube, rebuilt around what you actually do with it. Paste a video, playlist or channel link and a confirm step shows real titles and counts before anything is queued; each import gets its own output, loudness and pause settings, just like a channel. Every video is filed under its own uploader, and an imported playlist gets a Plex collection of its own on top of its channels'. A companion app's Send to Visionary now takes playlists and channels too, and a sent video runs after the current segment, not the current episode — it is never held back at the Resolve step. Channels are read all the way back (videos and live streams, never Shorts), channels take turns instead of one monopolising the queue, and a newly added channel gets its first two videos fast before settling into the rotation. A burst of ten videos means ten, and a due movie shows ahead of the next group of videos.
YouTube is faster. A render whose peak bitrate lands over the playback cap is now re-exported at a lower, calculated bitrate in the same Resolve session — minutes instead of the hour-class x265 re-encode — and native-4K sources render lower to begin with. Resolve stays open across a run of videos instead of relaunching for each one. An optional saved cleanup grade is applied to YouTube renders, inherited the way the render preset is.
Audio. One loudness decision per season, not per episode. Lossless tracks are boosted too, with the original kept behind the boosted one; MKV masters with lossy audio get the boost; Atmos is never touched and becomes the main track. "Normalize audio" now reliably normalizes, and when a revision declines, it says why.
Picture correctness. Resolve renders at the source's true frame rate, the queued render job's rate is checked before hours are spent on it, and a render that doesn't match its source — wrong length, wrong rate — is rejected instead of shipped. A container can no longer outrun its own picture in the constant-frame-rate pass (now on the media engine for 4K), the fast path gates the file it actually renders, and masters must be tightly interleaved (the check measures interleaving, not GOP length).
Reliability. A NAS outage never destroys finished work or parks an item. A stuck upload no longer freezes the pipeline behind it, and state polling never walks the NAS. Two scheduler livelocks are fixed, the Resolve step waits for a remux on either finisher lane, and when a display change makes the Analyze All click miss, the automation clicks again instead of failing the pass. The 140 W charger is recognised even when it negotiates 120 W. Paths with real Unicode (and FTP servers that answer in GB18030) work. Dropping a playlist or channel clears its videos' working files off the scratch disk, and Skip & delete works on imported and sent videos.
Web dashboard. Rebuilt in the app's design language and reachable over your tailnet: the full queue, picking shows, movies and channels from away, and a remote Deactivate that keeps the screen awake for an hour so you can re-arm.
The app. A real menu bar (and ⌘V in text fields). A Finished list with search and one-click audio revision. The movie library filters by what the pipeline will do and shows sizes. A redesigned pipeline card with hover details. The scratch panel shows both free-space numbers. Featurettes always run after a show's episodes, and a per-show toggle decides whether they run at all. The screen no longer dims while something is playing on it.
Updated 2026-09-24. Same 0.5, rebuilt from the fixes that landed after it was first cut:
A container that lies about its frame rate no longer stalls a movie in Topaz. A release declaring 23.81 fps over frames that actually run at 23.976 had its last segment come up short on every attempt, for 44 minutes a time. The frames' own rate is now measured and believed over the header, and a segment that comes out short says so instead of logging ffmpeg's closing stats.
The file Resolve imports has to be one Resolve can host. A genuine 23 fps upload is re-timed to a rate Resolve can put on a timeline, and a conversion that skipped frames is thrown away and redone rather than failing every Resolve attempt for days.
A sibling app can ask for the machine. POST /api/yield takes a lease with a TTL, so a crashed or force-quit sibling can never wedge the overnight queue. Every lease carries an id, so its holder can tell when it no longer has the machine.
Updated 2026-09-27. A YouTube render whose peak is over the cap is re-exported lower instead of taking the hour-class re-encode. It was aiming 22 percent below the bar it actually has to clear, so the highest-burst videos computed a target under the floor and lost the fast path anyway: one 25-minute video spent four and a half hours there. It now aims at the gate that decides, and once it has two measurements it fits the line through them rather than assuming the peak scales with the bitrate.
Updated 2026-09-27, later. The YouTube cadence dial has a zero. Reading down, it now goes 2 videos per TV episode, 1 video per TV episode, no YouTube videos, 1 video every 2 TV episodes: the zero sits at the switchover between counting videos per episode and counting episodes per video, and at that stop the rotation serves none, so TV and movies have the queue. A video you send with Run now still runs: that was never part of the cadence. Also in this build: a lost re-export gamble keeps the first render for the fallback rather than handing it a half-bitrate one, each decline says which reason it is, and the peak every render lands at is now in the log.
The dial's own arithmetic is now a separate file with no UI imports, compiled and run by the engine test suite, so a stop that cannot be reached fails a test instead of shipping.
Sample stills: Lost S01E01
Six moments from the pilot of Lost, upscaled from 1080p to 4K Dolby Vision by Visionary and set against the original: lossless HDR side-by-sides, boards with zoomed crops of the most detailed regions, and isolated SDR and HDR frames for two of them.
The HDR images are 10-bit PQ AVIF. Open them on an HDR screen (Preview or Photos on a Mac, or a current Chrome or Safari) to see the highlights; elsewhere they look flat. This is a sample download, not an app release: the app is in the latest Visionary release.
Visionary 0.4
Install without cloning:
- Download and unzip
Visionary-v0.4.zip. - Drag Visionary.app to /Applications (required: macOS App Translocation would otherwise run it from a randomized read-only path and the privacy grants would not stick).
- Right-click → Open the first time (not notarized; macOS asks once).
- Install DaVinci Resolve Studio 18.6.0 and Topaz Video AI 7.0.1 (exact builds — see the README requirements box).
- Open Settings → Setup in the app for everything else: NAS connection, media folders, one-click dependency installs, permissions, and the Resolve projects + Dolby Vision preset import.
Requires the exact hardware/software pins in the README (2.0-backing-scale display, 140 W-class Mac). The pipeline names anything missing instead of failing mid-run.
Since the first packaged build
Media folders are decided from Plex. Setup gains a Media folders group: each Plex library's type sets whether it is processed as TV or Movies, its folders are mapped onto NAS FTP paths and verified over FTP, and every library gets a picker so the routing is visible and overridable. Plex types its own "YouTube" library as a movie library (routed by name instead), and a 3D library is deliberately left unassigned — the deliverable is a 2D 4K DV master. With no Plex, the built-in layout applies unchanged; env vars still win over everything.
AI border extension (optional, off by default). 4:3 shows can have their left/right borders generated to 16:9 before the upscale, using WAN 2.1 VACE through your own Comfy Desktop install driven headlessly. Only the borders are AI — the original frames ship untouched at full resolution. The option appears only on shows that measure 4:3, and stays offered on mixed shows that go widescreen in later seasons. For continuity, chunk boundaries snap to scene cuts, chunks within a scene share a seed, there is a per-show wing prompt, and a persistent set memory reuses a recurring set's invented borders across scenes and episodes. It is the slowest thing here by a wide margin (hours per episode) and takes the whole machine while it runs. Needs Comfy Desktop + ComfyUI-VideoHelperSuite + ~11.4 GB of models, all installable from Setup.
YouTube is faster and simpler. The per-video length cap is gone — Resolve exports at a cap-safe bitrate and the remux ships that render stream-copied instead of running the hour-class re-encode. Videos are ordered by publish date (not download time), so a channel un-paused after weeks starts at the newest video. The cadence dial now spans both directions in whole numbers, from several videos per episode to one every N episodes. And any pending video can jump the queue from its up-next row: whatever is processing yields at its next safe boundary (a Topaz segment boundary — never mid-Resolve) and resumes afterwards.
Reliability fixes, several of them data-integrity: an unverifiable partial download is no longer trusted (it could previously produce a truncated master and then delete the original); frame counts no longer depend on a container tag that Matroska never carries, which had made two whole fallback paths unreachable and parked good files; the Resolve budget and the disk gate now scale with content length instead of assuming episode-sized items; parking an item sweeps its abandoned working set; and two scheduler deadlocks that could hold the run indefinitely are fixed.
Visionary 0.3
Retroactive release. Visionary never had a 0.3 release. This one was packaged on 17 September 2026 from the code exactly as it stood at the end of 6 August 2026 (commit
a0b2e7e), to show what a release at that point would have looked like. It is kept for history — use the latest release.
Setup at the time. In-app Setup arrived just after this, so setup was still the manual path in the README as it stood at this tag: clone the repo at v0.3 and follow it; this zip only saves you the build. It ran on any desktop Mac or a 16-inch MacBook Pro on its 140 W charger, on any Retina / HiDPI screen, with DaVinci Resolve Studio 18.6.0 and Topaz Video AI 7.0.1.
What's new in 0.3
Runs on more Macs. Any 2× display and any 140 W-class Mac now qualifies, desktops included — the rules are about the screen's pixel density and the power envelope, not one laptop model.
Resolve on another screen. Resolve can be hosted on a display of your choice and moved there the moment it opens. A notice appears before the mouse is borrowed, the pointer is handed back when it is done, and the Resolve step's pipeline card shows a live preview of its screen.
An output range for every item. A true SDR output joins Dolby Vision, per show, movie or channel. Automatic always means Dolby Vision.
YouTube gets quick. Videos skip Topaz and are upscaled by Resolve's SuperScale, and a render that measures under the peak cap ships as-is, so a video's remux takes minutes. A localhost Send to Visionary endpoint lets a companion YouTube app queue a video.
Companion combine. When a second copy of a movie sits on a seedbox, Visionary builds one best-of master from the pair, with real Atmos detection and proof the two are the same cut. The HDR10 fast path is gated against the SHIELD's Dolby Vision playback ceiling.
Scheduling. Each show slot can queue the show that follows it. Switching a show away stops its work completely. Two remux lanes are shown and actually drain a backlog. When Resolve runs, the remuxes are suspended and it gets the whole machine, and fast-path items wait at the Resolve step so the next episode's Topaz keeps running.
Resilience. A lid close during the Dolby Vision pass no longer breaks it; a killed Resolve pass resumes past the sub-steps it had finished; the compat mezzanine saves its progress like a Topaz encode; peak repairs are visible and resume at their tightened cap; an already-Dolby-Vision source is refused once, durably; and HDR10 is never re-encoded.
The app. Settings move into a header gear with the scheduling knobs exposed, Screen Control becomes a timed pause, the header shows both pipeline lanes with their estimates, and per-show settings collapse to one line while a run holds them.
Visionary 0.2
Retroactive release. Visionary never had a 0.2 release. This one was packaged on 17 September 2026 from the code exactly as it stood at the end of 25 July 2026 (commit
fd78d14), to show what a release at that point would have looked like. It is kept for history — use the latest release.
Setup at the time. There was no in-app Setup yet, so setup was the manual path in the README as it stood at this tag: clone the repo at v0.2 and follow it; this zip only saves you the build. It required a 16-inch MacBook Pro on its 140 W adapter, using its built-in panel — or a 4K dummy HDMI plug to run with the lid closed — with DaVinci Resolve Studio 18.6.0 and Topaz Video AI 7.0.1.
What's new in 0.2
4K fast paths. A high-bitrate 4K source skips Topaz entirely: HDR10 gets a Dolby Vision RPU injected, SDR is converted and given Dolby Vision by Resolve. Eligibility is measured from the file, never guessed from its name. When Resolve cannot ingest a source, a lightweight HEVC mezzanine is built and the pass retried. Fast-path items overlap too — the next item starts while one remuxes, and Resolve takes priority over the remuxes.
Normalize audio, as a setting on every show, movie and channel.
Replaces source. Each show or movie decides whether the finished master replaces the 1080p original or lands next to it.
Lid-closed runs. Visionary can run in clamshell mode on a 4K dummy plug, screen capture rides out display transitions, and a silent full-screen failure that broke the Dolby Vision palette click is fixed.
Fixes. MKV and other lossy-timebase sources are re-encoded to true constant frame rate, ending audio drift; a corrupt subtitle cue no longer parks an episode; 9x01-style episode naming is recognised; masters keep all of their audio tracks; and the movie picker shows how each title will be processed.
Visionary 0.1
Retroactive release. Visionary never had a 0.1 release. This one was packaged on 17 September 2026 from the code exactly as it stood at the end of 12 July 2026 (commit
964deea), to show what a release at that point would have looked like. It is kept for history — use the latest release.
Setup at the time. There was no in-app Setup yet, and the app bundle carried only the engine, so setup was the ten-step manual path in the README as it stood at this tag: clone the repo at v0.1 and follow it; this zip only saves you the build in step 6. It required a 16-inch MacBook Pro (Apple Silicon) on its built-in display and its 140 W adapter, with DaVinci Resolve Studio 18.6.0 and Topaz Video AI 7.0.1.
What Visionary 0.1 was
The appliance, first published. TV shows, movies and YouTube videos go through Topaz Video AI to 4K, a real Dolby Vision 8.1 grade in DaVinci Resolve — its Analyze All Shots step driven by matching the button on screen — and a peak-capped x265 remux carrying the original audio, then back onto the NAS.
Mastering matched to the intake: SDR sources mastered to 1000 nits, HDR sources to 2000 nits. Smart upscaling profiles detect whether a show is film, digital or animation and pick the matching Topaz profile.
Two things at once. An episode's remux runs while the next one is already in Topaz, measured at about 27% faster per finished episode. Any two finished upscales can remux in parallel on a second lane, with Topaz pausing at a segment boundary to give them the machine.
Storage-smart output. Masters are encoded under a hard peak-bitrate cap, landing at about 1.7× the size of the 1080p source, and a master that still measures over the cap is repaired by re-encoding only the offending segments.
Built to run unattended. When Resolve's weekly update prompt blocks it, the pipeline keeps upscaling into a buffer and drains it once the prompt is dismissed. Items run start to finish, an episode already mid-pipeline finishes before a movie or YouTube video interrupts it, and sources that are already constant-frame-rate are stream-copied instead of re-encoded. Plex is optional.