pixelkiln 0.87.0 → 0.89.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PROVIDERS.md +2 -1
- package/README.md +4 -4
- package/dist/cli.js +2749 -860
- package/dist/cli.js.map +1 -1
- package/dist/client/gallery.js +19 -8
- package/dist/index.cjs +2620 -858
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3134 -569
- package/dist/index.d.ts +3134 -569
- package/dist/index.js +2497 -784
- package/dist/index.js.map +1 -1
- package/docs/CLI.md +144 -8
- package/docs/ENDPOINTS.md +193 -16
- package/docs/GENERATORS.md +158 -6
- package/docs/MANIFEST.md +29 -7
- package/docs/PIXELLAB.md +93 -6
- package/docs/REVISIONS.md +70 -5
- package/docs/TILES.md +30 -6
- package/package.json +1 -1
- package/schema/manifest.schema.json +194 -3
- package/schema/recipe.schema.json +41 -1
- package/skills/pixelkiln/SKILL.md +8 -3
- package/skills/pixelkiln/references/pixellab-roadmap.md +151 -24
- package/skills/pixelkiln/references/pixellab.md +124 -25
- package/skills/pixelkiln/references/revisions.md +14 -2
|
@@ -24,13 +24,14 @@ providers, or before any PixelLab account operation.
|
|
|
24
24
|
| `pixflux` | Closed palettes or full-bleed backgrounds up to 400×400 | 1 generation |
|
|
25
25
|
| `1dir` | Reference-guided work or several candidates | 10–25 generations |
|
|
26
26
|
| `tiles` | Ground variations or connected structures | 10–25 generations |
|
|
27
|
-
| `terrain` | A two-terrain Wang tileset for elevation (grass-to-water, floor-to-cliff) |
|
|
28
|
-
| `imagePro` | A larger or non-square background/scene, or real style transfer | **10–25 generations** by canvas (64px billed 10; a flat 40 before October 2026) |
|
|
27
|
+
| `terrain` | A two-terrain Wang tileset for elevation (grass-to-water, floor-to-cliff), or a sidescroller platform set | Sidescroller **3**, measured. Top-down plans at PixelLab's quote: Pro 15 (up to 32px) or 25 (64px), standard 4 (quoted 1–4) |
|
|
28
|
+
| `imagePro` | A larger or non-square background/scene, or real style transfer; takes the style `palette` as a hard constraint | **10–25 generations** by canvas (64px billed 10; a flat 40 before October 2026) |
|
|
29
29
|
| `character` | A character in 4 or 8 directions, its poses (`state`), its loops (`animation`), bust `portrait`s, and `outfit` transfers onto a loop | 1 per standard base, 6 per pro-flash base at 64px (1 from a `reference`), 20–40 per pose or portrait, 1 per template loop per direction (2–4 as `skeleton-v3`), 20 per outfit (measured once) |
|
|
30
30
|
| `objectPro` | A prop, creature, or vehicle that needs rotations, states, or loops but has no character rig | 6 per base at 64px (1 from a `reference`), **unmeasured**; assumed to match `character` pro-flash |
|
|
31
31
|
| `isometricTile` | One standalone isometric tile (a raised mesa, a cliff block), 16–64px | **1 generation, measured once** (32px `block`) |
|
|
32
32
|
| `uiAsset` | A UI panel, button, health bar, or other chrome, from precise `pieces` and/or named `elements` | **20 generations, measured once** (256×192); the borrowed canvas-tier estimate still predicts 40 |
|
|
33
33
|
| `uiElement` | One UI element (button, slot, bar, dialogue box) from the prompt, 16px and up, with an optional concept image | 10–25 generations, **unmeasured** |
|
|
34
|
+
| `vfx` | An animated effect (explosion, aura, lightning, status icons) from a `vfx` block: a `preset` or `recipe`, `parts`, an optional `sprite` to build around; cut into an ordered frame set. Or a `description` (+ `artist`: `lite`/`pro`, a local PNG `sprite`) for PixelLab's paid VFX artist | workbench **free** (a renderer, not a model); `description`: lite 1–5, pro 6–28 by sprite size, billed up to 2× the quote, which is what plan counts (a lite effect with no sprite billed its quote of 1, measured once) |
|
|
34
35
|
| `imageProFlash` | A styled still on the Pro Flash model (style image + `styleTraits`), 16–256px in multiples of 4; also the natural source for a Pro Flash character's south sprite | 5–9 generations, PixelLab's provisional quote |
|
|
35
36
|
|
|
36
37
|
`tiles` is not limited to top-down ground: `tileType` selects the projection
|
|
@@ -91,26 +92,72 @@ into the three fields before the call, with the style's `promptPrefix`/
|
|
|
91
92
|
`promptSuffix` wrapped around each one individually rather than the whole
|
|
92
93
|
string once.
|
|
93
94
|
|
|
94
|
-
A set is
|
|
95
|
-
|
|
96
|
-
corners take a third "transition"
|
|
97
|
-
|
|
98
|
-
pick from, the same as a
|
|
99
|
-
tile edge (16 or 32 in
|
|
100
|
-
|
|
95
|
+
A set is 16 tiles, or 25 in the tall layout: `terrainTransitionSize` 1 on
|
|
96
|
+
standard, or anything above 0.4 on Pro (so 0.5 is already 25 tiles). There
|
|
97
|
+
the step between levels is a wall and corners take a third "transition"
|
|
98
|
+
value. A set always resolves straight to a finished asset with one output
|
|
99
|
+
file per tile, never a candidate sheet to pick from, the same as a
|
|
100
|
+
connectable `tiles` set. `terrainTileSize` sets the tile edge (16 or 32 in
|
|
101
|
+
both modes, 64 needs `terrainMode: "pro"`, default 16).
|
|
102
|
+
`terrainTransitionSize` is 0, 0.25, 0.5, or 1 without `terrainShapeStyle`
|
|
103
|
+
(any value 0–1 with it, though above 0.5 switches to an extended 32-tile
|
|
104
|
+
layout pixelkiln does not model). Pro reads it as wall height: 0 flat, 0.25
|
|
105
|
+
a low bank, 0.5 or 1 a proper wall. `terrainView` picks `low top-down` or
|
|
106
|
+
`high top-down` (API default). The style's `outline`/`shading`/`detail`
|
|
107
|
+
apply here too.
|
|
108
|
+
|
|
109
|
+
`terrainMode: "standard"` (the default) is the classic Wang pipeline,
|
|
101
110
|
optionally with `terrainShapeStyle` (`square` or `round`) for a fixed
|
|
102
|
-
procedural boundary
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
111
|
+
procedural boundary. `terrainMode: "pro"` rejects `terrainShapeStyle` and
|
|
112
|
+
shapes the border with its own controls, each refused outside the mode that
|
|
113
|
+
reads it:
|
|
114
|
+
|
|
115
|
+
- `terrainRaggedness` (0–1): boundary noise, half strength on tall sets.
|
|
116
|
+
- `terrainRoundness` (0–2): 0 square corners, 1 round, 2 cut at 45°. Pro or
|
|
117
|
+
a shape style; above 1 needs Pro. Defaults 0.85 (Pro), 0.6 (shape style).
|
|
118
|
+
- `terrainBoundaryAmplitude` (0–0.3) and `terrainBoundarySeed` (integer):
|
|
119
|
+
how far the border meanders, and which meander. Pro, or a shape style.
|
|
120
|
+
- `terrainStepSlope` (0–2): 0 a cliff to 2 a gentle slope. Pro at
|
|
121
|
+
`terrainTransitionSize` 0.25 only.
|
|
122
|
+
- `terrainConnectDiagonals` (boolean): joins the two diagonal tiles'
|
|
123
|
+
upper corners into one area. Pro only. With `terrainRoundness: 2` it is
|
|
124
|
+
the fix for 45° paths and coastlines that break into one island per step.
|
|
125
|
+
|
|
126
|
+
`terrainSpreadX` and `terrainSlopeSize` are deprecated: PixelLab ignores
|
|
127
|
+
both now, so leave them out. Reference images, a forced palette, and the
|
|
128
|
+
remaining tunables (`tileStrength`, `tilesetAdherence`) are not modeled.
|
|
129
|
+
|
|
130
|
+
**Connected sets.** An asset's `connect` makes one of its terrains the very
|
|
131
|
+
terrain of another set in the same style, so ocean, sand, and grass paint on
|
|
132
|
+
one map: `"connect": { "lower": { "of": "coast", "terrain": "upper" } }` is
|
|
133
|
+
"this set's lower terrain is `coast`'s upper". The other set generates
|
|
134
|
+
first (the connected one is blocked until it is downloaded, and follows in
|
|
135
|
+
the next wave), PixelLab draws the shared terrain from its base tile, and
|
|
136
|
+
regenerating the other set makes this one stale. Sharing a terrain makes it
|
|
137
|
+
available, not blendable: two terrains with no set of their own between
|
|
138
|
+
them still meet with a hard (in PixelLab's map tool, black) edge, so plan a
|
|
139
|
+
set for every pair that touches.
|
|
140
|
+
|
|
141
|
+
**Sidescroller sets.** `terrainOrientation: "sidescroller"` switches to
|
|
142
|
+
`/create-tileset-sidescroller`: a platform seen from the side. The prompt is
|
|
143
|
+
`"1). mossy stone bricks texture 2). green grass texture"`, the platform
|
|
144
|
+
body and the layer on top of it; the other side of every edge is empty air.
|
|
145
|
+
16 or 32px tiles, `terrainTransitionSize` (the top layer's height) 0, 0.25,
|
|
146
|
+
0.5, or 1, and none of the mode, view, or shape controls. It billed 3
|
|
147
|
+
generations for 16 tiles. A sidescroller set connects only its platform
|
|
148
|
+
(`lower`) terrain. PixelLab's Pro sidescroller (64px, taller top layers) is
|
|
149
|
+
web-app only.
|
|
150
|
+
|
|
151
|
+
Prompt each terrain as a short material ending on the word "texture" ("deep
|
|
152
|
+
ocean water texture", "plain smooth sand texture"). PixelLab's "Pro
|
|
153
|
+
Tilesets: Full Guide" shows that without it, Pro sometimes scatters rocks,
|
|
154
|
+
shells, or plants over the surface. Pro needs no long prompts. Put style
|
|
155
|
+
words in the style's `promptPrefix`/`promptSuffix` so they wrap each
|
|
156
|
+
terrain: color, season, and outline words ("autumn", "frosty", "bold black
|
|
157
|
+
outlines with cel shading", "four-color green palette") change the set the
|
|
158
|
+
most, so try two or three at a time. With `terrainTransitionSize` above 0.4
|
|
159
|
+
on Pro, the third numbered description is the wall itself ("crumbling
|
|
160
|
+
dungeon brick wall").
|
|
114
161
|
|
|
115
162
|
`1dir`'s own candidate mechanic (the size-tiered table above) normally
|
|
116
163
|
returns N variations of one prompt. `/create-1-direction-object` also takes
|
|
@@ -146,7 +193,13 @@ and a 64×64 call billed exactly 10 (`docs/ENDPOINTS.md`, "October 2026 Pro
|
|
|
146
193
|
price cut"). One call still returns
|
|
147
194
|
several candidates to pick from by the same size tiering as `1dir` (up to
|
|
148
195
|
42px: 64, 43–85px: 16, 86–170px: 4, above 170px: 1), reached through the
|
|
149
|
-
generic background-job endpoint the same way a `revision` is.
|
|
196
|
+
generic background-job endpoint the same way a `revision` is. The style's
|
|
197
|
+
`palette` goes out as the beta `target_palette` (PixelLab 0.4.130): every
|
|
198
|
+
pixel of every candidate lands on those 2–256 colours, at no extra cost.
|
|
199
|
+
`paletteName` (needs `palette`) names it, and `maxColors` (2–64) caps each
|
|
200
|
+
candidate's colours, with or without a palette. PixelLab's `smart` palette
|
|
201
|
+
mapping is not wrapped: it is "single images only", and this endpoint
|
|
202
|
+
returns a grid of candidates below 171px. Reference
|
|
150
203
|
images and a style image (`reference_images`, `style_image` +
|
|
151
204
|
`style_options`, up to 4 subject references plus one style reference) exist
|
|
152
205
|
on this endpoint but are not modeled yet, and the completed job's exact
|
|
@@ -411,6 +464,9 @@ An asset that declares `revision` against a PixelLab style calls `inpaint`
|
|
|
411
464
|
(palette quantize, `/reduce-colors`), `correct-pixelart` (edge/noise
|
|
412
465
|
cleanup, `/correct-pixelart`), `remove-background` (transparent cutout,
|
|
413
466
|
`/remove-background`, one image up to 400x400, 1 generation measured),
|
|
467
|
+
`normal-map` (`/normal-map`, lighting normals for a sprite or a loop sent as
|
|
468
|
+
one strip, 0.5 generation per call from the docs, a background job; refused
|
|
469
|
+
on a set of directions and in a style with `enforcePalette` or `quality`),
|
|
414
470
|
`animate` (`/animate-with-text-v3`),
|
|
415
471
|
`animate-pixminimax` (`/animate-pixminimax`, beta, tier 1 subscription or
|
|
416
472
|
higher), `animate-skeleton` (`/animate-with-skeleton-v3`, also beta/tier
|
|
@@ -462,20 +518,63 @@ the `direction` value. The same tutorial states outright that PixMiniMax
|
|
|
462
518
|
"allows up to 40 frames," a second, independent (though still not
|
|
463
519
|
live-billed) confirmation of the ceiling above.
|
|
464
520
|
|
|
521
|
+
Try `vfx` first for an effect: the workbench is free and re-renders the same
|
|
522
|
+
pixels. When presets and parts do not get there and the person would rather
|
|
523
|
+
describe the effect, a `vfx` `description` asks PixelLab's paid VFX artist
|
|
524
|
+
(`POST /vfx`) instead: it cannot be mixed with `preset`/`recipe`/`parts`/`fps`,
|
|
525
|
+
its `sprite` must be a local PNG up to 512px (no `character:` references), and
|
|
526
|
+
every regeneration is a new, re-billed effect. Tell the person the price
|
|
527
|
+
before running it.
|
|
528
|
+
Generate one instead when the effect is a drawn object or a character's own
|
|
529
|
+
motion, such as a water hammer that bursts into a splash, a sword turning
|
|
530
|
+
into lightning, or a mage casting. PixelLab's "How to Make Animated Pixel
|
|
531
|
+
Art VFX" tutorial gives a pattern for that which maps onto what exists. Draw a sheet of different effects in
|
|
532
|
+
one `imagePro` call by listing one effect per frame in the prompt (64×64
|
|
533
|
+
returns 16 candidates), pick one, and animate it with `animate-pixminimax`.
|
|
534
|
+
Pin the ending with `lastFrame` when the motion should arrive somewhere: a
|
|
535
|
+
crystal cluster grown from a few hand-placed blue pixels, a splash after a
|
|
536
|
+
hammer strike, or the same sprite edited by a `"engine": "pro-flash"`
|
|
537
|
+
revision ("make it a lightning-enhanced version") so the clip transforms one
|
|
538
|
+
into the other. Describe motion, not appearance, and ask a loop to "return to
|
|
539
|
+
its original state at the end." Give a growing effect room: the tutorial
|
|
540
|
+
pads most sources onto a larger canvas first, which here means a hand-padded
|
|
541
|
+
`source` file, since a revision sends its parent at its own size. Then clean
|
|
542
|
+
up: `driftThreshold` or a `reduce-colors` revision over the frame set for
|
|
543
|
+
color flicker, `correct-pixelart` or `pixelkiln edit` for stray pixels, and
|
|
544
|
+
check a loop's last frame against its first for a duplicate.
|
|
545
|
+
|
|
546
|
+
Budget `animate-pixminimax` above what `plan` prints for long clips. The MCP
|
|
547
|
+
tool prices it by generation time (64×64 at 16 frames is 2, at 40 frames is
|
|
548
|
+
6), while pixelkiln's placeholder estimate gives 1 and 3. Tell the person the
|
|
549
|
+
plan may under-read before a long PixMiniMax run.
|
|
550
|
+
|
|
465
551
|
Parts of Pro Flash image editing are still outside this adapter: `edit`'s
|
|
466
552
|
reference-image method, palette correction, inpaint's output-method choice,
|
|
467
553
|
and inpainting with surrounding `context_image`. See
|
|
468
554
|
[pixellab-roadmap.md](./pixellab-roadmap.md) for the confirmed shape.
|
|
469
555
|
|
|
470
|
-
|
|
556
|
+
Six commands call PixelLab on loose files, outside the manifest and
|
|
471
557
|
lockfile. `pixelkiln unzoom --from <file> --out <file>` returns upscaled
|
|
472
558
|
pixel art to its native grid; run it before outside art becomes a
|
|
473
559
|
`reference` or `styleImages` entry (input at least 256×256, result opaque,
|
|
474
560
|
cost unmeasured). `pixelkiln pixelate --from <file> --out <file>` converts a
|
|
475
561
|
photo, painting, or render into pixel art with Image to Pixel Art Pro Flash:
|
|
476
|
-
PixelLab picks the output size, the result
|
|
562
|
+
PixelLab picks the output size, the result is opaque on near-white, an optional
|
|
477
563
|
`--description` steers the style, and it costs a flat 6 generations
|
|
478
|
-
(measured) after asking first. `pixelkiln
|
|
564
|
+
(measured) after asking first. `pixelkiln normal-map --from <png> [--frames
|
|
565
|
+
N] [--convention opengl|directx]` writes a sprite's normal map, or a strip's
|
|
566
|
+
(N equal frames side by side, up to 32), for 0.5 generation after asking
|
|
567
|
+
first. `pixelkiln vfx --preset <name> --out <base>`
|
|
568
|
+
builds an animated effect (explosion, heal pillar, lightning strike, aura,
|
|
569
|
+
and more; `pixelkiln vfx presets` and `vfx parts` list them) with PixelLab's
|
|
570
|
+
VFX workbench, which is free and reached through PixelLab's MCP server. Add
|
|
571
|
+
`--part <name>` to layer parts, `--sprite <file|character:<id>:<dir>>` to
|
|
572
|
+
build around a character, and `--game-pack` for per-piece clips. It writes a
|
|
573
|
+
spritesheet, GIF, atlas JSON, and a `.vfx.json` record whose recipe
|
|
574
|
+
re-renders the same effect with `--recipe`. `pixelkiln vfx --description
|
|
575
|
+
<text> [--artist pro] --out <base>` asks the paid VFX artist instead, prints
|
|
576
|
+
the quote and its 2× ceiling, and asks first; with `--effect <id>` it changes
|
|
577
|
+
that saved effect in place. `pixelkiln font --description <text> --out <base>` writes a
|
|
479
578
|
`.ttf` and an 80-glyph atlas for PixelLab's documented 15 generations, and
|
|
480
579
|
asks first. `pixelkiln estimate-skeleton <image> --out <file>` starts an
|
|
481
580
|
`animate-skeleton` keypoints file, and `pixelkiln skeleton-preview <asset>`
|
|
@@ -23,6 +23,16 @@ Read this reference when an asset declares `revision`.
|
|
|
23
23
|
`simple` or `complex`, optional `description` hint) cuts the background out
|
|
24
24
|
to transparency and leaves a locked palette intact; 1 generation measured.
|
|
25
25
|
It refuses a set parent.
|
|
26
|
+
- `normal-map` (PixelLab `/normal-map`, 8–512px per side, PNG only,
|
|
27
|
+
optional `convention` `opengl` or `directx`) makes lighting data, not art:
|
|
28
|
+
0.5 generation per call, unmeasured. A loop's frames go as one strip
|
|
29
|
+
(`frames: N`, up to 32) so the light stays steady, and come back cut into
|
|
30
|
+
the parent's `-frame-NN` files; a character's directions are refused (one
|
|
31
|
+
revision per direction instead). It is refused in a style with
|
|
32
|
+
`enforcePalette` or `quality`, since snapping or grid repair would wreck
|
|
33
|
+
the normals: put it in a plain style and point at the parent with
|
|
34
|
+
`fromStyle`. A mirror of a normal map is refused too. For a loose file,
|
|
35
|
+
`pixelkiln normal-map --from <png> [--frames N]` asks before spending.
|
|
26
36
|
- `reduce-colors` and `correct-pixelart` send no prompt to the provider — the
|
|
27
37
|
asset's `prompt` stays a manifest-only label. `numColors`/`paletteImage`
|
|
28
38
|
are mutually exclusive; a `paletteImage` has no size relationship to the
|
|
@@ -93,8 +103,10 @@ Read this reference when an asset declares `revision`.
|
|
|
93
103
|
paint-over-the-sprite mask editor that writes the mask PNG into the project),
|
|
94
104
|
`animate`, `animate-pixminimax`, `interpolate` (another same-size sprite as
|
|
95
105
|
the ending keyframe), `reduce-colors`, `correct-pixelart`, or
|
|
96
|
-
`remove-background`; on a PixelLab frame set (or a
|
|
97
|
-
`edit-animation`, `reduce-colors`, or
|
|
106
|
+
`remove-background`, or `normal-map`; on a PixelLab frame set (or a
|
|
107
|
+
character's directions) `edit-animation`, `reduce-colors`, or
|
|
108
|
+
`correct-pixelart`, plus `normal-map` on a loop (never in a style with
|
|
109
|
+
`enforcePalette` or `quality`); on ComfyUI
|
|
98
110
|
`image-to-image` or `inpaint`; on other providers `image-to-image`. On a
|
|
99
111
|
single PixelLab sprite, "+ Skeleton animation" creates an `animate-skeleton`
|
|
100
112
|
revision: poses from a project file, pasted JSON, or "Estimate poses" (one
|