Manifest reference

Asset fields

FieldType/defaultMeaning
promptstring, 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 / heightinteger 16–8192Per-asset dimensions for generators that accept rectangular output. Provider limits may be lower.
sizeinteger 16–8192Per-asset square size where the generator uses one dimension.
filestringOutput path below the style's outDir; defaults to <category>/<assetId>.png.
categorystringOptional output subdirectory and logical grouping.
sourcestringManifest-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.
sourceByStyleobjectPer-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.
remoteIdstringThe 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.
revisionobjectControlled 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.
stateobjectcharacter styles: a pose or outfit of another character asset. See Characters.
animationobjectcharacter 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.
portraitobjectcharacter 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.
outfitobjectcharacter styles: an existing loop's frames re-clothed from an outfit image, { "of": "<loop asset>", "reference": "<image>" }, with optional additionalInstructions. See Outfit transfer.
mirrorstringAnother asset of the same style flipped left to right, made locally at no cost. See Mirrors.
vfxobjectvfx 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.
sceneobjectmap 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.
connectobjectterrain 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.
batchobject1dir 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.
piecesarrayuiAsset styles: exact shape regions (rounded_rect/circle/polygon) the panel is composited from, each with a unique id. See uiAsset.
elementsstring arrayuiAsset styles: named, auto-positioned UI scaffolds (button, health_bar, window, ...). Combine with pieces; omit both for a plain full-canvas panel. See uiAsset.
proportionspreset or objectcharacter styles: this base's proportions, over the style's.
referencestring or objectcharacter styles, bases: the character's own south-facing sprite (or { "south": ..., "east": ... }), which PixelLab rotates instead of drawing from the prompt. See Characters.
conceptstringcharacter styles, pro bases: a manifest-relative concept image (up to 1024px) the design is seeded from.
styleCharacterstringcharacter styles, pro bases: this base's style anchor, over the style's.
providerInputsJSON 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.
stylesstring 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.
promptByStylestring 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.
outputRolestringSelect one structural output when a generator returns a set.
tagsstring 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
    }
  }
}