@picsart/ai-sdk 5.23.0 → 5.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -822,6 +822,18 @@ type ModelInputById = {
822
822
  bitrate?: 32000 | 64000 | 128000 | 256000;
823
823
  format?: "mp3" | "wav" | "pcm";
824
824
  };
825
+ "muse-image-1.0": {
826
+ prompt: string;
827
+ aspectRatio?: "1:1" | "3:2" | "2:3" | "16:9" | "9:16" | "4:3" | "3:4";
828
+ reasoningStrength?: "low" | "high";
829
+ moderation?: "auto" | "low" | "none";
830
+ enableImageSearch?: boolean;
831
+ enableWebSearch?: boolean;
832
+ enableShell?: boolean;
833
+ outputFormat?: "png" | "jpeg" | "webp";
834
+ count?: 1 | 2 | 4 | 6 | 8 | 10;
835
+ imageUrls?: string[];
836
+ };
825
837
  "ovi": {
826
838
  prompt: string;
827
839
  size?: "9:16" | "16:9" | "1:1" | "9:16+" | "16:9+" | "2:5" | "5:2";
@@ -1828,6 +1840,15 @@ interface FileDescriptor {
1828
1840
  * backend worker stays the authoritative gate. Omit for no client-side floor.
1829
1841
  */
1830
1842
  minPixels?: number;
1843
+ /**
1844
+ * Min intrinsic short-side length (pixels) accepted for an image/video file —
1845
+ * `min(width, height)` must be at least this. Most vendors specify input limits
1846
+ * per side rather than by total pixel count (e.g. Seedance reference images:
1847
+ * width and height each in [300, 6000]). Enforced client-side at upload by
1848
+ * measuring the media before it is sent; the backend worker stays the
1849
+ * authoritative gate. Omit for no client-side floor.
1850
+ */
1851
+ minSidePixels?: number;
1831
1852
  /**
1832
1853
  * Max intrinsic short-side length (pixels) accepted for an image/video file —
1833
1854
  * `min(width, height)` must not exceed this. Used by upscalers whose source
@@ -2017,7 +2038,7 @@ interface ModelFilter$1 {
2017
2038
  release?: ReleaseTag[];
2018
2039
  }
2019
2040
 
2020
- type AppProvider = 'picsart' | 'google' | 'kling' | 'grok' | 'openai' | 'flux' | 'ideogram' | 'elevenlabs' | 'minimax' | 'wan' | 'seedance' | 'ltx' | 'seedream' | 'seedaudio' | 'hunyuan' | 'pika' | 'runway' | 'luma' | 'ovi' | 'creatify' | 'veed' | 'bytedance' | 'qwen' | 'reve' | 'recraft' | 'videography' | 'topaz' | 'heygen' | 'happyhorse' | 'pixverse' | 'anthropic' | 'async' | 'captionsai';
2041
+ type AppProvider = 'picsart' | 'google' | 'kling' | 'grok' | 'openai' | 'flux' | 'ideogram' | 'elevenlabs' | 'minimax' | 'wan' | 'seedance' | 'ltx' | 'seedream' | 'seedaudio' | 'hunyuan' | 'pika' | 'runway' | 'luma' | 'ovi' | 'creatify' | 'veed' | 'bytedance' | 'qwen' | 'reve' | 'recraft' | 'videography' | 'topaz' | 'heygen' | 'happyhorse' | 'pixverse' | 'anthropic' | 'async' | 'captionsai' | 'meta';
2021
2042
  /** Provider used by model definitions. */
2022
2043
  type Provider = AppProvider;
2023
2044
  /** App generation modes. */
@@ -2622,6 +2643,7 @@ declare const Models: {
2622
2643
  readonly MinimaxH3Max: "minimax-h3-max";
2623
2644
  readonly MinimaxMusicV2: "minimax-music-v2";
2624
2645
  readonly MinimaxMusicV3: "minimax-music-v3";
2646
+ readonly MuseImage10: "muse-image-1.0";
2625
2647
  readonly Ovi: "ovi";
2626
2648
  readonly PicsartChangeBg: "picsart-change-bg";
2627
2649
  readonly PicsartEnhance: "picsart-enhance";
package/index.js CHANGED
@@ -821,7 +821,8 @@ var providers = {
821
821
  pixverse: { color: "#7C3AED", label: "PV", name: "PixVerse" },
822
822
  anthropic: { color: "#D97757", label: "CL", name: "Anthropic" },
823
823
  async: { color: "#5E5CE6", label: "AA", name: "Async AI" },
824
- captionsai: { color: "#1D1F20", label: "MR", name: "Mirage" }
824
+ captionsai: { color: "#1D1F20", label: "MR", name: "Mirage" },
825
+ meta: { color: "#0081FB", label: "MT", name: "Meta" }
825
826
  };
826
827
 
827
828
  // src/core/descriptors/presets.ts
@@ -1019,6 +1020,7 @@ var p = {
1019
1020
  ...opts?.array ? { array: opts.array } : {},
1020
1021
  ...opts?.maxDurationSec != null ? { maxDurationSec: opts.maxDurationSec } : {},
1021
1022
  ...opts?.minPixels != null ? { minPixels: opts.minPixels } : {},
1023
+ ...opts?.minSidePixels != null ? { minSidePixels: opts.minSidePixels } : {},
1022
1024
  ...opts?.maxShortSidePixels != null ? { maxShortSidePixels: opts.maxShortSidePixels } : {},
1023
1025
  ...opts?.maxBytes != null ? { maxBytes: opts.maxBytes } : {}
1024
1026
  }
@@ -1176,7 +1178,7 @@ var passthroughPayload = (paramConfig) => (ctx) => {
1176
1178
  return payload;
1177
1179
  };
1178
1180
  function defineModels(provider, configs) {
1179
- const MODELS38 = [];
1181
+ const MODELS39 = [];
1180
1182
  for (const c of configs) {
1181
1183
  const prov = c.provider ?? provider;
1182
1184
  const resolvedPayload = c.buildPayload ?? passthroughPayload(c.paramConfig);
@@ -1212,19 +1214,19 @@ function defineModels(provider, configs) {
1212
1214
  if (c.constraints !== void 0) model.constraints = c.constraints;
1213
1215
  const contract = createModelContract(model);
1214
1216
  model.outputSchema = c.outputSchema ?? contract.output;
1215
- MODELS38.push(model);
1217
+ MODELS39.push(model);
1216
1218
  }
1217
- return { MODELS: MODELS38 };
1219
+ return { MODELS: MODELS39 };
1218
1220
  }
1219
- function registerPayloads(MODELS38, payloads) {
1221
+ function registerPayloads(MODELS39, payloads) {
1220
1222
  for (const [id, builder] of Object.entries(payloads)) {
1221
- const model = MODELS38.find((m) => m.id === id);
1223
+ const model = MODELS39.find((m) => m.id === id);
1222
1224
  if (model) model.buildPayload = builder;
1223
1225
  }
1224
1226
  }
1225
- function registerEditPayloads(MODELS38, payloads) {
1227
+ function registerEditPayloads(MODELS39, payloads) {
1226
1228
  for (const [id, builder] of Object.entries(payloads)) {
1227
- const model = MODELS38.find((m) => m.id === id);
1229
+ const model = MODELS39.find((m) => m.id === id);
1228
1230
  if (model) model.buildEditPayload = builder;
1229
1231
  }
1230
1232
  }
@@ -1252,7 +1254,18 @@ var params = {
1252
1254
  // `category` defaults to the most common role for the slot (overridable per call):
1253
1255
  // asset → start/end frame, sync audio (direct inputs to the output)
1254
1256
  // reference → ref images/videos/audios (guidance signals)
1255
- imageInput: (max = 1, label = "Start Image", required = false, category = "reference", minPixels) => p.file("imageUrls", "image", { array: { max }, label, required, category, ...minPixels != null ? { minPixels } : {} }),
1257
+ /** Array of image inputs (writes to `imageUrls`). `bounds` carries the
1258
+ * client-side dimension floors enforced at upload: `minPixels` for a vendor
1259
+ * rule stated as a total pixel count, `minSidePixels` for one stated per
1260
+ * side (width and height each), which is what most vendors publish. */
1261
+ imageInput: (max = 1, label = "Start Image", required = false, category = "reference", bounds) => p.file("imageUrls", "image", {
1262
+ array: { max },
1263
+ label,
1264
+ required,
1265
+ category,
1266
+ ...bounds?.minPixels != null ? { minPixels: bounds.minPixels } : {},
1267
+ ...bounds?.minSidePixels != null ? { minSidePixels: bounds.minSidePixels } : {}
1268
+ }),
1256
1269
  /** Single source-video slot (v2v / video edit). Writes to `videoUrl`.
1257
1270
  * `maxDurationSec` caps the source clip length, `maxShortSidePixels` caps
1258
1271
  * the shorter side (upscaler sources) and `maxBytes` caps the file size,
@@ -1268,15 +1281,17 @@ var params = {
1268
1281
  /** Single driving / sync-audio slot. Writes to `audioUrl`. */
1269
1282
  audioInput: (label = "Audio Track", required = false, category = "asset") => p.file("audioUrl", "audio", { label, required, category }),
1270
1283
  /** Array of reference videos (writes to `videoUrls`). Backend enforces
1271
- * per-model total-duration caps (e.g. ≤ 15s for seedance). `maxBytes` caps
1272
- * each individual clip's file size, enforced client-side at upload. */
1273
- videoInputs: (max = 3, label = "Reference Videos", required = false, minPixels, maxBytes) => p.file("videoUrls", "video", {
1284
+ * per-model total-duration caps (e.g. ≤ 15s for seedance). `bounds` carries
1285
+ * the client-side checks run at upload: `minPixels` for a total-pixel floor,
1286
+ * `minSidePixels` for a per-side one, `maxBytes` for each clip's file size. */
1287
+ videoInputs: (max = 3, label = "Reference Videos", required = false, bounds) => p.file("videoUrls", "video", {
1274
1288
  array: { max },
1275
1289
  label,
1276
1290
  required,
1277
1291
  category: "reference",
1278
- ...minPixels != null ? { minPixels } : {},
1279
- ...maxBytes != null ? { maxBytes } : {}
1292
+ ...bounds?.minPixels != null ? { minPixels: bounds.minPixels } : {},
1293
+ ...bounds?.minSidePixels != null ? { minSidePixels: bounds.minSidePixels } : {},
1294
+ ...bounds?.maxBytes != null ? { maxBytes: bounds.maxBytes } : {}
1280
1295
  }),
1281
1296
  /** Array of reference audios (writes to `audioUrls`). Backend enforces
1282
1297
  * per-model total-duration caps. */
@@ -3541,7 +3556,8 @@ registerPayloads(MODELS11, {
3541
3556
 
3542
3557
  // src/vendors/catalog/seedance.ts
3543
3558
  var SEEDANCE_FRAME_REF_REASON = "Start/End frames cannot be combined with reference images, videos, or audios";
3544
- var SEEDANCE_MIN_PIXELS = 409600;
3559
+ var SEEDANCE_MIN_SIDE_PIXELS = 300;
3560
+ var SEEDANCE_VIDEO_MIN_PIXELS = 407696;
3545
3561
  var SEEDANCE_25_MAX_VIDEO_BYTES = 209715200;
3546
3562
  var seedance20Constraints = [
3547
3563
  {
@@ -3792,8 +3808,12 @@ var { MODELS: MODELS12 } = defineModels("seedance", [
3792
3808
  ...params.returnLastFrame(),
3793
3809
  ...p.enum("outputFormat", ["mp4", "mov"], "mp4", { label: "Format" }),
3794
3810
  // 2.5 lifts the reference caps to 30 images / 10 videos / 10 audios.
3795
- ...params.imageInput(30, "Reference Images", false, "reference", SEEDANCE_MIN_PIXELS),
3796
- ...params.videoInputs(10, "Reference Videos", false, SEEDANCE_MIN_PIXELS, SEEDANCE_25_MAX_VIDEO_BYTES),
3811
+ ...params.imageInput(30, "Reference Images", false, "reference", { minSidePixels: SEEDANCE_MIN_SIDE_PIXELS }),
3812
+ ...params.videoInputs(10, "Reference Videos", false, {
3813
+ minPixels: SEEDANCE_VIDEO_MIN_PIXELS,
3814
+ minSidePixels: SEEDANCE_MIN_SIDE_PIXELS,
3815
+ maxBytes: SEEDANCE_25_MAX_VIDEO_BYTES
3816
+ }),
3797
3817
  ...params.audioInputs(10, "Reference Audios"),
3798
3818
  ...params.startFrame(),
3799
3819
  ...params.endFrame()
@@ -3847,7 +3867,7 @@ var { MODELS: MODELS12 } = defineModels("seedance", [
3847
3867
  ...params.durationRange(SEEDANCE_25_DURATION.min, SEEDANCE_25_DURATION.max, 15),
3848
3868
  ...params.generateAudio(),
3849
3869
  ...p.enum("outputFormat", ["mp4", "mov"], "mp4", { label: "Format" }),
3850
- ...params.videoInputs(10, "Source Videos", true, void 0, SEEDANCE_25_MAX_VIDEO_BYTES)
3870
+ ...params.videoInputs(10, "Source Videos", true, { maxBytes: SEEDANCE_25_MAX_VIDEO_BYTES })
3851
3871
  }
3852
3872
  },
3853
3873
  {
@@ -3873,8 +3893,11 @@ var { MODELS: MODELS12 } = defineModels("seedance", [
3873
3893
  ...params.returnLastFrame(),
3874
3894
  // Reference roles map directly to backend `reference_*` content entries.
3875
3895
  // start/end frame stay on their own named slots.
3876
- ...params.imageInput(9, "Reference Images", false, "reference", SEEDANCE_MIN_PIXELS),
3877
- ...params.videoInputs(3, "Reference Videos", false, SEEDANCE_MIN_PIXELS),
3896
+ ...params.imageInput(9, "Reference Images", false, "reference", { minSidePixels: SEEDANCE_MIN_SIDE_PIXELS }),
3897
+ ...params.videoInputs(3, "Reference Videos", false, {
3898
+ minPixels: SEEDANCE_VIDEO_MIN_PIXELS,
3899
+ minSidePixels: SEEDANCE_MIN_SIDE_PIXELS
3900
+ }),
3878
3901
  ...params.audioInputs(3, "Reference Audios"),
3879
3902
  ...params.startFrame(),
3880
3903
  ...params.endFrame()
@@ -3907,8 +3930,11 @@ var { MODELS: MODELS12 } = defineModels("seedance", [
3907
3930
  ...params.returnLastFrame(),
3908
3931
  // Reference roles map directly to backend `reference_*` content entries.
3909
3932
  // start/end frame stay on their own named slots.
3910
- ...params.imageInput(9, "Reference Images", false, "reference", SEEDANCE_MIN_PIXELS),
3911
- ...params.videoInputs(3, "Reference Videos", false, SEEDANCE_MIN_PIXELS),
3933
+ ...params.imageInput(9, "Reference Images", false, "reference", { minSidePixels: SEEDANCE_MIN_SIDE_PIXELS }),
3934
+ ...params.videoInputs(3, "Reference Videos", false, {
3935
+ minPixels: SEEDANCE_VIDEO_MIN_PIXELS,
3936
+ minSidePixels: SEEDANCE_MIN_SIDE_PIXELS
3937
+ }),
3912
3938
  ...params.audioInputs(3, "Reference Audios"),
3913
3939
  ...params.startFrame(),
3914
3940
  ...params.endFrame()
@@ -3937,8 +3963,11 @@ var { MODELS: MODELS12 } = defineModels("seedance", [
3937
3963
  ...params.returnLastFrame(),
3938
3964
  // Reference roles map directly to backend `reference_*` content entries.
3939
3965
  // start/end frame stay on their own named slots.
3940
- ...params.imageInput(9, "Reference Images", false, "reference", SEEDANCE_MIN_PIXELS),
3941
- ...params.videoInputs(3, "Reference Videos", false, SEEDANCE_MIN_PIXELS),
3966
+ ...params.imageInput(9, "Reference Images", false, "reference", { minSidePixels: SEEDANCE_MIN_SIDE_PIXELS }),
3967
+ ...params.videoInputs(3, "Reference Videos", false, {
3968
+ minPixels: SEEDANCE_VIDEO_MIN_PIXELS,
3969
+ minSidePixels: SEEDANCE_MIN_SIDE_PIXELS
3970
+ }),
3942
3971
  ...params.audioInputs(3, "Reference Audios"),
3943
3972
  ...params.startFrame(),
3944
3973
  ...params.endFrame()
@@ -3967,8 +3996,11 @@ var { MODELS: MODELS12 } = defineModels("seedance", [
3967
3996
  ...params.returnLastFrame(),
3968
3997
  // Reference roles map directly to backend `reference_*` content entries.
3969
3998
  // start/end frame stay on their own named slots.
3970
- ...params.imageInput(9, "Reference Images", false, "reference", SEEDANCE_MIN_PIXELS),
3971
- ...params.videoInputs(3, "Reference Videos", false, SEEDANCE_MIN_PIXELS),
3999
+ ...params.imageInput(9, "Reference Images", false, "reference", { minSidePixels: SEEDANCE_MIN_SIDE_PIXELS }),
4000
+ ...params.videoInputs(3, "Reference Videos", false, {
4001
+ minPixels: SEEDANCE_VIDEO_MIN_PIXELS,
4002
+ minSidePixels: SEEDANCE_MIN_SIDE_PIXELS
4003
+ }),
3972
4004
  ...params.audioInputs(3, "Reference Audios"),
3973
4005
  ...params.startFrame(),
3974
4006
  ...params.endFrame()
@@ -8530,6 +8562,74 @@ registerPayloads(MODELS37, {
8530
8562
  "captionsai-video-captions": buildCaptionsPayload
8531
8563
  });
8532
8564
 
8565
+ // src/vendors/catalog/meta.ts
8566
+ var { MODELS: MODELS38 } = defineModels("meta", [
8567
+ // ── Image ─────────────────────────────────────────
8568
+ {
8569
+ id: "muse-image-1.0",
8570
+ name: "Muse Image 1.0",
8571
+ addedAt: "2026-08-31",
8572
+ workflow: "meta/v1/images/generations",
8573
+ editWorkflow: "meta/v1/images/edits",
8574
+ estimatedTime: 60,
8575
+ mode: "image",
8576
+ inputType: "t2i",
8577
+ description: "Meta's agentic image model \u2014 plans with reasoning, web and image search before rendering.",
8578
+ features: [feat("Multi-Image Input", "input"), feat("Web Search", "characteristic"), feat("High Quality", "quality")],
8579
+ paramConfig: {
8580
+ ...params.prompt(),
8581
+ ...params.aspectRatio(["1:1", "3:2", "2:3", "16:9", "9:16", "4:3", "3:4"], "1:1"),
8582
+ // Vendor-side reasoning tier for the agentic planner; vendor default high.
8583
+ ...p.enum("reasoningStrength", ["low", "high"], "high", { label: "Reasoning" }),
8584
+ ...p.enum("moderation", ["auto", "low", "none"], "auto", { label: "Moderation" }),
8585
+ // Per-tool planner controls — all-true matches the vendor default
8586
+ // (omitting tool_enablement enables every tool).
8587
+ ...p.boolean("enableImageSearch", true, "Image Search"),
8588
+ ...p.boolean("enableWebSearch", true, "Web Search"),
8589
+ ...p.boolean("enableShell", true, "Layout & Chart Tools"),
8590
+ ...p.enum("outputFormat", ["png", "jpeg", "webp"], "png", { label: "Format" }),
8591
+ ...params.count(),
8592
+ ...params.imageInput(5, "Source Images")
8593
+ }
8594
+ }
8595
+ ]);
8596
+
8597
+ // src/vendors/catalog/meta.payloads.ts
8598
+ var MUSE_AR_TO_SIZE = {
8599
+ "1:1": "1024x1024",
8600
+ "3:2": "1536x1024",
8601
+ "2:3": "1024x1536",
8602
+ "16:9": "1820x1024",
8603
+ "9:16": "1024x1820",
8604
+ "4:3": "1365x1024",
8605
+ "3:4": "1024x1365"
8606
+ };
8607
+ var buildMuseCommonPayload = (input) => ({
8608
+ model: "muse-image-1.0",
8609
+ prompt: input.prompt,
8610
+ n: input.count ?? 1,
8611
+ size: MUSE_AR_TO_SIZE[input.aspectRatio ?? ""] ?? "1024x1024",
8612
+ ...input.outputFormat ? { output_format: input.outputFormat } : {},
8613
+ ...input.reasoningStrength ? { reasoning_strength: input.reasoningStrength } : {},
8614
+ ...input.moderation ? { moderation: input.moderation } : {},
8615
+ tool_enablement: {
8616
+ enable_image_search: input.enableImageSearch ?? true,
8617
+ enable_web_search: input.enableWebSearch ?? true,
8618
+ enable_shell: input.enableShell ?? true
8619
+ }
8620
+ });
8621
+ var buildMuseImagePayload = (input) => buildMuseCommonPayload(input);
8622
+ var buildMuseImageEditPayload = (input) => ({
8623
+ ...buildMuseCommonPayload(input),
8624
+ images: input.imageUrls ?? []
8625
+ });
8626
+ registerPayloads(MODELS38, {
8627
+ "muse-image-1.0": buildMuseImagePayload
8628
+ });
8629
+ registerEditPayloads(MODELS38, {
8630
+ "muse-image-1.0": buildMuseImageEditPayload
8631
+ });
8632
+
8533
8633
  // src/vendors/catalog/index.ts
8534
8634
  var ALL_MODELS = [
8535
8635
  ...MODELS,
@@ -8568,7 +8668,8 @@ var ALL_MODELS = [
8568
8668
  ...MODELS34,
8569
8669
  ...MODELS35,
8570
8670
  ...MODELS36,
8571
- ...MODELS37
8671
+ ...MODELS37,
8672
+ ...MODELS38
8572
8673
  ];
8573
8674
  var getModelsByMode = (mode, includeDisabled = false) => ALL_MODELS.filter((m) => m.mode === mode && (includeDisabled || isVisibleForReleases(m)));
8574
8675
 
@@ -10764,6 +10865,7 @@ var MinimaxH3 = "minimax-h3";
10764
10865
  var MinimaxH3Max = "minimax-h3-max";
10765
10866
  var MinimaxMusicV2 = "minimax-music-v2";
10766
10867
  var MinimaxMusicV3 = "minimax-music-v3";
10868
+ var MuseImage10 = "muse-image-1.0";
10767
10869
  var Ovi = "ovi";
10768
10870
  var PicsartChangeBg = "picsart-change-bg";
10769
10871
  var PicsartEnhance = "picsart-enhance";
@@ -10976,6 +11078,7 @@ var Models = {
10976
11078
  MinimaxH3Max,
10977
11079
  MinimaxMusicV2,
10978
11080
  MinimaxMusicV3,
11081
+ MuseImage10,
10979
11082
  Ovi,
10980
11083
  PicsartChangeBg,
10981
11084
  PicsartEnhance,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picsart/ai-sdk",
3
- "version": "5.23.0",
3
+ "version": "5.24.1",
4
4
  "type": "module",
5
5
  "description": "Type-safe SDK for 100+ AI models — image, video, audio, and text generation with Picsart",
6
6
  "license": "MIT",