rocksdanister/lively · error · PluginNotFoundException

xaml island gif player not available.

Error message

xaml island gif player not available.

What it means

Thrown by WallpaperPluginFactory.CreateWallpaper when a WallpaperType.gif item is created with userSettings.Settings.GifPlayer == LivelyGifPlayer.win10Img. The win10Img backend relied on a UWP XAML Island control that is no longer shipped/compiled into the app, so the factory refuses to construct it rather than silently substituting another backend. No fallback player is selected automatically; the caller receives the exception directly.

Source

Thrown at src/Lively/Lively/Factories/WallpaperPluginFactory.cs:116

                                model,
                                display,
                                lpFactory.CreateLivelyPropertyFolder(model, display, arrangement, userSettings),
                                userSettings.Settings.VideoPlayerHwAccel,
                                isWindowed: isWindowed,
                                userSettings.Settings.VideoTargetColorSpaceMode);
                        case LivelyMediaPlayer.vlc:
                            return new VideoVlcPlayer(model.FilePath, 
                                model, 
                                display,
                                userSettings.Settings.WallpaperScaling, 
                                userSettings.Settings.VideoPlayerHwAccel);
                    }
                    break;
                case WallpaperType.gif:
                    switch (userSettings.Settings.GifPlayer)
                    {
                        case LivelyGifPlayer.win10Img:
                        throw new PluginNotFoundException("xaml island gif player not available.");
                        case LivelyGifPlayer.libmpvExt:
                            throw new DepreciatedException("libmpvExt depreciated player selected.");
                        case LivelyGifPlayer.mpv:
                            return new VideoMpvPlayer(model.FilePath,
                                model,
                                display,
                                lpFactory.CreateLivelyPropertyFolder(model, display, arrangement, userSettings),
                                userSettings.Settings.VideoPlayerHwAccel,
                                isWindowed: isWindowed, 
                                userSettings.Settings.VideoTargetColorSpaceMode);
                        case LivelyGifPlayer.libvlcExt:
                            return new VideoLibVlcPlayer(model.FilePath,
                                model,
                                display,
                                lpFactory.CreateLivelyPropertyFolder(model, display, arrangement, userSettings),
                                userSettings.Settings.ApplicationTheme,
                                userSettings.Settings.AudioVolumeGlobal,
                                userSettings.Settings.VideoPlayerHwAccel);

View on GitHub (pinned to c1036feb66)

Solutions

  1. Set the GIF player to mpv (or libvlcExt) in Settings and restart Lively.
  2. On startup, migrate/reset userSettings.Settings.GifPlayer to a supported value when it equals win10Img.
  3. Remove win10Img from the settings picker so it can never be selected.

Example fix

// before
switch (userSettings.Settings.GifPlayer)
{
    case LivelyGifPlayer.win10Img:
        throw new PluginNotFoundException("xaml island gif player not available.");
    case LivelyGifPlayer.mpv:
        return new VideoMpvPlayer(model.FilePath, model, display, ...);
}

// after: migrate the removed value to the supported mpv backend instead of throwing
switch (userSettings.Settings.GifPlayer)
{
    case LivelyGifPlayer.win10Img:
    case LivelyGifPlayer.mpv:
        return new VideoMpvPlayer(model.FilePath, model, display,
            lpFactory.CreateLivelyPropertyFolder(model, display, arrangement, userSettings),
            userSettings.Settings.VideoPlayerHwAccel,
            isWindowed: isWindowed,
            userSettings.Settings.VideoTargetColorSpaceMode);
}
Defensive patterns

Strategy: validation

Validate before calling

if (model.LivelyInfo.Type == WallpaperType.gif &&
    userSettings.Settings.GifPlayer == LivelyGifPlayer.win10Img)
{
    // win10Img backend removed; auto-migrate to the supported mpv backend
    userSettings.Settings.GifPlayer = LivelyGifPlayer.mpv;
}

Type guard

static bool IsGifBackendSupported(LibraryModel model, IUserSettingsService s) =>
    model.LivelyInfo.Type != WallpaperType.gif ||
    s.Settings.GifPlayer != LivelyGifPlayer.win10Img;

Try / catch

try
{
    var wp = factory.CreateWallpaper(model, display, arrangement);
}
catch (WallpaperPluginFactory.PluginNotFoundException ex) when (ex.Message.Contains("gif player"))
{
    Logger.Warn(ex, "Migrating removed GIF player; retrying with mpv.");
    userSettings.Settings.GifPlayer = LivelyGifPlayer.mpv;
    wp = factory.CreateWallpaper(model, display, arrangement);
}

Prevention

When it happens

Trigger: Calling factory.CreateWallpaper(model, display, arrangement) where model.LivelyInfo.Type == WallpaperType.gif and userSettings.Settings.GifPlayer == LivelyGifPlayer.win10Img.

Common situations: A user upgraded Lively and their persisted settings file still stores the removed win10Img GIF player. Dev builds that exclude the XAML Island project surface it. Manually editing the config JSON to win10Img reproduces it immediately.

Related errors


AI-assisted analysis of rocksdanister/lively@c1036feb66 (2026-08-13). Data as JSON: /api/errors/6e524fedb074cce9. Report an issue: GitHub.