@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 +2 -2
- package/dist/image.js +123 -1
- package/dist/index.cjs +169 -18
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +169 -18
- package/package.json +2 -2
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
|
|
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 |
|
|
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:
|
|
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:
|
|
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-
|
|
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: "
|
|
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: "
|
|
5502
|
+
model: "seedream5",
|
|
5382
5503
|
tier: "quality"
|
|
5383
5504
|
},
|
|
5384
5505
|
{
|
|
5385
|
-
model: "
|
|
5506
|
+
model: "gpt",
|
|
5386
5507
|
tier: "quality"
|
|
5387
5508
|
},
|
|
5388
5509
|
{
|
|
5389
|
-
model: "
|
|
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: "
|
|
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: "
|
|
5558
|
+
model: "krea3",
|
|
5426
5559
|
tier: "balanced"
|
|
5427
5560
|
},
|
|
5428
5561
|
{
|
|
5429
|
-
model: "
|
|
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: "
|
|
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: "
|
|
6089
|
+
model: "seedream5",
|
|
5957
6090
|
tier: "quality"
|
|
5958
6091
|
},
|
|
5959
6092
|
{
|
|
5960
|
-
model: "
|
|
6093
|
+
model: "gpt",
|
|
5961
6094
|
tier: "quality"
|
|
5962
6095
|
},
|
|
5963
6096
|
{
|
|
5964
|
-
model: "
|
|
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: "
|
|
6113
|
+
model: "muse-image",
|
|
5977
6114
|
tier: "balanced"
|
|
5978
6115
|
},
|
|
5979
6116
|
{
|
|
5980
|
-
model: "
|
|
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: "
|
|
6149
|
+
model: "banana2-lite",
|
|
6001
6150
|
tier: "fast"
|
|
6002
6151
|
},
|
|
6003
6152
|
{
|
|
6004
|
-
model: "
|
|
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: "
|
|
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-
|
|
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: "
|
|
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-
|
|
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: "
|
|
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-
|
|
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: "
|
|
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-
|
|
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:
|
|
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-
|
|
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: "
|
|
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: "
|
|
5501
|
+
model: "seedream5",
|
|
5381
5502
|
tier: "quality"
|
|
5382
5503
|
},
|
|
5383
5504
|
{
|
|
5384
|
-
model: "
|
|
5505
|
+
model: "gpt",
|
|
5385
5506
|
tier: "quality"
|
|
5386
5507
|
},
|
|
5387
5508
|
{
|
|
5388
|
-
model: "
|
|
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: "
|
|
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: "
|
|
5557
|
+
model: "krea3",
|
|
5425
5558
|
tier: "balanced"
|
|
5426
5559
|
},
|
|
5427
5560
|
{
|
|
5428
|
-
model: "
|
|
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: "
|
|
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: "
|
|
6088
|
+
model: "seedream5",
|
|
5956
6089
|
tier: "quality"
|
|
5957
6090
|
},
|
|
5958
6091
|
{
|
|
5959
|
-
model: "
|
|
6092
|
+
model: "gpt",
|
|
5960
6093
|
tier: "quality"
|
|
5961
6094
|
},
|
|
5962
6095
|
{
|
|
5963
|
-
model: "
|
|
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: "
|
|
6112
|
+
model: "muse-image",
|
|
5976
6113
|
tier: "balanced"
|
|
5977
6114
|
},
|
|
5978
6115
|
{
|
|
5979
|
-
model: "
|
|
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: "
|
|
6148
|
+
model: "banana2-lite",
|
|
6000
6149
|
tier: "fast"
|
|
6001
6150
|
},
|
|
6002
6151
|
{
|
|
6003
|
-
model: "
|
|
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.
|
|
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.
|
|
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",
|