-
-
Notifications
You must be signed in to change notification settings - Fork 60
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.
- At a glance
- Technology
- Supported wallpaper types
- Runtime requirements
- How it renders
- Playback control
- Hardware acceleration and Stay Awake
- Interactivity and data APIs
- Vexana vs. the other GIF engines
- Strengths and limitations
- See also
| 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 |
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.csandStruct/Gif.csparse the GIF file into frames. - A WPF
Image(SSEVMI.ImageEngine) is the display surface. - A dedicated frame ticker (
ImageTimer, inEvent/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.
| 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.
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.
Like every Sucrose engine, Vexana shares the common App.xaml.cs skeleton:
- Wires up the exception handlers (Thread, FirstChance, Unhandled, UnobservedTask, Dispatcher) that route to
Sucrose.Shared.Watchdog. -
OnStartup: single-instance mutex check (SMMRM.Live),Security.Apply(), optional theme cycling, thenChecker()/Configure(). -
Configure(): readsLibraryLocation/LibrarySelected, loads the wallpaper'sSucroseInfo.json(SSTHI.ReadJson), verifiesInfo.AppVersion <= app version, resolvesSource, then switches onInfo.Typeand shows the Gif window. - Sets the
Backgroundogflags off by default:PipeRequired,AudioRequired,SignalRequired,PausePerformance,TransmissionRequired. Vexana never turns these back on (only the Web type does). - 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.
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.
- 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.csloop. A 30-second timer callsSetThreadExecutionState: ON setsES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED(prevents sleep/screensaver); OFF resets toES_CONTINUOUS.
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.
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
- 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).
- Engines-Overview — how engines are selected and launched
- Engine-Xavier — the other lightweight GIF engine (remote-capable)
- Engine-MpvPlayer — the default Gif engine
- Engine-Comparison — full engine matrix
- Type-Gif — using Gif wallpapers
- Choosing-Engines — changing the engine per type
Getting Started
- Installation
- System Requirements
- Quick Start
- Portal Interface Tour
- Updating Sucrose
- Uninstalling Sucrose
Wallpaper Types
Using Sucrose
- Managing Library
- Using Store
- Customizing Wallpaper
- Multi-Monitor
- Wallpaper Cycling
- Choosing Engines
- Performance Rules
- Theme, Tray & Startup
- Discord Rich Presence
Settings Reference
- Settings Overview
- Settings: General
- Settings: Personal
- Settings: Performance
- Settings: Wallpaper
- Settings: System
- Settings: Other
- Settings: All Keys
Creating Wallpapers
- Create Overview
- Create: Step By Step
- Create: Package Format
- Create: Customization Controls
- Create: JS Bridge
- Create: Audio API
- Create: System API
- Create: Property Listener & Filters
- Create: Web Architecture
- Create: Compatibility
- Create: Example Wallpapers
- Create: Sharing & Publishing
Engine Reference
- Engines Overview
- Engine: MpvPlayer
- Engine: VlcPlayer
- Engine: WebView
- Engine: CefSharp
- Engine: Nebula
- Engine: Vexana
- Engine: Xavier
- Engine: Aurora
- Engine Comparison
Automation & Command Line
Architecture & Internals
- Architecture Overview
- Lifecycle
- Commandog Dispatcher
- Single-Instance Mutexes
- IPC
- Backgroundog Service
- Crash Reporting
- Update Internals
- Property Service
- Undo Internals
Data, Files & Diagnostics
Building & Contributing
- Building From Source
- Repository Layout
- Shared Item Projects
- Code Conventions
- Preprocessor Symbols
- Publish Pipeline
- Bundle Installer Internals
- Extending Sucrose
- Contributing
- Translating with Localizer
- Localization Coverage
- Security Policy
- Privacy & Telemetry
Help & Support