pixelkiln 0.89.6 → 0.90.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/dist/cli.js +53 -16
- package/dist/cli.js.map +1 -1
- package/dist/client/gallery.css +1 -0
- package/dist/client/gallery.js +54 -17
- package/dist/index.cjs +53 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +36 -13
- package/dist/index.d.ts +36 -13
- package/dist/index.js +53 -16
- package/dist/index.js.map +1 -1
- package/docs/CHARACTERS.md +43 -3
- package/docs/ENDPOINTS.md +5 -1
- package/docs/MANIFEST.md +2 -2
- package/docs/REVISIONS.md +8 -5
- package/package.json +1 -1
- package/schema/manifest.schema.json +1 -1
- package/skills/pixelkiln/references/pixellab-roadmap.md +17 -13
- package/skills/pixelkiln/references/pixellab.md +8 -0
package/docs/CHARACTERS.md
CHANGED
|
@@ -222,6 +222,45 @@ single direction before a batch.
|
|
|
222
222
|
"mira.walk": { "animation": { "of": "mira", "template": "walk", "mode": "skeleton-v3", "directions": ["south", "west", "north"] } }
|
|
223
223
|
```
|
|
224
224
|
|
|
225
|
+
### Loops from a sentence
|
|
226
|
+
|
|
227
|
+
`mode: "skeleton-v3"` with **no `template`** animates the asset's `prompt`
|
|
228
|
+
instead: PixelLab writes the sentence into one 3D motion and draws the
|
|
229
|
+
character from it, with no template to pick. `frames` takes PixelLab's own
|
|
230
|
+
3 to 15 for this combination (odd counts included, default 8); a template
|
|
231
|
+
`skeleton-v3` loop still takes none.
|
|
232
|
+
|
|
233
|
+
```jsonc
|
|
234
|
+
"mira.swing": {
|
|
235
|
+
"prompt": "swinging a sword in a wide arc",
|
|
236
|
+
"animation": { "of": "mira", "mode": "skeleton-v3", "frames": 8, "directions": ["south", "west"] }
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
- **A v3 base is required.** The sentence is written onto the character's
|
|
241
|
+
stored 3D skeleton, which a `standard` base lacks, so `plan` and `validate`
|
|
242
|
+
refuse the pairing and name the engine. `pro` and `pro-flash` bases are
|
|
243
|
+
not refused but are unverified. An `objectPro` has no skeleton at all.
|
|
244
|
+
- **The prompt is the sentence**, sent as written as `action_description`
|
|
245
|
+
(a loop's prompt never takes the style's prefix or suffix, same as a v3
|
|
246
|
+
loop). It is required; `startFrame`, `endFrame`, `enhancePrompt`,
|
|
247
|
+
`subject`, and the template style hints are refused.
|
|
248
|
+
- **The canvas can grow.** The measured 64px loop came back at 96×96. The
|
|
249
|
+
frames are saved as PixelLab returns them; a mirror flips them locally like
|
|
250
|
+
any other loop.
|
|
251
|
+
- **Cost**: the plan budgets 4 per direction, the same ceiling as a template
|
|
252
|
+
`skeleton-v3` loop. Measured live on a v3 character: 8 frames at 64px billed
|
|
253
|
+
exactly 3 generations for one direction, about 15 seconds before the jobs
|
|
254
|
+
start. `billed` in the lock records the real amount.
|
|
255
|
+
- **Directions do not share one motion yet.** PixelLab draws every direction
|
|
256
|
+
of a request from one 3D motion, and `animation_group_id` appends a
|
|
257
|
+
direction to an existing animation so it moves the same way. pixelkiln
|
|
258
|
+
makes one request per direction asset (including each direction of
|
|
259
|
+
`directions`), so each direction's motion is written from the sentence
|
|
260
|
+
separately and may differ a little. Appending to a recorded group is not
|
|
261
|
+
wired up; the lock keeps each direction's `animationGroupId` for when it is.
|
|
262
|
+
Verified live is a single south direction only.
|
|
263
|
+
|
|
225
264
|
### Pose frames and other loop controls
|
|
226
265
|
|
|
227
266
|
A v3 loop can start and end where you say. `startFrame` is a
|
|
@@ -489,11 +528,12 @@ reference image change alone also makes it stale.
|
|
|
489
528
|
style (engine, size, directions, body, view, folder) or an existing one,
|
|
490
529
|
the base with an optional sprite of your own (uploaded into `refs/`, so
|
|
491
530
|
only the rotations are billed), any number of loops (each a template
|
|
492
|
-
posed by `skeleton-v3` by default,
|
|
531
|
+
posed by `skeleton-v3` by default, a `skeleton-v3` loop described in words
|
|
532
|
+
with a 3 to 15 frame count, or a plain template, v3, or pro loop,
|
|
493
533
|
in the directions you tick, mirrors added free), and a portrait. A
|
|
494
534
|
`standard` base has no 3D skeleton for `skeleton-v3` to pose, so its loops
|
|
495
|
-
start on `template` and
|
|
496
|
-
form on an existing base does the same. The
|
|
535
|
+
start on `template` and both skeleton-v3 choices are greyed out; the
|
|
536
|
+
new-loop form on an existing base does the same. The
|
|
497
537
|
sheet prices the draft live, the way `plan` would. Pro Flash bases are
|
|
498
538
|
priced by PixelLab's own quote (`/pro-flash/cost`, a free call) when the
|
|
499
539
|
project has a key; those rows are marked live, and the offline estimate
|
package/docs/ENDPOINTS.md
CHANGED
|
@@ -920,7 +920,11 @@ generations and finished in about two minutes:
|
|
|
920
920
|
the top-level amount is a dollar zero. PixelLab says the action is written
|
|
921
921
|
into one 3D motion that every direction is drawn from, so later directions
|
|
922
922
|
added with `animation_group_id` move the same way (humanoids). pixelkiln
|
|
923
|
-
|
|
923
|
+
sends this mode for a character loop with `mode: "skeleton-v3"`, a prompt,
|
|
924
|
+
and no template (docs/CHARACTERS.md, "Loops from a sentence"), one request
|
|
925
|
+
per direction asset and without `animation_group_id`. Verified live with
|
|
926
|
+
one south direction on a v3 character; a standard-engine character is
|
|
927
|
+
refused (`has no stored 3D skeleton`).
|
|
924
928
|
|
|
925
929
|
## Characters, measured
|
|
926
930
|
|
package/docs/MANIFEST.md
CHANGED
|
@@ -56,7 +56,7 @@ not merely a label edit.
|
|
|
56
56
|
|
|
57
57
|
| Field | Type/default | Meaning |
|
|
58
58
|
|---|---|---|
|
|
59
|
-
| `prompt` | string, 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 or
|
|
59
|
+
| `prompt` | string, 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. |
|
|
60
60
|
| `width` / `height` | integer 16–8192 | Per-asset dimensions for generators that accept rectangular output. Provider limits may be lower. |
|
|
61
61
|
| `size` | integer 16–8192 | Per-asset square size where the generator uses one dimension. |
|
|
62
62
|
| `file` | string | Output path below the style's `outDir`; defaults to `<category>/<assetId>.png`. |
|
|
@@ -66,7 +66,7 @@ not merely a label edit.
|
|
|
66
66
|
| `remoteId` | string | The 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. |
|
|
67
67
|
| `revision` | object | Controlled 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](REVISIONS.md). |
|
|
68
68
|
| `state` | object | `character` styles: a pose or outfit of another character asset. See [Characters](./CHARACTERS.md). |
|
|
69
|
-
| `animation` | object | `character` 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](./CHARACTERS.md#one-loop-several-directions). |
|
|
69
|
+
| `animation` | object | `character` 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](./CHARACTERS.md#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](./CHARACTERS.md#loops-from-a-sentence). |
|
|
70
70
|
| `portrait` | object | `character` 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](./CHARACTERS.md#portraits). |
|
|
71
71
|
| `outfit` | object | `character` styles: an existing loop's frames re-clothed from an outfit image, `{ "of": "<loop asset>", "reference": "<image>" }`, with optional `additionalInstructions`. See [Outfit transfer](./CHARACTERS.md#outfit-transfer). |
|
|
72
72
|
| `mirror` | string | Another asset of the same style flipped left to right, made locally at no cost. See [Mirrors](./CHARACTERS.md#mirrors). |
|
package/docs/REVISIONS.md
CHANGED
|
@@ -492,7 +492,8 @@ a supplied 18-joint skeleton per frame instead of a text motion description:
|
|
|
492
492
|
"mode": "animate-skeleton",
|
|
493
493
|
"from": "hero-idle",
|
|
494
494
|
"keypointsFile": "poses/hero-swing.json",
|
|
495
|
-
"direction": "south"
|
|
495
|
+
"direction": "south",
|
|
496
|
+
"description": "a knight in steel armour holding a sword"
|
|
496
497
|
}
|
|
497
498
|
}
|
|
498
499
|
}
|
|
@@ -522,8 +523,8 @@ over the source image, locally and for free.
|
|
|
522
523
|
`direction` is **required** for this mode (unlike `animate-pixminimax`,
|
|
523
524
|
where it is optional). `frames`/`fps`/`lastFrame`/`enhancePrompt` are all
|
|
524
525
|
rejected — the frame count comes from the keypoints file itself
|
|
525
|
-
(`frames.length`), never a manifest number. `description` (
|
|
526
|
-
character *looks like* — colours, clothing, held items) is a new field
|
|
526
|
+
(`frames.length`), never a manifest number. `description` (**required**: what
|
|
527
|
+
the character *looks like* — colours, clothing, held items) is a new field
|
|
527
528
|
distinct from the asset's own `prompt`, which this mode sends as the motion's
|
|
528
529
|
short label (PixelLab's `action`) — the same `prompt`-as-motion convention
|
|
529
530
|
`animate`/`animate-pixminimax` already use, just under this endpoint's own
|
|
@@ -560,8 +561,10 @@ anchor, and returned 8 frames at the sprite's own 64×64 size. The endpoint
|
|
|
560
561
|
**requires both `description` and `action`**: the asset's `prompt` is sent as
|
|
561
562
|
`action` (a short motion label such as "wave"), and `revision.description`
|
|
562
563
|
(what the character looks like) is sent as `description`. Without a
|
|
563
|
-
`description` PixelLab answers `422` with `description: Field required`,
|
|
564
|
-
|
|
564
|
+
`description` PixelLab answers `422` with `description: Field required`, so
|
|
565
|
+
`plan` refuses an `animate-skeleton` revision without a non-empty
|
|
566
|
+
`revision.description` (or an empty `prompt`) and the gallery's form asks for
|
|
567
|
+
one.
|
|
565
568
|
|
|
566
569
|
ComfyUI does not support this mode either, for the same structural reason as
|
|
567
570
|
`animate`/`animate-pixminimax`.
|
package/package.json
CHANGED
|
@@ -31,6 +31,13 @@ and which tutorial(s) demonstrated real (not hypothetical) demand for it.
|
|
|
31
31
|
|
|
32
32
|
## Already closed since this catalog's research began
|
|
33
33
|
|
|
34
|
+
- **Sentence-driven skeleton-v3 loops** — a character loop with
|
|
35
|
+
`mode: "skeleton-v3"`, no `template`, and a `prompt` animates the sentence
|
|
36
|
+
on `/characters/animations` (`action_description`, 3 to 15 `frames`). Billed
|
|
37
|
+
exactly 3 generations for 8 frames at 64px, frames back at 96×96; the plan
|
|
38
|
+
budgets 4. See `docs/CHARACTERS.md`, "Loops from a sentence". Shared motion
|
|
39
|
+
across directions is not wired up (one request per direction asset).
|
|
40
|
+
|
|
34
41
|
- **Skeleton-v3 template loops** — `/characters/animations`'
|
|
35
42
|
`mode: "skeleton-v3"` poses a template with the skeleton video model
|
|
36
43
|
(2 to 4 generations and 3 to 5 minutes per direction, beta, Tier 1 and
|
|
@@ -299,7 +306,7 @@ and which tutorial(s) demonstrated real (not hypothetical) demand for it.
|
|
|
299
306
|
`resolveSpecs`/`estimate()`-time call — so `animate-skeleton`'s submission
|
|
300
307
|
composes exactly one PixelLab endpoint, not two chained together. Both
|
|
301
308
|
endpoints have since run live once (8 frames billed exactly 3), and the
|
|
302
|
-
run found that `description` is required
|
|
309
|
+
run found that `description` is required, which `plan` now enforces. **Correcting this catalog's own prior research**: this entry
|
|
303
310
|
used to also claim a distinct "animation to animation" endpoint existed,
|
|
304
311
|
for transferring an existing walk cycle's motion onto a different
|
|
305
312
|
character. Checked against the live `animate_with_skeleton_v3` MCP tool
|
|
@@ -517,19 +524,16 @@ missing:
|
|
|
517
524
|
Aseprite. pixelkiln has no frame-set concatenation; `lastFrame` can pin a
|
|
518
525
|
clip's ending to another clip's frame file, but the two sets stay separate.
|
|
519
526
|
|
|
520
|
-
## Sentence-driven skeleton-v3 loops
|
|
527
|
+
## Sentence-driven skeleton-v3 loops, shared motion across directions
|
|
521
528
|
|
|
522
|
-
PixelLab's
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
and the request never sends `action_description` for it. Closing it means a
|
|
531
|
-
loop that names `skeleton-v3` and a `prompt` without a template, a
|
|
532
|
-
`frames` count from 3 to 15, and adding a direction to an existing group.
|
|
529
|
+
PixelLab's sentence loops (`mode: "skeleton-v3"`, no template) are supported;
|
|
530
|
+
see "Already closed". What is still open: every direction of one request is
|
|
531
|
+
drawn from one 3D motion, and `animation_group_id` appends a direction to an
|
|
532
|
+
existing animation so it moves the same way. pixelkiln makes one request per
|
|
533
|
+
direction asset and never sends the group id, so each direction's motion is
|
|
534
|
+
written separately. Closing it means linking the direction assets of a
|
|
535
|
+
`directions` loop to one group (a batch like `1dir`'s, or the recorded
|
|
536
|
+
`animationGroupId` of a sibling) and passing it on the later requests.
|
|
533
537
|
|
|
534
538
|
## Map Workshop (scene composition)
|
|
535
539
|
|
|
@@ -394,6 +394,14 @@ stored 3D skeleton: a `v3` base has one (measured, 3 generations); a
|
|
|
394
394
|
refuses the loop at `plan`/`validate`, pointing at `mode: "template"`. `pro`
|
|
395
395
|
and `pro-flash` bases are not refused but are unverified.
|
|
396
396
|
|
|
397
|
+
`"mode": "skeleton-v3"` with **no** `template` animates the asset's `prompt`
|
|
398
|
+
as a sentence (`frames` 3 to 15, default 8; a v3 base): PixelLab writes it
|
|
399
|
+
into one 3D motion. Measured: 8 frames at 64px billed exactly 3 generations
|
|
400
|
+
and came back at 96×96, so the canvas can grow. The plan still budgets 4. One
|
|
401
|
+
request goes out per direction asset, so directions are not drawn from one
|
|
402
|
+
shared motion yet (docs/CHARACTERS.md, "Loops from a sentence"). The
|
|
403
|
+
`prompt` is required and gets no style prefix or suffix.
|
|
404
|
+
|
|
397
405
|
A named `template` loop (`walk`, `breathing-idle`, and similar) is trained
|
|
398
406
|
mostly on characters with empty hands, and reliably struggles once a
|
|
399
407
|
character holds an item — a weapon, a tool, anything gripped. For a
|