@howells/motif-sdk 5.2.0 → 5.3.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/README.md CHANGED
@@ -34,12 +34,12 @@ Every Task function returns `Result<TaskOutput, MotifError>` from `neverthrow` a
34
34
 
35
35
  ## Curated Models and Tiers
36
36
 
37
- The Task client curates 21 generation Models, with separate rankings for generation and editing. `TASKS.generate` and `TASKS.vary` expose the current choices, Tiers and evidence in `basis` and `rankedAt`. A generation with `references` uses the editing ranking.
37
+ The Task client curates 24 generation Models, with separate rankings for generation and editing. Both follow Arena, read 29 October 2026. `TASKS.generate` and `TASKS.vary` expose the current choices, Tiers and evidence in `basis` and `rankedAt`. A generation with `references` uses the editing ranking.
38
38
 
39
39
  | Tier | Generation default | Editing default |
40
40
  | -------------------- | ------------------ | ----------------- |
41
41
  | `quality` | Sunburst at `max` | Sunburst at `max` |
42
- | `balanced` (default) | Nano Banana 2.1 | Nano Banana 2.1 |
42
+ | `balanced` (default) | Nano Banana 2.1 | Grok Image 2 |
43
43
  | `fast` | Nano Banana 2 Lite | Grok |
44
44
 
45
45
  These are the first choices when the request's capabilities and available keys permit them. Explicit Models, Looks and pins take precedence. Selected specialists remain for typography, transparency, control and inexpensive drafts. Archived predecessors remain available through explicit Models, pins and existing Looks, including `flux2-dev` for streaming.
package/dist/image.js CHANGED
@@ -57,6 +57,7 @@ const FAL_PRICING_CHECKED_AT = "2026-05-12";
57
57
  const FAL_PRICING_CHECKED_JUL_2026 = "2026-07-11";
58
58
  const FAL_PRICING_CHECKED_AUG_2026 = "2026-08-23";
59
59
  const FAL_PRICING_CHECKED_SEP_2026 = "2026-09-16";
60
+ const FAL_PRICING_CHECKED_OCT_2026 = "2026-10-29";
60
61
  const MODELS = {
61
62
  flare: {
62
63
  benchmark: {
@@ -1413,6 +1414,7 @@ const MODELS = {
1413
1414
  maxPixels: 4194304,
1414
1415
  minPixels: 262144
1415
1416
  },
1417
+ editEndpoint: "alibaba/qwen-image-3/edit",
1416
1418
  endpoint: "alibaba/qwen-image-3/text-to-image",
1417
1419
  falPricing: {
1418
1420
  checkedAt: FAL_PRICING_CHECKED_SEP_2026,
@@ -1423,12 +1425,13 @@ const MODELS = {
1423
1425
  unit: "images",
1424
1426
  unitPrice: .04
1425
1427
  },
1428
+ maxReferenceImages: 3,
1426
1429
  name: "Qwen Image 3",
1427
1430
  pricePerImageUsd: .04,
1428
1431
  pricing: "$0.04 (1K) / $0.075 (2K)",
1429
1432
  sizeMode: "image_size_enum",
1430
1433
  supportsAspect: true,
1431
- supportsEdit: false,
1434
+ supportsEdit: true,
1432
1435
  supportsNegativePrompt: true,
1433
1436
  supportsNumImages: true,
1434
1437
  supportsOutputFormat: true,
@@ -1631,6 +1634,120 @@ const MODELS = {
1631
1634
  supportsSyncMode: true,
1632
1635
  type: "generation"
1633
1636
  },
1637
+ "muse-image": {
1638
+ benchmark: { useCase: "Low-cost generation and multi-reference editing; Arena #8 generation / #10 editing, 2026-10-29" },
1639
+ editEndpoint: "meta/muse-image/edit",
1640
+ endpoint: "meta/muse-image/text-to-image",
1641
+ falPricing: {
1642
+ checkedAt: FAL_PRICING_CHECKED_OCT_2026,
1643
+ currency: "USD",
1644
+ endpointId: "meta/muse-image/text-to-image",
1645
+ estimatedCostPerImageUsd: .01,
1646
+ source: "fal-pricing-api",
1647
+ unit: "images",
1648
+ unitPrice: .01
1649
+ },
1650
+ maxReferenceImages: 10,
1651
+ name: "Meta Muse Image",
1652
+ pricePerImageUsd: .01,
1653
+ pricing: "$0.01",
1654
+ sizeMode: "aspect_ratio",
1655
+ supportedAspects: [
1656
+ "1:1",
1657
+ "4:3",
1658
+ "3:4",
1659
+ "16:9",
1660
+ "9:16",
1661
+ "3:2",
1662
+ "2:3",
1663
+ "4:5",
1664
+ "5:4",
1665
+ "21:9",
1666
+ "4:1",
1667
+ "1:4",
1668
+ "8:1",
1669
+ "1:8"
1670
+ ],
1671
+ supportsAspect: true,
1672
+ supportsEdit: true,
1673
+ supportsNumImages: true,
1674
+ supportsOutputFormat: true,
1675
+ supportsResolution: false,
1676
+ supportsSyncMode: true,
1677
+ type: "generation"
1678
+ },
1679
+ krea3: {
1680
+ benchmark: { useCase: "Reference editing with prompt planning. Motif sends fal's defaults (berry, medium reasoning), which Arena has not scored; Arena's 1411 editing score (2026-10-29) is for Ultra, available with --param reasoning_level=ultra" },
1681
+ customImageSize: {
1682
+ maxEdge: 3200,
1683
+ maxPixels: 4220160,
1684
+ minEdge: 256,
1685
+ multipleOf: 16
1686
+ },
1687
+ editEndpoint: "krea/v3/edit",
1688
+ endpoint: "krea/v3/text-to-image",
1689
+ falPricing: {
1690
+ checkedAt: FAL_PRICING_CHECKED_OCT_2026,
1691
+ currency: "USD",
1692
+ endpointId: "krea/v3/text-to-image",
1693
+ estimatedCostPerImageUsd: .025,
1694
+ source: "fal-pricing-api",
1695
+ unit: "megapixels",
1696
+ unitPrice: .025
1697
+ },
1698
+ maxReferenceImages: 8,
1699
+ name: "Krea 3",
1700
+ pricePerImageUsd: .025,
1701
+ pricing: "$0.025/MP (edits also bill each reference)",
1702
+ sizeMode: "image_size_enum",
1703
+ supportedOutputFormats: ["png", "jpeg"],
1704
+ supportsAspect: true,
1705
+ supportsEdit: true,
1706
+ supportsNegativePrompt: true,
1707
+ supportsNumImages: false,
1708
+ supportsOutputFormat: true,
1709
+ supportsResolution: false,
1710
+ supportsSafetyChecker: true,
1711
+ supportsSeed: true,
1712
+ supportsSyncMode: true,
1713
+ type: "generation"
1714
+ },
1715
+ "grok-image-quality": {
1716
+ benchmark: { useCase: "Detailed generation and editing with stronger text rendering; Arena #11 editing, 2026-10-29" },
1717
+ editEndpoint: "xai/grok-imagine-image/quality/edit",
1718
+ endpoint: "xai/grok-imagine-image/quality/text-to-image",
1719
+ falPricing: {
1720
+ checkedAt: FAL_PRICING_CHECKED_OCT_2026,
1721
+ currency: "USD",
1722
+ endpointId: "xai/grok-imagine-image/quality/text-to-image",
1723
+ estimatedCostPerImageUsd: .05,
1724
+ source: "fal-pricing-api",
1725
+ unit: "images",
1726
+ unitPrice: .05
1727
+ },
1728
+ maxReferenceImages: 3,
1729
+ name: "Grok Imagine Image Quality",
1730
+ pricePerImageUsd: .05,
1731
+ pricing: "$0.05 (1K) / $0.07 (2K)",
1732
+ sizeMode: "aspect_ratio",
1733
+ supportedAspects: [
1734
+ "16:9",
1735
+ "4:3",
1736
+ "3:2",
1737
+ "1:1",
1738
+ "2:3",
1739
+ "3:4",
1740
+ "9:16"
1741
+ ],
1742
+ supportedResolutions: ["1K", "2K"],
1743
+ supportsAspect: true,
1744
+ supportsEdit: true,
1745
+ supportsNumImages: true,
1746
+ supportsOutputFormat: true,
1747
+ supportsResolution: true,
1748
+ supportsSyncMode: true,
1749
+ type: "generation"
1750
+ },
1634
1751
  kling: {
1635
1752
  endpoint: "fal-ai/kling-video/v3/pro/image-to-video",
1636
1753
  name: "Kling v3 Pro",
@@ -1708,7 +1825,10 @@ const MODELS = {
1708
1825
  "qwen3",
1709
1826
  "banana2-lite",
1710
1827
  "grok-image-2",
1828
+ "grok-image-quality",
1711
1829
  "grok-image",
1830
+ "muse-image",
1831
+ "krea3",
1712
1832
  "flux2-flex",
1713
1833
  "flux2-pro",
1714
1834
  "flux2-turbo",
@@ -3442,6 +3562,8 @@ const FAL_IMAGE_PRICE_USD = {
3442
3562
  "ideogram/v4": MODELS.ideogram4?.pricePerImageUsd ?? .03,
3443
3563
  "xai/grok-imagine-image": MODELS["grok-image"]?.pricePerImageUsd ?? .02,
3444
3564
  "xai/grok-imagine-image/v2.0/text-to-image": MODELS["grok-image-2"]?.pricePerImageUsd ?? .06,
3565
+ "xai/grok-imagine-image/quality/text-to-image": MODELS["grok-image-quality"]?.pricePerImageUsd ?? .05,
3566
+ "meta/muse-image/text-to-image": MODELS["muse-image"]?.pricePerImageUsd ?? .01,
3445
3567
  "microsoft/mai-image-2.5-pro": MODELS["mai-image-2.5-pro"]?.pricePerImageUsd ?? .17,
3446
3568
  "fal-ai/ideogram/v3/generate-transparent": MODELS["ideogram3-transparent"]?.pricePerImageUsd ?? .06,
3447
3569
  "alibaba/qwen-image-3/text-to-image": MODELS.qwen3?.pricePerImageUsd ?? .04,
package/dist/index.cjs CHANGED
@@ -713,6 +713,7 @@ const FAL_PRICING_CHECKED_AT = "2026-05-12";
713
713
  const FAL_PRICING_CHECKED_JUL_2026 = "2026-07-11";
714
714
  const FAL_PRICING_CHECKED_AUG_2026 = "2026-08-23";
715
715
  const FAL_PRICING_CHECKED_SEP_2026 = "2026-09-16";
716
+ const FAL_PRICING_CHECKED_OCT_2026 = "2026-10-29";
716
717
  const MODELS = {
717
718
  flare: {
718
719
  benchmark: {
@@ -2069,6 +2070,7 @@ const MODELS = {
2069
2070
  maxPixels: 4194304,
2070
2071
  minPixels: 262144
2071
2072
  },
2073
+ editEndpoint: "alibaba/qwen-image-3/edit",
2072
2074
  endpoint: "alibaba/qwen-image-3/text-to-image",
2073
2075
  falPricing: {
2074
2076
  checkedAt: FAL_PRICING_CHECKED_SEP_2026,
@@ -2079,12 +2081,13 @@ const MODELS = {
2079
2081
  unit: "images",
2080
2082
  unitPrice: .04
2081
2083
  },
2084
+ maxReferenceImages: 3,
2082
2085
  name: "Qwen Image 3",
2083
2086
  pricePerImageUsd: .04,
2084
2087
  pricing: "$0.04 (1K) / $0.075 (2K)",
2085
2088
  sizeMode: "image_size_enum",
2086
2089
  supportsAspect: true,
2087
- supportsEdit: false,
2090
+ supportsEdit: true,
2088
2091
  supportsNegativePrompt: true,
2089
2092
  supportsNumImages: true,
2090
2093
  supportsOutputFormat: true,
@@ -2287,6 +2290,120 @@ const MODELS = {
2287
2290
  supportsSyncMode: true,
2288
2291
  type: "generation"
2289
2292
  },
2293
+ "muse-image": {
2294
+ benchmark: { useCase: "Low-cost generation and multi-reference editing; Arena #8 generation / #10 editing, 2026-10-29" },
2295
+ editEndpoint: "meta/muse-image/edit",
2296
+ endpoint: "meta/muse-image/text-to-image",
2297
+ falPricing: {
2298
+ checkedAt: FAL_PRICING_CHECKED_OCT_2026,
2299
+ currency: "USD",
2300
+ endpointId: "meta/muse-image/text-to-image",
2301
+ estimatedCostPerImageUsd: .01,
2302
+ source: "fal-pricing-api",
2303
+ unit: "images",
2304
+ unitPrice: .01
2305
+ },
2306
+ maxReferenceImages: 10,
2307
+ name: "Meta Muse Image",
2308
+ pricePerImageUsd: .01,
2309
+ pricing: "$0.01",
2310
+ sizeMode: "aspect_ratio",
2311
+ supportedAspects: [
2312
+ "1:1",
2313
+ "4:3",
2314
+ "3:4",
2315
+ "16:9",
2316
+ "9:16",
2317
+ "3:2",
2318
+ "2:3",
2319
+ "4:5",
2320
+ "5:4",
2321
+ "21:9",
2322
+ "4:1",
2323
+ "1:4",
2324
+ "8:1",
2325
+ "1:8"
2326
+ ],
2327
+ supportsAspect: true,
2328
+ supportsEdit: true,
2329
+ supportsNumImages: true,
2330
+ supportsOutputFormat: true,
2331
+ supportsResolution: false,
2332
+ supportsSyncMode: true,
2333
+ type: "generation"
2334
+ },
2335
+ krea3: {
2336
+ benchmark: { useCase: "Reference editing with prompt planning. Motif sends fal's defaults (berry, medium reasoning), which Arena has not scored; Arena's 1411 editing score (2026-10-29) is for Ultra, available with --param reasoning_level=ultra" },
2337
+ customImageSize: {
2338
+ maxEdge: 3200,
2339
+ maxPixels: 4220160,
2340
+ minEdge: 256,
2341
+ multipleOf: 16
2342
+ },
2343
+ editEndpoint: "krea/v3/edit",
2344
+ endpoint: "krea/v3/text-to-image",
2345
+ falPricing: {
2346
+ checkedAt: FAL_PRICING_CHECKED_OCT_2026,
2347
+ currency: "USD",
2348
+ endpointId: "krea/v3/text-to-image",
2349
+ estimatedCostPerImageUsd: .025,
2350
+ source: "fal-pricing-api",
2351
+ unit: "megapixels",
2352
+ unitPrice: .025
2353
+ },
2354
+ maxReferenceImages: 8,
2355
+ name: "Krea 3",
2356
+ pricePerImageUsd: .025,
2357
+ pricing: "$0.025/MP (edits also bill each reference)",
2358
+ sizeMode: "image_size_enum",
2359
+ supportedOutputFormats: ["png", "jpeg"],
2360
+ supportsAspect: true,
2361
+ supportsEdit: true,
2362
+ supportsNegativePrompt: true,
2363
+ supportsNumImages: false,
2364
+ supportsOutputFormat: true,
2365
+ supportsResolution: false,
2366
+ supportsSafetyChecker: true,
2367
+ supportsSeed: true,
2368
+ supportsSyncMode: true,
2369
+ type: "generation"
2370
+ },
2371
+ "grok-image-quality": {
2372
+ benchmark: { useCase: "Detailed generation and editing with stronger text rendering; Arena #11 editing, 2026-10-29" },
2373
+ editEndpoint: "xai/grok-imagine-image/quality/edit",
2374
+ endpoint: "xai/grok-imagine-image/quality/text-to-image",
2375
+ falPricing: {
2376
+ checkedAt: FAL_PRICING_CHECKED_OCT_2026,
2377
+ currency: "USD",
2378
+ endpointId: "xai/grok-imagine-image/quality/text-to-image",
2379
+ estimatedCostPerImageUsd: .05,
2380
+ source: "fal-pricing-api",
2381
+ unit: "images",
2382
+ unitPrice: .05
2383
+ },
2384
+ maxReferenceImages: 3,
2385
+ name: "Grok Imagine Image Quality",
2386
+ pricePerImageUsd: .05,
2387
+ pricing: "$0.05 (1K) / $0.07 (2K)",
2388
+ sizeMode: "aspect_ratio",
2389
+ supportedAspects: [
2390
+ "16:9",
2391
+ "4:3",
2392
+ "3:2",
2393
+ "1:1",
2394
+ "2:3",
2395
+ "3:4",
2396
+ "9:16"
2397
+ ],
2398
+ supportedResolutions: ["1K", "2K"],
2399
+ supportsAspect: true,
2400
+ supportsEdit: true,
2401
+ supportsNumImages: true,
2402
+ supportsOutputFormat: true,
2403
+ supportsResolution: true,
2404
+ supportsSyncMode: true,
2405
+ type: "generation"
2406
+ },
2290
2407
  kling: {
2291
2408
  endpoint: "fal-ai/kling-video/v3/pro/image-to-video",
2292
2409
  name: "Kling v3 Pro",
@@ -2365,7 +2482,10 @@ const GENERATION_MODELS = [
2365
2482
  "qwen3",
2366
2483
  "banana2-lite",
2367
2484
  "grok-image-2",
2485
+ "grok-image-quality",
2368
2486
  "grok-image",
2487
+ "muse-image",
2488
+ "krea3",
2369
2489
  "flux2-flex",
2370
2490
  "flux2-pro",
2371
2491
  "flux2-turbo",
@@ -2407,6 +2527,7 @@ function estimateCost(model, resolution, numImages = 1, editImages = 0) {
2407
2527
  if (configuredPrice === null) return null;
2408
2528
  if (model === "mai-image-2.5-pro" && editImages > 0) return .27 * numImages;
2409
2529
  if (model === "grok-image-2" && editImages > 0) return (resolution === "2K" || resolution === "4K" ? .08 : .06) * numImages + .01 * editImages;
2530
+ if (model === "grok-image-quality") return (resolution === "2K" || resolution === "4K" ? .07 : .05) * numImages + .01 * editImages;
2410
2531
  if (configuredPrice !== void 0) {
2411
2532
  if ((model === "banana" || model === "gemini3") && resolution === "4K") return configuredPrice * 2 * numImages;
2412
2533
  if (model === "seedream5" && (resolution === "2K" || resolution === "4K")) return configuredPrice * 2 * numImages;
@@ -2762,7 +2883,7 @@ function buildGenerateBody(options) {
2762
2883
  break;
2763
2884
  case "aspect_ratio":
2764
2885
  if (config.supportsAspect) body.aspect_ratio = aspect;
2765
- if (config.supportsResolution) body.resolution = model === "grok-image" || model === "grok-image-2" ? resolution.toLowerCase() : resolution;
2886
+ if (config.supportsResolution) body.resolution = model === "grok-image" || model === "grok-image-2" || model === "grok-image-quality" ? resolution.toLowerCase() : resolution;
2766
2887
  }
2767
2888
  if (config.supportsQuality === true) body.quality = quality ?? config.defaultQuality ?? "high";
2768
2889
  if (config.supportsBackground === true && background) body.background = background;
@@ -5192,7 +5313,7 @@ const TIERS = [
5192
5313
  ];
5193
5314
  const DEFAULT_TIER = "balanced";
5194
5315
  const HAND_RANKED_AT = "2026-09-16";
5195
- const IMAGE_RANKED_AT = "2026-10-07";
5316
+ const IMAGE_RANKED_AT = "2026-10-29";
5196
5317
  /** Every Task with a Model. A Task is absent here until it has at least one Model. */
5197
5318
  const TASKS = {
5198
5319
  animate: {
@@ -5363,7 +5484,7 @@ const TASKS = {
5363
5484
  summary: "Remove an object, person, text or clutter from an image and fill the gap."
5364
5485
  },
5365
5486
  generate: {
5366
- basis: "Curated from Artificial Analysis v2, captured 2026-10-07, and Arena 2026-10-06. Sunburst and Flare lead quality at the benchmarked max setting. Nano Banana 2.1 leads balanced on preliminary Arena evidence and lower representative cost; Grok Image 2 and MAI 2.5 are established alternatives. Fast keeps Nano Banana 2 Lite, budget Grok and Seedream 5 Lite, and FLUX.2 Turbo. Design, transparency and tuned Look routes are capability exceptions. Generation with References uses the separate editing ranking. Older routes are explicit/pin/Look-only.",
5487
+ basis: "Order follows Arena text-to-image (https://arena.ai/leaderboard/image/text-to-image), read 2026-10-29 (MOT-72). Sunburst and Flare lead quality at the benchmarked max setting. Balanced starts with Nano Banana 2.1 on preliminary Arena evidence, then Grok Image 2 and Muse Image. Models not yet on the board follow the ranked ones in their Tier, in their previous order. The Artificial Analysis v2 snapshot of 2026-10-07 stays as recorded benchmark data. Fast keeps Nano Banana 2 Lite, budget Grok and Seedream 5 Lite, and FLUX.2 Turbo. Design, transparency and tuned Look routes are capability exceptions. Generation with References uses the separate editing ranking. Older routes are explicit/pin/Look-only.",
5367
5488
  models: [
5368
5489
  {
5369
5490
  model: "sunburst",
@@ -5378,15 +5499,15 @@ const TASKS = {
5378
5499
  tier: "quality"
5379
5500
  },
5380
5501
  {
5381
- model: "gpt",
5502
+ model: "seedream5",
5382
5503
  tier: "quality"
5383
5504
  },
5384
5505
  {
5385
- model: "mai-image-2.5-pro",
5506
+ model: "gpt",
5386
5507
  tier: "quality"
5387
5508
  },
5388
5509
  {
5389
- model: "seedream5",
5510
+ model: "mai-image-2.5-pro",
5390
5511
  tier: "quality"
5391
5512
  },
5392
5513
  {
@@ -5397,10 +5518,18 @@ const TASKS = {
5397
5518
  model: "grok-image-2",
5398
5519
  tier: "balanced"
5399
5520
  },
5521
+ {
5522
+ model: "muse-image",
5523
+ tier: "balanced"
5524
+ },
5400
5525
  {
5401
5526
  model: "banana2",
5402
5527
  tier: "balanced"
5403
5528
  },
5529
+ {
5530
+ model: "qwen3",
5531
+ tier: "balanced"
5532
+ },
5404
5533
  {
5405
5534
  model: "mai-image-2.5",
5406
5535
  tier: "balanced"
@@ -5410,23 +5539,27 @@ const TASKS = {
5410
5539
  tier: "balanced"
5411
5540
  },
5412
5541
  {
5413
- model: "qwen3",
5542
+ model: "ideogram4",
5414
5543
  tier: "balanced"
5415
5544
  },
5416
5545
  {
5417
5546
  model: "flux2-flex",
5418
5547
  tier: "balanced"
5419
5548
  },
5549
+ {
5550
+ model: "recraft41",
5551
+ tier: "balanced"
5552
+ },
5420
5553
  {
5421
5554
  model: "flux2-pro",
5422
5555
  tier: "balanced"
5423
5556
  },
5424
5557
  {
5425
- model: "ideogram4",
5558
+ model: "krea3",
5426
5559
  tier: "balanced"
5427
5560
  },
5428
5561
  {
5429
- model: "recraft41",
5562
+ model: "grok-image-quality",
5430
5563
  tier: "balanced"
5431
5564
  },
5432
5565
  {
@@ -5938,7 +6071,7 @@ const TASKS = {
5938
6071
  summary: "Trace a raster image to a clean SVG."
5939
6072
  },
5940
6073
  vary: {
5941
- basis: "Curated from Artificial Analysis v2 editing, captured 2026-10-07, and preliminary Arena 2026-10-06 evidence for Nano Banana 2.1. Editing order differs from generation: MAI 2.5 outranks Grok Image 2, and Seedream 5 Pro outranks GPT Image 1.5. Sunburst and Flare use max quality. vary reuses a previously chosen Model when explicitly supplied, including retained legacy routes.",
6074
+ basis: "Order follows Arena image edit, single image (https://arena.ai/leaderboard/image/image-edit/single-image), read 2026-10-29 (MOT-72). Editing order differs from generation: Grok Image 2 leads balanced, ahead of Nano Banana 2.1, and Seedream 5 Pro outranks GPT Image 1.5. Arena scores Krea 3 only at its Ultra setting, which costs $0.27 to $0.35 an edit and ignores the requested size, so krea3, which runs fal's default setting, is ranked as unscored. Models not yet on the board follow the ranked ones in their Tier, in their previous order. The Artificial Analysis v2 snapshot of 2026-10-07 stays as recorded benchmark data. Sunburst and Flare use max quality. vary reuses a previously chosen Model when explicitly supplied, including retained legacy routes.",
5942
6075
  models: [
5943
6076
  {
5944
6077
  model: "sunburst",
@@ -5953,17 +6086,21 @@ const TASKS = {
5953
6086
  tier: "quality"
5954
6087
  },
5955
6088
  {
5956
- model: "mai-image-2.5-pro",
6089
+ model: "seedream5",
5957
6090
  tier: "quality"
5958
6091
  },
5959
6092
  {
5960
- model: "seedream5",
6093
+ model: "gpt",
5961
6094
  tier: "quality"
5962
6095
  },
5963
6096
  {
5964
- model: "gpt",
6097
+ model: "mai-image-2.5-pro",
5965
6098
  tier: "quality"
5966
6099
  },
6100
+ {
6101
+ model: "grok-image-2",
6102
+ tier: "balanced"
6103
+ },
5967
6104
  {
5968
6105
  model: "banana21",
5969
6106
  tier: "balanced"
@@ -5973,17 +6110,29 @@ const TASKS = {
5973
6110
  tier: "balanced"
5974
6111
  },
5975
6112
  {
5976
- model: "grok-image-2",
6113
+ model: "muse-image",
5977
6114
  tier: "balanced"
5978
6115
  },
5979
6116
  {
5980
- model: "banana2",
6117
+ model: "grok-image-quality",
5981
6118
  tier: "balanced"
5982
6119
  },
5983
6120
  {
5984
6121
  model: "banana",
5985
6122
  tier: "balanced"
5986
6123
  },
6124
+ {
6125
+ model: "banana2",
6126
+ tier: "balanced"
6127
+ },
6128
+ {
6129
+ model: "krea3",
6130
+ tier: "balanced"
6131
+ },
6132
+ {
6133
+ model: "qwen3",
6134
+ tier: "balanced"
6135
+ },
5987
6136
  {
5988
6137
  model: "flux2-pro",
5989
6138
  tier: "balanced"
@@ -5997,11 +6146,11 @@ const TASKS = {
5997
6146
  tier: "fast"
5998
6147
  },
5999
6148
  {
6000
- model: "seedream5-lite",
6149
+ model: "banana2-lite",
6001
6150
  tier: "fast"
6002
6151
  },
6003
6152
  {
6004
- model: "banana2-lite",
6153
+ model: "seedream5-lite",
6005
6154
  tier: "fast"
6006
6155
  }
6007
6156
  ],
@@ -8577,6 +8726,8 @@ const FAL_IMAGE_PRICE_USD = {
8577
8726
  "ideogram/v4": MODELS.ideogram4?.pricePerImageUsd ?? .03,
8578
8727
  "xai/grok-imagine-image": MODELS["grok-image"]?.pricePerImageUsd ?? .02,
8579
8728
  "xai/grok-imagine-image/v2.0/text-to-image": MODELS["grok-image-2"]?.pricePerImageUsd ?? .06,
8729
+ "xai/grok-imagine-image/quality/text-to-image": MODELS["grok-image-quality"]?.pricePerImageUsd ?? .05,
8730
+ "meta/muse-image/text-to-image": MODELS["muse-image"]?.pricePerImageUsd ?? .01,
8580
8731
  "microsoft/mai-image-2.5-pro": MODELS["mai-image-2.5-pro"]?.pricePerImageUsd ?? .17,
8581
8732
  "fal-ai/ideogram/v3/generate-transparent": MODELS["ideogram3-transparent"]?.pricePerImageUsd ?? .06,
8582
8733
  "alibaba/qwen-image-3/text-to-image": MODELS.qwen3?.pricePerImageUsd ?? .04,
package/dist/index.d.cts CHANGED
@@ -524,10 +524,10 @@ export declare const TASKS: {
524
524
  readonly summary: "Remove an object, person, text or clutter from an image and fill the gap.";
525
525
  };
526
526
  readonly generate: {
527
- readonly basis: "Curated from Artificial Analysis v2, captured 2026-10-07, and Arena 2026-10-06. Sunburst and Flare lead quality at the benchmarked max setting. Nano Banana 2.1 leads balanced on preliminary Arena evidence and lower representative cost; Grok Image 2 and MAI 2.5 are established alternatives. Fast keeps Nano Banana 2 Lite, budget Grok and Seedream 5 Lite, and FLUX.2 Turbo. Design, transparency and tuned Look routes are capability exceptions. Generation with References uses the separate editing ranking. Older routes are explicit/pin/Look-only.";
527
+ readonly basis: "Order follows Arena text-to-image (https://arena.ai/leaderboard/image/text-to-image), read 2026-10-29 (MOT-72). Sunburst and Flare lead quality at the benchmarked max setting. Balanced starts with Nano Banana 2.1 on preliminary Arena evidence, then Grok Image 2 and Muse Image. Models not yet on the board follow the ranked ones in their Tier, in their previous order. The Artificial Analysis v2 snapshot of 2026-10-07 stays as recorded benchmark data. Fast keeps Nano Banana 2 Lite, budget Grok and Seedream 5 Lite, and FLUX.2 Turbo. Design, transparency and tuned Look routes are capability exceptions. Generation with References uses the separate editing ranking. Older routes are explicit/pin/Look-only.";
528
528
  readonly models: readonly RankedModel[];
529
529
  readonly notFor: "Variations of an image you already have (vary), or a consistent set of images (series run).";
530
- readonly rankedAt: "2026-10-07";
530
+ readonly rankedAt: "2026-10-29";
531
531
  readonly rankedFrom: "hand";
532
532
  readonly summary: "Make an image from a prompt, or change an image you pass as a reference.";
533
533
  };
@@ -937,10 +937,10 @@ export declare const TASKS: {
937
937
  readonly summary: "Trace a raster image to a clean SVG.";
938
938
  };
939
939
  readonly vary: {
940
- readonly basis: "Curated from Artificial Analysis v2 editing, captured 2026-10-07, and preliminary Arena 2026-10-06 evidence for Nano Banana 2.1. Editing order differs from generation: MAI 2.5 outranks Grok Image 2, and Seedream 5 Pro outranks GPT Image 1.5. Sunburst and Flare use max quality. vary reuses a previously chosen Model when explicitly supplied, including retained legacy routes.";
940
+ readonly basis: "Order follows Arena image edit, single image (https://arena.ai/leaderboard/image/image-edit/single-image), read 2026-10-29 (MOT-72). Editing order differs from generation: Grok Image 2 leads balanced, ahead of Nano Banana 2.1, and Seedream 5 Pro outranks GPT Image 1.5. Arena scores Krea 3 only at its Ultra setting, which costs $0.27 to $0.35 an edit and ignores the requested size, so krea3, which runs fal's default setting, is ranked as unscored. Models not yet on the board follow the ranked ones in their Tier, in their previous order. The Artificial Analysis v2 snapshot of 2026-10-07 stays as recorded benchmark data. Sunburst and Flare use max quality. vary reuses a previously chosen Model when explicitly supplied, including retained legacy routes.";
941
941
  readonly models: readonly RankedModel[];
942
942
  readonly notFor: "A specific change to an image described in words (generate with a reference), or a set of different scenes in one style (series run).";
943
- readonly rankedAt: "2026-10-07";
943
+ readonly rankedAt: "2026-10-29";
944
944
  readonly rankedFrom: "hand";
945
945
  readonly summary: "Make variations of an image you already have.";
946
946
  };
package/dist/index.d.ts CHANGED
@@ -524,10 +524,10 @@ export declare const TASKS: {
524
524
  readonly summary: "Remove an object, person, text or clutter from an image and fill the gap.";
525
525
  };
526
526
  readonly generate: {
527
- readonly basis: "Curated from Artificial Analysis v2, captured 2026-10-07, and Arena 2026-10-06. Sunburst and Flare lead quality at the benchmarked max setting. Nano Banana 2.1 leads balanced on preliminary Arena evidence and lower representative cost; Grok Image 2 and MAI 2.5 are established alternatives. Fast keeps Nano Banana 2 Lite, budget Grok and Seedream 5 Lite, and FLUX.2 Turbo. Design, transparency and tuned Look routes are capability exceptions. Generation with References uses the separate editing ranking. Older routes are explicit/pin/Look-only.";
527
+ readonly basis: "Order follows Arena text-to-image (https://arena.ai/leaderboard/image/text-to-image), read 2026-10-29 (MOT-72). Sunburst and Flare lead quality at the benchmarked max setting. Balanced starts with Nano Banana 2.1 on preliminary Arena evidence, then Grok Image 2 and Muse Image. Models not yet on the board follow the ranked ones in their Tier, in their previous order. The Artificial Analysis v2 snapshot of 2026-10-07 stays as recorded benchmark data. Fast keeps Nano Banana 2 Lite, budget Grok and Seedream 5 Lite, and FLUX.2 Turbo. Design, transparency and tuned Look routes are capability exceptions. Generation with References uses the separate editing ranking. Older routes are explicit/pin/Look-only.";
528
528
  readonly models: readonly RankedModel[];
529
529
  readonly notFor: "Variations of an image you already have (vary), or a consistent set of images (series run).";
530
- readonly rankedAt: "2026-10-07";
530
+ readonly rankedAt: "2026-10-29";
531
531
  readonly rankedFrom: "hand";
532
532
  readonly summary: "Make an image from a prompt, or change an image you pass as a reference.";
533
533
  };
@@ -937,10 +937,10 @@ export declare const TASKS: {
937
937
  readonly summary: "Trace a raster image to a clean SVG.";
938
938
  };
939
939
  readonly vary: {
940
- readonly basis: "Curated from Artificial Analysis v2 editing, captured 2026-10-07, and preliminary Arena 2026-10-06 evidence for Nano Banana 2.1. Editing order differs from generation: MAI 2.5 outranks Grok Image 2, and Seedream 5 Pro outranks GPT Image 1.5. Sunburst and Flare use max quality. vary reuses a previously chosen Model when explicitly supplied, including retained legacy routes.";
940
+ readonly basis: "Order follows Arena image edit, single image (https://arena.ai/leaderboard/image/image-edit/single-image), read 2026-10-29 (MOT-72). Editing order differs from generation: Grok Image 2 leads balanced, ahead of Nano Banana 2.1, and Seedream 5 Pro outranks GPT Image 1.5. Arena scores Krea 3 only at its Ultra setting, which costs $0.27 to $0.35 an edit and ignores the requested size, so krea3, which runs fal's default setting, is ranked as unscored. Models not yet on the board follow the ranked ones in their Tier, in their previous order. The Artificial Analysis v2 snapshot of 2026-10-07 stays as recorded benchmark data. Sunburst and Flare use max quality. vary reuses a previously chosen Model when explicitly supplied, including retained legacy routes.";
941
941
  readonly models: readonly RankedModel[];
942
942
  readonly notFor: "A specific change to an image described in words (generate with a reference), or a set of different scenes in one style (series run).";
943
- readonly rankedAt: "2026-10-07";
943
+ readonly rankedAt: "2026-10-29";
944
944
  readonly rankedFrom: "hand";
945
945
  readonly summary: "Make variations of an image you already have.";
946
946
  };
package/dist/index.js CHANGED
@@ -712,6 +712,7 @@ const FAL_PRICING_CHECKED_AT = "2026-05-12";
712
712
  const FAL_PRICING_CHECKED_JUL_2026 = "2026-07-11";
713
713
  const FAL_PRICING_CHECKED_AUG_2026 = "2026-08-23";
714
714
  const FAL_PRICING_CHECKED_SEP_2026 = "2026-09-16";
715
+ const FAL_PRICING_CHECKED_OCT_2026 = "2026-10-29";
715
716
  const MODELS = {
716
717
  flare: {
717
718
  benchmark: {
@@ -2068,6 +2069,7 @@ const MODELS = {
2068
2069
  maxPixels: 4194304,
2069
2070
  minPixels: 262144
2070
2071
  },
2072
+ editEndpoint: "alibaba/qwen-image-3/edit",
2071
2073
  endpoint: "alibaba/qwen-image-3/text-to-image",
2072
2074
  falPricing: {
2073
2075
  checkedAt: FAL_PRICING_CHECKED_SEP_2026,
@@ -2078,12 +2080,13 @@ const MODELS = {
2078
2080
  unit: "images",
2079
2081
  unitPrice: .04
2080
2082
  },
2083
+ maxReferenceImages: 3,
2081
2084
  name: "Qwen Image 3",
2082
2085
  pricePerImageUsd: .04,
2083
2086
  pricing: "$0.04 (1K) / $0.075 (2K)",
2084
2087
  sizeMode: "image_size_enum",
2085
2088
  supportsAspect: true,
2086
- supportsEdit: false,
2089
+ supportsEdit: true,
2087
2090
  supportsNegativePrompt: true,
2088
2091
  supportsNumImages: true,
2089
2092
  supportsOutputFormat: true,
@@ -2286,6 +2289,120 @@ const MODELS = {
2286
2289
  supportsSyncMode: true,
2287
2290
  type: "generation"
2288
2291
  },
2292
+ "muse-image": {
2293
+ benchmark: { useCase: "Low-cost generation and multi-reference editing; Arena #8 generation / #10 editing, 2026-10-29" },
2294
+ editEndpoint: "meta/muse-image/edit",
2295
+ endpoint: "meta/muse-image/text-to-image",
2296
+ falPricing: {
2297
+ checkedAt: FAL_PRICING_CHECKED_OCT_2026,
2298
+ currency: "USD",
2299
+ endpointId: "meta/muse-image/text-to-image",
2300
+ estimatedCostPerImageUsd: .01,
2301
+ source: "fal-pricing-api",
2302
+ unit: "images",
2303
+ unitPrice: .01
2304
+ },
2305
+ maxReferenceImages: 10,
2306
+ name: "Meta Muse Image",
2307
+ pricePerImageUsd: .01,
2308
+ pricing: "$0.01",
2309
+ sizeMode: "aspect_ratio",
2310
+ supportedAspects: [
2311
+ "1:1",
2312
+ "4:3",
2313
+ "3:4",
2314
+ "16:9",
2315
+ "9:16",
2316
+ "3:2",
2317
+ "2:3",
2318
+ "4:5",
2319
+ "5:4",
2320
+ "21:9",
2321
+ "4:1",
2322
+ "1:4",
2323
+ "8:1",
2324
+ "1:8"
2325
+ ],
2326
+ supportsAspect: true,
2327
+ supportsEdit: true,
2328
+ supportsNumImages: true,
2329
+ supportsOutputFormat: true,
2330
+ supportsResolution: false,
2331
+ supportsSyncMode: true,
2332
+ type: "generation"
2333
+ },
2334
+ krea3: {
2335
+ benchmark: { useCase: "Reference editing with prompt planning. Motif sends fal's defaults (berry, medium reasoning), which Arena has not scored; Arena's 1411 editing score (2026-10-29) is for Ultra, available with --param reasoning_level=ultra" },
2336
+ customImageSize: {
2337
+ maxEdge: 3200,
2338
+ maxPixels: 4220160,
2339
+ minEdge: 256,
2340
+ multipleOf: 16
2341
+ },
2342
+ editEndpoint: "krea/v3/edit",
2343
+ endpoint: "krea/v3/text-to-image",
2344
+ falPricing: {
2345
+ checkedAt: FAL_PRICING_CHECKED_OCT_2026,
2346
+ currency: "USD",
2347
+ endpointId: "krea/v3/text-to-image",
2348
+ estimatedCostPerImageUsd: .025,
2349
+ source: "fal-pricing-api",
2350
+ unit: "megapixels",
2351
+ unitPrice: .025
2352
+ },
2353
+ maxReferenceImages: 8,
2354
+ name: "Krea 3",
2355
+ pricePerImageUsd: .025,
2356
+ pricing: "$0.025/MP (edits also bill each reference)",
2357
+ sizeMode: "image_size_enum",
2358
+ supportedOutputFormats: ["png", "jpeg"],
2359
+ supportsAspect: true,
2360
+ supportsEdit: true,
2361
+ supportsNegativePrompt: true,
2362
+ supportsNumImages: false,
2363
+ supportsOutputFormat: true,
2364
+ supportsResolution: false,
2365
+ supportsSafetyChecker: true,
2366
+ supportsSeed: true,
2367
+ supportsSyncMode: true,
2368
+ type: "generation"
2369
+ },
2370
+ "grok-image-quality": {
2371
+ benchmark: { useCase: "Detailed generation and editing with stronger text rendering; Arena #11 editing, 2026-10-29" },
2372
+ editEndpoint: "xai/grok-imagine-image/quality/edit",
2373
+ endpoint: "xai/grok-imagine-image/quality/text-to-image",
2374
+ falPricing: {
2375
+ checkedAt: FAL_PRICING_CHECKED_OCT_2026,
2376
+ currency: "USD",
2377
+ endpointId: "xai/grok-imagine-image/quality/text-to-image",
2378
+ estimatedCostPerImageUsd: .05,
2379
+ source: "fal-pricing-api",
2380
+ unit: "images",
2381
+ unitPrice: .05
2382
+ },
2383
+ maxReferenceImages: 3,
2384
+ name: "Grok Imagine Image Quality",
2385
+ pricePerImageUsd: .05,
2386
+ pricing: "$0.05 (1K) / $0.07 (2K)",
2387
+ sizeMode: "aspect_ratio",
2388
+ supportedAspects: [
2389
+ "16:9",
2390
+ "4:3",
2391
+ "3:2",
2392
+ "1:1",
2393
+ "2:3",
2394
+ "3:4",
2395
+ "9:16"
2396
+ ],
2397
+ supportedResolutions: ["1K", "2K"],
2398
+ supportsAspect: true,
2399
+ supportsEdit: true,
2400
+ supportsNumImages: true,
2401
+ supportsOutputFormat: true,
2402
+ supportsResolution: true,
2403
+ supportsSyncMode: true,
2404
+ type: "generation"
2405
+ },
2289
2406
  kling: {
2290
2407
  endpoint: "fal-ai/kling-video/v3/pro/image-to-video",
2291
2408
  name: "Kling v3 Pro",
@@ -2364,7 +2481,10 @@ const GENERATION_MODELS = [
2364
2481
  "qwen3",
2365
2482
  "banana2-lite",
2366
2483
  "grok-image-2",
2484
+ "grok-image-quality",
2367
2485
  "grok-image",
2486
+ "muse-image",
2487
+ "krea3",
2368
2488
  "flux2-flex",
2369
2489
  "flux2-pro",
2370
2490
  "flux2-turbo",
@@ -2406,6 +2526,7 @@ function estimateCost(model, resolution, numImages = 1, editImages = 0) {
2406
2526
  if (configuredPrice === null) return null;
2407
2527
  if (model === "mai-image-2.5-pro" && editImages > 0) return .27 * numImages;
2408
2528
  if (model === "grok-image-2" && editImages > 0) return (resolution === "2K" || resolution === "4K" ? .08 : .06) * numImages + .01 * editImages;
2529
+ if (model === "grok-image-quality") return (resolution === "2K" || resolution === "4K" ? .07 : .05) * numImages + .01 * editImages;
2409
2530
  if (configuredPrice !== void 0) {
2410
2531
  if ((model === "banana" || model === "gemini3") && resolution === "4K") return configuredPrice * 2 * numImages;
2411
2532
  if (model === "seedream5" && (resolution === "2K" || resolution === "4K")) return configuredPrice * 2 * numImages;
@@ -2761,7 +2882,7 @@ function buildGenerateBody(options) {
2761
2882
  break;
2762
2883
  case "aspect_ratio":
2763
2884
  if (config.supportsAspect) body.aspect_ratio = aspect;
2764
- if (config.supportsResolution) body.resolution = model === "grok-image" || model === "grok-image-2" ? resolution.toLowerCase() : resolution;
2885
+ if (config.supportsResolution) body.resolution = model === "grok-image" || model === "grok-image-2" || model === "grok-image-quality" ? resolution.toLowerCase() : resolution;
2765
2886
  }
2766
2887
  if (config.supportsQuality === true) body.quality = quality ?? config.defaultQuality ?? "high";
2767
2888
  if (config.supportsBackground === true && background) body.background = background;
@@ -5191,7 +5312,7 @@ const TIERS = [
5191
5312
  ];
5192
5313
  const DEFAULT_TIER = "balanced";
5193
5314
  const HAND_RANKED_AT = "2026-09-16";
5194
- const IMAGE_RANKED_AT = "2026-10-07";
5315
+ const IMAGE_RANKED_AT = "2026-10-29";
5195
5316
  /** Every Task with a Model. A Task is absent here until it has at least one Model. */
5196
5317
  const TASKS = {
5197
5318
  animate: {
@@ -5362,7 +5483,7 @@ const TASKS = {
5362
5483
  summary: "Remove an object, person, text or clutter from an image and fill the gap."
5363
5484
  },
5364
5485
  generate: {
5365
- basis: "Curated from Artificial Analysis v2, captured 2026-10-07, and Arena 2026-10-06. Sunburst and Flare lead quality at the benchmarked max setting. Nano Banana 2.1 leads balanced on preliminary Arena evidence and lower representative cost; Grok Image 2 and MAI 2.5 are established alternatives. Fast keeps Nano Banana 2 Lite, budget Grok and Seedream 5 Lite, and FLUX.2 Turbo. Design, transparency and tuned Look routes are capability exceptions. Generation with References uses the separate editing ranking. Older routes are explicit/pin/Look-only.",
5486
+ basis: "Order follows Arena text-to-image (https://arena.ai/leaderboard/image/text-to-image), read 2026-10-29 (MOT-72). Sunburst and Flare lead quality at the benchmarked max setting. Balanced starts with Nano Banana 2.1 on preliminary Arena evidence, then Grok Image 2 and Muse Image. Models not yet on the board follow the ranked ones in their Tier, in their previous order. The Artificial Analysis v2 snapshot of 2026-10-07 stays as recorded benchmark data. Fast keeps Nano Banana 2 Lite, budget Grok and Seedream 5 Lite, and FLUX.2 Turbo. Design, transparency and tuned Look routes are capability exceptions. Generation with References uses the separate editing ranking. Older routes are explicit/pin/Look-only.",
5366
5487
  models: [
5367
5488
  {
5368
5489
  model: "sunburst",
@@ -5377,15 +5498,15 @@ const TASKS = {
5377
5498
  tier: "quality"
5378
5499
  },
5379
5500
  {
5380
- model: "gpt",
5501
+ model: "seedream5",
5381
5502
  tier: "quality"
5382
5503
  },
5383
5504
  {
5384
- model: "mai-image-2.5-pro",
5505
+ model: "gpt",
5385
5506
  tier: "quality"
5386
5507
  },
5387
5508
  {
5388
- model: "seedream5",
5509
+ model: "mai-image-2.5-pro",
5389
5510
  tier: "quality"
5390
5511
  },
5391
5512
  {
@@ -5396,10 +5517,18 @@ const TASKS = {
5396
5517
  model: "grok-image-2",
5397
5518
  tier: "balanced"
5398
5519
  },
5520
+ {
5521
+ model: "muse-image",
5522
+ tier: "balanced"
5523
+ },
5399
5524
  {
5400
5525
  model: "banana2",
5401
5526
  tier: "balanced"
5402
5527
  },
5528
+ {
5529
+ model: "qwen3",
5530
+ tier: "balanced"
5531
+ },
5403
5532
  {
5404
5533
  model: "mai-image-2.5",
5405
5534
  tier: "balanced"
@@ -5409,23 +5538,27 @@ const TASKS = {
5409
5538
  tier: "balanced"
5410
5539
  },
5411
5540
  {
5412
- model: "qwen3",
5541
+ model: "ideogram4",
5413
5542
  tier: "balanced"
5414
5543
  },
5415
5544
  {
5416
5545
  model: "flux2-flex",
5417
5546
  tier: "balanced"
5418
5547
  },
5548
+ {
5549
+ model: "recraft41",
5550
+ tier: "balanced"
5551
+ },
5419
5552
  {
5420
5553
  model: "flux2-pro",
5421
5554
  tier: "balanced"
5422
5555
  },
5423
5556
  {
5424
- model: "ideogram4",
5557
+ model: "krea3",
5425
5558
  tier: "balanced"
5426
5559
  },
5427
5560
  {
5428
- model: "recraft41",
5561
+ model: "grok-image-quality",
5429
5562
  tier: "balanced"
5430
5563
  },
5431
5564
  {
@@ -5937,7 +6070,7 @@ const TASKS = {
5937
6070
  summary: "Trace a raster image to a clean SVG."
5938
6071
  },
5939
6072
  vary: {
5940
- basis: "Curated from Artificial Analysis v2 editing, captured 2026-10-07, and preliminary Arena 2026-10-06 evidence for Nano Banana 2.1. Editing order differs from generation: MAI 2.5 outranks Grok Image 2, and Seedream 5 Pro outranks GPT Image 1.5. Sunburst and Flare use max quality. vary reuses a previously chosen Model when explicitly supplied, including retained legacy routes.",
6073
+ basis: "Order follows Arena image edit, single image (https://arena.ai/leaderboard/image/image-edit/single-image), read 2026-10-29 (MOT-72). Editing order differs from generation: Grok Image 2 leads balanced, ahead of Nano Banana 2.1, and Seedream 5 Pro outranks GPT Image 1.5. Arena scores Krea 3 only at its Ultra setting, which costs $0.27 to $0.35 an edit and ignores the requested size, so krea3, which runs fal's default setting, is ranked as unscored. Models not yet on the board follow the ranked ones in their Tier, in their previous order. The Artificial Analysis v2 snapshot of 2026-10-07 stays as recorded benchmark data. Sunburst and Flare use max quality. vary reuses a previously chosen Model when explicitly supplied, including retained legacy routes.",
5941
6074
  models: [
5942
6075
  {
5943
6076
  model: "sunburst",
@@ -5952,17 +6085,21 @@ const TASKS = {
5952
6085
  tier: "quality"
5953
6086
  },
5954
6087
  {
5955
- model: "mai-image-2.5-pro",
6088
+ model: "seedream5",
5956
6089
  tier: "quality"
5957
6090
  },
5958
6091
  {
5959
- model: "seedream5",
6092
+ model: "gpt",
5960
6093
  tier: "quality"
5961
6094
  },
5962
6095
  {
5963
- model: "gpt",
6096
+ model: "mai-image-2.5-pro",
5964
6097
  tier: "quality"
5965
6098
  },
6099
+ {
6100
+ model: "grok-image-2",
6101
+ tier: "balanced"
6102
+ },
5966
6103
  {
5967
6104
  model: "banana21",
5968
6105
  tier: "balanced"
@@ -5972,17 +6109,29 @@ const TASKS = {
5972
6109
  tier: "balanced"
5973
6110
  },
5974
6111
  {
5975
- model: "grok-image-2",
6112
+ model: "muse-image",
5976
6113
  tier: "balanced"
5977
6114
  },
5978
6115
  {
5979
- model: "banana2",
6116
+ model: "grok-image-quality",
5980
6117
  tier: "balanced"
5981
6118
  },
5982
6119
  {
5983
6120
  model: "banana",
5984
6121
  tier: "balanced"
5985
6122
  },
6123
+ {
6124
+ model: "banana2",
6125
+ tier: "balanced"
6126
+ },
6127
+ {
6128
+ model: "krea3",
6129
+ tier: "balanced"
6130
+ },
6131
+ {
6132
+ model: "qwen3",
6133
+ tier: "balanced"
6134
+ },
5986
6135
  {
5987
6136
  model: "flux2-pro",
5988
6137
  tier: "balanced"
@@ -5996,11 +6145,11 @@ const TASKS = {
5996
6145
  tier: "fast"
5997
6146
  },
5998
6147
  {
5999
- model: "seedream5-lite",
6148
+ model: "banana2-lite",
6000
6149
  tier: "fast"
6001
6150
  },
6002
6151
  {
6003
- model: "banana2-lite",
6152
+ model: "seedream5-lite",
6004
6153
  tier: "fast"
6005
6154
  }
6006
6155
  ],
@@ -8576,6 +8725,8 @@ const FAL_IMAGE_PRICE_USD = {
8576
8725
  "ideogram/v4": MODELS.ideogram4?.pricePerImageUsd ?? .03,
8577
8726
  "xai/grok-imagine-image": MODELS["grok-image"]?.pricePerImageUsd ?? .02,
8578
8727
  "xai/grok-imagine-image/v2.0/text-to-image": MODELS["grok-image-2"]?.pricePerImageUsd ?? .06,
8728
+ "xai/grok-imagine-image/quality/text-to-image": MODELS["grok-image-quality"]?.pricePerImageUsd ?? .05,
8729
+ "meta/muse-image/text-to-image": MODELS["muse-image"]?.pricePerImageUsd ?? .01,
8579
8730
  "microsoft/mai-image-2.5-pro": MODELS["mai-image-2.5-pro"]?.pricePerImageUsd ?? .17,
8580
8731
  "fal-ai/ideogram/v3/generate-transparent": MODELS["ideogram3-transparent"]?.pricePerImageUsd ?? .06,
8581
8732
  "alibaba/qwen-image-3/text-to-image": MODELS.qwen3?.pricePerImageUsd ?? .04,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@howells/motif-sdk",
3
- "version": "5.2.0",
3
+ "version": "5.3.0",
4
4
  "description": "Node SDK for Motif: image, video and 3D Tasks on fal.ai, with Motif choosing the Model.",
5
5
  "keywords": [
6
6
  "fal",
@@ -52,7 +52,7 @@
52
52
  },
53
53
  "devDependencies": {
54
54
  "@howells/lint": "^3.5.1",
55
- "@howells/typescript-config": "^0.1.6",
55
+ "@howells/typescript-config": "^0.1.8",
56
56
  "@types/node": "^26.6.2",
57
57
  "@vitest/coverage-v8": "^5.0.1",
58
58
  "tsdown": "^0.23.0",