Skip to content

Releases: aHuddini/ImageRotater

v0.40.1 — cover crossfades, artwork safety, animated tile option

Choose a tag to compare

@aHuddini aHuddini released this 02 Aug 23:33

Pre-1.0 and under active development (276 tests). Settings, published file names and the theme integration surface can still change between versions.

Install

Download ImageRotater-0_40_1.pext below and open it with Playnite, or drag it onto a running Playnite window. Requires Playnite 10.

Disable BackgroundChanger first if you have it — Playnite routes a shared theme element name to whichever plugin claimed it first, so running both makes the result depend on load order.

Important fix: your artwork survives disabling the plugin

Earlier versions could leave a game pointing at plugin artwork after the plugin was disabled, with the original already reclaimed by Playnite — the artwork had to be re-added by hand. Two causes, both fixed:

  • Nothing restored on the way out. Playnite gives extensions no uninstall or disable hook, so the plugin now restores every game's own artwork on shutdown and re-applies rotation on the next launch.
  • Restore could write back a dead reference. Once Game.CoverImage points at plugin artwork the original is unreferenced and Playnite's library maintenance can reclaim it. Restore now checks the id still resolves and re-imports the preserved copy when it does not.

If you were affected, re-add the artwork once — it will be preserved correctly from then on.

New since v0.36.0

Covers crossfade instead of hard-cutting. Backgrounds defer to Playnite's own FadeImage; covers get a two-layer dissolve, because a Fullscreen tile's cover is a plain Image with no transition to inherit.

Animated covers can play on every tile, not just the selected one — off by default. Each animated tile decodes frames continuously and Playnite is a 32-bit process, so a library full of video covers can exhaust it while scrolling. The selected tile always animates either way.

Video decoders are released on recycle, not merely stopped. Stop() leaves the media open; Close() frees it. In a virtualised grid that is the difference between a screenful of videos and every video scrolled past this session.

Add artwork files accepts video as well as images.

Fixes

  • Backgrounds anchor to the top instead of centre-cropping — game key art puts its subject in the upper half.
  • The cover control shows the rotation's pick instead of choosing its own, so a tile no longer flips between two covers.
  • No black flicker on games the plugin has no artwork for.
  • A cross-thread crash in the slideshow notification, which silently stopped background rotation on that path.
  • Preserved originals no longer compete with artwork you chose; they rotate only when a game has nothing else.

Known issues

  • WebM may not play on a stock Windows install — no bundled decoder. MP4/H.264 plays everywhere.
  • Fullscreen grid covers need a plugin-side workaround to rotate at all, because Playnite never notifies the property those tiles bind. The real fix is one line upstream.

Theme authors

docs/THEME_INTEGRATION.md — two elements, both pure additions, with a worked example against Aniki ReMake.

Reporting bugs

Turn on Enable debug logging in settings and attach ImageRotater.log from %AppData%\Playnite\ExtensionsData\72b7d457-…\.

v0.36.0 — animated covers and backgrounds, controller support

Choose a tag to compare

@aHuddini aHuddini released this 02 Aug 21:37

Pre-1.0 and under active development (269 tests). Settings, published file names and the theme integration surface can still change between versions. Back up your library first if your artwork matters.

Install

Download ImageRotater-0_36_0.pext below and open it with Playnite, or drag it onto a running Playnite window. Requires Playnite 10.

Disable BackgroundChanger first if you have it — Playnite routes a shared theme element name to whichever plugin claimed it first, so running both makes the result depend on load order.

New since v0.32.3

Animated covers and backgrounds actually work. GIF, MP4 and WebM render in Fullscreen grid tiles and as backgrounds, through the plugin's own control. Themes need two elements and nothing else — no MediaElement, no path bindings, no converters. There is a worked example against Aniki ReMake with the exact markup and where it goes.

Only the selected tile animates. Every other tile renders the still frame instead. A screenful of simultaneous decoders in a 32-bit process is what crashes Playnite, and one moving cover reads better than twenty.

Controller support in the search dialog. D-pad navigates, A selects, B closes. Fullscreen also gets larger tiles, a bigger window and a collapsible filter column.

Add artwork files now accepts video as well as images — one picker, not two commands behind different filters.

Fixes

  • The wrong game's background no longer appears. A queued write could commit after the user had scrolled on twice; it now declines if it has been overtaken.
  • Rotating from animated to still no longer blanks the image. Each renderer is released only once its replacement is in hand.
  • Preserved originals no longer compete with artwork you chose. They stay on disk so Restore keeps working, but only rotate when a game has nothing else.
  • The plugin recognises its own artwork across restarts, so it stops preserving its own poster frames as if they were yours.
  • 14–27× faster on the selection path. Publishing wrote into the folder whose listing it invalidated, so every rotation threw away its own cache.

Known issues

  • WebM may not play on a stock Windows install — no bundled decoder. MP4/H.264 plays everywhere.
  • Fullscreen grid covers need a plugin-side workaround to rotate at all, because Playnite never notifies the property those tiles bind. It works; the real fix is one line upstream.

Reporting bugs

Turn on Enable debug logging in settings and attach ImageRotater.log from %AppData%\Playnite\ExtensionsData\72b7d457-…\. That log is what made every real bug in this project findable.

v0.32.3 — initial release (work in progress)

Choose a tag to compare

@aHuddini aHuddini released this 02 Aug 19:53

First public build. Pre-1.0 and under active development — usable and tested (257 tests), but settings, published file names and the theme integration surface can still change between versions. Back up your library first if your artwork matters.

Install

Download ImageRotater-0_32_3.pext below and open it with Playnite, or drag it onto a running Playnite window. Requires Playnite 10.

Disable BackgroundChanger first if you have it — Playnite routes a shared theme element name to whichever plugin claimed it first, so running both makes the result depend on load order.

What works

  • Background and cover rotation, per game, with independent selection modes and optional slideshow timers
  • Animated GIF, MP4 and WebM backgrounds; the same for covers in themes hosting the plugin's cover control
  • SteamGridDB browsing and download, with shape and content filters
  • Existing artwork preserved into the plugin's folder before anything is replaced, so it rotates as a normal candidate
  • Games you never set up are left completely alone
  • Restore original Playnite backgrounds undoes every write

Known issues

  • Animated covers on Fullscreen grid tiles don't animate. Playnite renders those through a WPF Image, which shows a GIF's first frame and cannot decode video. Doing it from a theme works but costs a crash or a regression every way it has been tried. Backgrounds animate fine.
  • Fullscreen grid covers need a plugin-side workaround to rotate at all — Playnite never notifies the property those tiles bind. It works; the real fix is one line upstream.
  • WebM may not play on a stock Windows install. MP4/H.264 plays everywhere.

Theme authors

Read docs/THEME_INTEGRATION.md before editing anything. Most themes need no changes — and if you find yourself patching a tile template to make covers work, that is the plugin's job, not yours.

Reporting bugs

Turn on Enable debug logging in settings and attach ImageRotater.log from %AppData%\Playnite\ExtensionsData\72b7d457-…\. That log is what made every real bug in this project findable.