pixelkiln 0.91.2 → 0.92.1

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/docs/ENDPOINTS.md CHANGED
@@ -259,6 +259,42 @@ function `inpaint-v3` and `edit-images-v2` revisions use.
259
259
 
260
260
  ---
261
261
 
262
+ ## Target palette (`target_palette`)
263
+
264
+ PixelLab 0.4.130 added a beta `target_palette` body field, then gave it to 27
265
+ POST endpoints: `{ colors?: 2-256 hex, name?: string (≤100), max_colors?: 2-64,
266
+ smart?: boolean }`. With `colors` every pixel is one of them; `max_colors` caps
267
+ each image. The schema is documentation only so far: **cost with a palette is
268
+ measured for `generate-image-v2` alone** (a 64×64 call billed 10, the same as
269
+ without), and the rest are unmeasured. PixelKiln never sends `smart` (beta,
270
+ "single images only", needs `colors`, adds 15 to 60 s).
271
+
272
+ | Endpoint | PixelKiln wrapper | Sent |
273
+ |---|---|---|
274
+ | `/generate-image-v2` | `imagePro` | yes |
275
+ | `/create-image-pro-flash` | `imageProFlash` | yes; the style image's colours give way to it |
276
+ | `/create-object-pro-flash` | `objectPro` base | yes |
277
+ | `/objects/{id}/states` | `objectPro` state | yes |
278
+ | `/objects/{id}/animations` | `objectPro` animation | `pro` mode only (the field is documented for `mode='pro'`) |
279
+ | `/create-1-direction-object` | `1dir` | yes |
280
+ | `/create-tiles-pro` | `tiles` | yes |
281
+ | `/create-tileset` | `terrain` top-down | `terrainMode: "pro"` only ("mode='pro' only"; `color_image` is documented as no effect on standard) |
282
+ | `/create-ui-asset`, `/generate-ui-v2` | `uiAsset`, `uiElement` | yes |
283
+ | `/create-character-pro`, `/create-character-pro-flash` | `character` Pro and Pro Flash bases | yes |
284
+ | `/create-character-state`, `/portrait-character-pro`, `/transfer-outfit-v2` | `character` states, portraits, outfits | yes |
285
+ | `/create-character-with-8-directions` | `character` standard base | no: keeps `color_image` + `force_colors`; the field is "mode='pro' only" and this wrapper sends standard |
286
+ | `/animate-character`, `/characters/animations` | `character` animations | no: keep the same swatch on every mode; the schema does not say the two combine |
287
+ | `/interpolation-v2`, `/edit-animation-v2` | `interpolate`, `edit-animation` revisions | yes |
288
+ | `/create-8-direction-object`, `/generate-with-style-v2`, `/image-to-pixelart-pro`, `/animate-with-text-v2`, `/generate-8-rotations-v2`, `/tilesets` | not wrapped | no |
289
+ | `/image-to-pixelart-pro-flash` | `pixelkiln pixelate` | no: a loose-file utility with no style, so no palette |
290
+
291
+ `/create-tileset-sidescroller`, `/create-character-v3`, `/animate-with-text-v3`
292
+ and `/animate-pixminimax` have no such field. Every request body is built by
293
+ one helper (`targetPaletteBody` in `src/client.ts`), so the field is spelled
294
+ once.
295
+
296
+ ---
297
+
262
298
  ## VFX workbench (MCP only), measured
263
299
 
264
300
  Create VFX shipped in PixelLab 0.4.128 as a web tool
@@ -687,6 +687,53 @@ change price, use `pixelkiln vfx --description "<what to change>" --effect
687
687
  repeatable recipe, export it with `pixelkiln vfx --effect <id> --out
688
688
  fx/zap` and point a workbench `recipe` at the record.
689
689
 
690
+ ## Target palette
691
+
692
+ PixelLab 0.4.130 added the beta `target_palette` (`colors`, `name`,
693
+ `max_colors`) to `imagePro` and, since, 27 POST endpoints. A style's `palette`
694
+ (2 to 256 colours; one colour is refused), `paletteName` and `maxColors` (2 to
695
+ 64, an optional cap per image) are sent as it wherever the endpoint takes it,
696
+ so PixelLab draws with the palette instead of leaving it all to local
697
+ `enforcePalette` snapping. `paletteName` and `maxColors` are accepted on the
698
+ styles of `imagePro`, `imageProFlash`, `objectPro`, `1dir`, `character`,
699
+ `tiles`, `terrain`, `uiAsset` and `uiElement`, and enter `specHash` only when
700
+ set. PixelLab's `smart` flag is not sent (beta, "single images only"). The
701
+ full endpoint list is in [ENDPOINTS.md](./ENDPOINTS.md#target-palette-target_palette).
702
+
703
+ What goes out per asset shape:
704
+
705
+ | Shape | Sent | Not sent, and why |
706
+ |---|---|---|
707
+ | `imagePro`, `imageProFlash`, `1dir`, `tiles`, `uiAsset`, `uiElement` | `target_palette` | `pixflux` keeps its `color_image` swatch |
708
+ | `objectPro` | base, state, and `pro`-mode animation | `v3` animation: the endpoint documents the field for `mode='pro'` only |
709
+ | `character` | `pro` and `pro-flash` bases, states, portraits, outfits | `standard` bases keep the `color_image` + `force_colors` swatch; `v3` has no field; animations (every mode) keep the same swatch |
710
+ | `terrain` | top-down `terrainMode: "pro"` | standard sets (documented "mode='pro' only"), and sidescroller sets (the endpoint has none) |
711
+ | `revision` | `interpolate`, `edit-animation` | `animate`, `animate-pixminimax`, `animate-skeleton` (their endpoints have none), `reduce-colors` (it takes `paletteImage`), and the other modes |
712
+
713
+ Where an endpoint takes both a swatch and the new field (standard characters,
714
+ animations), the existing, verified swatch stays and `target_palette` is not
715
+ added, because the schema does not say they combine. On `imageProFlash`,
716
+ a style image's own colours "give way" to the palette, per PixelLab, so
717
+ `styleTraits.palette` is left as authored. `uiColorPalette` (a prose hint) is
718
+ still sent next to the hex palette on UI assets and elements; the hex palette
719
+ is what PixelLab enforces.
720
+
721
+ A style whose `palette` was already set keeps its hash, so `plan` does not
722
+ call it stale, but regenerating it will now send that palette on the routes
723
+ above (it was already true for `imagePro`). **Costs are unchanged by
724
+ PixelLab's documentation**, and two more routes are now measured with a
725
+ palette: `imagePro` (a 64×64 call billed exactly 10), `imageProFlash` (a
726
+ 32×32 still billed exactly 5, in only the four palette colours) and `tiles`
727
+ (one numbered description, 4 tiles at 16px, billed exactly 10, every
728
+ candidate in the palette's greens). The other routes are tested against mocked
729
+ requests only. `maxColors` without a `palette` on a multi-direction asset
730
+ caps each direction separately, so the directions may pick different colours;
731
+ give `colors` for those. Not done: `/create-character-v3` and the 4-direction
732
+ standard character endpoint (no field), `/create-8-direction-object`,
733
+ `/generate-with-style-v2`, `/image-to-pixelart-pro`, `/animate-with-text-v2`
734
+ and `/tilesets` (not wrapped), and `pixelkiln pixelate` (a loose-file
735
+ utility with no style, so no palette).
736
+
690
737
  ## Style variants
691
738
 
692
739
  Styles are namespaces. Add another style to re-derive the same asset ids into a
package/docs/MANIFEST.md CHANGED
@@ -132,9 +132,9 @@ One asset using the fields most projects reach for:
132
132
  | `shading` | string | PixelLab `map`: `flat shading`, `basic shading`, `medium shading`, or `detailed shading`. |
133
133
  | `detail` | string | PixelLab `map`: `low detail`, `medium detail`, or `high detail`. |
134
134
  | `seed` | integer | Deterministic provider seed where supported. |
135
- | `palette` | hex array, `[]` | The style's palette; `#` is optional. Sent to providers that take one (`pixflux`, `imagePro` as its target palette, Retro Diffusion, ComfyUI bindings). |
136
- | `paletteName` | string ≤100 | `imagePro` only, needs `palette`: the palette's name (`Game Boy`, `PICO-8`), which PixelLab uses to help the look. |
137
- | `maxColors` | integer 2–64 | `imagePro` only: at most this many colours in each candidate, drawn from `palette` when one is set. |
135
+ | `palette` | hex array, `[]` | The style's palette; `#` is optional. Sent to providers that take one: `pixflux` and standard characters as a swatch, PixelLab's `target_palette` for `imagePro`, `imageProFlash`, `objectPro`, `1dir`, `tiles`, `uiAsset`, `uiElement`, Pro and Pro Flash characters (and their states, portraits, outfits), Pro `terrain`, and `interpolate`/`edit-animation` revisions (2–256 colours there), Retro Diffusion, ComfyUI bindings. See [Target palette](./GENERATORS.md#target-palette). |
136
+ | `paletteName` | string ≤100 | Generators that send `target_palette` (`imagePro`, `imageProFlash`, `objectPro`, `1dir`, `character`, `tiles`, `terrain`, `uiAsset`, `uiElement`); needs `palette`: the palette's name (`Game Boy`, `PICO-8`), which PixelLab uses to help the look. |
137
+ | `maxColors` | integer 2–64 | The same generators: at most this many colours in each image, drawn from `palette` when one is set. |
138
138
  | `enforcePalette` | boolean, `false` | Snap every downloaded PNG to the nearest `palette` colour, no dithering. Needs at least two colours. See [Palette enforcement](#palette-enforcement). |
139
139
  | `noBackground` | boolean, `true` | `pixflux` background removal. Set false for scenes/backdrops. |
140
140
  | `providerOptions` | object, `{}` | Options grouped by provider id. Only the active provider's object is resolved and hashed. |
@@ -262,7 +262,9 @@ Generator-specific fields are validated before planning. Important constraints:
262
262
  - `imagePro` sends `palette` (2 to 256 colours) as PixelLab's beta target
263
263
  palette: every pixel of every candidate is one of those colours. Add
264
264
  `paletteName` to name it and `maxColors` to cap each candidate's colours.
265
- The cost is unchanged.
265
+ PixelLab 0.4.130's target palette now reaches more tools the same way; see
266
+ [Target palette](./GENERATORS.md#target-palette) for which asset shapes and
267
+ modes send it. Cost is unchanged by it, but unmeasured outside `imagePro`.
266
268
  - `tiles` cannot combine `tileFeature` with `styleImages` because the provider
267
269
  rejects connectable features in style-tile mode.
268
270
  - ComfyUI `frames` derives its count from one 2–64 item `providerInputs`
package/docs/PIXELLAB.md CHANGED
@@ -158,7 +158,10 @@ PixelLab 0.4.130 (October 2026) added four things. PixelKiln covers each:
158
158
  sidescrollers yet.
159
159
  - **A target palette for Create Image Pro.** An `imagePro` style's `palette`
160
160
  now reaches PixelLab, which draws every pixel from it. `maxColors` caps
161
- each image and `paletteName` names the palette.
161
+ each image and `paletteName` names the palette. PixelLab then added the
162
+ field to 26 more endpoints, and PixelKiln sends it to the ones it wraps
163
+ where no verified palette mechanism exists; see
164
+ [Target palette](./GENERATORS.md#target-palette).
162
165
  - **VFX in the API.** A `vfx` block with a `description` asks PixelLab's
163
166
  effects artist for the effect, at 1 generation and up. Presets, parts, and
164
167
  recipes still render free on the workbench. See
@@ -174,6 +177,16 @@ call with the Game Boy palette (10, every pixel one of its four colours), a
174
177
  lite described effect (1), and normal maps (0.5 each). The home page's latest
175
178
  updates section shows the results.
176
179
 
180
+ **The palette now reaches more tools.** `imageProFlash`, `objectPro`, `1dir`,
181
+ `tiles`, `uiAsset`, `uiElement`, Pro and Pro Flash characters (with their
182
+ states, portraits and outfits), Pro `terrain`, and the `interpolate` and
183
+ `edit-animation` revisions send a style's `palette`, `paletteName` and
184
+ `maxColors` as `target_palette`. Standard characters and every character
185
+ animation keep their `color_image` swatch, and `pixflux` keeps its own. Costs
186
+ with a palette are measured for `imagePro` (10), `imageProFlash` (a 32×32
187
+ still, 5, in only the four palette colours), and `tiles` (4 tiles at 16px,
188
+ 10), and unverified elsewhere. The other routes are covered by mocked tests only.
189
+
177
190
  ## Learn from PixelLab's tutorials
178
191
 
179
192
  PixelLab's YouTube channel teaches its web app, not PixelKiln, but most of
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelkiln",
3
- "version": "0.91.2",
3
+ "version": "0.92.1",
4
4
  "description": "Manifest-driven pixel-art generation, review, recovery, and packaging with deterministic provenance.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -401,6 +401,21 @@ and which tutorial(s) demonstrated real (not hypothetical) demand for it.
401
401
  candidates below 171px. **Measured once**: a 64×64 call with the Game Boy
402
402
  palette billed exactly 10, and the picked candidate used only those four
403
403
  colours.
404
+ **Rolled out** to the other wrapped tools that take it: `imageProFlash`,
405
+ `objectPro` bases, states and `pro` animations, `1dir`, `tiles`, `uiAsset`,
406
+ `uiElement`, Pro and Pro Flash character bases, states, portraits and
407
+ outfits, top-down Pro `terrain`, and `interpolate`/`edit-animation`
408
+ revisions, through one helper (`targetPaletteBody`). `paletteName` and
409
+ `maxColors` are style fields on those generators, hashed only when set; an
410
+ existing style `palette` keeps its hash and is simply sent on regeneration.
411
+ **Measured live** with a Game Boy palette: `imageProFlash` (a 32×32 still, 5, only the four colours) and `tiles` (4 tiles at 16px, 10, every candidate in the palette), matching the plan, as `imagePro` did (10). **The other routes are mocked tests only, costs unmeasured.** **Not done**:
412
+ standard character bases and every character animation (their verified
413
+ `color_image` + `force_colors` swatch stays, and the schema does not say it
414
+ combines), the standard terrain set (the field is "mode='pro' only"), the
415
+ `v3` object animation (`pro` only), `/create-tileset-sidescroller` and the
416
+ `animate*` revisions (no field), `pixelkiln pixelate` (no style), and the
417
+ unwrapped `/create-8-direction-object`, `/generate-with-style-v2`,
418
+ `/image-to-pixelart-pro`, `/animate-with-text-v2`, `/tilesets`.
404
419
  - **October 2026 Pro price cut** — PixelLab 0.4.128 moved every Pro tool from
405
420
  20/25/40 to 10/15/25 generations. Cost estimates now use the new prices,
406
421
  and `imagePro` (`generate-image-v2`) is tiered instead of a flat 40: a
@@ -208,7 +208,15 @@ generic background-job endpoint the same way a `revision` is. The style's
208
208
  `palette` goes out as the beta `target_palette` (PixelLab 0.4.130): every
209
209
  pixel of every candidate lands on those 2–256 colours, at no extra cost.
210
210
  `paletteName` (needs `palette`) names it, and `maxColors` (2–64) caps each
211
- candidate's colours, with or without a palette. PixelLab's `smart` palette
211
+ candidate's colours, with or without a palette. The same `target_palette`
212
+ now also goes out for `imageProFlash`, `objectPro` (bases, states, `pro`
213
+ animations), `1dir`, `tiles`, `uiAsset`, `uiElement`, Pro and Pro Flash
214
+ characters (bases, states, portraits, outfits), top-down Pro `terrain`, and
215
+ `interpolate`/`edit-animation` revisions, with `paletteName`/`maxColors`
216
+ accepted on those generators' styles. Standard characters and character
217
+ animations keep their `color_image` swatch, `pixflux` its own, and the
218
+ costs with a palette are measured for `imagePro`, `imageProFlash`, and `tiles`, and unmeasured elsewhere (see `docs/GENERATORS.md#target-palette`).
219
+ PixelLab's `smart` palette
212
220
  mapping is not wrapped: it is "single images only", and this endpoint
213
221
  returns a grid of candidates below 171px. Reference
214
222
  images and a style image (`reference_images`, `style_image` +