pixelkiln 0.72.0 → 0.74.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/index.d.cts CHANGED
@@ -18840,177 +18840,9 @@ interface GalleryEditorOptions extends Pick<EditorInstallOptions, "dir" | "baseU
18840
18840
  declare function editorRoute(release: string, name?: string): string;
18841
18841
  declare function createGalleryEditorHandlers(opts?: GalleryEditorOptions): GalleryEditorHandlers;
18842
18842
 
18843
- /**
18844
- * Generation from the gallery is the CLI's `gen`, run as a background job:
18845
- * the same `buildPlan`, the same per-provider budget and balance preflight,
18846
- * the same `submit → poll → fetch` library calls writing the same lockfile.
18847
- * The page adds nothing the terminal cannot do; it only shows the estimate,
18848
- * asks, and reports progress.
18849
- *
18850
- * Two ceilings guard spend. The session budget is passed when the gallery
18851
- * starts (`--budget`, optionally keyed per provider) and every job's estimate
18852
- * is charged against it up front, so the page can never exceed what the
18853
- * person typed. Each submission also carries the remaining ceiling as its
18854
- * own `budget`, the way `gen --budget` does, so a provider estimate that
18855
- * grows between plan and submit is refused rather than paid.
18856
- */
18857
- type GeneratePhase = "queued" | "submitting" | "polling" | "fetching" | "review" | "done" | "failed";
18858
- interface GenerateJob {
18859
- id: string;
18860
- project: string | null;
18861
- keys: string[];
18862
- /**
18863
- * `resume` skips submission: poll, review, and fetch existing work at no
18864
- * cost; `refresh` re-pulls changed objects; `restore` puts the recorded
18865
- * bytes back on disk from the cache or the provider, as `pixelkiln restore`.
18866
- */
18867
- mode: "generate" | "resume" | "refresh" | "restore" | "revert";
18868
- /** The job may replace a locally modified or untracked file, as `--force` does. */
18869
- force: boolean;
18870
- /** For `revert`: which replaced generation, as the request named it. */
18871
- revert: string | null;
18872
- phase: GeneratePhase;
18873
- startedAt: string;
18874
- finishedAt: string | null;
18875
- /** Progress lines, exactly what the CLI would have printed. */
18876
- messages: string[];
18877
- error: string | null;
18878
- /** Successful-submission estimates this job charged, by provider. */
18879
- spent: Record<string, number>;
18880
- /** Keys still waiting for a human choice. */
18881
- review: string[];
18882
- counts: {
18883
- submitted: number;
18884
- failed: number;
18885
- downloaded: number;
18886
- };
18887
- }
18888
- interface GalleryProjectContext {
18889
- loaded: LoadedManifest;
18890
- /** Every spec the project declares, unfiltered. */
18891
- specs: ResolvedSpec[];
18892
- lock: Lock;
18893
- lockPath: string;
18894
- }
18895
- interface SessionBudget {
18896
- /** Unkeyed ceiling, valid only when a run involves a single provider. */
18897
- amount?: number;
18898
- /** Provider-keyed ceilings. */
18899
- byProvider: Record<string, number>;
18900
- }
18901
- interface GenerateHandlerOptions {
18902
- /** Load a project fresh from disk; `project` is the workspace id, if any. */
18903
- loadProject: (project?: string) => Promise<GalleryProjectContext>;
18904
- /** An online provider for a project; the caller owns env loading and caching. */
18905
- providerFor: (project: string | undefined, providerId: string) => Provider;
18906
- budget: SessionBudget;
18907
- reload: () => Promise<GalleryBuild>;
18908
- onProgress?: (msg: string) => void;
18909
- /** Test hooks. */
18910
- pollIntervalMs?: number;
18911
- submitSpacingMs?: number;
18912
- /** Deterministic clock hook. */
18913
- now?: () => Date;
18914
- }
18915
- interface GenerateStatus {
18916
- jobs: GenerateJob[];
18917
- budget: SessionBudget;
18918
- /** Estimates charged so far this session, by provider. */
18919
- spent: Record<string, number>;
18920
- /** Providers whose spend unit is known, for display. */
18921
- units: Record<string, CostUnit>;
18922
- }
18923
- interface GalleryGenerateHandlers {
18924
- start(body: unknown): Promise<GenerateJob>;
18925
- status(): GenerateStatus;
18926
- /** The embedded review sheet for a job's waiting keys; null when nothing waits. */
18927
- review(jobId: string, options: RenderSheetOptions & {
18928
- routePrefix: string;
18929
- }): Promise<ReviewSession | null>;
18930
- applyReview(jobId: string, body: unknown): Promise<PickResult>;
18931
- }
18932
- declare const GenerateRequestSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
18933
- project: z.ZodOptional<z.ZodString>;
18934
- keys: z.ZodArray<z.ZodString, "many">;
18935
- /**
18936
- * Regenerate work that is up to date, as `gen --force` does, and let the
18937
- * fetch replace a locally modified or untracked file. With `restore`, put
18938
- * the recorded bytes back over a modified file.
18939
- */
18940
- force: z.ZodOptional<z.ZodBoolean>;
18941
- /** Advance in-flight, review, or selected work without submitting anything. */
18942
- resume: z.ZodOptional<z.ZodBoolean>;
18943
- /** Re-download downloaded outputs and replace files whose object changed upstream. */
18944
- refresh: z.ZodOptional<z.ZodBoolean>;
18945
- /** Put recorded outputs back on disk from the cache or the provider, without generating. */
18946
- restore: z.ZodOptional<z.ZodBoolean>;
18947
- /**
18948
- * Bring a replaced generation back: 1-based position in the record's
18949
- * history (newest first) or an output hash prefix. One key at a time.
18950
- */
18951
- revert: z.ZodOptional<z.ZodString>;
18952
- }, "strict", z.ZodTypeAny, {
18953
- keys: string[];
18954
- project?: string | undefined;
18955
- resume?: boolean | undefined;
18956
- force?: boolean | undefined;
18957
- refresh?: boolean | undefined;
18958
- restore?: boolean | undefined;
18959
- revert?: string | undefined;
18960
- }, {
18961
- keys: string[];
18962
- project?: string | undefined;
18963
- resume?: boolean | undefined;
18964
- force?: boolean | undefined;
18965
- refresh?: boolean | undefined;
18966
- restore?: boolean | undefined;
18967
- revert?: string | undefined;
18968
- }>, {
18969
- keys: string[];
18970
- project?: string | undefined;
18971
- resume?: boolean | undefined;
18972
- force?: boolean | undefined;
18973
- refresh?: boolean | undefined;
18974
- restore?: boolean | undefined;
18975
- revert?: string | undefined;
18976
- }, {
18977
- keys: string[];
18978
- project?: string | undefined;
18979
- resume?: boolean | undefined;
18980
- force?: boolean | undefined;
18981
- refresh?: boolean | undefined;
18982
- restore?: boolean | undefined;
18983
- revert?: string | undefined;
18984
- }>, {
18985
- keys: string[];
18986
- project?: string | undefined;
18987
- resume?: boolean | undefined;
18988
- force?: boolean | undefined;
18989
- refresh?: boolean | undefined;
18990
- restore?: boolean | undefined;
18991
- revert?: string | undefined;
18992
- }, {
18993
- keys: string[];
18994
- project?: string | undefined;
18995
- resume?: boolean | undefined;
18996
- force?: boolean | undefined;
18997
- refresh?: boolean | undefined;
18998
- restore?: boolean | undefined;
18999
- revert?: string | undefined;
19000
- }>;
19001
- declare class GenerateRequestError extends Error {
19002
- readonly status: number;
19003
- constructor(message: string, status?: number);
19004
- }
19005
- declare function createGenerateHandlers(opts: GenerateHandlerOptions): GalleryGenerateHandlers;
19006
-
19007
18843
  declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject<{
19008
18844
  action: z.ZodLiteral<"patch-asset">;
19009
- /** Workspace project id; omitted for a single-project gallery. */
19010
- project: z.ZodOptional<z.ZodString>;
19011
18845
  assetId: z.ZodString;
19012
- /** Manifest bytes the page last saw; a mismatch refuses the write. */
19013
- expectedSha256: z.ZodString;
19014
18846
  patch: z.ZodObject<{
19015
18847
  prompt: z.ZodOptional<z.ZodString>;
19016
18848
  /** Per-style override for the style being viewed; null removes it. */
@@ -19052,6 +18884,11 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19052
18884
  styleId: string;
19053
18885
  } | undefined;
19054
18886
  }>;
18887
+ } & {
18888
+ /** Workspace project id; omitted for a single-project gallery. */
18889
+ project: z.ZodOptional<z.ZodString>;
18890
+ /** Manifest bytes the page last saw; a mismatch refuses the write. */
18891
+ expectedSha256: z.ZodString;
19055
18892
  }, "strict", z.ZodTypeAny, {
19056
18893
  assetId: string;
19057
18894
  action: "patch-asset";
@@ -19088,11 +18925,10 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19088
18925
  project?: string | undefined;
19089
18926
  }>, z.ZodObject<{
19090
18927
  action: z.ZodLiteral<"add-asset">;
19091
- project: z.ZodOptional<z.ZodString>;
19092
18928
  assetId: z.ZodString;
19093
- expectedSha256: z.ZodString;
19094
18929
  asset: z.ZodEffects<z.ZodEffects<z.ZodObject<{
19095
- prompt: z.ZodString;
18930
+ /** A portrait, an outfit, or a mirror has none of its own; the loader says where one is needed. */
18931
+ prompt: z.ZodOptional<z.ZodString>;
19096
18932
  category: z.ZodOptional<z.ZodString>;
19097
18933
  width: z.ZodOptional<z.ZodNumber>;
19098
18934
  height: z.ZodOptional<z.ZodNumber>;
@@ -19182,6 +19018,8 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19182
19018
  direction: z.ZodOptional<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>>;
19183
19019
  frames: z.ZodOptional<z.ZodNumber>;
19184
19020
  fps: z.ZodOptional<z.ZodNumber>;
19021
+ /** One loop per named direction, plus free mirrors; expanded when the manifest loads. */
19022
+ directions: z.ZodOptional<z.ZodArray<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>, "many">>;
19185
19023
  mode: z.ZodOptional<z.ZodEnum<["template", "skeleton-v3", "v3", "pro"]>>;
19186
19024
  /** What is being animated, when the parent's own description would mislead the model (`character` only). */
19187
19025
  subject: z.ZodOptional<z.ZodString>;
@@ -19192,6 +19030,7 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19192
19030
  fps?: number | undefined;
19193
19031
  template?: string | undefined;
19194
19032
  direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
19033
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
19195
19034
  mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
19196
19035
  subject?: string | undefined;
19197
19036
  enhancePrompt?: boolean | undefined;
@@ -19201,12 +19040,68 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19201
19040
  fps?: number | undefined;
19202
19041
  template?: string | undefined;
19203
19042
  direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
19043
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
19204
19044
  mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
19205
19045
  subject?: string | undefined;
19206
19046
  enhancePrompt?: boolean | undefined;
19207
19047
  }>>;
19048
+ /** A bust of an existing character. */
19049
+ portrait: z.ZodOptional<z.ZodObject<{
19050
+ of: z.ZodString;
19051
+ size: z.ZodDefault<z.ZodUnion<[z.ZodLiteral<16>, z.ZodLiteral<32>, z.ZodLiteral<48>, z.ZodLiteral<64>, z.ZodLiteral<128>, z.ZodLiteral<160>]>>;
19052
+ }, "strict", z.ZodTypeAny, {
19053
+ of: string;
19054
+ size: 16 | 32 | 64 | 128 | 48 | 160;
19055
+ }, {
19056
+ of: string;
19057
+ size?: 16 | 32 | 64 | 128 | 48 | 160 | undefined;
19058
+ }>>;
19059
+ /** An existing loop re-clothed from a reference image (uploaded first). */
19060
+ outfit: z.ZodOptional<z.ZodObject<{
19061
+ of: z.ZodString;
19062
+ reference: z.ZodString;
19063
+ additionalInstructions: z.ZodOptional<z.ZodString>;
19064
+ }, "strict", z.ZodTypeAny, {
19065
+ of: string;
19066
+ reference: string;
19067
+ additionalInstructions?: string | undefined;
19068
+ }, {
19069
+ of: string;
19070
+ reference: string;
19071
+ additionalInstructions?: string | undefined;
19072
+ }>>;
19073
+ /** Another asset of the same style, flipped; free. */
19074
+ mirror: z.ZodOptional<z.ZodString>;
19075
+ /**
19076
+ * `character`/`objectPro` bases: the subject's own sprite (uploaded
19077
+ * first), or one per direction, which PixelLab rotates instead of drawing.
19078
+ */
19079
+ reference: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>, z.ZodString>]>>;
19080
+ /** `character` pro bases: a concept image that seeds the design. */
19081
+ concept: z.ZodOptional<z.ZodString>;
19082
+ /** `character` pro bases: another character in the style whose look this one follows. */
19083
+ styleCharacter: z.ZodOptional<z.ZodString>;
19084
+ /** `character` standard humanoid bases: this character's proportions, over the style's. */
19085
+ proportions: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["default", "chibi", "cartoon", "stylized", "realistic_male", "realistic_female", "heroic"]>, z.ZodObject<{
19086
+ headSize: z.ZodOptional<z.ZodNumber>;
19087
+ armsLength: z.ZodOptional<z.ZodNumber>;
19088
+ legsLength: z.ZodOptional<z.ZodNumber>;
19089
+ shoulderWidth: z.ZodOptional<z.ZodNumber>;
19090
+ hipWidth: z.ZodOptional<z.ZodNumber>;
19091
+ }, "strict", z.ZodTypeAny, {
19092
+ headSize?: number | undefined;
19093
+ armsLength?: number | undefined;
19094
+ legsLength?: number | undefined;
19095
+ shoulderWidth?: number | undefined;
19096
+ hipWidth?: number | undefined;
19097
+ }, {
19098
+ headSize?: number | undefined;
19099
+ armsLength?: number | undefined;
19100
+ legsLength?: number | undefined;
19101
+ shoulderWidth?: number | undefined;
19102
+ hipWidth?: number | undefined;
19103
+ }>]>>;
19208
19104
  }, "strict", z.ZodTypeAny, {
19209
- prompt: string;
19210
19105
  width?: number | undefined;
19211
19106
  height?: number | undefined;
19212
19107
  animation?: {
@@ -19215,11 +19110,13 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19215
19110
  fps?: number | undefined;
19216
19111
  template?: string | undefined;
19217
19112
  direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
19113
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
19218
19114
  mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
19219
19115
  subject?: string | undefined;
19220
19116
  enhancePrompt?: boolean | undefined;
19221
19117
  } | undefined;
19222
19118
  size?: number | undefined;
19119
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
19223
19120
  state?: {
19224
19121
  of: string;
19225
19122
  paletteFromReference?: boolean | undefined;
@@ -19228,7 +19125,25 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19228
19125
  height: number;
19229
19126
  } | undefined;
19230
19127
  } | undefined;
19128
+ portrait?: {
19129
+ of: string;
19130
+ size: 16 | 32 | 64 | 128 | 48 | 160;
19131
+ } | undefined;
19132
+ outfit?: {
19133
+ of: string;
19134
+ reference: string;
19135
+ additionalInstructions?: string | undefined;
19136
+ } | undefined;
19137
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
19138
+ headSize?: number | undefined;
19139
+ armsLength?: number | undefined;
19140
+ legsLength?: number | undefined;
19141
+ shoulderWidth?: number | undefined;
19142
+ hipWidth?: number | undefined;
19143
+ } | undefined;
19144
+ styleCharacter?: string | undefined;
19231
19145
  tags?: string[] | undefined;
19146
+ prompt?: string | undefined;
19232
19147
  category?: string | undefined;
19233
19148
  revision?: {
19234
19149
  mode: "image-to-image";
@@ -19242,9 +19157,10 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19242
19157
  skeletonTemplate?: string | undefined;
19243
19158
  description?: string | undefined;
19244
19159
  } | undefined;
19160
+ concept?: string | undefined;
19161
+ mirror?: string | undefined;
19245
19162
  styles?: string[] | undefined;
19246
19163
  }, {
19247
- prompt: string;
19248
19164
  width?: number | undefined;
19249
19165
  height?: number | undefined;
19250
19166
  animation?: {
@@ -19253,11 +19169,13 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19253
19169
  fps?: number | undefined;
19254
19170
  template?: string | undefined;
19255
19171
  direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
19172
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
19256
19173
  mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
19257
19174
  subject?: string | undefined;
19258
19175
  enhancePrompt?: boolean | undefined;
19259
19176
  } | undefined;
19260
19177
  size?: number | undefined;
19178
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
19261
19179
  state?: {
19262
19180
  of: string;
19263
19181
  paletteFromReference?: boolean | undefined;
@@ -19266,8 +19184,26 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19266
19184
  height: number;
19267
19185
  } | undefined;
19268
19186
  } | undefined;
19269
- tags?: string[] | undefined;
19270
- category?: string | undefined;
19187
+ portrait?: {
19188
+ of: string;
19189
+ size?: 16 | 32 | 64 | 128 | 48 | 160 | undefined;
19190
+ } | undefined;
19191
+ outfit?: {
19192
+ of: string;
19193
+ reference: string;
19194
+ additionalInstructions?: string | undefined;
19195
+ } | undefined;
19196
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
19197
+ headSize?: number | undefined;
19198
+ armsLength?: number | undefined;
19199
+ legsLength?: number | undefined;
19200
+ shoulderWidth?: number | undefined;
19201
+ hipWidth?: number | undefined;
19202
+ } | undefined;
19203
+ styleCharacter?: string | undefined;
19204
+ tags?: string[] | undefined;
19205
+ prompt?: string | undefined;
19206
+ category?: string | undefined;
19271
19207
  revision?: {
19272
19208
  mode: "image-to-image";
19273
19209
  from: string;
@@ -19280,9 +19216,10 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19280
19216
  skeletonTemplate?: string | undefined;
19281
19217
  description?: string | undefined;
19282
19218
  } | undefined;
19219
+ concept?: string | undefined;
19220
+ mirror?: string | undefined;
19283
19221
  styles?: string[] | undefined;
19284
19222
  }>, {
19285
- prompt: string;
19286
19223
  width?: number | undefined;
19287
19224
  height?: number | undefined;
19288
19225
  animation?: {
@@ -19291,11 +19228,13 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19291
19228
  fps?: number | undefined;
19292
19229
  template?: string | undefined;
19293
19230
  direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
19231
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
19294
19232
  mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
19295
19233
  subject?: string | undefined;
19296
19234
  enhancePrompt?: boolean | undefined;
19297
19235
  } | undefined;
19298
19236
  size?: number | undefined;
19237
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
19299
19238
  state?: {
19300
19239
  of: string;
19301
19240
  paletteFromReference?: boolean | undefined;
@@ -19304,7 +19243,25 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19304
19243
  height: number;
19305
19244
  } | undefined;
19306
19245
  } | undefined;
19246
+ portrait?: {
19247
+ of: string;
19248
+ size: 16 | 32 | 64 | 128 | 48 | 160;
19249
+ } | undefined;
19250
+ outfit?: {
19251
+ of: string;
19252
+ reference: string;
19253
+ additionalInstructions?: string | undefined;
19254
+ } | undefined;
19255
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
19256
+ headSize?: number | undefined;
19257
+ armsLength?: number | undefined;
19258
+ legsLength?: number | undefined;
19259
+ shoulderWidth?: number | undefined;
19260
+ hipWidth?: number | undefined;
19261
+ } | undefined;
19262
+ styleCharacter?: string | undefined;
19307
19263
  tags?: string[] | undefined;
19264
+ prompt?: string | undefined;
19308
19265
  category?: string | undefined;
19309
19266
  revision?: {
19310
19267
  mode: "image-to-image";
@@ -19318,9 +19275,10 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19318
19275
  skeletonTemplate?: string | undefined;
19319
19276
  description?: string | undefined;
19320
19277
  } | undefined;
19278
+ concept?: string | undefined;
19279
+ mirror?: string | undefined;
19321
19280
  styles?: string[] | undefined;
19322
19281
  }, {
19323
- prompt: string;
19324
19282
  width?: number | undefined;
19325
19283
  height?: number | undefined;
19326
19284
  animation?: {
@@ -19329,11 +19287,13 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19329
19287
  fps?: number | undefined;
19330
19288
  template?: string | undefined;
19331
19289
  direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
19290
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
19332
19291
  mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
19333
19292
  subject?: string | undefined;
19334
19293
  enhancePrompt?: boolean | undefined;
19335
19294
  } | undefined;
19336
19295
  size?: number | undefined;
19296
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
19337
19297
  state?: {
19338
19298
  of: string;
19339
19299
  paletteFromReference?: boolean | undefined;
@@ -19342,7 +19302,25 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19342
19302
  height: number;
19343
19303
  } | undefined;
19344
19304
  } | undefined;
19305
+ portrait?: {
19306
+ of: string;
19307
+ size?: 16 | 32 | 64 | 128 | 48 | 160 | undefined;
19308
+ } | undefined;
19309
+ outfit?: {
19310
+ of: string;
19311
+ reference: string;
19312
+ additionalInstructions?: string | undefined;
19313
+ } | undefined;
19314
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
19315
+ headSize?: number | undefined;
19316
+ armsLength?: number | undefined;
19317
+ legsLength?: number | undefined;
19318
+ shoulderWidth?: number | undefined;
19319
+ hipWidth?: number | undefined;
19320
+ } | undefined;
19321
+ styleCharacter?: string | undefined;
19345
19322
  tags?: string[] | undefined;
19323
+ prompt?: string | undefined;
19346
19324
  category?: string | undefined;
19347
19325
  revision?: {
19348
19326
  mode: "image-to-image";
@@ -19356,9 +19334,10 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19356
19334
  skeletonTemplate?: string | undefined;
19357
19335
  description?: string | undefined;
19358
19336
  } | undefined;
19337
+ concept?: string | undefined;
19338
+ mirror?: string | undefined;
19359
19339
  styles?: string[] | undefined;
19360
19340
  }>, {
19361
- prompt: string;
19362
19341
  width?: number | undefined;
19363
19342
  height?: number | undefined;
19364
19343
  animation?: {
@@ -19367,11 +19346,13 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19367
19346
  fps?: number | undefined;
19368
19347
  template?: string | undefined;
19369
19348
  direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
19349
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
19370
19350
  mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
19371
19351
  subject?: string | undefined;
19372
19352
  enhancePrompt?: boolean | undefined;
19373
19353
  } | undefined;
19374
19354
  size?: number | undefined;
19355
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
19375
19356
  state?: {
19376
19357
  of: string;
19377
19358
  paletteFromReference?: boolean | undefined;
@@ -19380,7 +19361,25 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19380
19361
  height: number;
19381
19362
  } | undefined;
19382
19363
  } | undefined;
19364
+ portrait?: {
19365
+ of: string;
19366
+ size: 16 | 32 | 64 | 128 | 48 | 160;
19367
+ } | undefined;
19368
+ outfit?: {
19369
+ of: string;
19370
+ reference: string;
19371
+ additionalInstructions?: string | undefined;
19372
+ } | undefined;
19373
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
19374
+ headSize?: number | undefined;
19375
+ armsLength?: number | undefined;
19376
+ legsLength?: number | undefined;
19377
+ shoulderWidth?: number | undefined;
19378
+ hipWidth?: number | undefined;
19379
+ } | undefined;
19380
+ styleCharacter?: string | undefined;
19383
19381
  tags?: string[] | undefined;
19382
+ prompt?: string | undefined;
19384
19383
  category?: string | undefined;
19385
19384
  revision?: {
19386
19385
  mode: "image-to-image";
@@ -19394,9 +19393,10 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19394
19393
  skeletonTemplate?: string | undefined;
19395
19394
  description?: string | undefined;
19396
19395
  } | undefined;
19396
+ concept?: string | undefined;
19397
+ mirror?: string | undefined;
19397
19398
  styles?: string[] | undefined;
19398
19399
  }, {
19399
- prompt: string;
19400
19400
  width?: number | undefined;
19401
19401
  height?: number | undefined;
19402
19402
  animation?: {
@@ -19405,11 +19405,13 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19405
19405
  fps?: number | undefined;
19406
19406
  template?: string | undefined;
19407
19407
  direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
19408
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
19408
19409
  mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
19409
19410
  subject?: string | undefined;
19410
19411
  enhancePrompt?: boolean | undefined;
19411
19412
  } | undefined;
19412
19413
  size?: number | undefined;
19414
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
19413
19415
  state?: {
19414
19416
  of: string;
19415
19417
  paletteFromReference?: boolean | undefined;
@@ -19418,7 +19420,25 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19418
19420
  height: number;
19419
19421
  } | undefined;
19420
19422
  } | undefined;
19423
+ portrait?: {
19424
+ of: string;
19425
+ size?: 16 | 32 | 64 | 128 | 48 | 160 | undefined;
19426
+ } | undefined;
19427
+ outfit?: {
19428
+ of: string;
19429
+ reference: string;
19430
+ additionalInstructions?: string | undefined;
19431
+ } | undefined;
19432
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
19433
+ headSize?: number | undefined;
19434
+ armsLength?: number | undefined;
19435
+ legsLength?: number | undefined;
19436
+ shoulderWidth?: number | undefined;
19437
+ hipWidth?: number | undefined;
19438
+ } | undefined;
19439
+ styleCharacter?: string | undefined;
19421
19440
  tags?: string[] | undefined;
19441
+ prompt?: string | undefined;
19422
19442
  category?: string | undefined;
19423
19443
  revision?: {
19424
19444
  mode: "image-to-image";
@@ -19432,13 +19452,19 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19432
19452
  skeletonTemplate?: string | undefined;
19433
19453
  description?: string | undefined;
19434
19454
  } | undefined;
19455
+ concept?: string | undefined;
19456
+ mirror?: string | undefined;
19435
19457
  styles?: string[] | undefined;
19436
19458
  }>;
19459
+ } & {
19460
+ /** Workspace project id; omitted for a single-project gallery. */
19461
+ project: z.ZodOptional<z.ZodString>;
19462
+ /** Manifest bytes the page last saw; a mismatch refuses the write. */
19463
+ expectedSha256: z.ZodString;
19437
19464
  }, "strict", z.ZodTypeAny, {
19438
19465
  assetId: string;
19439
19466
  action: "add-asset";
19440
19467
  asset: {
19441
- prompt: string;
19442
19468
  width?: number | undefined;
19443
19469
  height?: number | undefined;
19444
19470
  animation?: {
@@ -19447,11 +19473,13 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19447
19473
  fps?: number | undefined;
19448
19474
  template?: string | undefined;
19449
19475
  direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
19476
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
19450
19477
  mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
19451
19478
  subject?: string | undefined;
19452
19479
  enhancePrompt?: boolean | undefined;
19453
19480
  } | undefined;
19454
19481
  size?: number | undefined;
19482
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
19455
19483
  state?: {
19456
19484
  of: string;
19457
19485
  paletteFromReference?: boolean | undefined;
@@ -19460,7 +19488,25 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19460
19488
  height: number;
19461
19489
  } | undefined;
19462
19490
  } | undefined;
19491
+ portrait?: {
19492
+ of: string;
19493
+ size: 16 | 32 | 64 | 128 | 48 | 160;
19494
+ } | undefined;
19495
+ outfit?: {
19496
+ of: string;
19497
+ reference: string;
19498
+ additionalInstructions?: string | undefined;
19499
+ } | undefined;
19500
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
19501
+ headSize?: number | undefined;
19502
+ armsLength?: number | undefined;
19503
+ legsLength?: number | undefined;
19504
+ shoulderWidth?: number | undefined;
19505
+ hipWidth?: number | undefined;
19506
+ } | undefined;
19507
+ styleCharacter?: string | undefined;
19463
19508
  tags?: string[] | undefined;
19509
+ prompt?: string | undefined;
19464
19510
  category?: string | undefined;
19465
19511
  revision?: {
19466
19512
  mode: "image-to-image";
@@ -19474,6 +19520,8 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19474
19520
  skeletonTemplate?: string | undefined;
19475
19521
  description?: string | undefined;
19476
19522
  } | undefined;
19523
+ concept?: string | undefined;
19524
+ mirror?: string | undefined;
19477
19525
  styles?: string[] | undefined;
19478
19526
  };
19479
19527
  expectedSha256: string;
@@ -19482,7 +19530,6 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19482
19530
  assetId: string;
19483
19531
  action: "add-asset";
19484
19532
  asset: {
19485
- prompt: string;
19486
19533
  width?: number | undefined;
19487
19534
  height?: number | undefined;
19488
19535
  animation?: {
@@ -19491,11 +19538,13 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19491
19538
  fps?: number | undefined;
19492
19539
  template?: string | undefined;
19493
19540
  direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
19541
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
19494
19542
  mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
19495
19543
  subject?: string | undefined;
19496
19544
  enhancePrompt?: boolean | undefined;
19497
19545
  } | undefined;
19498
19546
  size?: number | undefined;
19547
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
19499
19548
  state?: {
19500
19549
  of: string;
19501
19550
  paletteFromReference?: boolean | undefined;
@@ -19504,7 +19553,25 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19504
19553
  height: number;
19505
19554
  } | undefined;
19506
19555
  } | undefined;
19556
+ portrait?: {
19557
+ of: string;
19558
+ size?: 16 | 32 | 64 | 128 | 48 | 160 | undefined;
19559
+ } | undefined;
19560
+ outfit?: {
19561
+ of: string;
19562
+ reference: string;
19563
+ additionalInstructions?: string | undefined;
19564
+ } | undefined;
19565
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
19566
+ headSize?: number | undefined;
19567
+ armsLength?: number | undefined;
19568
+ legsLength?: number | undefined;
19569
+ shoulderWidth?: number | undefined;
19570
+ hipWidth?: number | undefined;
19571
+ } | undefined;
19572
+ styleCharacter?: string | undefined;
19507
19573
  tags?: string[] | undefined;
19574
+ prompt?: string | undefined;
19508
19575
  category?: string | undefined;
19509
19576
  revision?: {
19510
19577
  mode: "image-to-image";
@@ -19518,17 +19585,22 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19518
19585
  skeletonTemplate?: string | undefined;
19519
19586
  description?: string | undefined;
19520
19587
  } | undefined;
19588
+ concept?: string | undefined;
19589
+ mirror?: string | undefined;
19521
19590
  styles?: string[] | undefined;
19522
19591
  };
19523
19592
  expectedSha256: string;
19524
19593
  project?: string | undefined;
19525
19594
  }>, z.ZodObject<{
19526
19595
  action: z.ZodLiteral<"set-source">;
19527
- project: z.ZodOptional<z.ZodString>;
19528
19596
  assetId: z.ZodString;
19529
19597
  styleId: z.ZodString;
19530
19598
  /** Manifest-relative path of the art that stands in for this asset in this style. */
19531
19599
  source: z.ZodString;
19600
+ } & {
19601
+ /** Workspace project id; omitted for a single-project gallery. */
19602
+ project: z.ZodOptional<z.ZodString>;
19603
+ /** Manifest bytes the page last saw; a mismatch refuses the write. */
19532
19604
  expectedSha256: z.ZodString;
19533
19605
  }, "strict", z.ZodTypeAny, {
19534
19606
  source: string;
@@ -19546,9 +19618,12 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19546
19618
  project?: string | undefined;
19547
19619
  }>, z.ZodObject<{
19548
19620
  action: z.ZodLiteral<"clear-source">;
19549
- project: z.ZodOptional<z.ZodString>;
19550
19621
  assetId: z.ZodString;
19551
19622
  styleId: z.ZodString;
19623
+ } & {
19624
+ /** Workspace project id; omitted for a single-project gallery. */
19625
+ project: z.ZodOptional<z.ZodString>;
19626
+ /** Manifest bytes the page last saw; a mismatch refuses the write. */
19552
19627
  expectedSha256: z.ZodString;
19553
19628
  }, "strict", z.ZodTypeAny, {
19554
19629
  styleId: string;
@@ -19564,9 +19639,7 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19564
19639
  project?: string | undefined;
19565
19640
  }>, z.ZodObject<{
19566
19641
  action: z.ZodLiteral<"patch-style">;
19567
- project: z.ZodOptional<z.ZodString>;
19568
19642
  styleId: z.ZodString;
19569
- expectedSha256: z.ZodString;
19570
19643
  patch: z.ZodEffects<z.ZodObject<{
19571
19644
  /** Candidates per generation, written to the provider's own option. */
19572
19645
  candidates: z.ZodOptional<z.ZodNumber>;
@@ -19614,6 +19687,11 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19614
19687
  noBackground?: boolean | null | undefined;
19615
19688
  enforcePalette?: boolean | undefined;
19616
19689
  }>;
19690
+ } & {
19691
+ /** Workspace project id; omitted for a single-project gallery. */
19692
+ project: z.ZodOptional<z.ZodString>;
19693
+ /** Manifest bytes the page last saw; a mismatch refuses the write. */
19694
+ expectedSha256: z.ZodString;
19617
19695
  }, "strict", z.ZodTypeAny, {
19618
19696
  styleId: string;
19619
19697
  action: "patch-style";
@@ -19642,80 +19720,1613 @@ declare const ManifestEditSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject
19642
19720
  };
19643
19721
  expectedSha256: string;
19644
19722
  project?: string | undefined;
19645
- }>]>;
19646
- type ManifestEdit = z.infer<typeof ManifestEditSchema>;
19647
- /** The page showed a manifest that has since changed; the write is refused. */
19648
- declare class ManifestDriftError extends Error {
19649
- readonly status = 409;
19650
- constructor(manifestPath: string);
19651
- }
19652
- /** A request the schema or the manifest rules reject; nothing was written. */
19653
- declare class ManifestEditError extends Error {
19654
- readonly status = 400;
19655
- constructor(message: string);
19656
- }
19657
- interface ManifestEditResult {
19658
- manifestPath: string;
19659
- /** Hash of the manifest after the write, for the next edit's `expectedSha256`. */
19660
- sha256: string;
19661
- changed: boolean;
19662
- }
19663
- /**
19664
- * Apply one edit to the manifest on disk. The write is refused when the file
19665
- * no longer matches what the page saw, and rolled back when the edited
19666
- * manifest fails to load or resolve; an invalid manifest never lands.
19667
- */
19668
- declare function applyManifestEdit(manifestPath: string, edit: ManifestEdit): Promise<ManifestEditResult>;
19669
-
19670
- interface GalleryEditHandlerOptions {
19671
- /** Resolves the manifest an edit may rewrite; must never trust a client path. */
19672
- manifestFor: (project?: string) => string | Promise<string>;
19673
- /** Rebuilds the gallery after a successful write. */
19674
- reload: () => Promise<GalleryBuild>;
19675
- /** Loads a project for hand-edit actions, which need resolved specs and the lock. */
19676
- loadProject?: (project?: string) => Promise<GalleryProjectContext>;
19677
- /** Launches the author's editor; defaults to `openInEditor`. */
19678
- openEditor?: (file: string) => string;
19679
- onProgress?: (msg: string) => void;
19680
- }
19681
- /** The `edit` callback `serveGallery` expects: validate, apply, rebuild. */
19682
- declare function createGalleryEditHandler(opts: GalleryEditHandlerOptions): (body: unknown) => Promise<GalleryBuild>;
19683
-
19684
- /**
19685
- * Estimates this gallery session has made, against its cap, and what
19686
- * PixelLab reported billing for them, in whatever unit each response named.
19687
- * Kept apart from the generation budget: PixelLab documents this endpoint in
19688
- * dollars, and dollars do not convert to generations.
19689
- */
19690
- interface SkeletonEstimateSession {
19691
- used: number;
19692
- limit: number;
19693
- spent: Record<string, number>;
19694
- }
19695
- interface GallerySkeletonHandlers {
19696
- estimate(body: unknown): Promise<{
19697
- set: SkeletonSet;
19698
- source: string;
19699
- session: SkeletonEstimateSession;
19700
- }>;
19701
- status(): SkeletonEstimateSession;
19702
- }
19703
-
19704
- /**
19705
- * The gallery's HTTP surface. Unlike the review server this is long-lived:
19706
- * three GET routes, bound to loopback, running until the caller closes it
19707
- * (the CLI does so on Ctrl+C). It has no write path unless the caller opts
19708
- * in: `edit` adds one POST route for manifest edits, `generate` adds the
19709
- * routes that start a generation job and host its review sheet, and `editor`
19710
- * adds the routes that install and serve the in-browser pixel editor.
19711
- *
19712
- * Every POST is guarded twice, because a page on localhost is reachable by
19713
- * every other page in the browser: the request's Origin must be this server,
19714
- * and it must carry the session token minted at startup, which only the
19715
- * served page knows. A cross-origin page can neither read the token nor send
19716
- * the custom header without a preflight this server refuses.
19717
- *
19718
- * The snapshot is rebuilt on every page load and every `/api/gallery.json`
19723
+ }>, z.ZodObject<{
19724
+ action: z.ZodLiteral<"add-style">;
19725
+ styleId: z.ZodString;
19726
+ style: z.ZodObject<{
19727
+ generator: z.ZodEnum<["character", "objectPro"]>;
19728
+ /** Where the style's art is written, inside the project. */
19729
+ outDir: z.ZodEffects<z.ZodString, string, string>;
19730
+ size: z.ZodOptional<z.ZodNumber>;
19731
+ mode: z.ZodOptional<z.ZodEnum<["standard", "v3", "pro", "pro-flash"]>>;
19732
+ directions: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<4>, z.ZodLiteral<8>]>>;
19733
+ template: z.ZodOptional<z.ZodString>;
19734
+ view: z.ZodOptional<z.ZodString>;
19735
+ proportions: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["default", "chibi", "cartoon", "stylized", "realistic_male", "realistic_female", "heroic"]>, z.ZodObject<{
19736
+ headSize: z.ZodOptional<z.ZodNumber>;
19737
+ armsLength: z.ZodOptional<z.ZodNumber>;
19738
+ legsLength: z.ZodOptional<z.ZodNumber>;
19739
+ shoulderWidth: z.ZodOptional<z.ZodNumber>;
19740
+ hipWidth: z.ZodOptional<z.ZodNumber>;
19741
+ }, "strict", z.ZodTypeAny, {
19742
+ headSize?: number | undefined;
19743
+ armsLength?: number | undefined;
19744
+ legsLength?: number | undefined;
19745
+ shoulderWidth?: number | undefined;
19746
+ hipWidth?: number | undefined;
19747
+ }, {
19748
+ headSize?: number | undefined;
19749
+ armsLength?: number | undefined;
19750
+ legsLength?: number | undefined;
19751
+ shoulderWidth?: number | undefined;
19752
+ hipWidth?: number | undefined;
19753
+ }>]>>;
19754
+ isometric: z.ZodOptional<z.ZodBoolean>;
19755
+ textGuidanceScale: z.ZodOptional<z.ZodNumber>;
19756
+ enhancePrompt: z.ZodOptional<z.ZodBoolean>;
19757
+ promptPrefix: z.ZodOptional<z.ZodString>;
19758
+ promptSuffix: z.ZodOptional<z.ZodString>;
19759
+ palette: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
19760
+ }, "strict", z.ZodTypeAny, {
19761
+ outDir: string;
19762
+ generator: "character" | "objectPro";
19763
+ palette?: string[] | undefined;
19764
+ template?: string | undefined;
19765
+ size?: number | undefined;
19766
+ directions?: 4 | 8 | undefined;
19767
+ mode?: "standard" | "v3" | "pro" | "pro-flash" | undefined;
19768
+ enhancePrompt?: boolean | undefined;
19769
+ view?: string | undefined;
19770
+ promptSuffix?: string | undefined;
19771
+ promptPrefix?: string | undefined;
19772
+ isometric?: boolean | undefined;
19773
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
19774
+ headSize?: number | undefined;
19775
+ armsLength?: number | undefined;
19776
+ legsLength?: number | undefined;
19777
+ shoulderWidth?: number | undefined;
19778
+ hipWidth?: number | undefined;
19779
+ } | undefined;
19780
+ textGuidanceScale?: number | undefined;
19781
+ }, {
19782
+ outDir: string;
19783
+ generator: "character" | "objectPro";
19784
+ palette?: string[] | undefined;
19785
+ template?: string | undefined;
19786
+ size?: number | undefined;
19787
+ directions?: 4 | 8 | undefined;
19788
+ mode?: "standard" | "v3" | "pro" | "pro-flash" | undefined;
19789
+ enhancePrompt?: boolean | undefined;
19790
+ view?: string | undefined;
19791
+ promptSuffix?: string | undefined;
19792
+ promptPrefix?: string | undefined;
19793
+ isometric?: boolean | undefined;
19794
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
19795
+ headSize?: number | undefined;
19796
+ armsLength?: number | undefined;
19797
+ legsLength?: number | undefined;
19798
+ shoulderWidth?: number | undefined;
19799
+ hipWidth?: number | undefined;
19800
+ } | undefined;
19801
+ textGuidanceScale?: number | undefined;
19802
+ }>;
19803
+ } & {
19804
+ /** Workspace project id; omitted for a single-project gallery. */
19805
+ project: z.ZodOptional<z.ZodString>;
19806
+ /** Manifest bytes the page last saw; a mismatch refuses the write. */
19807
+ expectedSha256: z.ZodString;
19808
+ }, "strict", z.ZodTypeAny, {
19809
+ styleId: string;
19810
+ action: "add-style";
19811
+ style: {
19812
+ outDir: string;
19813
+ generator: "character" | "objectPro";
19814
+ palette?: string[] | undefined;
19815
+ template?: string | undefined;
19816
+ size?: number | undefined;
19817
+ directions?: 4 | 8 | undefined;
19818
+ mode?: "standard" | "v3" | "pro" | "pro-flash" | undefined;
19819
+ enhancePrompt?: boolean | undefined;
19820
+ view?: string | undefined;
19821
+ promptSuffix?: string | undefined;
19822
+ promptPrefix?: string | undefined;
19823
+ isometric?: boolean | undefined;
19824
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
19825
+ headSize?: number | undefined;
19826
+ armsLength?: number | undefined;
19827
+ legsLength?: number | undefined;
19828
+ shoulderWidth?: number | undefined;
19829
+ hipWidth?: number | undefined;
19830
+ } | undefined;
19831
+ textGuidanceScale?: number | undefined;
19832
+ };
19833
+ expectedSha256: string;
19834
+ project?: string | undefined;
19835
+ }, {
19836
+ styleId: string;
19837
+ action: "add-style";
19838
+ style: {
19839
+ outDir: string;
19840
+ generator: "character" | "objectPro";
19841
+ palette?: string[] | undefined;
19842
+ template?: string | undefined;
19843
+ size?: number | undefined;
19844
+ directions?: 4 | 8 | undefined;
19845
+ mode?: "standard" | "v3" | "pro" | "pro-flash" | undefined;
19846
+ enhancePrompt?: boolean | undefined;
19847
+ view?: string | undefined;
19848
+ promptSuffix?: string | undefined;
19849
+ promptPrefix?: string | undefined;
19850
+ isometric?: boolean | undefined;
19851
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
19852
+ headSize?: number | undefined;
19853
+ armsLength?: number | undefined;
19854
+ legsLength?: number | undefined;
19855
+ shoulderWidth?: number | undefined;
19856
+ hipWidth?: number | undefined;
19857
+ } | undefined;
19858
+ textGuidanceScale?: number | undefined;
19859
+ };
19860
+ expectedSha256: string;
19861
+ project?: string | undefined;
19862
+ }>, z.ZodObject<{
19863
+ edits: z.ZodArray<z.ZodDiscriminatedUnion<"action", [z.ZodObject<{
19864
+ action: z.ZodLiteral<"patch-asset">;
19865
+ assetId: z.ZodString;
19866
+ patch: z.ZodObject<{
19867
+ prompt: z.ZodOptional<z.ZodString>;
19868
+ /** Per-style override for the style being viewed; null removes it. */
19869
+ promptForStyle: z.ZodOptional<z.ZodObject<{
19870
+ styleId: z.ZodString;
19871
+ prompt: z.ZodNullable<z.ZodString>;
19872
+ }, "strip", z.ZodTypeAny, {
19873
+ prompt: string | null;
19874
+ styleId: string;
19875
+ }, {
19876
+ prompt: string | null;
19877
+ styleId: string;
19878
+ }>>;
19879
+ category: z.ZodOptional<z.ZodNullable<z.ZodString>>;
19880
+ width: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
19881
+ height: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
19882
+ size: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
19883
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
19884
+ }, "strict", z.ZodTypeAny, {
19885
+ width?: number | null | undefined;
19886
+ height?: number | null | undefined;
19887
+ size?: number | null | undefined;
19888
+ tags?: string[] | undefined;
19889
+ prompt?: string | undefined;
19890
+ category?: string | null | undefined;
19891
+ promptForStyle?: {
19892
+ prompt: string | null;
19893
+ styleId: string;
19894
+ } | undefined;
19895
+ }, {
19896
+ width?: number | null | undefined;
19897
+ height?: number | null | undefined;
19898
+ size?: number | null | undefined;
19899
+ tags?: string[] | undefined;
19900
+ prompt?: string | undefined;
19901
+ category?: string | null | undefined;
19902
+ promptForStyle?: {
19903
+ prompt: string | null;
19904
+ styleId: string;
19905
+ } | undefined;
19906
+ }>;
19907
+ }, "strict", z.ZodTypeAny, {
19908
+ assetId: string;
19909
+ action: "patch-asset";
19910
+ patch: {
19911
+ width?: number | null | undefined;
19912
+ height?: number | null | undefined;
19913
+ size?: number | null | undefined;
19914
+ tags?: string[] | undefined;
19915
+ prompt?: string | undefined;
19916
+ category?: string | null | undefined;
19917
+ promptForStyle?: {
19918
+ prompt: string | null;
19919
+ styleId: string;
19920
+ } | undefined;
19921
+ };
19922
+ }, {
19923
+ assetId: string;
19924
+ action: "patch-asset";
19925
+ patch: {
19926
+ width?: number | null | undefined;
19927
+ height?: number | null | undefined;
19928
+ size?: number | null | undefined;
19929
+ tags?: string[] | undefined;
19930
+ prompt?: string | undefined;
19931
+ category?: string | null | undefined;
19932
+ promptForStyle?: {
19933
+ prompt: string | null;
19934
+ styleId: string;
19935
+ } | undefined;
19936
+ };
19937
+ }>, z.ZodObject<{
19938
+ action: z.ZodLiteral<"add-asset">;
19939
+ assetId: z.ZodString;
19940
+ asset: z.ZodEffects<z.ZodEffects<z.ZodObject<{
19941
+ /** A portrait, an outfit, or a mirror has none of its own; the loader says where one is needed. */
19942
+ prompt: z.ZodOptional<z.ZodString>;
19943
+ category: z.ZodOptional<z.ZodString>;
19944
+ width: z.ZodOptional<z.ZodNumber>;
19945
+ height: z.ZodOptional<z.ZodNumber>;
19946
+ size: z.ZodOptional<z.ZodNumber>;
19947
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
19948
+ /** Restrict to these styles; empty or omitted means every style. */
19949
+ styles: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
19950
+ /**
19951
+ * A controlled regeneration of another asset in the same manifest,
19952
+ * instead of a fresh generation. `inpaint` needs a mask upload the
19953
+ * gallery does not offer yet, so only `image-to-image` and
19954
+ * `animate-skeleton` (whose keypoints file the gallery writes first) can
19955
+ * be created here; hand-edit the manifest for the other modes.
19956
+ */
19957
+ revision: z.ZodOptional<z.ZodDiscriminatedUnion<"mode", [z.ZodObject<{
19958
+ mode: z.ZodLiteral<"image-to-image">;
19959
+ /** Asset id of the parent this revises; must already exist. */
19960
+ from: z.ZodString;
19961
+ strength: z.ZodOptional<z.ZodNumber>;
19962
+ }, "strict", z.ZodTypeAny, {
19963
+ mode: "image-to-image";
19964
+ from: string;
19965
+ strength?: number | undefined;
19966
+ }, {
19967
+ mode: "image-to-image";
19968
+ from: string;
19969
+ strength?: number | undefined;
19970
+ }>, z.ZodObject<{
19971
+ mode: z.ZodLiteral<"animate-skeleton">;
19972
+ from: z.ZodString;
19973
+ /** Manifest-relative; checked when the manifest is loaded, like every revision input. */
19974
+ keypointsFile: z.ZodString;
19975
+ direction: z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>;
19976
+ description: z.ZodOptional<z.ZodString>;
19977
+ skeletonTemplate: z.ZodOptional<z.ZodString>;
19978
+ }, "strict", z.ZodTypeAny, {
19979
+ direction: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west";
19980
+ mode: "animate-skeleton";
19981
+ from: string;
19982
+ keypointsFile: string;
19983
+ skeletonTemplate?: string | undefined;
19984
+ description?: string | undefined;
19985
+ }, {
19986
+ direction: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west";
19987
+ mode: "animate-skeleton";
19988
+ from: string;
19989
+ keypointsFile: string;
19990
+ skeletonTemplate?: string | undefined;
19991
+ description?: string | undefined;
19992
+ }>]>>;
19993
+ /** A pose or outfit of an existing `character`/`objectPro` base or state. */
19994
+ state: z.ZodOptional<z.ZodObject<{
19995
+ /** Asset id of the parent this states; must already exist. */
19996
+ of: z.ZodString;
19997
+ paletteFromReference: z.ZodOptional<z.ZodBoolean>;
19998
+ canvas: z.ZodOptional<z.ZodObject<{
19999
+ width: z.ZodNumber;
20000
+ height: z.ZodNumber;
20001
+ }, "strict", z.ZodTypeAny, {
20002
+ width: number;
20003
+ height: number;
20004
+ }, {
20005
+ width: number;
20006
+ height: number;
20007
+ }>>;
20008
+ }, "strict", z.ZodTypeAny, {
20009
+ of: string;
20010
+ paletteFromReference?: boolean | undefined;
20011
+ canvas?: {
20012
+ width: number;
20013
+ height: number;
20014
+ } | undefined;
20015
+ }, {
20016
+ of: string;
20017
+ paletteFromReference?: boolean | undefined;
20018
+ canvas?: {
20019
+ width: number;
20020
+ height: number;
20021
+ } | undefined;
20022
+ }>>;
20023
+ /** A loop of an existing `character`/`objectPro` base or state. */
20024
+ animation: z.ZodOptional<z.ZodObject<{
20025
+ /** Asset id of the parent this animates; must already exist. */
20026
+ of: z.ZodString;
20027
+ /** A PixelLab template id (`character` only; `objectPro` has no template concept). */
20028
+ template: z.ZodOptional<z.ZodString>;
20029
+ direction: z.ZodOptional<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>>;
20030
+ frames: z.ZodOptional<z.ZodNumber>;
20031
+ fps: z.ZodOptional<z.ZodNumber>;
20032
+ /** One loop per named direction, plus free mirrors; expanded when the manifest loads. */
20033
+ directions: z.ZodOptional<z.ZodArray<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>, "many">>;
20034
+ mode: z.ZodOptional<z.ZodEnum<["template", "skeleton-v3", "v3", "pro"]>>;
20035
+ /** What is being animated, when the parent's own description would mislead the model (`character` only). */
20036
+ subject: z.ZodOptional<z.ZodString>;
20037
+ enhancePrompt: z.ZodOptional<z.ZodBoolean>;
20038
+ }, "strict", z.ZodTypeAny, {
20039
+ of: string;
20040
+ frames?: number | undefined;
20041
+ fps?: number | undefined;
20042
+ template?: string | undefined;
20043
+ direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
20044
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
20045
+ mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
20046
+ subject?: string | undefined;
20047
+ enhancePrompt?: boolean | undefined;
20048
+ }, {
20049
+ of: string;
20050
+ frames?: number | undefined;
20051
+ fps?: number | undefined;
20052
+ template?: string | undefined;
20053
+ direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
20054
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
20055
+ mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
20056
+ subject?: string | undefined;
20057
+ enhancePrompt?: boolean | undefined;
20058
+ }>>;
20059
+ /** A bust of an existing character. */
20060
+ portrait: z.ZodOptional<z.ZodObject<{
20061
+ of: z.ZodString;
20062
+ size: z.ZodDefault<z.ZodUnion<[z.ZodLiteral<16>, z.ZodLiteral<32>, z.ZodLiteral<48>, z.ZodLiteral<64>, z.ZodLiteral<128>, z.ZodLiteral<160>]>>;
20063
+ }, "strict", z.ZodTypeAny, {
20064
+ of: string;
20065
+ size: 16 | 32 | 64 | 128 | 48 | 160;
20066
+ }, {
20067
+ of: string;
20068
+ size?: 16 | 32 | 64 | 128 | 48 | 160 | undefined;
20069
+ }>>;
20070
+ /** An existing loop re-clothed from a reference image (uploaded first). */
20071
+ outfit: z.ZodOptional<z.ZodObject<{
20072
+ of: z.ZodString;
20073
+ reference: z.ZodString;
20074
+ additionalInstructions: z.ZodOptional<z.ZodString>;
20075
+ }, "strict", z.ZodTypeAny, {
20076
+ of: string;
20077
+ reference: string;
20078
+ additionalInstructions?: string | undefined;
20079
+ }, {
20080
+ of: string;
20081
+ reference: string;
20082
+ additionalInstructions?: string | undefined;
20083
+ }>>;
20084
+ /** Another asset of the same style, flipped; free. */
20085
+ mirror: z.ZodOptional<z.ZodString>;
20086
+ /**
20087
+ * `character`/`objectPro` bases: the subject's own sprite (uploaded
20088
+ * first), or one per direction, which PixelLab rotates instead of drawing.
20089
+ */
20090
+ reference: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodEnum<["south", "south-east", "east", "north-east", "north", "north-west", "west", "south-west"]>, z.ZodString>]>>;
20091
+ /** `character` pro bases: a concept image that seeds the design. */
20092
+ concept: z.ZodOptional<z.ZodString>;
20093
+ /** `character` pro bases: another character in the style whose look this one follows. */
20094
+ styleCharacter: z.ZodOptional<z.ZodString>;
20095
+ /** `character` standard humanoid bases: this character's proportions, over the style's. */
20096
+ proportions: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["default", "chibi", "cartoon", "stylized", "realistic_male", "realistic_female", "heroic"]>, z.ZodObject<{
20097
+ headSize: z.ZodOptional<z.ZodNumber>;
20098
+ armsLength: z.ZodOptional<z.ZodNumber>;
20099
+ legsLength: z.ZodOptional<z.ZodNumber>;
20100
+ shoulderWidth: z.ZodOptional<z.ZodNumber>;
20101
+ hipWidth: z.ZodOptional<z.ZodNumber>;
20102
+ }, "strict", z.ZodTypeAny, {
20103
+ headSize?: number | undefined;
20104
+ armsLength?: number | undefined;
20105
+ legsLength?: number | undefined;
20106
+ shoulderWidth?: number | undefined;
20107
+ hipWidth?: number | undefined;
20108
+ }, {
20109
+ headSize?: number | undefined;
20110
+ armsLength?: number | undefined;
20111
+ legsLength?: number | undefined;
20112
+ shoulderWidth?: number | undefined;
20113
+ hipWidth?: number | undefined;
20114
+ }>]>>;
20115
+ }, "strict", z.ZodTypeAny, {
20116
+ width?: number | undefined;
20117
+ height?: number | undefined;
20118
+ animation?: {
20119
+ of: string;
20120
+ frames?: number | undefined;
20121
+ fps?: number | undefined;
20122
+ template?: string | undefined;
20123
+ direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
20124
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
20125
+ mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
20126
+ subject?: string | undefined;
20127
+ enhancePrompt?: boolean | undefined;
20128
+ } | undefined;
20129
+ size?: number | undefined;
20130
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
20131
+ state?: {
20132
+ of: string;
20133
+ paletteFromReference?: boolean | undefined;
20134
+ canvas?: {
20135
+ width: number;
20136
+ height: number;
20137
+ } | undefined;
20138
+ } | undefined;
20139
+ portrait?: {
20140
+ of: string;
20141
+ size: 16 | 32 | 64 | 128 | 48 | 160;
20142
+ } | undefined;
20143
+ outfit?: {
20144
+ of: string;
20145
+ reference: string;
20146
+ additionalInstructions?: string | undefined;
20147
+ } | undefined;
20148
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20149
+ headSize?: number | undefined;
20150
+ armsLength?: number | undefined;
20151
+ legsLength?: number | undefined;
20152
+ shoulderWidth?: number | undefined;
20153
+ hipWidth?: number | undefined;
20154
+ } | undefined;
20155
+ styleCharacter?: string | undefined;
20156
+ tags?: string[] | undefined;
20157
+ prompt?: string | undefined;
20158
+ category?: string | undefined;
20159
+ revision?: {
20160
+ mode: "image-to-image";
20161
+ from: string;
20162
+ strength?: number | undefined;
20163
+ } | {
20164
+ direction: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west";
20165
+ mode: "animate-skeleton";
20166
+ from: string;
20167
+ keypointsFile: string;
20168
+ skeletonTemplate?: string | undefined;
20169
+ description?: string | undefined;
20170
+ } | undefined;
20171
+ concept?: string | undefined;
20172
+ mirror?: string | undefined;
20173
+ styles?: string[] | undefined;
20174
+ }, {
20175
+ width?: number | undefined;
20176
+ height?: number | undefined;
20177
+ animation?: {
20178
+ of: string;
20179
+ frames?: number | undefined;
20180
+ fps?: number | undefined;
20181
+ template?: string | undefined;
20182
+ direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
20183
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
20184
+ mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
20185
+ subject?: string | undefined;
20186
+ enhancePrompt?: boolean | undefined;
20187
+ } | undefined;
20188
+ size?: number | undefined;
20189
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
20190
+ state?: {
20191
+ of: string;
20192
+ paletteFromReference?: boolean | undefined;
20193
+ canvas?: {
20194
+ width: number;
20195
+ height: number;
20196
+ } | undefined;
20197
+ } | undefined;
20198
+ portrait?: {
20199
+ of: string;
20200
+ size?: 16 | 32 | 64 | 128 | 48 | 160 | undefined;
20201
+ } | undefined;
20202
+ outfit?: {
20203
+ of: string;
20204
+ reference: string;
20205
+ additionalInstructions?: string | undefined;
20206
+ } | undefined;
20207
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20208
+ headSize?: number | undefined;
20209
+ armsLength?: number | undefined;
20210
+ legsLength?: number | undefined;
20211
+ shoulderWidth?: number | undefined;
20212
+ hipWidth?: number | undefined;
20213
+ } | undefined;
20214
+ styleCharacter?: string | undefined;
20215
+ tags?: string[] | undefined;
20216
+ prompt?: string | undefined;
20217
+ category?: string | undefined;
20218
+ revision?: {
20219
+ mode: "image-to-image";
20220
+ from: string;
20221
+ strength?: number | undefined;
20222
+ } | {
20223
+ direction: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west";
20224
+ mode: "animate-skeleton";
20225
+ from: string;
20226
+ keypointsFile: string;
20227
+ skeletonTemplate?: string | undefined;
20228
+ description?: string | undefined;
20229
+ } | undefined;
20230
+ concept?: string | undefined;
20231
+ mirror?: string | undefined;
20232
+ styles?: string[] | undefined;
20233
+ }>, {
20234
+ width?: number | undefined;
20235
+ height?: number | undefined;
20236
+ animation?: {
20237
+ of: string;
20238
+ frames?: number | undefined;
20239
+ fps?: number | undefined;
20240
+ template?: string | undefined;
20241
+ direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
20242
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
20243
+ mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
20244
+ subject?: string | undefined;
20245
+ enhancePrompt?: boolean | undefined;
20246
+ } | undefined;
20247
+ size?: number | undefined;
20248
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
20249
+ state?: {
20250
+ of: string;
20251
+ paletteFromReference?: boolean | undefined;
20252
+ canvas?: {
20253
+ width: number;
20254
+ height: number;
20255
+ } | undefined;
20256
+ } | undefined;
20257
+ portrait?: {
20258
+ of: string;
20259
+ size: 16 | 32 | 64 | 128 | 48 | 160;
20260
+ } | undefined;
20261
+ outfit?: {
20262
+ of: string;
20263
+ reference: string;
20264
+ additionalInstructions?: string | undefined;
20265
+ } | undefined;
20266
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20267
+ headSize?: number | undefined;
20268
+ armsLength?: number | undefined;
20269
+ legsLength?: number | undefined;
20270
+ shoulderWidth?: number | undefined;
20271
+ hipWidth?: number | undefined;
20272
+ } | undefined;
20273
+ styleCharacter?: string | undefined;
20274
+ tags?: string[] | undefined;
20275
+ prompt?: string | undefined;
20276
+ category?: string | undefined;
20277
+ revision?: {
20278
+ mode: "image-to-image";
20279
+ from: string;
20280
+ strength?: number | undefined;
20281
+ } | {
20282
+ direction: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west";
20283
+ mode: "animate-skeleton";
20284
+ from: string;
20285
+ keypointsFile: string;
20286
+ skeletonTemplate?: string | undefined;
20287
+ description?: string | undefined;
20288
+ } | undefined;
20289
+ concept?: string | undefined;
20290
+ mirror?: string | undefined;
20291
+ styles?: string[] | undefined;
20292
+ }, {
20293
+ width?: number | undefined;
20294
+ height?: number | undefined;
20295
+ animation?: {
20296
+ of: string;
20297
+ frames?: number | undefined;
20298
+ fps?: number | undefined;
20299
+ template?: string | undefined;
20300
+ direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
20301
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
20302
+ mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
20303
+ subject?: string | undefined;
20304
+ enhancePrompt?: boolean | undefined;
20305
+ } | undefined;
20306
+ size?: number | undefined;
20307
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
20308
+ state?: {
20309
+ of: string;
20310
+ paletteFromReference?: boolean | undefined;
20311
+ canvas?: {
20312
+ width: number;
20313
+ height: number;
20314
+ } | undefined;
20315
+ } | undefined;
20316
+ portrait?: {
20317
+ of: string;
20318
+ size?: 16 | 32 | 64 | 128 | 48 | 160 | undefined;
20319
+ } | undefined;
20320
+ outfit?: {
20321
+ of: string;
20322
+ reference: string;
20323
+ additionalInstructions?: string | undefined;
20324
+ } | undefined;
20325
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20326
+ headSize?: number | undefined;
20327
+ armsLength?: number | undefined;
20328
+ legsLength?: number | undefined;
20329
+ shoulderWidth?: number | undefined;
20330
+ hipWidth?: number | undefined;
20331
+ } | undefined;
20332
+ styleCharacter?: string | undefined;
20333
+ tags?: string[] | undefined;
20334
+ prompt?: string | undefined;
20335
+ category?: string | undefined;
20336
+ revision?: {
20337
+ mode: "image-to-image";
20338
+ from: string;
20339
+ strength?: number | undefined;
20340
+ } | {
20341
+ direction: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west";
20342
+ mode: "animate-skeleton";
20343
+ from: string;
20344
+ keypointsFile: string;
20345
+ skeletonTemplate?: string | undefined;
20346
+ description?: string | undefined;
20347
+ } | undefined;
20348
+ concept?: string | undefined;
20349
+ mirror?: string | undefined;
20350
+ styles?: string[] | undefined;
20351
+ }>, {
20352
+ width?: number | undefined;
20353
+ height?: number | undefined;
20354
+ animation?: {
20355
+ of: string;
20356
+ frames?: number | undefined;
20357
+ fps?: number | undefined;
20358
+ template?: string | undefined;
20359
+ direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
20360
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
20361
+ mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
20362
+ subject?: string | undefined;
20363
+ enhancePrompt?: boolean | undefined;
20364
+ } | undefined;
20365
+ size?: number | undefined;
20366
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
20367
+ state?: {
20368
+ of: string;
20369
+ paletteFromReference?: boolean | undefined;
20370
+ canvas?: {
20371
+ width: number;
20372
+ height: number;
20373
+ } | undefined;
20374
+ } | undefined;
20375
+ portrait?: {
20376
+ of: string;
20377
+ size: 16 | 32 | 64 | 128 | 48 | 160;
20378
+ } | undefined;
20379
+ outfit?: {
20380
+ of: string;
20381
+ reference: string;
20382
+ additionalInstructions?: string | undefined;
20383
+ } | undefined;
20384
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20385
+ headSize?: number | undefined;
20386
+ armsLength?: number | undefined;
20387
+ legsLength?: number | undefined;
20388
+ shoulderWidth?: number | undefined;
20389
+ hipWidth?: number | undefined;
20390
+ } | undefined;
20391
+ styleCharacter?: string | undefined;
20392
+ tags?: string[] | undefined;
20393
+ prompt?: string | undefined;
20394
+ category?: string | undefined;
20395
+ revision?: {
20396
+ mode: "image-to-image";
20397
+ from: string;
20398
+ strength?: number | undefined;
20399
+ } | {
20400
+ direction: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west";
20401
+ mode: "animate-skeleton";
20402
+ from: string;
20403
+ keypointsFile: string;
20404
+ skeletonTemplate?: string | undefined;
20405
+ description?: string | undefined;
20406
+ } | undefined;
20407
+ concept?: string | undefined;
20408
+ mirror?: string | undefined;
20409
+ styles?: string[] | undefined;
20410
+ }, {
20411
+ width?: number | undefined;
20412
+ height?: number | undefined;
20413
+ animation?: {
20414
+ of: string;
20415
+ frames?: number | undefined;
20416
+ fps?: number | undefined;
20417
+ template?: string | undefined;
20418
+ direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
20419
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
20420
+ mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
20421
+ subject?: string | undefined;
20422
+ enhancePrompt?: boolean | undefined;
20423
+ } | undefined;
20424
+ size?: number | undefined;
20425
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
20426
+ state?: {
20427
+ of: string;
20428
+ paletteFromReference?: boolean | undefined;
20429
+ canvas?: {
20430
+ width: number;
20431
+ height: number;
20432
+ } | undefined;
20433
+ } | undefined;
20434
+ portrait?: {
20435
+ of: string;
20436
+ size?: 16 | 32 | 64 | 128 | 48 | 160 | undefined;
20437
+ } | undefined;
20438
+ outfit?: {
20439
+ of: string;
20440
+ reference: string;
20441
+ additionalInstructions?: string | undefined;
20442
+ } | undefined;
20443
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20444
+ headSize?: number | undefined;
20445
+ armsLength?: number | undefined;
20446
+ legsLength?: number | undefined;
20447
+ shoulderWidth?: number | undefined;
20448
+ hipWidth?: number | undefined;
20449
+ } | undefined;
20450
+ styleCharacter?: string | undefined;
20451
+ tags?: string[] | undefined;
20452
+ prompt?: string | undefined;
20453
+ category?: string | undefined;
20454
+ revision?: {
20455
+ mode: "image-to-image";
20456
+ from: string;
20457
+ strength?: number | undefined;
20458
+ } | {
20459
+ direction: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west";
20460
+ mode: "animate-skeleton";
20461
+ from: string;
20462
+ keypointsFile: string;
20463
+ skeletonTemplate?: string | undefined;
20464
+ description?: string | undefined;
20465
+ } | undefined;
20466
+ concept?: string | undefined;
20467
+ mirror?: string | undefined;
20468
+ styles?: string[] | undefined;
20469
+ }>;
20470
+ }, "strict", z.ZodTypeAny, {
20471
+ assetId: string;
20472
+ action: "add-asset";
20473
+ asset: {
20474
+ width?: number | undefined;
20475
+ height?: number | undefined;
20476
+ animation?: {
20477
+ of: string;
20478
+ frames?: number | undefined;
20479
+ fps?: number | undefined;
20480
+ template?: string | undefined;
20481
+ direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
20482
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
20483
+ mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
20484
+ subject?: string | undefined;
20485
+ enhancePrompt?: boolean | undefined;
20486
+ } | undefined;
20487
+ size?: number | undefined;
20488
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
20489
+ state?: {
20490
+ of: string;
20491
+ paletteFromReference?: boolean | undefined;
20492
+ canvas?: {
20493
+ width: number;
20494
+ height: number;
20495
+ } | undefined;
20496
+ } | undefined;
20497
+ portrait?: {
20498
+ of: string;
20499
+ size: 16 | 32 | 64 | 128 | 48 | 160;
20500
+ } | undefined;
20501
+ outfit?: {
20502
+ of: string;
20503
+ reference: string;
20504
+ additionalInstructions?: string | undefined;
20505
+ } | undefined;
20506
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20507
+ headSize?: number | undefined;
20508
+ armsLength?: number | undefined;
20509
+ legsLength?: number | undefined;
20510
+ shoulderWidth?: number | undefined;
20511
+ hipWidth?: number | undefined;
20512
+ } | undefined;
20513
+ styleCharacter?: string | undefined;
20514
+ tags?: string[] | undefined;
20515
+ prompt?: string | undefined;
20516
+ category?: string | undefined;
20517
+ revision?: {
20518
+ mode: "image-to-image";
20519
+ from: string;
20520
+ strength?: number | undefined;
20521
+ } | {
20522
+ direction: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west";
20523
+ mode: "animate-skeleton";
20524
+ from: string;
20525
+ keypointsFile: string;
20526
+ skeletonTemplate?: string | undefined;
20527
+ description?: string | undefined;
20528
+ } | undefined;
20529
+ concept?: string | undefined;
20530
+ mirror?: string | undefined;
20531
+ styles?: string[] | undefined;
20532
+ };
20533
+ }, {
20534
+ assetId: string;
20535
+ action: "add-asset";
20536
+ asset: {
20537
+ width?: number | undefined;
20538
+ height?: number | undefined;
20539
+ animation?: {
20540
+ of: string;
20541
+ frames?: number | undefined;
20542
+ fps?: number | undefined;
20543
+ template?: string | undefined;
20544
+ direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
20545
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
20546
+ mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
20547
+ subject?: string | undefined;
20548
+ enhancePrompt?: boolean | undefined;
20549
+ } | undefined;
20550
+ size?: number | undefined;
20551
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
20552
+ state?: {
20553
+ of: string;
20554
+ paletteFromReference?: boolean | undefined;
20555
+ canvas?: {
20556
+ width: number;
20557
+ height: number;
20558
+ } | undefined;
20559
+ } | undefined;
20560
+ portrait?: {
20561
+ of: string;
20562
+ size?: 16 | 32 | 64 | 128 | 48 | 160 | undefined;
20563
+ } | undefined;
20564
+ outfit?: {
20565
+ of: string;
20566
+ reference: string;
20567
+ additionalInstructions?: string | undefined;
20568
+ } | undefined;
20569
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20570
+ headSize?: number | undefined;
20571
+ armsLength?: number | undefined;
20572
+ legsLength?: number | undefined;
20573
+ shoulderWidth?: number | undefined;
20574
+ hipWidth?: number | undefined;
20575
+ } | undefined;
20576
+ styleCharacter?: string | undefined;
20577
+ tags?: string[] | undefined;
20578
+ prompt?: string | undefined;
20579
+ category?: string | undefined;
20580
+ revision?: {
20581
+ mode: "image-to-image";
20582
+ from: string;
20583
+ strength?: number | undefined;
20584
+ } | {
20585
+ direction: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west";
20586
+ mode: "animate-skeleton";
20587
+ from: string;
20588
+ keypointsFile: string;
20589
+ skeletonTemplate?: string | undefined;
20590
+ description?: string | undefined;
20591
+ } | undefined;
20592
+ concept?: string | undefined;
20593
+ mirror?: string | undefined;
20594
+ styles?: string[] | undefined;
20595
+ };
20596
+ }>, z.ZodObject<{
20597
+ action: z.ZodLiteral<"set-source">;
20598
+ assetId: z.ZodString;
20599
+ styleId: z.ZodString;
20600
+ /** Manifest-relative path of the art that stands in for this asset in this style. */
20601
+ source: z.ZodString;
20602
+ }, "strict", z.ZodTypeAny, {
20603
+ source: string;
20604
+ styleId: string;
20605
+ assetId: string;
20606
+ action: "set-source";
20607
+ }, {
20608
+ source: string;
20609
+ styleId: string;
20610
+ assetId: string;
20611
+ action: "set-source";
20612
+ }>, z.ZodObject<{
20613
+ action: z.ZodLiteral<"clear-source">;
20614
+ assetId: z.ZodString;
20615
+ styleId: z.ZodString;
20616
+ }, "strict", z.ZodTypeAny, {
20617
+ styleId: string;
20618
+ assetId: string;
20619
+ action: "clear-source";
20620
+ }, {
20621
+ styleId: string;
20622
+ assetId: string;
20623
+ action: "clear-source";
20624
+ }>, z.ZodObject<{
20625
+ action: z.ZodLiteral<"patch-style">;
20626
+ styleId: z.ZodString;
20627
+ patch: z.ZodEffects<z.ZodObject<{
20628
+ /** Candidates per generation, written to the provider's own option. */
20629
+ candidates: z.ZodOptional<z.ZodNumber>;
20630
+ /** Empty clears the style's own value (inherit, or the default). */
20631
+ promptPrefix: z.ZodOptional<z.ZodString>;
20632
+ promptSuffix: z.ZodOptional<z.ZodString>;
20633
+ /** `#rrggbb` values; null or empty clears the style's own palette. */
20634
+ palette: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>;
20635
+ /** Snap downloaded art to the palette; false clears the style's own value. */
20636
+ enforcePalette: z.ZodOptional<z.ZodBoolean>;
20637
+ /** Provider view name (PixelLab: low top-down, high top-down, side); empty clears. */
20638
+ view: z.ZodOptional<z.ZodNullable<z.ZodString>>;
20639
+ /** pixflux only; null clears the style's own value. */
20640
+ noBackground: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
20641
+ }, "strict", z.ZodTypeAny, {
20642
+ candidates?: number | undefined;
20643
+ palette?: string[] | null | undefined;
20644
+ view?: string | null | undefined;
20645
+ promptSuffix?: string | undefined;
20646
+ promptPrefix?: string | undefined;
20647
+ noBackground?: boolean | null | undefined;
20648
+ enforcePalette?: boolean | undefined;
20649
+ }, {
20650
+ candidates?: number | undefined;
20651
+ palette?: string[] | null | undefined;
20652
+ view?: string | null | undefined;
20653
+ promptSuffix?: string | undefined;
20654
+ promptPrefix?: string | undefined;
20655
+ noBackground?: boolean | null | undefined;
20656
+ enforcePalette?: boolean | undefined;
20657
+ }>, {
20658
+ candidates?: number | undefined;
20659
+ palette?: string[] | null | undefined;
20660
+ view?: string | null | undefined;
20661
+ promptSuffix?: string | undefined;
20662
+ promptPrefix?: string | undefined;
20663
+ noBackground?: boolean | null | undefined;
20664
+ enforcePalette?: boolean | undefined;
20665
+ }, {
20666
+ candidates?: number | undefined;
20667
+ palette?: string[] | null | undefined;
20668
+ view?: string | null | undefined;
20669
+ promptSuffix?: string | undefined;
20670
+ promptPrefix?: string | undefined;
20671
+ noBackground?: boolean | null | undefined;
20672
+ enforcePalette?: boolean | undefined;
20673
+ }>;
20674
+ }, "strict", z.ZodTypeAny, {
20675
+ styleId: string;
20676
+ action: "patch-style";
20677
+ patch: {
20678
+ candidates?: number | undefined;
20679
+ palette?: string[] | null | undefined;
20680
+ view?: string | null | undefined;
20681
+ promptSuffix?: string | undefined;
20682
+ promptPrefix?: string | undefined;
20683
+ noBackground?: boolean | null | undefined;
20684
+ enforcePalette?: boolean | undefined;
20685
+ };
20686
+ }, {
20687
+ styleId: string;
20688
+ action: "patch-style";
20689
+ patch: {
20690
+ candidates?: number | undefined;
20691
+ palette?: string[] | null | undefined;
20692
+ view?: string | null | undefined;
20693
+ promptSuffix?: string | undefined;
20694
+ promptPrefix?: string | undefined;
20695
+ noBackground?: boolean | null | undefined;
20696
+ enforcePalette?: boolean | undefined;
20697
+ };
20698
+ }>, z.ZodObject<{
20699
+ action: z.ZodLiteral<"add-style">;
20700
+ styleId: z.ZodString;
20701
+ style: z.ZodObject<{
20702
+ generator: z.ZodEnum<["character", "objectPro"]>;
20703
+ /** Where the style's art is written, inside the project. */
20704
+ outDir: z.ZodEffects<z.ZodString, string, string>;
20705
+ size: z.ZodOptional<z.ZodNumber>;
20706
+ mode: z.ZodOptional<z.ZodEnum<["standard", "v3", "pro", "pro-flash"]>>;
20707
+ directions: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<4>, z.ZodLiteral<8>]>>;
20708
+ template: z.ZodOptional<z.ZodString>;
20709
+ view: z.ZodOptional<z.ZodString>;
20710
+ proportions: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["default", "chibi", "cartoon", "stylized", "realistic_male", "realistic_female", "heroic"]>, z.ZodObject<{
20711
+ headSize: z.ZodOptional<z.ZodNumber>;
20712
+ armsLength: z.ZodOptional<z.ZodNumber>;
20713
+ legsLength: z.ZodOptional<z.ZodNumber>;
20714
+ shoulderWidth: z.ZodOptional<z.ZodNumber>;
20715
+ hipWidth: z.ZodOptional<z.ZodNumber>;
20716
+ }, "strict", z.ZodTypeAny, {
20717
+ headSize?: number | undefined;
20718
+ armsLength?: number | undefined;
20719
+ legsLength?: number | undefined;
20720
+ shoulderWidth?: number | undefined;
20721
+ hipWidth?: number | undefined;
20722
+ }, {
20723
+ headSize?: number | undefined;
20724
+ armsLength?: number | undefined;
20725
+ legsLength?: number | undefined;
20726
+ shoulderWidth?: number | undefined;
20727
+ hipWidth?: number | undefined;
20728
+ }>]>>;
20729
+ isometric: z.ZodOptional<z.ZodBoolean>;
20730
+ textGuidanceScale: z.ZodOptional<z.ZodNumber>;
20731
+ enhancePrompt: z.ZodOptional<z.ZodBoolean>;
20732
+ promptPrefix: z.ZodOptional<z.ZodString>;
20733
+ promptSuffix: z.ZodOptional<z.ZodString>;
20734
+ palette: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
20735
+ }, "strict", z.ZodTypeAny, {
20736
+ outDir: string;
20737
+ generator: "character" | "objectPro";
20738
+ palette?: string[] | undefined;
20739
+ template?: string | undefined;
20740
+ size?: number | undefined;
20741
+ directions?: 4 | 8 | undefined;
20742
+ mode?: "standard" | "v3" | "pro" | "pro-flash" | undefined;
20743
+ enhancePrompt?: boolean | undefined;
20744
+ view?: string | undefined;
20745
+ promptSuffix?: string | undefined;
20746
+ promptPrefix?: string | undefined;
20747
+ isometric?: boolean | undefined;
20748
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20749
+ headSize?: number | undefined;
20750
+ armsLength?: number | undefined;
20751
+ legsLength?: number | undefined;
20752
+ shoulderWidth?: number | undefined;
20753
+ hipWidth?: number | undefined;
20754
+ } | undefined;
20755
+ textGuidanceScale?: number | undefined;
20756
+ }, {
20757
+ outDir: string;
20758
+ generator: "character" | "objectPro";
20759
+ palette?: string[] | undefined;
20760
+ template?: string | undefined;
20761
+ size?: number | undefined;
20762
+ directions?: 4 | 8 | undefined;
20763
+ mode?: "standard" | "v3" | "pro" | "pro-flash" | undefined;
20764
+ enhancePrompt?: boolean | undefined;
20765
+ view?: string | undefined;
20766
+ promptSuffix?: string | undefined;
20767
+ promptPrefix?: string | undefined;
20768
+ isometric?: boolean | undefined;
20769
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20770
+ headSize?: number | undefined;
20771
+ armsLength?: number | undefined;
20772
+ legsLength?: number | undefined;
20773
+ shoulderWidth?: number | undefined;
20774
+ hipWidth?: number | undefined;
20775
+ } | undefined;
20776
+ textGuidanceScale?: number | undefined;
20777
+ }>;
20778
+ }, "strict", z.ZodTypeAny, {
20779
+ styleId: string;
20780
+ action: "add-style";
20781
+ style: {
20782
+ outDir: string;
20783
+ generator: "character" | "objectPro";
20784
+ palette?: string[] | undefined;
20785
+ template?: string | undefined;
20786
+ size?: number | undefined;
20787
+ directions?: 4 | 8 | undefined;
20788
+ mode?: "standard" | "v3" | "pro" | "pro-flash" | undefined;
20789
+ enhancePrompt?: boolean | undefined;
20790
+ view?: string | undefined;
20791
+ promptSuffix?: string | undefined;
20792
+ promptPrefix?: string | undefined;
20793
+ isometric?: boolean | undefined;
20794
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20795
+ headSize?: number | undefined;
20796
+ armsLength?: number | undefined;
20797
+ legsLength?: number | undefined;
20798
+ shoulderWidth?: number | undefined;
20799
+ hipWidth?: number | undefined;
20800
+ } | undefined;
20801
+ textGuidanceScale?: number | undefined;
20802
+ };
20803
+ }, {
20804
+ styleId: string;
20805
+ action: "add-style";
20806
+ style: {
20807
+ outDir: string;
20808
+ generator: "character" | "objectPro";
20809
+ palette?: string[] | undefined;
20810
+ template?: string | undefined;
20811
+ size?: number | undefined;
20812
+ directions?: 4 | 8 | undefined;
20813
+ mode?: "standard" | "v3" | "pro" | "pro-flash" | undefined;
20814
+ enhancePrompt?: boolean | undefined;
20815
+ view?: string | undefined;
20816
+ promptSuffix?: string | undefined;
20817
+ promptPrefix?: string | undefined;
20818
+ isometric?: boolean | undefined;
20819
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20820
+ headSize?: number | undefined;
20821
+ armsLength?: number | undefined;
20822
+ legsLength?: number | undefined;
20823
+ shoulderWidth?: number | undefined;
20824
+ hipWidth?: number | undefined;
20825
+ } | undefined;
20826
+ textGuidanceScale?: number | undefined;
20827
+ };
20828
+ }>]>, "many">;
20829
+ /** Workspace project id; omitted for a single-project gallery. */
20830
+ project: z.ZodOptional<z.ZodString>;
20831
+ /** Manifest bytes the page last saw; a mismatch refuses the write. */
20832
+ expectedSha256: z.ZodString;
20833
+ action: z.ZodLiteral<"batch">;
20834
+ }, "strict", z.ZodTypeAny, {
20835
+ action: "batch";
20836
+ expectedSha256: string;
20837
+ edits: ({
20838
+ assetId: string;
20839
+ action: "patch-asset";
20840
+ patch: {
20841
+ width?: number | null | undefined;
20842
+ height?: number | null | undefined;
20843
+ size?: number | null | undefined;
20844
+ tags?: string[] | undefined;
20845
+ prompt?: string | undefined;
20846
+ category?: string | null | undefined;
20847
+ promptForStyle?: {
20848
+ prompt: string | null;
20849
+ styleId: string;
20850
+ } | undefined;
20851
+ };
20852
+ } | {
20853
+ assetId: string;
20854
+ action: "add-asset";
20855
+ asset: {
20856
+ width?: number | undefined;
20857
+ height?: number | undefined;
20858
+ animation?: {
20859
+ of: string;
20860
+ frames?: number | undefined;
20861
+ fps?: number | undefined;
20862
+ template?: string | undefined;
20863
+ direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
20864
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
20865
+ mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
20866
+ subject?: string | undefined;
20867
+ enhancePrompt?: boolean | undefined;
20868
+ } | undefined;
20869
+ size?: number | undefined;
20870
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
20871
+ state?: {
20872
+ of: string;
20873
+ paletteFromReference?: boolean | undefined;
20874
+ canvas?: {
20875
+ width: number;
20876
+ height: number;
20877
+ } | undefined;
20878
+ } | undefined;
20879
+ portrait?: {
20880
+ of: string;
20881
+ size: 16 | 32 | 64 | 128 | 48 | 160;
20882
+ } | undefined;
20883
+ outfit?: {
20884
+ of: string;
20885
+ reference: string;
20886
+ additionalInstructions?: string | undefined;
20887
+ } | undefined;
20888
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20889
+ headSize?: number | undefined;
20890
+ armsLength?: number | undefined;
20891
+ legsLength?: number | undefined;
20892
+ shoulderWidth?: number | undefined;
20893
+ hipWidth?: number | undefined;
20894
+ } | undefined;
20895
+ styleCharacter?: string | undefined;
20896
+ tags?: string[] | undefined;
20897
+ prompt?: string | undefined;
20898
+ category?: string | undefined;
20899
+ revision?: {
20900
+ mode: "image-to-image";
20901
+ from: string;
20902
+ strength?: number | undefined;
20903
+ } | {
20904
+ direction: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west";
20905
+ mode: "animate-skeleton";
20906
+ from: string;
20907
+ keypointsFile: string;
20908
+ skeletonTemplate?: string | undefined;
20909
+ description?: string | undefined;
20910
+ } | undefined;
20911
+ concept?: string | undefined;
20912
+ mirror?: string | undefined;
20913
+ styles?: string[] | undefined;
20914
+ };
20915
+ } | {
20916
+ source: string;
20917
+ styleId: string;
20918
+ assetId: string;
20919
+ action: "set-source";
20920
+ } | {
20921
+ styleId: string;
20922
+ assetId: string;
20923
+ action: "clear-source";
20924
+ } | {
20925
+ styleId: string;
20926
+ action: "patch-style";
20927
+ patch: {
20928
+ candidates?: number | undefined;
20929
+ palette?: string[] | null | undefined;
20930
+ view?: string | null | undefined;
20931
+ promptSuffix?: string | undefined;
20932
+ promptPrefix?: string | undefined;
20933
+ noBackground?: boolean | null | undefined;
20934
+ enforcePalette?: boolean | undefined;
20935
+ };
20936
+ } | {
20937
+ styleId: string;
20938
+ action: "add-style";
20939
+ style: {
20940
+ outDir: string;
20941
+ generator: "character" | "objectPro";
20942
+ palette?: string[] | undefined;
20943
+ template?: string | undefined;
20944
+ size?: number | undefined;
20945
+ directions?: 4 | 8 | undefined;
20946
+ mode?: "standard" | "v3" | "pro" | "pro-flash" | undefined;
20947
+ enhancePrompt?: boolean | undefined;
20948
+ view?: string | undefined;
20949
+ promptSuffix?: string | undefined;
20950
+ promptPrefix?: string | undefined;
20951
+ isometric?: boolean | undefined;
20952
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
20953
+ headSize?: number | undefined;
20954
+ armsLength?: number | undefined;
20955
+ legsLength?: number | undefined;
20956
+ shoulderWidth?: number | undefined;
20957
+ hipWidth?: number | undefined;
20958
+ } | undefined;
20959
+ textGuidanceScale?: number | undefined;
20960
+ };
20961
+ })[];
20962
+ project?: string | undefined;
20963
+ }, {
20964
+ action: "batch";
20965
+ expectedSha256: string;
20966
+ edits: ({
20967
+ assetId: string;
20968
+ action: "patch-asset";
20969
+ patch: {
20970
+ width?: number | null | undefined;
20971
+ height?: number | null | undefined;
20972
+ size?: number | null | undefined;
20973
+ tags?: string[] | undefined;
20974
+ prompt?: string | undefined;
20975
+ category?: string | null | undefined;
20976
+ promptForStyle?: {
20977
+ prompt: string | null;
20978
+ styleId: string;
20979
+ } | undefined;
20980
+ };
20981
+ } | {
20982
+ assetId: string;
20983
+ action: "add-asset";
20984
+ asset: {
20985
+ width?: number | undefined;
20986
+ height?: number | undefined;
20987
+ animation?: {
20988
+ of: string;
20989
+ frames?: number | undefined;
20990
+ fps?: number | undefined;
20991
+ template?: string | undefined;
20992
+ direction?: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west" | undefined;
20993
+ directions?: ("south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west")[] | undefined;
20994
+ mode?: "v3" | "pro" | "template" | "skeleton-v3" | undefined;
20995
+ subject?: string | undefined;
20996
+ enhancePrompt?: boolean | undefined;
20997
+ } | undefined;
20998
+ size?: number | undefined;
20999
+ reference?: string | Partial<Record<"south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west", string>> | undefined;
21000
+ state?: {
21001
+ of: string;
21002
+ paletteFromReference?: boolean | undefined;
21003
+ canvas?: {
21004
+ width: number;
21005
+ height: number;
21006
+ } | undefined;
21007
+ } | undefined;
21008
+ portrait?: {
21009
+ of: string;
21010
+ size?: 16 | 32 | 64 | 128 | 48 | 160 | undefined;
21011
+ } | undefined;
21012
+ outfit?: {
21013
+ of: string;
21014
+ reference: string;
21015
+ additionalInstructions?: string | undefined;
21016
+ } | undefined;
21017
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
21018
+ headSize?: number | undefined;
21019
+ armsLength?: number | undefined;
21020
+ legsLength?: number | undefined;
21021
+ shoulderWidth?: number | undefined;
21022
+ hipWidth?: number | undefined;
21023
+ } | undefined;
21024
+ styleCharacter?: string | undefined;
21025
+ tags?: string[] | undefined;
21026
+ prompt?: string | undefined;
21027
+ category?: string | undefined;
21028
+ revision?: {
21029
+ mode: "image-to-image";
21030
+ from: string;
21031
+ strength?: number | undefined;
21032
+ } | {
21033
+ direction: "south" | "south-east" | "east" | "north-east" | "north" | "north-west" | "west" | "south-west";
21034
+ mode: "animate-skeleton";
21035
+ from: string;
21036
+ keypointsFile: string;
21037
+ skeletonTemplate?: string | undefined;
21038
+ description?: string | undefined;
21039
+ } | undefined;
21040
+ concept?: string | undefined;
21041
+ mirror?: string | undefined;
21042
+ styles?: string[] | undefined;
21043
+ };
21044
+ } | {
21045
+ source: string;
21046
+ styleId: string;
21047
+ assetId: string;
21048
+ action: "set-source";
21049
+ } | {
21050
+ styleId: string;
21051
+ assetId: string;
21052
+ action: "clear-source";
21053
+ } | {
21054
+ styleId: string;
21055
+ action: "patch-style";
21056
+ patch: {
21057
+ candidates?: number | undefined;
21058
+ palette?: string[] | null | undefined;
21059
+ view?: string | null | undefined;
21060
+ promptSuffix?: string | undefined;
21061
+ promptPrefix?: string | undefined;
21062
+ noBackground?: boolean | null | undefined;
21063
+ enforcePalette?: boolean | undefined;
21064
+ };
21065
+ } | {
21066
+ styleId: string;
21067
+ action: "add-style";
21068
+ style: {
21069
+ outDir: string;
21070
+ generator: "character" | "objectPro";
21071
+ palette?: string[] | undefined;
21072
+ template?: string | undefined;
21073
+ size?: number | undefined;
21074
+ directions?: 4 | 8 | undefined;
21075
+ mode?: "standard" | "v3" | "pro" | "pro-flash" | undefined;
21076
+ enhancePrompt?: boolean | undefined;
21077
+ view?: string | undefined;
21078
+ promptSuffix?: string | undefined;
21079
+ promptPrefix?: string | undefined;
21080
+ isometric?: boolean | undefined;
21081
+ proportions?: "default" | "chibi" | "cartoon" | "stylized" | "realistic_male" | "realistic_female" | "heroic" | {
21082
+ headSize?: number | undefined;
21083
+ armsLength?: number | undefined;
21084
+ legsLength?: number | undefined;
21085
+ shoulderWidth?: number | undefined;
21086
+ hipWidth?: number | undefined;
21087
+ } | undefined;
21088
+ textGuidanceScale?: number | undefined;
21089
+ };
21090
+ })[];
21091
+ project?: string | undefined;
21092
+ }>]>;
21093
+ type ManifestEdit = z.infer<typeof ManifestEditSchema>;
21094
+ /** The page showed a manifest that has since changed; the write is refused. */
21095
+ declare class ManifestDriftError extends Error {
21096
+ readonly status = 409;
21097
+ constructor(manifestPath: string);
21098
+ }
21099
+ /** A request the schema or the manifest rules reject; nothing was written. */
21100
+ declare class ManifestEditError extends Error {
21101
+ readonly status = 400;
21102
+ constructor(message: string);
21103
+ }
21104
+ interface ManifestEditResult {
21105
+ manifestPath: string;
21106
+ /** Hash of the manifest after the write, for the next edit's `expectedSha256`. */
21107
+ sha256: string;
21108
+ changed: boolean;
21109
+ }
21110
+ /**
21111
+ * Apply one edit to the manifest on disk. The write is refused when the file
21112
+ * no longer matches what the page saw, and rolled back when the edited
21113
+ * manifest fails to load or resolve; an invalid manifest never lands.
21114
+ */
21115
+ declare function applyManifestEdit(manifestPath: string, edit: ManifestEdit): Promise<ManifestEditResult>;
21116
+
21117
+ /**
21118
+ * Generation from the gallery is the CLI's `gen`, run as a background job:
21119
+ * the same `buildPlan`, the same per-provider budget and balance preflight,
21120
+ * the same `submit → poll → fetch` library calls writing the same lockfile.
21121
+ * The page adds nothing the terminal cannot do; it only shows the estimate,
21122
+ * asks, and reports progress.
21123
+ *
21124
+ * Two ceilings guard spend. The session budget is passed when the gallery
21125
+ * starts (`--budget`, optionally keyed per provider) and every job's estimate
21126
+ * is charged against it up front, so the page can never exceed what the
21127
+ * person typed. Each submission also carries the remaining ceiling as its
21128
+ * own `budget`, the way `gen --budget` does, so a provider estimate that
21129
+ * grows between plan and submit is refused rather than paid.
21130
+ */
21131
+ type GeneratePhase = "queued" | "submitting" | "polling" | "fetching" | "review" | "done" | "failed";
21132
+ interface GenerateJob {
21133
+ id: string;
21134
+ project: string | null;
21135
+ keys: string[];
21136
+ /**
21137
+ * `resume` skips submission: poll, review, and fetch existing work at no
21138
+ * cost; `refresh` re-pulls changed objects; `restore` puts the recorded
21139
+ * bytes back on disk from the cache or the provider, as `pixelkiln restore`.
21140
+ */
21141
+ mode: "generate" | "resume" | "refresh" | "restore" | "revert";
21142
+ /** The job may replace a locally modified or untracked file, as `--force` does. */
21143
+ force: boolean;
21144
+ /** For `revert`: which replaced generation, as the request named it. */
21145
+ revert: string | null;
21146
+ phase: GeneratePhase;
21147
+ startedAt: string;
21148
+ finishedAt: string | null;
21149
+ /** Progress lines, exactly what the CLI would have printed. */
21150
+ messages: string[];
21151
+ error: string | null;
21152
+ /** Successful-submission estimates this job charged, by provider. */
21153
+ spent: Record<string, number>;
21154
+ /** Keys still waiting for a human choice. */
21155
+ review: string[];
21156
+ counts: {
21157
+ submitted: number;
21158
+ failed: number;
21159
+ downloaded: number;
21160
+ };
21161
+ }
21162
+ interface GalleryProjectContext {
21163
+ loaded: LoadedManifest;
21164
+ /** Every spec the project declares, unfiltered. */
21165
+ specs: ResolvedSpec[];
21166
+ lock: Lock;
21167
+ lockPath: string;
21168
+ }
21169
+ interface SessionBudget {
21170
+ /** Unkeyed ceiling, valid only when a run involves a single provider. */
21171
+ amount?: number;
21172
+ /** Provider-keyed ceilings. */
21173
+ byProvider: Record<string, number>;
21174
+ }
21175
+ interface GenerateHandlerOptions {
21176
+ /** Load a project fresh from disk; `project` is the workspace id, if any. */
21177
+ loadProject: (project?: string) => Promise<GalleryProjectContext>;
21178
+ /** An online provider for a project; the caller owns env loading and caching. */
21179
+ providerFor: (project: string | undefined, providerId: string) => Provider;
21180
+ budget: SessionBudget;
21181
+ reload: () => Promise<GalleryBuild>;
21182
+ onProgress?: (msg: string) => void;
21183
+ /** Test hooks. */
21184
+ pollIntervalMs?: number;
21185
+ submitSpacingMs?: number;
21186
+ /** Deterministic clock hook. */
21187
+ now?: () => Date;
21188
+ }
21189
+ interface GenerateStatus {
21190
+ jobs: GenerateJob[];
21191
+ budget: SessionBudget;
21192
+ /** Estimates charged so far this session, by provider. */
21193
+ spent: Record<string, number>;
21194
+ /** Providers whose spend unit is known, for display. */
21195
+ units: Record<string, CostUnit>;
21196
+ }
21197
+ interface GalleryGenerateHandlers {
21198
+ start(body: unknown): Promise<GenerateJob>;
21199
+ status(): GenerateStatus;
21200
+ /** The embedded review sheet for a job's waiting keys; null when nothing waits. */
21201
+ review(jobId: string, options: RenderSheetOptions & {
21202
+ routePrefix: string;
21203
+ }): Promise<ReviewSession | null>;
21204
+ applyReview(jobId: string, body: unknown): Promise<PickResult>;
21205
+ }
21206
+ declare const GenerateRequestSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
21207
+ project: z.ZodOptional<z.ZodString>;
21208
+ keys: z.ZodArray<z.ZodString, "many">;
21209
+ /**
21210
+ * Regenerate work that is up to date, as `gen --force` does, and let the
21211
+ * fetch replace a locally modified or untracked file. With `restore`, put
21212
+ * the recorded bytes back over a modified file.
21213
+ */
21214
+ force: z.ZodOptional<z.ZodBoolean>;
21215
+ /** Advance in-flight, review, or selected work without submitting anything. */
21216
+ resume: z.ZodOptional<z.ZodBoolean>;
21217
+ /** Re-download downloaded outputs and replace files whose object changed upstream. */
21218
+ refresh: z.ZodOptional<z.ZodBoolean>;
21219
+ /** Put recorded outputs back on disk from the cache or the provider, without generating. */
21220
+ restore: z.ZodOptional<z.ZodBoolean>;
21221
+ /**
21222
+ * Bring a replaced generation back: 1-based position in the record's
21223
+ * history (newest first) or an output hash prefix. One key at a time.
21224
+ */
21225
+ revert: z.ZodOptional<z.ZodString>;
21226
+ }, "strict", z.ZodTypeAny, {
21227
+ keys: string[];
21228
+ project?: string | undefined;
21229
+ resume?: boolean | undefined;
21230
+ force?: boolean | undefined;
21231
+ refresh?: boolean | undefined;
21232
+ restore?: boolean | undefined;
21233
+ revert?: string | undefined;
21234
+ }, {
21235
+ keys: string[];
21236
+ project?: string | undefined;
21237
+ resume?: boolean | undefined;
21238
+ force?: boolean | undefined;
21239
+ refresh?: boolean | undefined;
21240
+ restore?: boolean | undefined;
21241
+ revert?: string | undefined;
21242
+ }>, {
21243
+ keys: string[];
21244
+ project?: string | undefined;
21245
+ resume?: boolean | undefined;
21246
+ force?: boolean | undefined;
21247
+ refresh?: boolean | undefined;
21248
+ restore?: boolean | undefined;
21249
+ revert?: string | undefined;
21250
+ }, {
21251
+ keys: string[];
21252
+ project?: string | undefined;
21253
+ resume?: boolean | undefined;
21254
+ force?: boolean | undefined;
21255
+ refresh?: boolean | undefined;
21256
+ restore?: boolean | undefined;
21257
+ revert?: string | undefined;
21258
+ }>, {
21259
+ keys: string[];
21260
+ project?: string | undefined;
21261
+ resume?: boolean | undefined;
21262
+ force?: boolean | undefined;
21263
+ refresh?: boolean | undefined;
21264
+ restore?: boolean | undefined;
21265
+ revert?: string | undefined;
21266
+ }, {
21267
+ keys: string[];
21268
+ project?: string | undefined;
21269
+ resume?: boolean | undefined;
21270
+ force?: boolean | undefined;
21271
+ refresh?: boolean | undefined;
21272
+ restore?: boolean | undefined;
21273
+ revert?: string | undefined;
21274
+ }>;
21275
+ declare class GenerateRequestError extends Error {
21276
+ readonly status: number;
21277
+ constructor(message: string, status?: number);
21278
+ }
21279
+ declare function createGenerateHandlers(opts: GenerateHandlerOptions): GalleryGenerateHandlers;
21280
+
21281
+ interface GalleryEditHandlerOptions {
21282
+ /** Resolves the manifest an edit may rewrite; must never trust a client path. */
21283
+ manifestFor: (project?: string) => string | Promise<string>;
21284
+ /** Rebuilds the gallery after a successful write. */
21285
+ reload: () => Promise<GalleryBuild>;
21286
+ /** Loads a project for hand-edit actions, which need resolved specs and the lock. */
21287
+ loadProject?: (project?: string) => Promise<GalleryProjectContext>;
21288
+ /** Launches the author's editor; defaults to `openInEditor`. */
21289
+ openEditor?: (file: string) => string;
21290
+ onProgress?: (msg: string) => void;
21291
+ }
21292
+ /** The `edit` callback `serveGallery` expects: validate, apply, rebuild. */
21293
+ declare function createGalleryEditHandler(opts: GalleryEditHandlerOptions): (body: unknown) => Promise<GalleryBuild>;
21294
+
21295
+ /**
21296
+ * Estimates this gallery session has made, against its cap, and what
21297
+ * PixelLab reported billing for them, in whatever unit each response named.
21298
+ * Kept apart from the generation budget: PixelLab documents this endpoint in
21299
+ * dollars, and dollars do not convert to generations.
21300
+ */
21301
+ interface SkeletonEstimateSession {
21302
+ used: number;
21303
+ limit: number;
21304
+ spent: Record<string, number>;
21305
+ }
21306
+ interface GallerySkeletonHandlers {
21307
+ estimate(body: unknown): Promise<{
21308
+ set: SkeletonSet;
21309
+ source: string;
21310
+ session: SkeletonEstimateSession;
21311
+ }>;
21312
+ status(): SkeletonEstimateSession;
21313
+ }
21314
+
21315
+ /**
21316
+ * The gallery's HTTP surface. Unlike the review server this is long-lived:
21317
+ * three GET routes, bound to loopback, running until the caller closes it
21318
+ * (the CLI does so on Ctrl+C). It has no write path unless the caller opts
21319
+ * in: `edit` adds one POST route for manifest edits, `generate` adds the
21320
+ * routes that start a generation job and host its review sheet, and `editor`
21321
+ * adds the routes that install and serve the in-browser pixel editor.
21322
+ *
21323
+ * Every POST is guarded twice, because a page on localhost is reachable by
21324
+ * every other page in the browser: the request's Origin must be this server,
21325
+ * and it must carry the session token minted at startup, which only the
21326
+ * served page knows. A cross-origin page can neither read the token nor send
21327
+ * the custom header without a preflight this server refuses.
21328
+ *
21329
+ * The snapshot is rebuilt on every page load and every `/api/gallery.json`
19719
21330
  * request, and the media allowlist is replaced with it, so the page's Refresh
19720
21331
  * button shows a `gen` that finished in another terminal, including files
19721
21332
  * that did not exist when the server started. Only paths the current
@@ -19747,6 +21358,12 @@ interface GalleryServerOptions {
19747
21358
  * `/editor/<release>/<file>` routes that serve the pinned editor build.
19748
21359
  */
19749
21360
  editor?: GalleryEditorHandlers;
21361
+ /**
21362
+ * Enable `POST /api/price`: an unsaved edit priced offline, nothing
21363
+ * written. Follows the write gate because it reads the manifest the way
21364
+ * a save would.
21365
+ */
21366
+ price?: (body: unknown) => Promise<unknown>;
19750
21367
  /** Enable `POST /api/skeleton/estimate` (a direct PixelLab call the page confirms first) and `GET /api/skeleton`, its session count. */
19751
21368
  skeleton?: GallerySkeletonHandlers;
19752
21369
  }