Manifest reference
Asset fields
| Field | Type/default | Meaning |
|---|---|---|
prompt | string, required unless mirror, portrait, outfit, or a template loop (animation.template) | The subject wording wrapped by the selected style's prompt prefix and suffix. A template loop is described by its template; a v3, pro, or sentence (skeleton-v3 with no template) loop still needs the motion in words. |
width / height | integer 16–8192 | Per-asset dimensions for generators that accept rectangular output. Provider limits may be lower. |
size | integer 16–8192 | Per-asset square size where the generator uses one dimension. |
file | string | Output path below the style's outDir; defaults to <category>/<assetId>.png. |
category | string | Optional output subdirectory and logical grouping. |
source | string | Manifest-relative committed art used instead of generation. For a set of PNG outputs (a frames animation, a tiles set) a path that is not a file is the stem of a hand edit laid beside the generated members (<stem>-<role>.png each); the set still generates. Mutually exclusive with revision. |
sourceByStyle | object | Per-style source, keyed by style id; wins over source for that style. Written by pixelkiln edit for a hand edit of an asset that is in several styles. |
remoteId | string | The provider's own id for art that already exists on the account, so adopt maps it without matching bytes: an object id, a character id, or <character id>#<animation group id>. Not part of the spec's identity. |
revision | object | Controlled dependency on another asset: image-to-image, inpaint, or outpaint; on PixelLab also reduce-colors, correct-pixelart, remove-background, normal-map, the animate modes (animate, animate-pixminimax, animate-skeleton), interpolate, and edit-animation. engine: "pro-flash" selects PixelLab's Pro Flash tier for image-to-image/inpaint. See controlled revisions. |
state | object | character styles: a pose or outfit of another character asset. See Characters. |
animation | object | character styles: a loop of another character asset in one direction. directions (a list, instead of direction) declares the loop for several directions at once and fills the unnamed flips with mirrors; see One loop, several directions. mode: "skeleton-v3" with no template animates the asset's prompt as a sentence (3–15 frames, default 8; a v3 base); see Loops from a sentence. motionFrom (an asset id) makes a sentence loop follow another direction's loop and share its motion; directions writes it for you. |
portrait | object | character styles: a bust of a base or state's south sprite, { "of": "<asset>", "size": 64 }; size is 16, 32, 48, 64 (default), 128, or 160. See Portraits. |
outfit | object | character styles: an existing loop's frames re-clothed from an outfit image, { "of": "<loop asset>", "reference": "<image>" }, with optional additionalInstructions. See Outfit transfer. |
mirror | string | Another asset of the same style flipped left to right, made locally at no cost. See Mirrors. |
vfx | object | vfx styles, PixelLab only: the effect to render. { "preset": "explosion", "parts": [{ "name": "scorch_mark" }], "sprite": "art/chars/hero.png", "fps": 12 }; start from one preset or one recipe (a recipe JSON or a .vfx.json record), with optional parts, sprite, fps, and name. Or give a description (with optional artist: lite or pro, a local PNG sprite, and name) for PixelLab's paid VFX artist instead; it excludes preset, recipe, parts, and fps. Replaces prompt as the required field. See vfx and Described effects. |
scene | object | map styles, PixelLab only: draw this object into a scene image, in its style. { "image": "scene.png", "placement": { "oval": 0.3 } }; placement is oval or rectangle (a fraction, 0.05–0.95) or mask (a PNG the size of the scene). See Drawing into a scene. |
connect | object | terrain styles, PixelLab only: share a terrain with another set in the same style, keyed by this set's own side. { "lower": { "of": "coast", "terrain": "upper" } } makes this set's lower terrain coast's upper. The other set generates first; regenerating it makes this one stale. A sidescroller set connects only lower. Cycles are rejected. |
batch | object | 1dir styles: rides along on another 1dir asset's item_descriptions submission instead of generating on its own — { "of": "<leader asset id>", "index": <1-based slot> }. See 1dir. |
pieces | array | uiAsset styles: exact shape regions (rounded_rect/circle/polygon) the panel is composited from, each with a unique id. See uiAsset. |
elements | string array | uiAsset styles: named, auto-positioned UI scaffolds (button, health_bar, window, ...). Combine with pieces; omit both for a plain full-canvas panel. See uiAsset. |
proportions | preset or object | character styles: this base's proportions, over the style's. |
reference | string or object | character styles, bases: the character's own south-facing sprite (or { "south": ..., "east": ... }), which PixelLab rotates instead of drawing from the prompt. See Characters. |
concept | string | character styles, pro bases: a manifest-relative concept image (up to 1024px) the design is seeded from. |
styleCharacter | string | character styles, pro bases: this base's style anchor, over the style's. |
providerInputs | JSON scalar/sequence map, {} | Named per-asset inputs consumed by the active provider. ComfyUI accepts scalars and, for frames, one ordered 2–64 value sequence. Image bindings upload PNG/JPEG inputs. |
styles | string array, [] | Restrict the asset to named styles. Empty means every style of the asset's kind: vfx styles for an asset with a vfx block, every other style otherwise. |
promptByStyle | string map, {} | Replace only the asset prompt for a named style. |
cell | [column,row] | The grid cell this asset owns in a mounted sheet; see stable-cell mounting. |
outputRole | string | Select one structural output when a generator returns a set. |
tags | string array, [] | Asset tags added to provider objects where supported. |
providerInputs is provider-owned and participates in generation identity.
Changing a value makes only that asset stale. A provider may replace a local
runtime path with a content hash before hashing the spec; unsupported providers
reject non-empty inputs rather than ignoring them.
Only a provider that declares a sequence contract may accept an array. ComfyUI
uses the array named by providerOptions.comfyui.frames.vary; other inputs stay
constant across the set.
One asset using the fields most projects reach for:
{
"assets": {
"anvil": {
"prompt": "a compact blacksmith anvil",
"promptByStyle": { "mono": "a compact blacksmith anvil, dark iron" },
"width": 48,
"height": 32,
"category": "tools", // assets/generated/base/tools/anvil.png
"tags": ["prop", "forge"],
"styles": ["base", "mono"], // skip every other style
"cell": [2, 0], // its cell on a mounted sheet
"source": "edits/anvil.png" // a hand edit stands in for the generated file
}
}
}
