Skip to content

Engine Vexana

Taiizor edited this page Jun 19, 2026 · 2 revisions

Engine: Vexana

Vexana (Sucrose.Live.Vexana, assembly Sucrose.Live.Vexana.exe) is one of Sucrose's three GIF rendering engines. It is a lightweight, fully managed WPF engine that decodes animated GIFs in-house, frame by frame, and drives a WPF Image with its own frame timer. Vexana renders only the Gif type and has no Chromium or libmpv dependency, making it one of the lightest ways to display an animated GIF as a live wallpaper.

Audience: developers and advanced users. For the user-facing Gif wallpaper guide, see Type-Gif.

Contents

At a glance

Property Value
Project Sucrose.Live.Vexana
Assembly Sucrose.Live.Vexana.exe
Underlying tech WPF Image + frame-by-frame GIF decode (System.Drawing pipeline)
Preprocessor symbols ENGINE, LIVE_VEXANA
Engine enum member EngineType.VexanaLive
Allowed for type Gif
Default for (none — MpvPlayer is the default Gif engine)
Native dependency None (pure managed WPF)
Interactive No
Audio / system data No

Technology

Vexana is a custom GIF decoder. Instead of delegating to a browser or to libmpv, it parses the GIF into individual frames and animates them itself:

  • Helper/Parse.cs and Struct/Gif.cs parse the GIF file into frames.
  • A WPF Image (SSEVMI.ImageEngine) is the display surface.
  • A dedicated frame ticker (ImageTimer, in Event/Gif.cs) advances frames on its own timing.

Because it relies on the System.Drawing pipeline rather than Chromium Embedded Framework or libmpv, Vexana is pure managed WPF with no native runtime to install. "Vexana" is a branded internal codename — it is not a third-party technology; the name simply denotes the in-house frame-player engine.

Supported wallpaper types

Type Supported
Gif Yes
Url No
Web No
Video No
YouTube No
Application No

Vexana's window switch only handles the Gif case. If a type it cannot render is somehow routed to it, Configure() hits the default branch and the engine closes without displaying anything. In practice the Portal only offers Vexana where it is valid, so this is a safeguard rather than a normal path.

Runtime requirements

Vexana has no extra native runtime beyond the .NET 10 runtime that Sucrose bundles privately (Sucrose.Runtime). There is no WebView2 runtime, no Visual C++ Redistributable, and no libmpv DLL to ship — unlike Engine-MpvPlayer, Engine-WebView, or Engine-CefSharp. It targets .NET 10.0-windows (WPF + WinForms interop) and builds for x86, x64, and ARM64.

See System-Requirements and Runtime-Dependencies for the full dependency picture.

How it renders

Like every Sucrose engine, Vexana shares the common App.xaml.cs skeleton:

  1. Wires up the exception handlers (Thread, FirstChance, Unhandled, UnobservedTask, Dispatcher) that route to Sucrose.Shared.Watchdog.
  2. OnStartup: single-instance mutex check (SMMRM.Live), Security.Apply(), optional theme cycling, then Checker() / Configure().
  3. Configure(): reads LibraryLocation / LibrarySelected, loads the wallpaper's SucroseInfo.json (SSTHI.ReadJson), verifies Info.AppVersion <= app version, resolves Source, then switches on Info.Type and shows the Gif window.
  4. Sets the Backgroundog flags off by default: PipeRequired, AudioRequired, SignalRequired, PausePerformance, TransmissionRequired. Vexana never turns these back on (only the Web type does).
  5. Starts the three shared helpers: Awakening.Start() (Stay Awake), Crashing.Start(), Cycyling.Start().

Vexana then parses the GIF, binds the frames to SSEVMI.ImageEngine, and runs its own frame timer to animate them.

Playback control

Vexana's Helper/Gif.cs exposes the GIF playback operations:

Operation Behavior
SetLoop Enables/disables looping of the GIF animation.
Pause / Play Pauses or resumes the frame ticker.
Stretch Applied via SSEVMI.ImageEngine.Stretch.

Stretch follows the shared StretchType setting (None / Fill / Uniform / UniformToFill, default UniformToFill); see Customizing-Wallpaper and Settings-Wallpaper.

Hardware acceleration and Stay Awake

  • HardwareAcceleration: Not applicable. WPF handles compositing for Vexana; there are no GPU command-line flags to toggle (unlike the browser engines or MpvPlayer).
  • Stay Awake: Applies via the shared Helper/Awakening.cs loop. A 30-second timer calls SetThreadExecutionState: ON sets ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED (prevents sleep/screensaver); OFF resets to ES_CONTINUOUS.

Interactivity and data APIs

Vexana is a non-interactive renderer. It does not reference RawInput.Sharp, so it forwards no mouse/keyboard input to the content. It also does not support the audio-reactive or system-status JavaScript APIs — those require the Web type rendered by a browser engine (Engine-WebView or Engine-CefSharp). For the API surface, see Create-Audio-API and Create-System-API.

Vexana vs. the other GIF engines

Sucrose offers three pure-GIF engines plus the two browser engines for the Gif type. The GIF-specific ones differ as follows:

Engine Decoder Remote GIF over HTTP? Notes
Vexana In-house frame parser (Helper/Parse.cs) + manual timer No (local frame parsing) Lightest, simplest; pure WPF.
Xavier Sucrose.XamlAnimatedGif AnimationBehavior Yes (sets HTTP client + user-agent) Frame caching off; can stream remote GIFs.
MpvPlayer libmpv Default Gif engine; richest media controls.

Both Vexana and Xavier are pure-WPF with no Chromium/libmpv. The key practical difference: Xavier can load a GIF from a URL, whereas Vexana works through its own local frame parser.

Strengths and limitations

Strengths

  • No native runtime — nothing to download or install beyond Sucrose's bundled .NET.
  • Lightweight, fully managed WPF rendering.
  • Simple, predictable frame-by-frame playback with its own timer.

Limitations

  • Gif type only.
  • Not interactive; does not forward input.
  • No audio reactivity or system-status data injection.
  • Decodes local GIFs via its in-house parser (use Xavier if you need to stream a remote GIF).

See also

Home

Getting Started

Wallpaper Types

Using Sucrose

Settings Reference

Creating Wallpapers

Engine Reference

Automation & Command Line

Architecture & Internals

Data, Files & Diagnostics

Building & Contributing

Help & Support

Clone this wiki locally