-
-
Notifications
You must be signed in to change notification settings - Fork 60
Create Package Format
Audience: wallpaper creators. This is the authoritative reference for the wallpaper package: the folder layout, the canonical file names, and every field of the required manifest SucroseInfo.json. Use it when hand‑editing a manifest or building a wallpaper outside the Portal Create dialog. For the dialog walkthrough see Create Step By Step; for the overall model see Create Overview.
- Folder layout
- Canonical file names
SucroseInfo.jsonfield reference- The
Typeenum - The
Localizationobject - Annotated example
- Gotchas
- See also
A wallpaper is a folder containing the manifest plus its media/source files. A typical layout:
<random-25-char-id>/ <- folder name auto-generated, NOT the title
├── SucroseInfo.json <- REQUIRED manifest
├── SucroseProperties.json <- OPTIONAL customization controls
├── SucroseCompatible.json <- OPTIONAL live-data JS hook templates
├── SucroseStore.json <- OPTIONAL store metadata
├── Thumbnail.jpg (or t_*.jpg) <- small preview image
├── Preview.gif (or p_*.gif) <- animated preview
├── License.txt <- optional, referenced by the License field
└── <source files> <- the .gif / .html + js/css / video / .exe etc.
When a wallpaper is created through the Portal, source files are copied in with prefixes: source = s_<name>, thumbnail = t_<name>, preview = p_<name>. The folder name is a random 25‑character string — do not rely on it.
flowchart LR
subgraph Files["files on disk"]
T["Thumbnail.jpg / t_*.jpg"]
P["Preview.gif / p_*.gif"]
S["source file (s_*)"]
L["License.txt"]
end
subgraph Manifest["SucroseInfo.json fields"]
FT["Thumbnail"]
FP["Preview"]
FS["Source"]
FL["License"]
end
T --> FT
P --> FP
S --> FS
L --> FL
These names are fixed constants in the codebase and must match exactly (case‑sensitive on the wiki for clarity):
| Constant | File name | Purpose |
|---|---|---|
SucroseInfo |
SucroseInfo.json |
Required manifest. |
SucroseStore |
SucroseStore.json |
Store metadata. |
SucroseCompatible |
SucroseCompatible.json |
Live‑data JS hook templates. |
SucroseProperties |
SucroseProperties.json |
Customization controls. |
MpvPlayerConfig |
MpvPlayer.config |
Default mpv config (engine‑generated). |
uMpvPlayerConfig |
uMpvPlayer.config |
Optional user override for mpv config (takes priority if present). |
StoreFile |
Store.json |
Internal store file. |
PatternFile |
Pattern.json |
Internal pattern file. |
Browser engines also generate internal HTML wrappers you do not author: GifContent.html, ImageContent.html, VideoContent.html, YouTubeContent.html.
The manifest is serialized with Newtonsoft.Json. Fields marked Always are required and must be present.
| JSON field | Type | Required | Default / notes |
|---|---|---|---|
AppVersion |
Version string (yy.MM.dd.0) |
Always | The Sucrose app version that created the wallpaper; default 0.0.0.0. Used to reject wallpapers newer than the running app. |
Version |
Version string | Always | The wallpaper's own version; default 1.0.0.0. |
Title |
string | Always | Display title. |
Thumbnail |
string | Always | File name of the thumbnail image. |
Preview |
string | Always | File name of the preview (often an animated GIF). |
Description |
string | Always | |
Author |
string | Always | |
License |
string | AllowNull | File name (e.g. License.txt) or null. |
Contact |
string | Always | A URL or email address (validated as URL or mail). |
Type |
int enum | Always |
WallpaperType (0–5); default Gif. Serialized as a number.
|
Source |
string | Always | Meaning depends on Type (see table below). |
Tags |
string[] | AllowNull | The Portal enforces 1–5 tags, each 1–20 characters. |
Arguments |
string | AllowNull | CLI args; used by the Application type (max 250 chars); null otherwise. |
Localization |
Dictionary<lang, {Title, Description}> |
optional | Per‑language overrides of Title/Description. |
Type is an integer, not a string. The value determines what Source means:
Type value |
Type |
Source meaning |
|---|---|---|
0 |
Gif |
Local .gif file name inside the folder |
1 |
Url |
A remote http/https URL |
2 |
Web |
Local entry HTML/web file name inside the folder |
3 |
Video |
Local video file name inside the folder |
4 |
YouTube |
A YouTube video or playlist URL |
5 |
Application |
Local executable file name inside the folder |
Localization is an optional dictionary keyed by 2‑letter language code (e.g. DE, ES, FR, HI, PL, RU, TR, ZH). Each value is an object with exactly two required fields:
| Field | Type | Required | Meaning |
|---|---|---|---|
Title |
string | Always | Localized title for this language. |
Description |
string | Always | Localized description for this language. |
Sucrose displays the localized Title/Description when the app's language matches a key; otherwise it falls back to the top‑level Title/Description.
A real shipped example (Neo Matrix, a Web wallpaper — note Type: 2 and Source is the local HTML entry file):
{
"AppVersion": "25.10.20.0", // Sucrose version that created this wallpaper
"Version": "7.3.0.2", // the wallpaper's own version
"Title": "Neo Matrix",
"Thumbnail": "thumbnail.jpg", // file name of the thumbnail in this folder
"Preview": "preview.gif", // file name of the animated preview
"Description": "This is a highly customizable animated Matrix wallpaper.",
"Author": "Mohammad Mahdi Nazari",
"License": "License.txt", // or null
"Contact": "https://github.com/IPdotSetAF", // URL or email
"Type": 2, // 2 = Web
"Source": "Matrix.html", // local entry file (because Type is Web)
"Tags": ["Science Fiction", "Sci-Fi", "Hacker", "Music"], // 1-5 tags, <=20 chars each
"Arguments": null, // only used by Application type
"Localization": {
"DE": { "Title": "Neo Matrix", "Description": "..." }
}
}-
Typeis a number (0–5), not a string. This is the most common hand‑editing mistake. - The folder name is random, not the title; users and tools should not derive identity from it.
-
WebandApplicationcopy the whole containing folder — keep the wallpaper self‑contained in one directory, and that directory must be unlocked/writable for the Portal to import it. -
AppVersionmust be ≤ the running app's version; engines refuse to load a wallpaper that claims a newer app version. -
LicenseandTagsandArgumentsmay benull; the rest of the required fields must be present. -
colorpickervalues inSucroseProperties.json(a separate file) are 8‑digit ARGB hex like#FF00FF00; see Create Customization Controls.
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