Repository navigation
Releases: marbou92/FFX-Compatibility-Tool
Release list
FFX Compatibility Tool v0.2.3
🚀 FFX Compatibility Tool v0.2.3
FFX Compatibility Tool 0.2.3 takes the pipeline to the terminal — FFXCompatibilityTool.exe now converts from any console, script or CI run, the target pickers can see which After Effects versions are actually installed on the machine, and overwriting presets finally comes with a safety net: every original is zipped up before a single file is touched, and one Settings panel hands them back.
✨ What's New
- A command line that runs the real pipeline — FFXCompatibilityTool.exe --convert drives one preset or a whole folder through the exact batch contracts the GUI owns: the five output modes (converted, suffix, overwrite, zip, folder), the clean rebuild of derived outputs, the same conversion-report.csv. --target takes version keys, display names or folder tokens (comma-separated or repeatable), --output picks the mode, --out redirects the results, --remove-missing also strips effects your saved plugin profile says you don't own, --quiet trims the per-file lines for scripts, --list-targets prints every version the tool knows, and the exit codes tell a batch file exactly what happened — 0 all conversions succeeded, 1 a conversion failed or nothing converted, 2 bad usage, 3 crashed.
- The app sees what you have installed — the Target version picker and the Targets dropdown mark every version a real After Effects installation backs with an "installed" pill. A read-only probe merges Adobe's registry keys (both registry views) with a sweep across Program Files (ProgramW6432 first, because this exe runs 32-bit under WOW64), it runs on a worker thread so the page never freezes, and the version you had picked survives the rebuild the pills trigger.
- Overwrite now backs up first — a batch set to Overwrite or a single preset overwritten in place first zips every original beside the source folder: one FFX-backup--.zip with a manifest inside recording where its contents belong. A remembered "Back up originals before overwriting" checkbox governs it — on by default — and if the backup itself fails, the app asks before going on without one instead of plowing ahead.
- Getting the originals back is a setting — Settings → Storage gains a CONVERSION BACKUPS group that lists every backup the app made: Restore puts the originals back over whatever replaced them and the zip stays until you delete it, Delete is a two-step confirm that removes the zip and forgets the row while the converted files stay, and a backup whose zip has been moved or deleted says so instead of pretending.
🛠️ Fixed
- The overwrite confirmation tells the truth — with backups in the picture, the dialog now says exactly what will happen in both checkbox states instead of the old "nothing backs them up" story.
Thank you for every report, preset and idea that shaped this build — install the new exe and put the terminal to work. 💚
Install
- Download FFXCompatibilityTool-0.2.3.exe below — that single file is the whole app.
- Run it — no installer, no zip, no DLL pile, no data folder: everything is inside the exe.
- Requires .NET Framework 4.8 (preinstalled on Windows 10/11; Windows 7 SP1 needs the 4.8 runtime installed once).
- Windows shows a "publisher could not be verified" warning on first run — this app is unsigned open source, and Windows says that about every fresh download. Match the SHA-256 in the Verify section below, then click Run.
- If the prompt gets old: right-click the exe → Properties → tick Unblock.
Verify
SHA-256 c15b11244d4408d246ac2a8c51c4700e36bb2dd7e7ea371e02f26ac3627e5a1e FFXCompatibilityTool-0.2.3.exe
Every change in v0.2.3 — the full commit list
- feat(changelog): 0.2.3 release notes, changelog.json snapshot and version bump
- feat(cli+convert+storage): the exe becomes a tool too
- fix(docs): README winget section matches the live catalog; maintainer setup guide moves into the…
- fix(ci+gui): winget submit preflights the token
- feat(changelog): give every release notes file ✨ What's New / 🛠️ Fixed / 🚀 Polished…
The in-app updater (Settings → About) announces this release to installed builds automatically — it downloads the exe, checks it against the SHA-256 above, and swaps it in place; publishing a release is the whole announcement.
Support
- Found a bug or a preset that misbehaves? Open an issue: https://github.com/marbou92/FFX-Compatibility-Tool/issues — verbose logs welcome
- Docs, screenshots and the rolling nightly: the README
- Free, open source (MIT) and local-first — your preset files never leave your machine
Full Changelog: v0.2.2...v0.2.3
FFX Compatibility Tool v0.2.2
FFX Compatibility Tool v0.2.2
FFX Compatibility Tool 0.2.2 finishes the settings-page rebuild — five panels on one shared row system with a search that jumps, every checkbox replaced by a real switch, an Updates panel in the classic update-settings shape with a changelog you can browse release by release, and a Plugin Profiles grid that filters, bulk-links and catalogs what your scan finds.
✨ What's New
- A settings search that jumps — type in the box at the top of Settings and pick a match: the app switches to the right panel and flashes the row you asked for. Twenty-four rows are indexed across all five panels, so "logs", "palette", "nightly" or "version" all land somewhere useful.
- One shared row system — every setting sits in the same rounded row (icon tile, title, caption, control on the right) with a hover state, grouped under small uppercase headers inside each card, across five panels: Appearance, Storage, Plugin Profiles, Updates and About.
- The theme controls grow up — the dark-mode switch and the follow-the-Windows-theme checkbox become one three-way Light / Dark / System segmented control, the chosen palette swatch wears a checkmark chip that pops in with a small spring, a live preview card re-renders as you pick, and Restore Defaults is a real two-step button that tells you what it did instead of a silent surprise.
- Storage tells the truth at a glance — a stacked meter shows what the plugin scan catalog, the recent-presets history and the session logs actually occupy; deletes confirm in place (the button turns into a red "Confirm delete?" for three seconds — no popup) and settle with a toast, and opening the storage folder or the logs is a row like everything else — the maintenance rows lead with the same icon tile now too.
- The checkmark era ends — every boolean in Settings carries a real switch now (the rounded pill with the white knob: verbose logging, the automatic check, nightlies, notifications) and the whole row toggles with it, while the marks that aren't controls follow what they mean: the selected palette swatch and the profile card badges wear check chips (a primary circle with a white check when it's on, a quiet outlined plus when it isn't) — a pick is a chosen state, not a toggle.
- Updates becomes its own panel — the classic update-settings shape: a System update row whose value says Up to date, Checking…, or the new version and unfurls See what's new, Release page and Skip this version when something's out (clicking the row runs the check, or opens the updater when a release is waiting), an App version row that copies on click and says when this exe was built (the long nightly hash trims itself, full value on hover), a Flavour row whose value sits in a quiet state pill, and a Clear downloaded updates row that reports — and deletes — whatever a previous download left staged.
- Nightlies become opt-in — Include nightlies checks the rolling prerelease builds too, compared by publish date instead of a version number (a nightly's number never moves), so a nightly hit opens its release page instead of pretending to install; a Notify switch gates the corner toast while the tab's dot shows either way; and a version you skip stays quiet until the next release.
- A changelog you can browse — the Changelog row drills into a strip of version pills fetched straight from GitHub: pick v0.2.2, v0.2.1 or v0.2.0 and that release's date, hero image, description and full notes render below, parsed with the same rules the release workflow uses.
- About keeps links and details only — the identity row wears a STABLE or NIGHTLY channel chip and copies on click, the paragraph wall becomes one line plus specs chips (Windows 10+, .NET Framework 4.8, single exe, no installer), and a Copy SHA-256 row hands you the exact hash the release page publishes.
- Plugin Profiles get productive — a filter box narrows both sections as you type, Link all and Unlink all sit on the section headers behind a two-step confirm, a scan reports one chip per recognized vendor ("Trapcode — 12 files") and offers the detected AE Plug-ins folder as a one-click link, Add custom vendor actually adds vendors now (future scans match the name against plugin paths), each card shows how many .aex files the catalog holds for it, and cards fade into place as they move between sections.
- Everything remembers where you were — Settings reopens on the last of the five tabs you visited and Alt+1…5 switches them from the keyboard.
Install
- Download FFXCompatibilityTool-0.2.2.exe below — that single file is the whole app.
- Run it — no installer, no zip, no DLL pile, no data folder: everything is inside the exe.
- Requires .NET Framework 4.8 (preinstalled on Windows 10/11; Windows 7 SP1 needs the 4.8 runtime installed once).
- Windows shows a "publisher could not be verified" warning on first run — this app is unsigned open source, and Windows says that about every fresh download. Match the SHA-256 in the Verify section below, then click Run.
- If the prompt gets old: right-click the exe → Properties → tick Unblock.
Verify
SHA-256 6683350f3428e10510f6f1cd2e77b03cd2bede9e322022d9a4d53dedc0e819da FFXCompatibilityTool-0.2.2.exe
Every change in v0.2.2 — the full commit list
- fix(gui): release chips
- fix(gui): enlarge the changelog release chips to a 13px label with 14,7 gutters and drop their…
- fix(gui): make the odd surfaces speak the shared language
- fix(gui): fold every stray padding into the shared spacing tiers
- fix(gui): the release list asked the wrong building
- the settings screenshot-review pass
- the settings refinement pass
- feat: the settings refinement pass
- fix(gui): the swatch reader learns what the swatch builder already knows
- fix(gui): three imports for three newcomers
- fix(gui): the mini-pill's base class finally knows its address
- feat: 0.2.2 second pass
- feat: the settings pass takes its second coat
- feat: 0.2.2
The in-app updater (Settings → About) announces this release to installed builds automatically — it downloads the exe, checks it against the SHA-256 above, and swaps it in place; publishing a release is the whole announcement.
Support
- Found a bug or a preset that misbehaves? Open an issue: https://github.com/marbou92/FFX-Compatibility-Tool/issues — verbose logs welcome
- Docs, screenshots and the rolling nightly: the README
- Free, open source (MIT) and local-first — your preset files never leave your machine
Full Changelog: v0.2.1...v0.2.2
FFX Compatibility Tool v0.2.1
FFX Compatibility Tool v0.2.1
FFX Compatibility Tool 0.2.1 lets one batch convert every preset to several After Effects versions at once, remembers your last-used conversion settings, and turns the app self-updating — a quiet update check, a live what's-new panel, and an in-place updater that verifies what it downloads.
✨ What's New
- Multi-target batches — the file manager's new Targets field picks several AE versions, and every preset converts once per checked one: 30 presets × 2 versions = 60 outputs in a single pass, each named with its version suffix. In-place overwrite stays a single-target job; with several versions picked the app asks for another output mode instead of letting one version erase the others.
- Your last-used conversion settings are remembered — target version, batch targets, output mode, the include-subfolders and remove-missing-effects checkboxes, and the folders you last opened, browsed and saved to. Open the app and everything is where you left it.
- The app updates itself — a silent, throttled check (on by default, off in Settings → About) notices a new release and raises a small toast plus a Settings badge, never a popup. The updater window then shows the release's what's-new notes, downloads the new exe, verifies it against the release's SHA-256 and swaps it in place — nothing is installed, and a failed swap puts the old build back.
- A live what's-new panel in Settings → About — every release now ships a machine-readable changelog.json beside the exe, so the About page reads the newest version's notes right inside the app, offline from the embedded copy, fresh from the release when online.
Install
- Download FFXCompatibilityTool-0.2.1.exe below — that single file is the whole app.
- Run it — no installer, no zip, no DLL pile, no data folder: everything is inside the exe.
- Requires .NET Framework 4.8 (preinstalled on Windows 10/11; Windows 7 SP1 needs the 4.8 runtime installed once).
- Windows shows a "publisher could not be verified" warning on first run — this app is unsigned open source, and Windows says that about every fresh download. Match the SHA-256 in the Verify section below, then click Run.
- If the prompt gets old: right-click the exe → Properties → tick Unblock.
Verify
SHA-256 cbb04eeaa81d3c416c7f38eed1b84bc171b56fbfab15a77e0c00f1bf1c171764 FFXCompatibilityTool-0.2.1.exe
Every change in v0.2.1 — the full commit list
- fix: the release feed survives its own parser
- feat: 0.2.1
- feat: the release page speaks vivi
The in-app updater (Settings → About) announces this release to installed builds automatically — it downloads the exe, checks it against the SHA-256 above, and swaps it in place; publishing a release is the whole announcement.
Support
- Found a bug or a preset that misbehaves? Open an issue: https://github.com/marbou92/FFX-Compatibility-Tool/issues — verbose logs welcome
- Docs, screenshots and the rolling nightly: the README
- Free, open source (MIT) and local-first — your preset files never leave your machine
Full Changelog: v0.2.0...v0.2.1
FFX Compatibility Tool v0.2.0
FFX Compatibility Tool 0.2.0 — every After Effects, one portable exe.
✨ New in 0.2.0
🎬 All fifteen After Effects targets
CS6 and every Creative Cloud release from 2013 through 2025 now sit in the target picker next to CS5.5 — fifteen versions, one list. CS5.5 keeps its byte-verified full downgrade; every newer version gets a native-format mode that strips effects and repairs indexes inside the file's own era, so no version bytes are invented or guessed.
🌗 The app can follow your Windows theme
A "Follow the Windows theme" switch in Settings → Appearance flips the app between light and dark the moment Windows does.
📜 Verbose logging for bug reports
Tick "Verbose Logging" in Settings → Storage and every conversion step — with timings — lands in %LOCALAPPDATA%\FFXCompatibilityTool\logging.json. Attach that file to an issue and the cause is usually on the first page.
🔗 Check for Updates now actually checks
The About page button went from a placeholder to a real lookup: it compares your build against the newest GitHub release and opens that release's exact page when it finds one.
📸 A front page that shows the app
The README now carries five real screenshots — Convert, batch runs, the Effect Lister, Settings — plus a table of all fifteen targets, so you can see what you're downloading.
📦 winget, on its way
winget install Marbou92.FFXCompatibilityTool went in for review at microsoft/winget-pkgs this cycle, and from here on every release offers itself to the catalog automatically — no more waiting on a manual PR.
Install
- Download FFXCompatibilityTool-0.2.0.exe below — that single file is the whole app.
- Run it — no installer, no zip, no DLL pile, no data folder: everything is inside the exe.
- Requires .NET Framework 4.8 (preinstalled on Windows 10/11; Windows 7 SP1 needs the 4.8 runtime installed once).
- Windows shows a "publisher could not be verified" warning on first run — this app is unsigned open source, and Windows says that about every fresh download. Match the SHA-256 in the Verify section below, then click Run.
- If the prompt gets old: right-click the exe → Properties → tick Unblock.
Verify
SHA-256 09b8e4f49ac0008e8634a829cc2f434c8177a5e32bbcc8cedeec001f919e9374 FFXCompatibilityTool-0.2.0.exe
Every change in v0.2.0 — the full commit list
- feat: the winget workflow learns patience
- feat: the front page wears five real screenshots and winget updates itself
- docs: the front page finally looks like a product
- feat: every AE version after CS5.5 becomes a target
- build: the release changelog reads like a changelog
Full Changelog: v0.1.0...v0.2.0
The in-app Check for Updates (Settings → About) resolves this releases page — publishing a release is what announces the new version to installed builds.
FFX Compatibility Tool v0.1.0
FFX Compatibility Tool v0.1.0 — the portable Windows build.
What's changed
- ci: the first release can publish its own notes — the changelog anchors on HEAD's parent and only v-tags act as boundaries, so the not-yet-created tag and the moving nightly tag can never break it again, and an unreadable history degrades to a fallback bullet instead of killing the release
- docs: RESEARCH_NOTES keeps only the .ffx format research — every round-by-round build log section is gone, the surviving findings drop their round labels and read as timeless format notes, and the intro points at FfxTool.Core instead of the long-gone Python files
- build: a nightly says what it is — the app version reads the latest release followed by -nightly, or just nightly when nothing is released yet, stamped into Windows' product version and shown in the About page, status bar, log banner and crash reports, while the numeric version and update checks stay untouched
- build: a nightly says what it is — the app version reads the latest release followed by -nightly, or just nightly when nothing is released yet, stamped into Windows' product version and shown in the About page, status bar, log banner and crash reports, while the numeric version and update checks stay untouched
- build: the exe ships as FFXCompatibilityTool.exe with marbou92 in its Windows details, About and crash reports — and the release pages carry just the exe, no zip beside it
- build: the exe ships as FFXCompatibilityTool.exe with marbou92 in its Windows details, About and crash reports — and the release pages carry just the exe, no zip beside it
- build: the portable build is one single exe — a Release ILRepack step merges FfxTool.Core and the System.Text.Json chain into FfxTool.Gui.exe, the seed tables ship embedded inside Core, and the Release + Nightly pages attach the bare exe beside the zip
- build: the portable build is one single exe — a Release ILRepack step merges FfxTool.Core and the System.Text.Json chain into FfxTool.Gui.exe, the seed tables ship embedded inside Core, and the Release + Nightly pages attach the bare exe beside the zip
- feat(gui): an icon-only bigger-list button and a crash dialog that files the issue for you — Report on GitHub opens a prefilled new issue with the trace on the clipboard; README cut to what a user needs
- fix(gui): the big list stretches the workspace instead of reparenting the queue card — the CTA row was never the card's sibling and the first click threw; CI + Nightly + Release badges and a clean MIT license
- feat(gui): a bigger list for Convert's file manager, folder-targeted handoffs in the Lister's, and two file managers that share one look but deliberately not one behaviour
- fix(gui): the conversion report logs through the page's console — WriteConvertReport was static, but Console is the XAML-named M3Console control
- fix(gui): the mirrored outputs mirror only real folders, releases can be versioned from Run workflow, and derived outputs report themselves
- fix(gui): the mirrored outputs mirror only real folders, releases can be versioned from Run workflow, and derived outputs report themselves
- feat(gui): the file managers become real explorer trees, presets get plugin-profile flags, and the wrong-.aex engine is fixed
- feat(gui): the file managers grow subfolders, a double-click, and a handoff that carries the whole tree - both file managers (Convert's queue list and the Lister's folder list) now group their rows under the subfolders the presets came from, one contiguous group per folder via a ListCollectionView property group on a new shared FolderScan.RelUnder primitive (queues are re-sorted by relative folder then name before the queue is stored, so the worker's per-file status always lands on the matching row), each group headed by a folder glyph + path caption that only appears when subfolders actually exist; in Convert a double-click on a row opens that preset in the existing checklist - its effects with their plugins as match names + vendor labels, every one toggleable - while the queue waits behind a new "All presets" toolbar link, and the toggles are remembered per file (a dictionary keyed by full path, re-applied over the profile-driven defaults on reopen) and ride into the batch run on top of the recognition chain, so turning a plugin's effects off in the checklist changes what the queue converts; converting a folder gains two mirror outputs beside the three existing ones - "One ZIP that mirrors the subfolders" stages the converted set into a temp tree in the source layout and zips it with System.IO.Compression.ZipFile (references added to the GUI csproj) into "FolderName (converted).zip", "One folder that mirrors the subfolders" writes the same tree as a plain folder, both reuse-overwrite their own previous result and never touch the inputs, a cancelled or failed run never hands over a broken archive, and the save banner's Explorer handoff selects the zip or opens the mirrored folder; the Effect Lister's file manager becomes multi-select (Extended) where plain clicks still open a preset like round 35 but ctrl/shift clicks only grow the selection, the handoff button relabels itself to what a click would send ("Convert this preset…" with a preset open, "Convert selection…" with picks, "Convert folder…" with none), and its ConvertRequested event now carries (root, files) - the folder root riding along so Convert can mirror the subfolders either way - with MainWindow sending a single file through the old LoadExternal checklist flow and a selection or whole folder through a new LoadExternalQueue that keeps the tree; the header's status captions move to their own row under the toolbar, because the right-aligned "FFX Compatibility Tool v0.1.0 — Ready" strip shared the grid cell with the buttons and painted over them whenever the window narrowed, and its own row makes that overlap structurally impossible; and the folder report learns three things: every row carries its relative subfolder (shown in the row tooltip, exported as a new Folder column in the same quoted UTF-8-BOM CSV), each row's tooltip shows the full path, and double-clicking a row opens that preset in the workspace with the flyout closing - the report becomes a way in, not just a readout
- fix(gui): the handoff event fires the way it was declared - ConvertRequested went out as Action (one argument, the open preset's path - the exact shape MainWindow's subscription lambda and ConvertPage.LoadExternal already speak) but SendConvertBtn_Click raised it with the classic two-argument (sender, args) event pattern, so the Effect Lister's 'Convert this preset...' button died at compile time with CS1501 'No overload for method Invoke takes 2 arguments' at ListerPage.cs(758,30) before the feature ever ran a single click; the invocation now passes just the path, matching declaration, subscriber and target, and the whole round-35 diff was re-audited for CI's first-error blindness - csc reported exactly one error project-wide and the manual sweep confirms it: every new x:Name resolves in both directions, all three new handler signatures match their XAML events (MouseButtonUp/SelectionChanged/Click), the PropertyChanged-style 2-arg Invoke inside ConvertPage.QueueFileVm is correct for PropertyChangedEventHandler, B.SCLow/B.OnSurfaceVariant/B.Error exist in all eight theme dictionaries, and the worker's new _queueRows[i] indexing cannot race a queue reload because LoadQueue and LoadFile both refuse entry while _running
- fix(gui): the handoff event fires the way it was declared - ConvertRequested went out as Action (one argument, the open preset's path - the exact shape MainWindow's subscription lambda and ConvertPage.LoadExternal already speak) but SendConvertBtn_Click raised it with the classic two-argument (sender, args) event pattern, so the Effect Lister's 'Convert this preset...' button died at compile time with CS1501 'No overload for method Invoke takes 2 arguments' at ListerPage.cs(758,30) before the feature ever ran a single click; the invocation now passes just the path, matching declaration, subscriber and target, and the whole round-35 diff was re-audited for CI's first-error blindness - csc reported exactly one error project-wide and the manual sweep confirms it: every new x:Name resolves in both directions, all three new handler signatures match their XAML events (MouseButtonUp/SelectionChanged/Click), the PropertyChanged-style 2-arg Invoke inside ConvertPage.QueueFileVm is correct for PropertyChangedEventHandler, B.SCLow/B.OnSurfaceVariant/B.Error exist in all eight theme dictionaries, and the worker's new _queueRows[i] indexing cannot race a queue reload because LoadQueue and LoadFile both refuse entry while _running
- feat(gui): a folder is a first-class citizen in both sections now - Convert's queue card grows the file manager: the checklist slot becomes a scrolling list of every preset with its size and a live per-file status cell that flips to Converting/OK/WARN/FAILED as the batch runs (an INPC row VM, the worker loop indexed so each row is reached by dispatch, WARN/FAILED colored by the same triggers as the Lister's report), while the Effect Lister drops the combo and gains a real file-manager state: a folder (or a multi-file drop) opens a card listing the folder's presets - name, size, path tooltip - and clicking one opens it with the full single-preset anatomy, All presets in the toolbar returns to the list, and the empty state can no longer linger underneath it; the Lister also learns to hand off: a Convert this preset button rides the toolbar (visible once any preset is open), fires a ConvertRequested event MainWindow turns into Rail.Select(0) + ConvertPage.LoadExternal so the preset you were reading is already loaded in Convert when you get there; the window stops floating flat - WindowChrome's GlassFrameThickness goes 0 to 1, extending the DWM frame one pixel into the client area so the DWM d...