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/dist/index.d.cts
CHANGED
|
@@ -1358,7 +1358,10 @@ declare const CharacterAnimationSchema$1: z.ZodEffects<z.ZodObject<{
|
|
|
1358
1358
|
* `src/loop-directions.ts`.
|
|
1359
1359
|
*/
|
|
1360
1360
|
directions: z.ZodOptional<z.ZodArray<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>, "many">>;
|
|
1361
|
-
/**
|
|
1361
|
+
/**
|
|
1362
|
+
* Frames to generate without a template. A v3 loop takes an even 4 to 16;
|
|
1363
|
+
* a sentence loop (`mode: "skeleton-v3"` with no `template`) takes 3 to 15.
|
|
1364
|
+
*/
|
|
1362
1365
|
frames: z.ZodOptional<z.ZodNumber>;
|
|
1363
1366
|
/** Playback rate recorded with the frames; PixelLab does not store one. */
|
|
1364
1367
|
fps: z.ZodDefault<z.ZodNumber>;
|
|
@@ -1366,8 +1369,10 @@ declare const CharacterAnimationSchema$1: z.ZodEffects<z.ZodObject<{
|
|
|
1366
1369
|
keepFirstFrame: z.ZodDefault<z.ZodBoolean>;
|
|
1367
1370
|
/**
|
|
1368
1371
|
* `template` when a template is named, otherwise `v3`; `skeleton-v3`
|
|
1369
|
-
* poses a template with PixelLab's skeleton model instead
|
|
1370
|
-
*
|
|
1372
|
+
* poses a template with PixelLab's skeleton model instead, or, with no
|
|
1373
|
+
* template, animates the asset's prompt as a sentence written into one 3D
|
|
1374
|
+
* motion (a v3 base; 3-15 `frames`); `pro` for the sequential
|
|
1375
|
+
* high-quality engine.
|
|
1371
1376
|
*/
|
|
1372
1377
|
mode: z.ZodOptional<z.ZodEnum<["template", "skeleton-v3", "v3", "pro"]>>;
|
|
1373
1378
|
/**
|
|
@@ -4800,7 +4805,10 @@ declare const AssetSchema: z.ZodEffects<z.ZodObject<{
|
|
|
4800
4805
|
* `src/loop-directions.ts`.
|
|
4801
4806
|
*/
|
|
4802
4807
|
directions: z.ZodOptional<z.ZodArray<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>, "many">>;
|
|
4803
|
-
/**
|
|
4808
|
+
/**
|
|
4809
|
+
* Frames to generate without a template. A v3 loop takes an even 4 to 16;
|
|
4810
|
+
* a sentence loop (`mode: "skeleton-v3"` with no `template`) takes 3 to 15.
|
|
4811
|
+
*/
|
|
4804
4812
|
frames: z.ZodOptional<z.ZodNumber>;
|
|
4805
4813
|
/** Playback rate recorded with the frames; PixelLab does not store one. */
|
|
4806
4814
|
fps: z.ZodDefault<z.ZodNumber>;
|
|
@@ -4808,8 +4816,10 @@ declare const AssetSchema: z.ZodEffects<z.ZodObject<{
|
|
|
4808
4816
|
keepFirstFrame: z.ZodDefault<z.ZodBoolean>;
|
|
4809
4817
|
/**
|
|
4810
4818
|
* `template` when a template is named, otherwise `v3`; `skeleton-v3`
|
|
4811
|
-
* poses a template with PixelLab's skeleton model instead
|
|
4812
|
-
*
|
|
4819
|
+
* poses a template with PixelLab's skeleton model instead, or, with no
|
|
4820
|
+
* template, animates the asset's prompt as a sentence written into one 3D
|
|
4821
|
+
* motion (a v3 base; 3-15 `frames`); `pro` for the sequential
|
|
4822
|
+
* high-quality engine.
|
|
4813
4823
|
*/
|
|
4814
4824
|
mode: z.ZodOptional<z.ZodEnum<["template", "skeleton-v3", "v3", "pro"]>>;
|
|
4815
4825
|
/**
|
|
@@ -7162,7 +7172,10 @@ declare const ManifestSchema: z.ZodObject<{
|
|
|
7162
7172
|
* `src/loop-directions.ts`.
|
|
7163
7173
|
*/
|
|
7164
7174
|
directions: z.ZodOptional<z.ZodArray<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>, "many">>;
|
|
7165
|
-
/**
|
|
7175
|
+
/**
|
|
7176
|
+
* Frames to generate without a template. A v3 loop takes an even 4 to 16;
|
|
7177
|
+
* a sentence loop (`mode: "skeleton-v3"` with no `template`) takes 3 to 15.
|
|
7178
|
+
*/
|
|
7166
7179
|
frames: z.ZodOptional<z.ZodNumber>;
|
|
7167
7180
|
/** Playback rate recorded with the frames; PixelLab does not store one. */
|
|
7168
7181
|
fps: z.ZodDefault<z.ZodNumber>;
|
|
@@ -7170,8 +7183,10 @@ declare const ManifestSchema: z.ZodObject<{
|
|
|
7170
7183
|
keepFirstFrame: z.ZodDefault<z.ZodBoolean>;
|
|
7171
7184
|
/**
|
|
7172
7185
|
* `template` when a template is named, otherwise `v3`; `skeleton-v3`
|
|
7173
|
-
* poses a template with PixelLab's skeleton model instead
|
|
7174
|
-
*
|
|
7186
|
+
* poses a template with PixelLab's skeleton model instead, or, with no
|
|
7187
|
+
* template, animates the asset's prompt as a sentence written into one 3D
|
|
7188
|
+
* motion (a v3 base; 3-15 `frames`); `pro` for the sequential
|
|
7189
|
+
* high-quality engine.
|
|
7175
7190
|
*/
|
|
7176
7191
|
mode: z.ZodOptional<z.ZodEnum<["template", "skeleton-v3", "v3", "pro"]>>;
|
|
7177
7192
|
/**
|
|
@@ -10353,7 +10368,10 @@ declare const ManifestInputSchema: z.ZodObject<{
|
|
|
10353
10368
|
* `src/loop-directions.ts`.
|
|
10354
10369
|
*/
|
|
10355
10370
|
directions: z.ZodOptional<z.ZodArray<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>, "many">>;
|
|
10356
|
-
/**
|
|
10371
|
+
/**
|
|
10372
|
+
* Frames to generate without a template. A v3 loop takes an even 4 to 16;
|
|
10373
|
+
* a sentence loop (`mode: "skeleton-v3"` with no `template`) takes 3 to 15.
|
|
10374
|
+
*/
|
|
10357
10375
|
frames: z.ZodOptional<z.ZodNumber>;
|
|
10358
10376
|
/** Playback rate recorded with the frames; PixelLab does not store one. */
|
|
10359
10377
|
fps: z.ZodDefault<z.ZodNumber>;
|
|
@@ -10361,8 +10379,10 @@ declare const ManifestInputSchema: z.ZodObject<{
|
|
|
10361
10379
|
keepFirstFrame: z.ZodDefault<z.ZodBoolean>;
|
|
10362
10380
|
/**
|
|
10363
10381
|
* `template` when a template is named, otherwise `v3`; `skeleton-v3`
|
|
10364
|
-
* poses a template with PixelLab's skeleton model instead
|
|
10365
|
-
*
|
|
10382
|
+
* poses a template with PixelLab's skeleton model instead, or, with no
|
|
10383
|
+
* template, animates the asset's prompt as a sentence written into one 3D
|
|
10384
|
+
* motion (a v3 base; 3-15 `frames`); `pro` for the sequential
|
|
10385
|
+
* high-quality engine.
|
|
10366
10386
|
*/
|
|
10367
10387
|
mode: z.ZodOptional<z.ZodEnum<["template", "skeleton-v3", "v3", "pro"]>>;
|
|
10368
10388
|
/**
|
|
@@ -15830,7 +15850,10 @@ declare class PixelLabClient {
|
|
|
15830
15850
|
* Every mode but skeleton-v3 goes to `/animate-character`, the path whose
|
|
15831
15851
|
* shapes were measured live. skeleton-v3 is documented only on
|
|
15832
15852
|
* `/characters/animations`, which takes the same request and answers with
|
|
15833
|
-
* the same job list (plus an `animation_group_id`).
|
|
15853
|
+
* the same job list (plus an `animation_group_id`). With no `template` it
|
|
15854
|
+
* animates `actionDescription` as a sentence, 3 to 15 `frameCount` frames
|
|
15855
|
+
* written into one 3D motion; measured on a v3 character (8 frames, 64px:
|
|
15856
|
+
* 3 generations, frames back at 96x96).
|
|
15834
15857
|
*/
|
|
15835
15858
|
animateCharacter(args: {
|
|
15836
15859
|
characterId: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1358,7 +1358,10 @@ declare const CharacterAnimationSchema$1: z.ZodEffects<z.ZodObject<{
|
|
|
1358
1358
|
* `src/loop-directions.ts`.
|
|
1359
1359
|
*/
|
|
1360
1360
|
directions: z.ZodOptional<z.ZodArray<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>, "many">>;
|
|
1361
|
-
/**
|
|
1361
|
+
/**
|
|
1362
|
+
* Frames to generate without a template. A v3 loop takes an even 4 to 16;
|
|
1363
|
+
* a sentence loop (`mode: "skeleton-v3"` with no `template`) takes 3 to 15.
|
|
1364
|
+
*/
|
|
1362
1365
|
frames: z.ZodOptional<z.ZodNumber>;
|
|
1363
1366
|
/** Playback rate recorded with the frames; PixelLab does not store one. */
|
|
1364
1367
|
fps: z.ZodDefault<z.ZodNumber>;
|
|
@@ -1366,8 +1369,10 @@ declare const CharacterAnimationSchema$1: z.ZodEffects<z.ZodObject<{
|
|
|
1366
1369
|
keepFirstFrame: z.ZodDefault<z.ZodBoolean>;
|
|
1367
1370
|
/**
|
|
1368
1371
|
* `template` when a template is named, otherwise `v3`; `skeleton-v3`
|
|
1369
|
-
* poses a template with PixelLab's skeleton model instead
|
|
1370
|
-
*
|
|
1372
|
+
* poses a template with PixelLab's skeleton model instead, or, with no
|
|
1373
|
+
* template, animates the asset's prompt as a sentence written into one 3D
|
|
1374
|
+
* motion (a v3 base; 3-15 `frames`); `pro` for the sequential
|
|
1375
|
+
* high-quality engine.
|
|
1371
1376
|
*/
|
|
1372
1377
|
mode: z.ZodOptional<z.ZodEnum<["template", "skeleton-v3", "v3", "pro"]>>;
|
|
1373
1378
|
/**
|
|
@@ -4800,7 +4805,10 @@ declare const AssetSchema: z.ZodEffects<z.ZodObject<{
|
|
|
4800
4805
|
* `src/loop-directions.ts`.
|
|
4801
4806
|
*/
|
|
4802
4807
|
directions: z.ZodOptional<z.ZodArray<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>, "many">>;
|
|
4803
|
-
/**
|
|
4808
|
+
/**
|
|
4809
|
+
* Frames to generate without a template. A v3 loop takes an even 4 to 16;
|
|
4810
|
+
* a sentence loop (`mode: "skeleton-v3"` with no `template`) takes 3 to 15.
|
|
4811
|
+
*/
|
|
4804
4812
|
frames: z.ZodOptional<z.ZodNumber>;
|
|
4805
4813
|
/** Playback rate recorded with the frames; PixelLab does not store one. */
|
|
4806
4814
|
fps: z.ZodDefault<z.ZodNumber>;
|
|
@@ -4808,8 +4816,10 @@ declare const AssetSchema: z.ZodEffects<z.ZodObject<{
|
|
|
4808
4816
|
keepFirstFrame: z.ZodDefault<z.ZodBoolean>;
|
|
4809
4817
|
/**
|
|
4810
4818
|
* `template` when a template is named, otherwise `v3`; `skeleton-v3`
|
|
4811
|
-
* poses a template with PixelLab's skeleton model instead
|
|
4812
|
-
*
|
|
4819
|
+
* poses a template with PixelLab's skeleton model instead, or, with no
|
|
4820
|
+
* template, animates the asset's prompt as a sentence written into one 3D
|
|
4821
|
+
* motion (a v3 base; 3-15 `frames`); `pro` for the sequential
|
|
4822
|
+
* high-quality engine.
|
|
4813
4823
|
*/
|
|
4814
4824
|
mode: z.ZodOptional<z.ZodEnum<["template", "skeleton-v3", "v3", "pro"]>>;
|
|
4815
4825
|
/**
|
|
@@ -7162,7 +7172,10 @@ declare const ManifestSchema: z.ZodObject<{
|
|
|
7162
7172
|
* `src/loop-directions.ts`.
|
|
7163
7173
|
*/
|
|
7164
7174
|
directions: z.ZodOptional<z.ZodArray<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>, "many">>;
|
|
7165
|
-
/**
|
|
7175
|
+
/**
|
|
7176
|
+
* Frames to generate without a template. A v3 loop takes an even 4 to 16;
|
|
7177
|
+
* a sentence loop (`mode: "skeleton-v3"` with no `template`) takes 3 to 15.
|
|
7178
|
+
*/
|
|
7166
7179
|
frames: z.ZodOptional<z.ZodNumber>;
|
|
7167
7180
|
/** Playback rate recorded with the frames; PixelLab does not store one. */
|
|
7168
7181
|
fps: z.ZodDefault<z.ZodNumber>;
|
|
@@ -7170,8 +7183,10 @@ declare const ManifestSchema: z.ZodObject<{
|
|
|
7170
7183
|
keepFirstFrame: z.ZodDefault<z.ZodBoolean>;
|
|
7171
7184
|
/**
|
|
7172
7185
|
* `template` when a template is named, otherwise `v3`; `skeleton-v3`
|
|
7173
|
-
* poses a template with PixelLab's skeleton model instead
|
|
7174
|
-
*
|
|
7186
|
+
* poses a template with PixelLab's skeleton model instead, or, with no
|
|
7187
|
+
* template, animates the asset's prompt as a sentence written into one 3D
|
|
7188
|
+
* motion (a v3 base; 3-15 `frames`); `pro` for the sequential
|
|
7189
|
+
* high-quality engine.
|
|
7175
7190
|
*/
|
|
7176
7191
|
mode: z.ZodOptional<z.ZodEnum<["template", "skeleton-v3", "v3", "pro"]>>;
|
|
7177
7192
|
/**
|
|
@@ -10353,7 +10368,10 @@ declare const ManifestInputSchema: z.ZodObject<{
|
|
|
10353
10368
|
* `src/loop-directions.ts`.
|
|
10354
10369
|
*/
|
|
10355
10370
|
directions: z.ZodOptional<z.ZodArray<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>, "many">>;
|
|
10356
|
-
/**
|
|
10371
|
+
/**
|
|
10372
|
+
* Frames to generate without a template. A v3 loop takes an even 4 to 16;
|
|
10373
|
+
* a sentence loop (`mode: "skeleton-v3"` with no `template`) takes 3 to 15.
|
|
10374
|
+
*/
|
|
10357
10375
|
frames: z.ZodOptional<z.ZodNumber>;
|
|
10358
10376
|
/** Playback rate recorded with the frames; PixelLab does not store one. */
|
|
10359
10377
|
fps: z.ZodDefault<z.ZodNumber>;
|
|
@@ -10361,8 +10379,10 @@ declare const ManifestInputSchema: z.ZodObject<{
|
|
|
10361
10379
|
keepFirstFrame: z.ZodDefault<z.ZodBoolean>;
|
|
10362
10380
|
/**
|
|
10363
10381
|
* `template` when a template is named, otherwise `v3`; `skeleton-v3`
|
|
10364
|
-
* poses a template with PixelLab's skeleton model instead
|
|
10365
|
-
*
|
|
10382
|
+
* poses a template with PixelLab's skeleton model instead, or, with no
|
|
10383
|
+
* template, animates the asset's prompt as a sentence written into one 3D
|
|
10384
|
+
* motion (a v3 base; 3-15 `frames`); `pro` for the sequential
|
|
10385
|
+
* high-quality engine.
|
|
10366
10386
|
*/
|
|
10367
10387
|
mode: z.ZodOptional<z.ZodEnum<["template", "skeleton-v3", "v3", "pro"]>>;
|
|
10368
10388
|
/**
|
|
@@ -15830,7 +15850,10 @@ declare class PixelLabClient {
|
|
|
15830
15850
|
* Every mode but skeleton-v3 goes to `/animate-character`, the path whose
|
|
15831
15851
|
* shapes were measured live. skeleton-v3 is documented only on
|
|
15832
15852
|
* `/characters/animations`, which takes the same request and answers with
|
|
15833
|
-
* the same job list (plus an `animation_group_id`).
|
|
15853
|
+
* the same job list (plus an `animation_group_id`). With no `template` it
|
|
15854
|
+
* animates `actionDescription` as a sentence, 3 to 15 `frameCount` frames
|
|
15855
|
+
* written into one 3D motion; measured on a v3 character (8 frames, 64px:
|
|
15856
|
+
* 3 generations, frames back at 96x96).
|
|
15834
15857
|
*/
|
|
15835
15858
|
animateCharacter(args: {
|
|
15836
15859
|
characterId: string;
|
package/dist/index.js
CHANGED
|
@@ -310,16 +310,21 @@ var CharacterAnimationSchema = z.object({
|
|
|
310
310
|
* `src/loop-directions.ts`.
|
|
311
311
|
*/
|
|
312
312
|
directions: z.array(CharacterDirectionSchema).min(1).optional(),
|
|
313
|
-
/**
|
|
314
|
-
|
|
313
|
+
/**
|
|
314
|
+
* Frames to generate without a template. A v3 loop takes an even 4 to 16;
|
|
315
|
+
* a sentence loop (`mode: "skeleton-v3"` with no `template`) takes 3 to 15.
|
|
316
|
+
*/
|
|
317
|
+
frames: z.number().int().min(3).max(16).optional(),
|
|
315
318
|
/** Playback rate recorded with the frames; PixelLab does not store one. */
|
|
316
319
|
fps: z.number().int().min(1).max(60).default(8),
|
|
317
320
|
/** v3 only: keep the resting pose as frame 0, so `frames` generated frames land as `frames + 1` files. */
|
|
318
321
|
keepFirstFrame: z.boolean().default(true),
|
|
319
322
|
/**
|
|
320
323
|
* `template` when a template is named, otherwise `v3`; `skeleton-v3`
|
|
321
|
-
* poses a template with PixelLab's skeleton model instead
|
|
322
|
-
*
|
|
324
|
+
* poses a template with PixelLab's skeleton model instead, or, with no
|
|
325
|
+
* template, animates the asset's prompt as a sentence written into one 3D
|
|
326
|
+
* motion (a v3 base; 3-15 `frames`); `pro` for the sequential
|
|
327
|
+
* high-quality engine.
|
|
323
328
|
*/
|
|
324
329
|
mode: CharacterAnimationModeSchema.optional(),
|
|
325
330
|
/**
|
|
@@ -349,15 +354,23 @@ var CharacterAnimationSchema = z.object({
|
|
|
349
354
|
path: ["directions"]
|
|
350
355
|
});
|
|
351
356
|
}
|
|
352
|
-
|
|
353
|
-
|
|
357
|
+
const sentence = animation.mode === "skeleton-v3" && !animation.template;
|
|
358
|
+
if (animation.frames !== void 0 && !sentence) {
|
|
359
|
+
if (animation.frames % 2 !== 0) {
|
|
360
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "frames must be even", path: ["frames"] });
|
|
361
|
+
} else if (animation.frames < 4) {
|
|
362
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "frames must be 4 to 16", path: ["frames"] });
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
if (animation.frames !== void 0 && sentence && animation.frames > 15) {
|
|
366
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "a skeleton-v3 loop from a sentence takes 3 to 15 frames", path: ["frames"] });
|
|
354
367
|
}
|
|
355
368
|
const mode2 = animation.mode ?? (animation.template ? "template" : "v3");
|
|
356
369
|
for (const key of ["startFrame", "endFrame", "enhancePrompt"]) {
|
|
357
370
|
if (animation[key] !== void 0 && mode2 !== "v3") {
|
|
358
371
|
context.addIssue({
|
|
359
372
|
code: z.ZodIssueCode.custom,
|
|
360
|
-
message: `${key} is for v3 loops; a ${mode2} loop ${mode2 === "template" || mode2 === "skeleton-v3" ?
|
|
373
|
+
message: `${key} is for v3 loops; a ${mode2} loop ${mode2 === "template" || mode2 === "skeleton-v3" ? `starts from the character's rotation and ${animation.template ? "follows its template" : "animates its sentence"}` : "takes neither"}`,
|
|
361
374
|
path: [key]
|
|
362
375
|
});
|
|
363
376
|
}
|
|
@@ -381,8 +394,11 @@ var CharacterAnimationSchema = z.object({
|
|
|
381
394
|
path: ["frames"]
|
|
382
395
|
});
|
|
383
396
|
}
|
|
384
|
-
if (!animation.template &&
|
|
385
|
-
context.addIssue({ code: z.ZodIssueCode.custom, message:
|
|
397
|
+
if (!animation.template && animation.mode === "template") {
|
|
398
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "template mode needs a template", path: ["template"] });
|
|
399
|
+
}
|
|
400
|
+
if (sentence && animation.subject !== void 0) {
|
|
401
|
+
context.addIssue({ code: z.ZodIssueCode.custom, message: "subject does not apply to a skeleton-v3 loop from a sentence; describe the motion in the prompt", path: ["subject"] });
|
|
386
402
|
}
|
|
387
403
|
});
|
|
388
404
|
var RevisionDitheringSchema = z.enum(["none", "2x2", "4x4", "8x8"]);
|
|
@@ -2610,7 +2626,10 @@ var PixelLabClient = class {
|
|
|
2610
2626
|
* Every mode but skeleton-v3 goes to `/animate-character`, the path whose
|
|
2611
2627
|
* shapes were measured live. skeleton-v3 is documented only on
|
|
2612
2628
|
* `/characters/animations`, which takes the same request and answers with
|
|
2613
|
-
* the same job list (plus an `animation_group_id`).
|
|
2629
|
+
* the same job list (plus an `animation_group_id`). With no `template` it
|
|
2630
|
+
* animates `actionDescription` as a sentence, 3 to 15 `frameCount` frames
|
|
2631
|
+
* written into one 3D motion; measured on a v3 character (8 frames, 64px:
|
|
2632
|
+
* 3 generations, frames back at 96x96).
|
|
2614
2633
|
*/
|
|
2615
2634
|
async animateCharacter(args) {
|
|
2616
2635
|
const encode = (image) => ({ type: "base64", base64: image.base64, format: image.format });
|
|
@@ -2625,7 +2644,8 @@ var PixelLabClient = class {
|
|
|
2625
2644
|
...args.template ? { template_animation_id: args.template } : {},
|
|
2626
2645
|
...args.actionDescription ? { action_description: args.actionDescription } : {},
|
|
2627
2646
|
...args.description ? { description: args.description } : {},
|
|
2628
|
-
|
|
2647
|
+
// A template fixes its own frame count; v3 and a skeleton-v3 sentence take one.
|
|
2648
|
+
...(args.mode === "v3" || args.mode === "skeleton-v3" && !args.template) && args.frameCount ? { frame_count: args.frameCount } : {},
|
|
2629
2649
|
...args.mode === "v3" && args.keepFirstFrame === false ? { keep_first_frame: false } : {},
|
|
2630
2650
|
...args.mode === "v3" && args.startFrame ? { custom_start_frame: encode(args.startFrame) } : {},
|
|
2631
2651
|
...args.mode === "v3" && args.endFrame ? { end_frame: encode(args.endFrame) } : {},
|
|
@@ -5277,6 +5297,16 @@ var PixelLabProvider = class _PixelLabProvider {
|
|
|
5277
5297
|
if (skeletonTemplate && !CHARACTER_TEMPLATES.includes(skeletonTemplate)) {
|
|
5278
5298
|
throw new Error(`PixelLab animate-skeleton template "${skeletonTemplate}" is not one of ${CHARACTER_TEMPLATES.join(", ")}`);
|
|
5279
5299
|
}
|
|
5300
|
+
if (!spec.revision.description?.trim()) {
|
|
5301
|
+
throw new Error(
|
|
5302
|
+
`${spec.styleId}/${spec.assetId}: an animate-skeleton revision needs revision.description, what the character looks like (for example "a knight in steel armour holding a sword"); PixelLab refuses the request without it`
|
|
5303
|
+
);
|
|
5304
|
+
}
|
|
5305
|
+
if (!spec.prompt.trim()) {
|
|
5306
|
+
throw new Error(
|
|
5307
|
+
`${spec.styleId}/${spec.assetId}: an animate-skeleton revision needs a prompt, a short motion label (for example "swinging the sword")`
|
|
5308
|
+
);
|
|
5309
|
+
}
|
|
5280
5310
|
}
|
|
5281
5311
|
if (spec.revision?.mode === "animate" || spec.revision?.mode === "animate-pixminimax") {
|
|
5282
5312
|
const { sourceWidth: width, sourceHeight: height, mode: mode2, frames, lastFrameWidth, lastFrameHeight } = spec.revision;
|
|
@@ -5680,12 +5710,18 @@ var PixelLabProvider = class _PixelLabProvider {
|
|
|
5680
5710
|
`${spec.styleId}/${spec.assetId} animates "${character.animation.direction}", but its character has ${character.directions} directions: ${allowed.join(", ")}`
|
|
5681
5711
|
);
|
|
5682
5712
|
}
|
|
5683
|
-
|
|
5684
|
-
|
|
5713
|
+
const sentence = character.animation.mode === "skeleton-v3" && !character.animation.template;
|
|
5714
|
+
if (character.animation.mode !== "template" && (character.animation.mode !== "skeleton-v3" || sentence) && !spec.prompt.trim()) {
|
|
5715
|
+
throw new Error(
|
|
5716
|
+
`${spec.styleId}/${spec.assetId} needs a prompt describing the motion, or a template` + (sentence ? ' (a skeleton-v3 loop with no template animates its prompt, e.g. "swinging a sword in a wide arc")' : "")
|
|
5717
|
+
);
|
|
5718
|
+
}
|
|
5719
|
+
if (sentence && (character.animation.frames < 3 || character.animation.frames > 15)) {
|
|
5720
|
+
throw new Error(`${spec.styleId}/${spec.assetId}: a skeleton-v3 loop from a sentence takes 3 to 15 frames; ${character.animation.frames} is out of range`);
|
|
5685
5721
|
}
|
|
5686
5722
|
if (character.animation.mode === "skeleton-v3" && character.mode === "standard") {
|
|
5687
5723
|
throw new Error(
|
|
5688
|
-
`${spec.styleId}/${spec.assetId}: skeleton-v3 poses a template onto a 3D skeleton, which a ${character.mode} character has none of; use a v3 base (style mode: "v3"), or mode: "template" for this loop`
|
|
5724
|
+
sentence ? `${spec.styleId}/${spec.assetId}: a skeleton-v3 loop from a sentence writes the motion onto a 3D skeleton, which a ${character.mode} character has none of; use a v3 base (style mode: "v3"), or mode: "template" with a template for this loop` : `${spec.styleId}/${spec.assetId}: skeleton-v3 poses a template onto a 3D skeleton, which a ${character.mode} character has none of; use a v3 base (style mode: "v3"), or mode: "template" for this loop`
|
|
5689
5725
|
);
|
|
5690
5726
|
}
|
|
5691
5727
|
}
|
|
@@ -18066,7 +18102,8 @@ var SkeletonAnimationRequestSchema = z12.object({
|
|
|
18066
18102
|
/** The motion, sent as PixelLab's `action`. */
|
|
18067
18103
|
prompt: z12.string().min(1),
|
|
18068
18104
|
direction: CharacterDirectionSchema,
|
|
18069
|
-
|
|
18105
|
+
/** What the character looks like; PixelLab refuses the request without it. */
|
|
18106
|
+
description: z12.string().min(1),
|
|
18070
18107
|
skeletonTemplate: z12.string().min(1).optional(),
|
|
18071
18108
|
/** Manifest-relative JSON path inside the project. */
|
|
18072
18109
|
keypointsFile: z12.string().min(1),
|
|
@@ -18116,7 +18153,7 @@ async function createSkeletonAnimation(manifestPath, request) {
|
|
|
18116
18153
|
from: request.from,
|
|
18117
18154
|
keypointsFile: relative.split(path32.sep).join("/"),
|
|
18118
18155
|
direction: request.direction,
|
|
18119
|
-
|
|
18156
|
+
description: request.description,
|
|
18120
18157
|
...request.skeletonTemplate ? { skeletonTemplate: request.skeletonTemplate } : {}
|
|
18121
18158
|
}
|
|
18122
18159
|
}
|