pixelkiln 0.92.2 → 0.92.3
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 -2
- package/dist/cli.js +48 -24
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +52 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +52 -26
- package/dist/index.d.ts +52 -26
- package/dist/index.js +50 -24
- package/dist/index.js.map +1 -1
- package/docs/ENDPOINTS.md +39 -37
- package/docs/GENERATORS.md +36 -27
- package/docs/PIXELLAB.md +2 -2
- package/docs/REVISIONS.md +31 -27
- package/package.json +1 -1
- package/skills/pixelkiln/references/pixellab-fidelity.md +2 -1
- package/skills/pixelkiln/references/pixellab-roadmap.md +31 -23
- package/skills/pixelkiln/references/pixellab.md +19 -16
package/docs/ENDPOINTS.md
CHANGED
|
@@ -62,7 +62,9 @@ more than planned or finishes in a shape PixelKiln cannot read.
|
|
|
62
62
|
14 are mock only (`objectPro` base, state and `pro` animation, `1dir`, Pro
|
|
63
63
|
`terrain`, `uiAsset`, `uiElement`, Pro and Pro Flash character bases, states,
|
|
64
64
|
portraits, outfit transfer, `interpolate`, `edit-animation`), and their rows
|
|
65
|
-
say so.
|
|
65
|
+
say so. Since then `objectPro` base, `uiElement`, `interpolate` and
|
|
66
|
+
`edit-animation` have each run live (November 2026), but without a palette, so
|
|
67
|
+
the palette claim on them is still mock only.
|
|
66
68
|
|
|
67
69
|
**Free acceptance probe** (November 2026): for 13 of those 14 routes, a request
|
|
68
70
|
carrying only a valid four-colour `target_palette` and none of the required
|
|
@@ -95,13 +97,13 @@ not probed.
|
|
|
95
97
|
| `POST /correct-pixelart` | revision `correct-pixelart` | Measured live | 0.1 generations at 32×32 ([Cleanup tier, measured](#cleanup-tier-measured)). | Larger canvases and multi-frame sets, as above. | Low |
|
|
96
98
|
| `POST /unzoom` | `pixelkiln unzoom` | Unknown | "Cost unmeasured; PixelLab's MCP tool description claims 0.1" ([Cleanup tier, measured](#cleanup-tier-measured)). Nothing records a live run. | Everything. | Low |
|
|
97
99
|
| `POST /normal-map` | revision `normal-map`, `pixelkiln normal-map` | Measured live | An 8-frame 1304×26 strip and a 64×64 revision each billed 0.5; the map comes back the input's size with matching alpha ([Normal map](#normal-map-post-normal-map-measured-once), October 2026). | The `directx` convention; strips near the 32-frame limit. | Low |
|
|
98
|
-
| `POST /generate-ui-v2` | `uiElement` |
|
|
100
|
+
| `POST /generate-ui-v2` | `uiElement` | Measured live | A 32×32 call billed 10 and the review page showed 64 candidates at 32×32 (November 2026, Tier 3; the plan said 1 candidate and now follows `uiElementCandidateCount`). Planned on the 10/15/25 ladder ([GENERATORS.md](./GENERATORS.md#uielement)). `target_palette` sent, mock only. | Other sizes (the 15 and 25 tiers and the other candidate bands, which come from PixelLab's published grid), and the concept-image path. | High |
|
|
99
101
|
| `POST /create-1-direction-object` (+ `GET /objects/{id}`) | `1dir` | Measured live | A 32px, 3-description `batch` billed 20 (the pre-cut floor) and `item_descriptions[0]` owned slot 0 ([Candidates](#candidates)); candidate counts follow size. `target_palette` sent, mock only. | No bill since the October 2026 cut (10 / 15 / 25 is PixelLab's published ladder); tiers above the floor under `item_descriptions`. | High |
|
|
100
102
|
| `POST /objects/{id}/select-frames` | `1dir` and `batch` pick | Run live, not measured | Promoted three candidates in the live batch run ([Candidates](#candidates)); `indices` is plural. | Its cost was not recorded. | Low |
|
|
101
103
|
| `GET /objects?limit=&offset=` | `adopt`, `salvage` | Measured live | Free; a March 2026 sprite still resolved four months on ([Object lifecycle](#object-lifecycle)). | None recorded. | Low |
|
|
102
|
-
| `POST /create-object-pro-flash` | `objectPro` base |
|
|
103
|
-
| `POST /objects/{id}/states` | `objectPro` state | Mock only |
|
|
104
|
-
| `POST /objects/{id}/animations` | `objectPro` animation (`v3`, `pro`) | Mock only | Same assumption; `pro` mode is documented 10 to 25 per direction. `target_palette` sent on `pro` only, mock only. | Price, shape, per-direction billing. | High |
|
|
104
|
+
| `POST /create-object-pro-flash` | `objectPro` base | Measured live | A 32px base billed 6 and returned 8 files at 32×32 (the rotations), matching the plan, which prices it like `character` pro-flash (November 2026, Tier 3; [GENERATORS.md](./GENERATORS.md#objectpro)). `target_palette` sent, mock only. | Other sizes and the 1-generation `reference` path. | Medium |
|
|
105
|
+
| `POST /objects/{id}/states` | `objectPro` state | Mock only | Assumed to price like `character` pro-flash; the base ran live, this route did not. `target_palette` sent, mock only. | Price and shape. | Medium |
|
|
106
|
+
| `POST /objects/{id}/animations` | `objectPro` animation (`v3`, `pro`) | Mock only | Same assumption as the state row; `pro` mode is documented 10 to 25 per direction. `target_palette` sent on `pro` only, mock only. | Price, shape, per-direction billing. | High |
|
|
105
107
|
| `PATCH /objects/{id}/tags`, `PATCH /characters/{id}/tags` | tagging in `fetch`, `adopt`, `salvage` | Unknown | Only the negative is documented: pixflux, pixen and bitforge results "cannot be tagged" ([Object lifecycle](#object-lifecycle)). | A recorded live call. | Low |
|
|
106
108
|
| `DELETE /objects/{id}`, `POST /objects/{id}/dismiss-review`, `DELETE /characters/{id}` | `salvage`, account cleanup | Unknown | Not discussed in the docs. | A recorded live call. | Low |
|
|
107
109
|
| `DELETE /characters/{id}/animations` | replacing a loop's direction | Unknown | "Deleting one direction of a shared group has not been run live" ([Skeleton-driven motion, measured](#skeleton-driven-motion-measured)). | Whether the rest of the group keeps its motion. | Low |
|
|
@@ -123,12 +125,12 @@ not probed.
|
|
|
123
125
|
| `POST /characters/{id}/portrait` | `character` portrait attach | Measured live | Free (`usage.generations: 0`); the reply holds the only copy of the stored URL ([Characters, measured](#characters-measured)). | None recorded. | Low |
|
|
124
126
|
| `POST /transfer-outfit-v2` | `character` outfit | Measured live | A 2-frame 92×92 job billed 20 (before the cut); frames return inline in `last_response.quantized_images` ([Characters, measured](#characters-measured)). `target_palette` sent, mock only. | Other frame counts (2 to 16) and canvases; the price after the cut. | High |
|
|
125
127
|
| `GET /characters/{id}`, `GET /characters?limit=&offset=` | `adopt`, `fetch --refresh`, `salvage` | Measured live | Free; carries no `usage`; image URLs carry `?t=<updated_at>` ([Object lifecycle](#object-lifecycle)). | None recorded. | Low |
|
|
126
|
-
| `POST /animate-with-text-v3` | revision `animate` |
|
|
127
|
-
| `POST /animate-pixminimax` | revision `animate-pixminimax` |
|
|
128
|
+
| `POST /animate-with-text-v3` | revision `animate` | Measured live | A 64×64, 4-frame call billed 1 and returned 5 frames at 64×64 (the input frame plus 4); the plan, which borrows `character`'s v3 formula, said 1 (November 2026, Tier 3; [REVISIONS.md](./REVISIONS.md#animation-and-interpolation)). | Other sizes and frame counts (up to 16 frames at 256px reads 16 by the borrowed formula). | Medium |
|
|
129
|
+
| `POST /animate-pixminimax` | revision `animate-pixminimax` | Measured live | 64×64 at 8 frames billed 1 and returned 9 frames at 64×64 (the input frame plus 8); at 16 frames billed 2 and returned 17. The plan said 1 for the 16-frame call because its old placeholder under-read; it now follows PixelLab's published table (64×64 at 4 / 8 / 16 / 40 frames: 1 / 1 / 2 / 6), see `pixMiniMaxCost` (November 2026, Tier 3; [roadmap](../skills/pixelkiln/references/pixellab-roadmap.md), "Generated effects with PixMiniMax"). | 40 frames and other sizes are unbilled (the table is PixelLab's, not a bill); `enhance_prompt`'s 0.05 is the schema's number. | Medium |
|
|
128
130
|
| `POST /animate-with-skeleton-v3` | revision `animate-skeleton` | Measured live | 8 frames at 64×64 billed 3 and returned 8 frames at 64×64; `description` and `action` are both required, and sent with neither the endpoint returns 422 ([Skeleton-driven motion, measured](#skeleton-driven-motion-measured), October 2026). | Other frame counts (3 = 2 and 15 = 4 are PixelLab's anchors, unbilled). | Low |
|
|
129
131
|
| `POST /estimate-skeleton` | `pixelkiln estimate-skeleton`, gallery pose helper | Run live, not measured | Ran on a 64×64 sprite before the 8-frame revision ([REVISIONS.md](./REVISIONS.md#skeleton-driven-animation)). | Its cost; the reply's `usage` is typed `unknown`. | Low |
|
|
130
|
-
| `POST /interpolation-v2` | revision `interpolate` |
|
|
131
|
-
| `POST /edit-animation-v2` | revision `edit-animation` |
|
|
132
|
+
| `POST /interpolation-v2` | revision `interpolate` | Measured live | A 64×64 start sprite with a `lastFrame` keyframe and the default frame count billed 10 and returned 14 frames at 64×64 (November 2026, Tier 3; [REVISIONS.md](./REVISIONS.md#interpolate-between-two-keyframes)). The planner said 25, a 2.5× over-read, and now prices the canvas on the 10/15/25 ladder. `target_palette` sent, mock only. | Canvases above 65536px² (15 and 25 tiers, unbilled) and other frame counts. | High |
|
|
133
|
+
| `POST /edit-animation-v2` | revision `edit-animation` | Measured live | One text edit of a 9-frame 64×64 set billed 10 and the edited set was accepted into review (November 2026, Tier 3). The planner said 25 and now prices the packed grid (nine 64×64 frames: 192×192) on the same ladder. `target_palette` sent, mock only. | Larger sets and canvases, where the packed grid crosses 65536px² (unbilled, assumed to follow the ladder). | High |
|
|
132
134
|
| `POST /vfx`, lite artist, no sprite | `pixelkiln vfx --description`, `vfx` block `description` | Measured live | One effect billed 1 (balance 5104 to 5103); 163×26, 8 frames, sheet and atlas cut into 8 correct frames ([VFX artist](#vfx-artist-post-vfx-measured-once), October 2026). | The `files` shape (list or map) is undocumented; PixelKiln reads three. | Low |
|
|
133
135
|
| `POST /vfx`, sprite, pro artist, `effect_id` change or `game_pack` | same | Mock only | Quoted from the OpenAPI table: pro 6 (8 with a sprite), 14 and 28 for larger sprites; plans count twice the quote ([VFX artist](#vfx-artist-post-vfx-measured-once)). | Every variant above. | High |
|
|
134
136
|
| MCP `tools/call` `vfx_workbench` at `api.pixellab.ai/mcp` | `pixelkiln vfx`, `vfx` block `preset` or `recipe` | Measured live | Free on a subscription; same recipe re-rendered byte-identical; exports a sheet, GIF, atlas and optional game pack ([VFX workbench (MCP only), measured](#vfx-workbench-mcp-only-measured), October 2026). | "Busy, retry" is the only recorded error; sprites by asset are not wired. | Low |
|
|
@@ -145,29 +147,29 @@ The High and Medium rows that are Mock only, Schema only or Run live, not
|
|
|
145
147
|
measured, most exposed first. A live run of the top ones also settles the most
|
|
146
148
|
uncertainty per generation.
|
|
147
149
|
|
|
148
|
-
1. **`/
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
2. **`/
|
|
152
|
-
borrowed 10/15/25 tiers with no usage example; a whole frame set goes in one
|
|
153
|
-
call, so a miss is a full Pro tier, and the finished job is read defensively.
|
|
154
|
-
3. **`/animate-with-text-v3`** (Schema only). Up to 16 generations a call by
|
|
155
|
-
PixelKiln's own formula, billed per animation, completed shape guessed.
|
|
156
|
-
4. **`/objects/{id}/animations`, `/create-object-pro-flash`, `/objects/{id}/states`**
|
|
157
|
-
(Mock only). `objectPro` assumes `character` pro-flash prices; its `pro`
|
|
158
|
-
animations are 10 to 25 per direction.
|
|
159
|
-
5. **`/generate-ui-v2`** (Schema only). 10 to 25, never billed, shape read
|
|
160
|
-
defensively.
|
|
161
|
-
6. **`/animate-character` template and v3** (Run live, not measured). One job
|
|
150
|
+
1. **`/objects/{id}/animations`, `/objects/{id}/states`** (Mock only).
|
|
151
|
+
`objectPro` assumes `character` pro-flash prices; the base ran live and
|
|
152
|
+
matched (6 at 32px), but its `pro` animations are 10 to 25 per direction.
|
|
153
|
+
2. **`/animate-character` template and v3** (Run live, not measured). One job
|
|
162
154
|
per direction, so an 8-direction loop is eight bills no one has recorded.
|
|
163
|
-
|
|
155
|
+
3. **`/create-character-state`** (Run live, not measured). One rough bill
|
|
164
156
|
(about 22) taken beside other jobs and before the cut.
|
|
165
|
-
|
|
157
|
+
4. **`/vfx` with a sprite, the pro artist, a change or a game pack** (Mock
|
|
166
158
|
only). Up to 28 generations a call, and plans reserve twice the quote.
|
|
167
|
-
|
|
159
|
+
5. **`/edit-image-pro-flash`, `/inpaint-image-pro-flash`** (Mock only). 5 to 6
|
|
168
160
|
per call on provisional quotes, no completed response seen.
|
|
169
|
-
|
|
170
|
-
|
|
161
|
+
6. **`/create-character-v3`** (Run live, not measured). 2 at 64px, up to 9 at
|
|
162
|
+
256px, and the one recorded bill was an unreadable zero.
|
|
163
|
+
|
|
164
|
+
Measured in November 2026 and no longer on this list: `/animate-pixminimax`,
|
|
165
|
+
`/animate-with-text-v3`, `/interpolation-v2`, `/edit-animation-v2`,
|
|
166
|
+
`/generate-ui-v2` and the `objectPro` base. Their remaining exposure is the
|
|
167
|
+
sizes and frame counts the row says were not billed. Two of the planners were
|
|
168
|
+
wrong: `interpolate` and `edit-animation` over-read 2.5× (25 planned, 10 billed)
|
|
169
|
+
and `animate-pixminimax` under-read a 16-frame clip (1 planned, 2 billed). Both
|
|
170
|
+
are now calibrated to those bills, and the PixMiniMax planner follows PixelLab's
|
|
171
|
+
published points at 4, 8, 16 and 40 frames, which the 40-frame point has not
|
|
172
|
+
been billed against.
|
|
171
173
|
|
|
172
174
|
Also worth a second look because they are measured on an old price list: the
|
|
173
175
|
`1dir`, `/portrait-character-pro`, `/transfer-outfit-v2` and `/edit-images-v2`
|
|
@@ -1068,15 +1070,15 @@ Listed so the gaps are known rather than assumed away:
|
|
|
1068
1070
|
across every frame of a set) are wired the same way, as the `interpolate`
|
|
1069
1071
|
and `edit-animation` modes; see
|
|
1070
1072
|
[Interpolate between two keyframes](./REVISIONS.md#interpolate-between-two-keyframes).
|
|
1071
|
-
All four
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
`
|
|
1078
|
-
`edit-animation`
|
|
1079
|
-
|
|
1073
|
+
All four ran live in November 2026 (Tier 3): 64×64 PixMiniMax at 8 and 16
|
|
1074
|
+
frames billed 1 and 2, `animate-with-text-v3` at 4 frames billed 1,
|
|
1075
|
+
`interpolate` billed 10, and `edit-animation` of a 9-frame set billed 10.
|
|
1076
|
+
Every completed job was read correctly. PixMiniMax returned the frame count
|
|
1077
|
+
plus the input frame (9 and 17 frames); `interpolate` returned 14 frames at
|
|
1078
|
+
the default count. Cost: `animate` borrows `character`'s measured v3-loop
|
|
1079
|
+
formula; `animate-pixminimax` follows PixelLab's published table, which the
|
|
1080
|
+
borrowed formula under-read; `interpolate` and `edit-animation` price the
|
|
1081
|
+
canvas on the 10/15/25 Pro ladder (the planner had read them as 25).
|
|
1080
1082
|
- `/generate-font-pro` (+ `GET /generate-font-pro/{job_id}`) — an 80-glyph
|
|
1081
1083
|
atlas PNG plus a `.ttf` from a style description, `weight`
|
|
1082
1084
|
(`Bold`/`Regular`), and `glyph_px` (8/16/32/64). Documented at 15
|
package/docs/GENERATORS.md
CHANGED
|
@@ -19,9 +19,9 @@ account; [ENDPOINTS.md](./ENDPOINTS.md) contains the detailed experiments.
|
|
|
19
19
|
| Controlled pose/expression sequence in ComfyUI | `frames` | 0 `free` provider units | one atomic ordered set |
|
|
20
20
|
| Animated GIF or spritesheet from Retro Diffusion | `animation` | $0.07–$0.25 per animation (published price) | 1 GIF or PNG sheet |
|
|
21
21
|
| A character facing 4 or 8 directions, its poses, and its animations | `character` | 1 per base (standard), 10–25 per pose or portrait, 1 per template loop (2–4 as `skeleton-v3`), 20 per outfit (measured once) | one set of directions, one ordered loop, or one portrait |
|
|
22
|
-
| A prop, creature, or vehicle with rotations, states, or loops but no character rig | `objectPro` |
|
|
22
|
+
| A prop, creature, or vehicle with rotations, states, or loops but no character rig | `objectPro` | 6 per base (measured at 32px; about 6 at 64px) | one set of directions, or one ordered loop |
|
|
23
23
|
| UI chrome — panels, buttons, health bars, toolbars | `uiAsset` | 20 generations (measured once, at 256x192) | 1 composited image |
|
|
24
|
-
| One UI element from a description, 16px and up, optionally guided by a concept image | `uiElement` | 10–25 generations (
|
|
24
|
+
| One UI element from a description, 16px and up, optionally guided by a concept image | `uiElement` | 10–25 generations (a 32×32 call billed 10) | 1 image |
|
|
25
25
|
| A styled still on the Pro Flash model, or the south sprite a Pro Flash character will rotate | `imageProFlash` | 5–9 generations (PixelLab's provisional quote) | 1 image |
|
|
26
26
|
| An animated effect (spell, hit, explosion, aura), on its own or around a sprite | `vfx` | free from presets and parts; 1–28 when described to PixelLab's artist (lite measured at 1; plans at twice the quote) | one ordered frame set |
|
|
27
27
|
|
|
@@ -288,11 +288,13 @@ and regenerating the parent makes the child stale.
|
|
|
288
288
|
| portrait | portrait-character-pro | 10–25 by `size` (16px billed exactly 20 live, before the October 2026 cut) |
|
|
289
289
|
| outfit | transfer-outfit-v2 | 20 (a 2-frame, 92×92 job billed exactly this live; not yet measured at other frame counts or canvases) |
|
|
290
290
|
|
|
291
|
-
The
|
|
292
|
-
the job runs and reserved against the floor,
|
|
293
|
-
canvas lands in. `plan` prices a 64px state at
|
|
294
|
-
many pixels); one live 64px state in September
|
|
295
|
-
|
|
291
|
+
The 10–25 tiers are PixelLab's (20–40 before its October 2026 cut); the tier
|
|
292
|
+
is resolved from the canvas when the job runs and reserved against the floor,
|
|
293
|
+
so `plan` reports the tier the canvas lands in. `plan` prices a 64px state at
|
|
294
|
+
25 (the 1dir tier for that many pixels); one live 64px state in September
|
|
295
|
+
2026, before the cut, moved the balance by about 22 against the then 20–40
|
|
296
|
+
tiers, so there is no bill on the new list, and the estimate is read as high,
|
|
297
|
+
which is the safe side for a budget.
|
|
296
298
|
`poll` now reads what a job like this actually billed and records it
|
|
297
299
|
alongside the estimate as `billed`; `pixelkiln history`, `plan --json`, and
|
|
298
300
|
the gallery show both when they differ, though `gen`'s wave budget still
|
|
@@ -351,12 +353,13 @@ ignored, since none of them reach the API for an object.
|
|
|
351
353
|
restricted to the fields above (no `template`/`subject`, since neither
|
|
352
354
|
applies). See [Working with a cast](./CHARACTERS.md#working-with-a-cast).
|
|
353
355
|
|
|
354
|
-
**Cost is
|
|
355
|
-
`/create-object-pro-flash`/its state/its animation
|
|
356
|
+
**Cost: the base is measured, the rest is assumed.** `objectProCost()` prices
|
|
357
|
+
`/create-object-pro-flash`/its state/its animation identically to
|
|
356
358
|
`character`'s own measured pro-flash formula (`proFlashCharacterCost`),
|
|
357
|
-
since the request bodies are near-identical minus `template_id
|
|
358
|
-
|
|
359
|
-
|
|
359
|
+
since the request bodies are near-identical minus `template_id`. A 32px base
|
|
360
|
+
billed exactly 6 live (November 2026, Tier 3) and returned 8 files at 32×32,
|
|
361
|
+
matching the plan. The state route, the `pro` animation and other sizes
|
|
362
|
+
are still mock only; treat them as a working assumption.
|
|
360
363
|
|
|
361
364
|
Adoption (`pixelkiln adopt`) has not been extended for `objectPro`'s own
|
|
362
365
|
`<object id>#<animation group id>` remote-id scheme yet, unlike `character`'s
|
|
@@ -440,12 +443,13 @@ plain `revision` (image-to-image) of the base panel, which already carries
|
|
|
440
443
|
this for every other generator.
|
|
441
444
|
|
|
442
445
|
**Cost: confirmed live at one data point — 20 generations for a 256x192
|
|
443
|
-
canvas**, the low end of the `create_ui_asset` MCP tool's "20–40
|
|
444
|
-
generations" claim
|
|
445
|
-
formula as `1dir`/`tiles`, which
|
|
446
|
-
`uiAsset` size (its 192px floor is
|
|
447
|
-
|
|
448
|
-
price at an area well above
|
|
446
|
+
canvas**, the low end of the `create_ui_asset` MCP tool's then "20–40
|
|
447
|
+
generations" claim (before PixelLab's October 2026 cut to 10–25). PixelKiln
|
|
448
|
+
still estimates with the same canvas-tier formula as `1dir`/`tiles`, which
|
|
449
|
+
predicts the 25 ceiling for every valid `uiAsset` size (its 192px floor is
|
|
450
|
+
already past that formula's top tier) — the measured call proves the
|
|
451
|
+
formula wrong here, since it billed the floor price at an area well above
|
|
452
|
+
where `1dir`/`tiles` would bill the ceiling.
|
|
449
453
|
Left as an over-read for `--budget` until a second size is measured; see
|
|
450
454
|
[ENDPOINTS.md](./ENDPOINTS.md) for the full writeup.
|
|
451
455
|
|
|
@@ -529,15 +533,20 @@ to 16×16, which suits icons and small widgets:
|
|
|
529
533
|
- `uiColorPalette` is sent as `color_palette`, the same free-text hint
|
|
530
534
|
`uiAsset` takes. PixelLab removes the background by default; set
|
|
531
535
|
`noBackground: false` on the style to keep it.
|
|
532
|
-
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
**
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
536
|
+
- A small element returns many candidates (64 at 32×32, measured), which go
|
|
537
|
+
to candidate review like `imagePro`'s; a call that returns one image is
|
|
538
|
+
recorded straight away.
|
|
539
|
+
|
|
540
|
+
**Cost: measured once.** A 32×32 call billed 10 live (November 2026, Tier 3)
|
|
541
|
+
and the review page showed **64 candidates** at 32×32, which the plan said as
|
|
542
|
+
1 until it followed the `/generate-image-v2` size tiers (`uiElementCandidateCount`:
|
|
543
|
+
64 up to 32px, 49 at 33–35, 36 at 36–41, 25 at 42–50, 16 at 51–64, 9 at
|
|
544
|
+
65–84, 16 at 85, 4 at 86–170, 1 above). Only the 32px point is a bill; the
|
|
545
|
+
other bands are PixelLab's published grid. A size with more than one candidate
|
|
546
|
+
goes to review. The plan prices the canvas on the 10/15/25 tiers as
|
|
547
|
+
`1dir`/`tiles` do; other sizes are unbilled, and the completed job's shape
|
|
548
|
+
is still read defensively (`pollUiElement` names the keys it got if the shape
|
|
549
|
+
is not the documented `images` list).
|
|
541
550
|
|
|
542
551
|
## `vfx`
|
|
543
552
|
|
package/docs/PIXELLAB.md
CHANGED
|
@@ -77,9 +77,9 @@ unapproved files. See [Manifest quality profiles](./MANIFEST.md#quality-profiles
|
|
|
77
77
|
| `imageProFlash` | You need a still on the Pro Flash model, optionally styled from one image, 16 to 256px | 5 to 9 generations (provisional quote) |
|
|
78
78
|
| `vfx` | You need an animated effect (spell, hit, explosion, aura), on its own or around a sprite | free from presets and parts; 1 to 28 when described to PixelLab's artist (lite measured at 1) |
|
|
79
79
|
| `character` | You need a character in 4 or 8 directions, with states, loops, portraits, or outfits | See [Characters](./CHARACTERS.md) |
|
|
80
|
-
| `objectPro` | You need a prop or creature with rotations, states, or loops but no character rig |
|
|
80
|
+
| `objectPro` | You need a prop or creature with rotations, states, or loops but no character rig | 6 per base (measured at 32px) |
|
|
81
81
|
| `uiAsset` | You need a UI panel composited from pieces and named elements, 192px and up | 20 generations (measured once) |
|
|
82
|
-
| `uiElement` | You need one UI element from a description, 16px and up | 10 to 25 generations (
|
|
82
|
+
| `uiElement` | You need one UI element from a description, 16px and up | 10 to 25 generations (a 32×32 call billed 10) |
|
|
83
83
|
|
|
84
84
|
`map` accepts these values:
|
|
85
85
|
|
package/docs/REVISIONS.md
CHANGED
|
@@ -400,17 +400,20 @@ review** first (`pixelkiln pick`), not straight to downloadable output; there
|
|
|
400
400
|
is no per-candidate choice to make (it is one ordered set, previewed as a
|
|
401
401
|
loop), just accept or reject the whole thing.
|
|
402
402
|
|
|
403
|
-
**
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
`estimate()` borrows `character`'s own measured v3-loop formula
|
|
403
|
+
**Both endpoints ran live in November 2026 (Tier 3), and every completed job
|
|
404
|
+
was read correctly.** A 64×64 `animate` of 4 frames billed 1 and returned 5
|
|
405
|
+
frames at 64×64; a 64×64 `animate-pixminimax` billed 1 at 8 frames (9 frames
|
|
406
|
+
back) and 2 at 16 frames (17 back). PixelLab includes the input frame in the
|
|
407
|
+
set, so a set holds the requested count plus one. `pollAnimateRevision` still
|
|
408
|
+
checks several plausible field names defensively rather than assume one.
|
|
409
|
+
Cost: `animate` borrows `character`'s measured v3-loop formula
|
|
411
410
|
(`ceil(width × height × frames / 65536)`, since the request shapes are
|
|
412
|
-
near-identical)
|
|
413
|
-
|
|
411
|
+
near-identical), which matched the one bill; `animate-pixminimax` follows
|
|
412
|
+
PixelLab's published table (64×64 at 4 / 8 / 16 / 40 frames costs 1 / 1 / 2 /
|
|
413
|
+
6), because that formula read the 16-frame clip as 1 against a bill of 2 (see
|
|
414
|
+
`pixMiniMaxCost`; 40 frames is the published number, not a bill). Both add
|
|
415
|
+
`enhancePrompt`'s documented +0.05-generation surcharge. Other sizes and
|
|
416
|
+
frame counts are unbilled.
|
|
414
417
|
|
|
415
418
|
### Interpolate between two keyframes
|
|
416
419
|
|
|
@@ -468,10 +471,12 @@ time.
|
|
|
468
471
|
|
|
469
472
|
`interpolate` and `edit-animation` land in candidate review like `animate`,
|
|
470
473
|
take `fps` (defaulting to the parent's own rate when it has one, else 8), and
|
|
471
|
-
reject `strength`.
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
474
|
+
reject `strength`. Both ran live in November 2026 (Tier 3) and the completed
|
|
475
|
+
job was read correctly by the same frame-list lookup `animate` uses: a 64×64
|
|
476
|
+
`interpolate` with a `lastFrame` keyframe billed 10 and returned 14 frames at
|
|
477
|
+
64×64, and an `edit-animation` of a 9-frame 64×64 set billed 10. The plan
|
|
478
|
+
now prices them at those 10 (it used to read 25). Larger canvases are
|
|
479
|
+
unbilled (see [PixelLab](#pixellab) below).
|
|
475
480
|
|
|
476
481
|
ComfyUI supports none of the four frame-set modes: its revision path always
|
|
477
482
|
writes a single output image, and an animation is a frame set — a structural
|
|
@@ -698,25 +703,24 @@ further — there is nothing to ask.
|
|
|
698
703
|
image; a whole member set is still one call, but whether its price stays
|
|
699
704
|
flat is unmeasured.
|
|
700
705
|
- `interpolate` (`/interpolation-v2`) and `edit-animation`
|
|
701
|
-
(`/edit-animation-v2`) are
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
706
|
+
(`/edit-animation-v2`) are "Pro" endpoints and bill on the 10/15/25 canvas
|
|
707
|
+
ladder (`proTierCost`: 10 up to 65536px², 15 up to 102400px², 25 above).
|
|
708
|
+
`estimate()` sizes the canvas on the keyframe for `interpolate` and on the
|
|
709
|
+
packed frame grid for `edit-animation` (nine 64×64 frames pack into
|
|
710
|
+
192×192). Measured live in November 2026: a 64×64 `interpolate` and a
|
|
711
|
+
9-frame 64×64 `edit-animation` each billed 10, where the plan used to say
|
|
712
|
+
25. Larger canvases are unbilled and follow the same ladder; over-reading
|
|
713
|
+
is the safe direction for `--budget`.
|
|
708
714
|
- `animate` calls `/animate-with-text-v3`, `animate-pixminimax` calls
|
|
709
715
|
`/animate-pixminimax` — both real async background jobs, unlike the two
|
|
710
716
|
Cleanup-tier modes above, since they generate new frames rather than
|
|
711
717
|
transform the source. Both take at most 256 pixels per side; `animate`
|
|
712
718
|
additionally caps at 16 frames (`animate-pixminimax` allows up to 40). See
|
|
713
719
|
[Animation and interpolation](#animation-and-interpolation) above for the
|
|
714
|
-
full field list, the frame-set output shape, and
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
observed call. Treat the exact field names as provisional until a real
|
|
719
|
-
call confirms them.
|
|
720
|
+
full field list, the frame-set output shape, and the live bills: both ran
|
|
721
|
+
live in November 2026 (64×64 `animate` at 4 frames billed 1; `animate-pixminimax`
|
|
722
|
+
at 8 and 16 frames billed 1 and 2), and the completed jobs were read
|
|
723
|
+
correctly.
|
|
720
724
|
- `animate-skeleton` calls `/animate-with-skeleton-v3`, also a real async
|
|
721
725
|
background job, at most 256 pixels per side and 3-15 frames (the frame
|
|
722
726
|
count comes from `keypointsFile`, not a manifest field). See
|
package/package.json
CHANGED
|
@@ -46,7 +46,8 @@ Two engine-specific data points worth the same treatment:
|
|
|
46
46
|
pro engine at the same canvas ("even at 256×256, we can generate eight
|
|
47
47
|
animation frames, which we didn't have before even with the pro tools") —
|
|
48
48
|
consistent with pixelkiln's documented `character` cost model, where v3
|
|
49
|
-
scales `ceil(size²×8/65536)` and pro sits in the flat 20–40
|
|
49
|
+
scales `ceil(size²×8/65536)` and pro sits in the flat 10–25 tier regardless (20–40 before PixelLab's
|
|
50
|
+
October 2026 cut).
|
|
50
51
|
Prefer v3 over pro for a loop unless pro's quality is specifically needed.
|
|
51
52
|
- `portrait-character-pro` (not part of this adapter) renders sizes 128 and
|
|
52
53
|
160 at "2K" internal resolution versus "1K" for 16–64, at a measured cost
|
|
@@ -153,11 +153,11 @@ and which tutorial(s) demonstrated real (not hypothetical) demand for it.
|
|
|
153
153
|
rotation, states, or animation for a plain object. Closed by the
|
|
154
154
|
`objectPro` generator; see `pixellab.md`. It reuses `character`'s own
|
|
155
155
|
`asset.state`/`asset.animation` authoring shapes and mirror handling
|
|
156
|
-
rather than inventing parallel ones. **
|
|
157
|
-
|
|
158
|
-
formula,
|
|
159
|
-
|
|
160
|
-
|
|
156
|
+
rather than inventing parallel ones. **The base is measured**: a 32px
|
|
157
|
+
base billed 6 and returned 8 files (November 2026), matching `character`
|
|
158
|
+
pro-flash's formula, which the estimate assumes since the request bodies
|
|
159
|
+
are near-identical minus `template_id`. States and `pro` animations remain
|
|
160
|
+
that assumption pending a live check. Batch "pack" generation (N distinct objects from
|
|
161
161
|
one call) is covered on `1dir` by its `batch` field — see below.
|
|
162
162
|
- **Pixel correction** (`/correct-pixelart`, a dedicated cleanup pass distinct
|
|
163
163
|
from `image-to-pixelart` — the latter is documented, docs/ENDPOINTS.md, as
|
|
@@ -209,17 +209,21 @@ and which tutorial(s) demonstrated real (not hypothetical) demand for it.
|
|
|
209
209
|
`pixellab.md`. `lastFrame` covers both the "pin an ending pose" and the
|
|
210
210
|
"chain from a prior animation's final frame" cases — it is just a
|
|
211
211
|
manifest-relative image, which can be any earlier asset's own generated
|
|
212
|
-
output file. **
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
`
|
|
212
|
+
output file. **Both ran live in November 2026**: `animate` at 64×64 and 4 frames
|
|
213
|
+
billed 1 (5 frames back, input included), `animate-pixminimax` billed 1 at 8
|
|
214
|
+
frames and 2 at 16 (9 and 17 frames back), and the completed jobs were read
|
|
215
|
+
correctly. `animate`'s cost borrows `character`'s measured v3-loop formula;
|
|
216
|
+
`animate-pixminimax` follows PixelLab's published table. The frame list is
|
|
217
|
+
still extracted defensively from several plausible field names. The dedicated
|
|
217
218
|
**Interpolate** endpoint (`/interpolation-v2`, a separate "Pro" two-keyframe
|
|
218
219
|
tool distinct from `last_frame` pinning on the animate endpoints above) is
|
|
219
220
|
now wrapped too, as the `interpolate` revision mode (parent = start
|
|
220
221
|
keyframe, required `lastFrame` = end keyframe), alongside
|
|
221
222
|
`/edit-animation-v2` as `edit-animation` (one text edit across a whole
|
|
222
|
-
frame set). Both
|
|
223
|
+
frame set). Both ran live in November 2026 and billed 10 each (a 64×64
|
|
224
|
+
`interpolate` returning 14 frames; an `edit-animation` of a 9-frame 64×64
|
|
225
|
+
set), on the 10/15/25 Pro canvas tiers; the planner used to read them as 25
|
|
226
|
+
and is calibrated. Larger canvases are unbilled.
|
|
223
227
|
Real demonstrated demand for Interpolate: "Level Up Your Game: Custom
|
|
224
228
|
Sprite Animation Tutorial" used it
|
|
225
229
|
repeatedly, in Aseprite via PixelLab's own extension, as the fix for an
|
|
@@ -284,7 +288,8 @@ and which tutorial(s) demonstrated real (not hypothetical) demand for it.
|
|
|
284
288
|
`/generate-ui-v2` ("Generate UI (Pro)": one element from a description,
|
|
285
289
|
16px and up, with an optional concept image and palette hint), found on a
|
|
286
290
|
later full read of the path list and now wrapped as the `uiElement`
|
|
287
|
-
generator; see `docs/GENERATORS.md#uielement`.
|
|
291
|
+
generator; see `docs/GENERATORS.md#uielement`. A 32×32 call billed 10 and
|
|
292
|
+
returned 64 candidates (November 2026). **Splitting into individual elements and
|
|
288
293
|
nine-slice are not buildable at all**: `GET /ui-assets/{id}` returns one
|
|
289
294
|
flat composited image with no per-piece sub-image or bounding-box data in
|
|
290
295
|
its response schema, regardless of how many `pieces` the request declared.
|
|
@@ -303,10 +308,11 @@ and which tutorial(s) demonstrated real (not hypothetical) demand for it.
|
|
|
303
308
|
this one. **Cost confirmed live, and it overturned the borrowed
|
|
304
309
|
formula**: a real 256x192 call against a Tier 2 account billed exactly 20
|
|
305
310
|
generations (balance 4979.8 → 4959.8), the low end of the `create_ui_asset`
|
|
306
|
-
MCP tool description's "20-40 generations" claim
|
|
311
|
+
MCP tool description's then "20-40 generations" claim (10-25 since the
|
|
312
|
+
October 2026 cut). No dedicated cost branch
|
|
307
313
|
exists, so `uiAsset` still falls through to the same canvas-tier formula
|
|
308
314
|
`1dir`/`tiles` use, which — given this generator's 192px floor — always
|
|
309
|
-
predicts the
|
|
315
|
+
predicts the 25 ceiling; the measured call billed the floor price at an
|
|
310
316
|
area well past where that formula would bill the ceiling, so it does not
|
|
311
317
|
actually describe `uiAsset`'s pricing. Left unpatched from one data point:
|
|
312
318
|
over-reading stays the safe `--budget` direction, but a real call likely
|
|
@@ -542,15 +548,17 @@ missing:
|
|
|
542
548
|
- **Trimming a loop's repeated frame.** The video deletes the last frame of
|
|
543
549
|
a fireball loop because it repeats the first. `animate_image_pixminimax`
|
|
544
550
|
says `get_image` returns `frame_count + 1` images with index 0 the input
|
|
545
|
-
unchanged.
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
551
|
+
unchanged. Confirmed live (November 2026): an 8-frame clip came back as 9
|
|
552
|
+
frames and a 16-frame clip as 17, with pixelkiln's frame extraction reading
|
|
553
|
+
all of them, so the input frame is in the set. There is no manifest way to
|
|
554
|
+
drop a frame.
|
|
555
|
+
- **The cost estimate used to under-read long clips (fixed).** The MCP tool
|
|
556
|
+
prices PixMiniMax by generation time: 64×64 at 4, 8, 16, and 40 frames costs
|
|
557
|
+
1, 1, 2, and 6 generations. pixelkiln's old placeholder,
|
|
558
|
+
`ceil(width × height × frames / 65536)`, gave 1, 1, 1, and 3, and a live
|
|
559
|
+
16-frame clip billed 2 against a plan of 1. The estimate (`pixMiniMaxCost`)
|
|
560
|
+
now follows the published points and extrapolates above them; the 40-frame
|
|
561
|
+
point has not been billed.
|
|
554
562
|
- **Joining two clips.** The video joins two orb animations end to end in
|
|
555
563
|
Aseprite. pixelkiln has no frame-set concatenation; `lastFrame` can pin a
|
|
556
564
|
clip's ending to another clip's frame file, but the two sets stay separate.
|
|
@@ -26,11 +26,11 @@ providers, or before any PixelLab account operation.
|
|
|
26
26
|
| `tiles` | Ground variations or connected structures | 10–25 generations |
|
|
27
27
|
| `terrain` | A two-terrain Wang tileset for elevation (grass-to-water, floor-to-cliff), or a sidescroller platform set | Sidescroller **3**, measured. Pro **15** at 32px, measured (a connected second set also billed 15). Pro **25** at 64px and standard **3** measured too; standard plans at 4, the top of PixelLab's quoted 1–4 |
|
|
28
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
|
-
| `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`),
|
|
30
|
-
| `objectPro` | A prop, creature, or vehicle that needs rotations, states, or loops but has no character rig | 6 per base at
|
|
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`), 10–25 per pose or portrait (20–40 before the October 2026 cut), 1 per template loop per direction (2–4 as `skeleton-v3`), 20 per outfit (measured once, before the cut) |
|
|
30
|
+
| `objectPro` | A prop, creature, or vehicle that needs rotations, states, or loops but has no character rig | 6 per base (billed 6 at 32px, November 2026; 1 from a `reference`, unmeasured); states and animations 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
|
-
| `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
|
|
33
|
-
| `uiElement` | One UI element (button, slot, bar, dialogue box) from the prompt, 16px and up, with an optional concept image | 10–25 generations
|
|
32
|
+
| `uiAsset` | A UI panel, button, health bar, or other chrome, from precise `pieces` and/or named `elements` | **20 generations, measured once** (256×192, before the October 2026 cut); the borrowed canvas-tier estimate still predicts the 25 ceiling |
|
|
33
|
+
| `uiElement` | One UI element (button, slot, bar, dialogue box) from the prompt, 16px and up, with an optional concept image | 10–25 generations (a 32×32 call billed 10; 64 candidates at 32×32) |
|
|
34
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) |
|
|
35
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 |
|
|
36
36
|
|
|
@@ -243,11 +243,12 @@ target `south` — passing any other direction, or `directions` at all to the
|
|
|
243
243
|
API for a 1-direction object, is what the endpoint itself 400s on.
|
|
244
244
|
Regenerating an already-animated direction is simpler than `character`'s
|
|
245
245
|
own "find and delete the prior take" dance: `/objects/{id}/animations` has
|
|
246
|
-
its own `replace_existing` flag, which PixelKiln always passes. **Cost
|
|
247
|
-
|
|
248
|
-
identically to `character` pro-flash's own
|
|
249
|
-
(`proFlashCharacterCost`), since the request bodies are
|
|
250
|
-
`template_id
|
|
246
|
+
its own `replace_existing` flag, which PixelKiln always passes. **Cost: the
|
|
247
|
+
base is measured** (32px billed 6 and returned 8 files, November 2026) —
|
|
248
|
+
`objectProCost()` prices it identically to `character` pro-flash's own
|
|
249
|
+
measured formula (`proFlashCharacterCost`), since the request bodies are
|
|
250
|
+
near-identical minus `template_id`. States and `pro` animations are still
|
|
251
|
+
that assumption, pending a live check.
|
|
251
252
|
`objectPro`'s own place in `pixelkiln adopt` is not modeled yet. (N distinct
|
|
252
253
|
objects from one call, PixelLab's Object Creator "pack", is the `1dir`
|
|
253
254
|
`batch` field above.) `pixelkiln gallery --edit` offers "+ New state" and
|
|
@@ -317,10 +318,11 @@ dedicated "state" mechanism — it is a plain `revision` (image-to-image) of
|
|
|
317
318
|
the base panel, the same mechanism every other generator already has.
|
|
318
319
|
**Cost: confirmed live at one data point.** A real 256×192 call against a
|
|
319
320
|
Tier 2 account billed exactly 20 generations (balance 4979.8 → 4959.8),
|
|
320
|
-
matching the low end of the `create_ui_asset` MCP tool's "20–40
|
|
321
|
-
claim
|
|
322
|
-
|
|
323
|
-
|
|
321
|
+
matching the low end of the `create_ui_asset` MCP tool's then "20–40
|
|
322
|
+
generations" claim (PixelLab cut it to 10–25 in October 2026). No dedicated
|
|
323
|
+
cost branch exists, so pixelkiln still estimates it with the same
|
|
324
|
+
canvas-tier formula `1dir`/`tiles` use — which predicts the 25 ceiling
|
|
325
|
+
for every valid `uiAsset` size, since the 192px floor already clears
|
|
324
326
|
that formula's own top tier. The measured call disproves the formula for
|
|
325
327
|
this generator (it billed the floor price at an area where `1dir`/`tiles`
|
|
326
328
|
would bill the ceiling), but the estimate is left as-is, an intentional
|
|
@@ -331,9 +333,10 @@ the prompt, no `pieces`/`elements` layout, sizes from 16×16 (up to 792 wide,
|
|
|
331
333
|
688 tall, aspect-gated upstream). A style's one `styleImages` entry becomes
|
|
332
334
|
the `concept_image` (design guidance); `uiColorPalette` is sent as
|
|
333
335
|
`color_palette`. Reach for it over `uiAsset` for icons, slots, and small
|
|
334
|
-
widgets under `uiAsset`'s 192px floor.
|
|
335
|
-
|
|
336
|
-
|
|
336
|
+
widgets under `uiAsset`'s 192px floor. A 32×32 call billed 10 and returned
|
|
337
|
+
64 candidates (November 2026); the plan borrows the 10/15/25 canvas tiers and
|
|
338
|
+
counts candidates by size (`uiElementCandidateCount`), and sizes other than
|
|
339
|
+
32px are unbilled.
|
|
337
340
|
|
|
338
341
|
`imageProFlash` wraps `/create-image-pro-flash`, the Pro Flash model as a plain
|
|
339
342
|
still: priced 5 up to 96px, 6 up to 208px, 9 beyond (PixelLab's own
|