UI panels: one endpoint, schema documented, cost unverified
POST /create-ui-asset (+ GET/DELETE /ui-assets/{id}, GET /ui-assets)
is wrapped by pixelkiln's uiAsset generator (docs/GENERATORS.md). A broad
search of the live OpenAPI document for "ui-asset", "element", "split", and
"template" paths found only these three callable endpoints — no separate
batch-icon endpoint, no states endpoint, no nine-slice endpoint, contrary to
tutorial-based descriptions elsewhere.
Request fields: description, image_size ({width, height}, 192-688px per
axis, aspect-gated rather than a free rectangle — square tops out at
512x512, 16:9 at 688x384, 9:16 at 384x688, 4:3 at 600x448, 3:4 at 448x600; a
combination outside these five tiers is rejected or silently resolved to a
different tier's ceiling), pieces (an array of rounded_rect/circle/
polygon shapes, each with a unique id and optional label, positioned on
a virtual 0-512 coordinate canvas independent of image_size), elements
(named auto-positioned scaffolds — button, icon_button, toolbar, tab,
panel, window, health_bar, avatar, triangle, pentagon, hexagon,
octagon), style_image (a single Base64Image, unlike most generators'
plural style_images), color_palette (a free-text prompt-level hint, e.g.
"brown and gold" — pixelkiln's own hex-array palette field is a different,
local-quantization concept and is deliberately not sent here), no_background,
seed.
POST /create-ui-asset responds {ui_asset_id, background_job_id, status, usage}. GET /ui-assets/{id} responds {id, prompt, size, image_url (nullable), status ("processing"|"completed"|"failed"), progress_percent, eta_seconds} — one flat composited image, confirmed by the schema to
carry no per-piece sub-images, no bounding-box data, and no nine-slice
metadata at all, regardless of how many pieces/elements the request
listed.
The delete_ui_asset MCP tool's own description says it removes "a UI panel
(and, for a template, its split elements + their states)", which hints
PixelLab's internal product model has a real split/states concept somewhere.
Nothing found in the public REST surface reaches it — "states" and "splitting
into individual elements" are not buildable from any endpoint listed here,
whatever the product does internally. A themed panel variant (e.g. an empty
vs. full health bar) still costs nothing extra to build: pixelkiln's existing
revision mechanism (image-to-image on any generator's output) already does
exactly that.
Cost: confirmed live at one data point, and it overturned the borrowed
formula. A real 256x192 (49152px²) call against a Tier 2 subscription
account billed exactly 20 generations (balance 4979.8 → 4959.8), matching
the low end of the create_ui_asset MCP tool description's "20-40
generations" claim. pixelkiln's generationCost() has no dedicated branch
for uiAsset and falls through to the same canvas-tier formula as
1dir/tiles, which — given uiAsset's 192px-per-side floor (already
36864px², past that formula's own 2048px² top tier) — always predicts the
40-generation ceiling. The measured call proves that formula wrong for this
generator: 49152px² sits well above the borrowed top tier yet billed the
floor price, not the ceiling, so uiAsset pricing does not follow
1dir/tiles' area-based tiers at all. Left unchanged rather than patched
from one data point — over-reading stays the safe direction for --budget,
the same policy tiles/terrain estimates use elsewhere in this file — but
budget a real call at roughly half the number pixelkiln plan prints until a
second size is measured.