@howells/motif-sdk 5.1.1 → 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 +16 -0
- package/dist/image.js +370 -120
- package/dist/index.cjs +581 -253
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +581 -253
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -706,14 +706,31 @@ function getOpenAiKeyFromEnv(input = process.env) {
|
|
|
706
706
|
}
|
|
707
707
|
//#endregion
|
|
708
708
|
//#region src/models.ts
|
|
709
|
-
const AA_IMAGE_LEADERBOARD_SNAPSHOT = "2026-
|
|
709
|
+
const AA_IMAGE_LEADERBOARD_SNAPSHOT = "2026-10-07";
|
|
710
710
|
const AA_IMAGE_SOURCES = ["https://artificialanalysis.ai/image/leaderboard/text-to-image", "https://artificialanalysis.ai/image/leaderboard/editing"];
|
|
711
711
|
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: {
|
|
718
|
+
benchmark: {
|
|
719
|
+
artificialAnalysis: {
|
|
720
|
+
editing: {
|
|
721
|
+
elo: 1163,
|
|
722
|
+
rank: 2
|
|
723
|
+
},
|
|
724
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
725
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
726
|
+
textToImage: {
|
|
727
|
+
elo: 1191,
|
|
728
|
+
rank: 2
|
|
729
|
+
}
|
|
730
|
+
},
|
|
731
|
+
useCase: "Frontier generation and editing, evaluated at max quality"
|
|
732
|
+
},
|
|
733
|
+
defaultQuality: "max",
|
|
717
734
|
customImageSize: {
|
|
718
735
|
maxEdge: 3840,
|
|
719
736
|
maxPixels: 8294400,
|
|
@@ -750,6 +767,22 @@ const MODELS = {
|
|
|
750
767
|
useQueue: true
|
|
751
768
|
},
|
|
752
769
|
sunburst: {
|
|
770
|
+
benchmark: {
|
|
771
|
+
artificialAnalysis: {
|
|
772
|
+
editing: {
|
|
773
|
+
elo: 1183,
|
|
774
|
+
rank: 1
|
|
775
|
+
},
|
|
776
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
777
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
778
|
+
textToImage: {
|
|
779
|
+
elo: 1198,
|
|
780
|
+
rank: 1
|
|
781
|
+
}
|
|
782
|
+
},
|
|
783
|
+
useCase: "Frontier generation and editing, evaluated at max quality"
|
|
784
|
+
},
|
|
785
|
+
defaultQuality: "max",
|
|
753
786
|
customImageSize: {
|
|
754
787
|
maxEdge: 3840,
|
|
755
788
|
maxPixels: 8294400,
|
|
@@ -789,14 +822,14 @@ const MODELS = {
|
|
|
789
822
|
benchmark: {
|
|
790
823
|
artificialAnalysis: {
|
|
791
824
|
editing: {
|
|
792
|
-
elo:
|
|
793
|
-
rank:
|
|
825
|
+
elo: 1125,
|
|
826
|
+
rank: 5
|
|
794
827
|
},
|
|
795
828
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
796
829
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
797
830
|
textToImage: {
|
|
798
|
-
elo:
|
|
799
|
-
rank:
|
|
831
|
+
elo: 1172,
|
|
832
|
+
rank: 3
|
|
800
833
|
}
|
|
801
834
|
},
|
|
802
835
|
speed: {
|
|
@@ -809,7 +842,7 @@ const MODELS = {
|
|
|
809
842
|
quality: "frontier",
|
|
810
843
|
speed: "very_slow"
|
|
811
844
|
},
|
|
812
|
-
useCase: "
|
|
845
|
+
useCase: "Established frontier generation and transparent PNGs"
|
|
813
846
|
},
|
|
814
847
|
customImageSize: {
|
|
815
848
|
maxEdge: 3840,
|
|
@@ -860,14 +893,14 @@ const MODELS = {
|
|
|
860
893
|
benchmark: {
|
|
861
894
|
artificialAnalysis: {
|
|
862
895
|
editing: {
|
|
863
|
-
elo:
|
|
864
|
-
rank:
|
|
896
|
+
elo: 1103,
|
|
897
|
+
rank: 12
|
|
865
898
|
},
|
|
866
899
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
867
900
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
868
901
|
textToImage: {
|
|
869
|
-
elo:
|
|
870
|
-
rank:
|
|
902
|
+
elo: 1107,
|
|
903
|
+
rank: 8
|
|
871
904
|
}
|
|
872
905
|
},
|
|
873
906
|
speed: {
|
|
@@ -880,7 +913,7 @@ const MODELS = {
|
|
|
880
913
|
quality: "frontier",
|
|
881
914
|
speed: "slow"
|
|
882
915
|
},
|
|
883
|
-
useCase: "
|
|
916
|
+
useCase: "Established OpenAI editor with transparent PNG support"
|
|
884
917
|
},
|
|
885
918
|
editEndpoint: "fal-ai/gpt-image-1.5/edit",
|
|
886
919
|
endpoint: "fal-ai/gpt-image-1.5",
|
|
@@ -913,18 +946,103 @@ const MODELS = {
|
|
|
913
946
|
supportsSyncMode: true,
|
|
914
947
|
type: "generation"
|
|
915
948
|
},
|
|
916
|
-
|
|
949
|
+
banana21: {
|
|
950
|
+
benchmark: { useCase: "Efficient generation and reference editing; Arena #5 generation / #6 editing, preliminary 2026-10-06" },
|
|
951
|
+
editEndpoint: "google/nano-banana-2.1/edit",
|
|
952
|
+
endpoint: "google/nano-banana-2.1",
|
|
953
|
+
maxReferenceImages: 14,
|
|
954
|
+
name: "Nano Banana 2.1",
|
|
955
|
+
pricePerImageUsd: null,
|
|
956
|
+
pricing: "Token-based: input $1.764/M, text/thinking output $8.823/M, image output $35.294/M; ~ $0.040 / $0.059 / $0.134 at 1K / 2K / 4K plus variable usage",
|
|
957
|
+
sizeMode: "aspect_ratio",
|
|
958
|
+
supportedAspects: [
|
|
959
|
+
"auto",
|
|
960
|
+
"21:9",
|
|
961
|
+
"16:9",
|
|
962
|
+
"3:2",
|
|
963
|
+
"4:3",
|
|
964
|
+
"5:4",
|
|
965
|
+
"1:1",
|
|
966
|
+
"4:5",
|
|
967
|
+
"3:4",
|
|
968
|
+
"2:3",
|
|
969
|
+
"9:16",
|
|
970
|
+
"4:1",
|
|
971
|
+
"1:4",
|
|
972
|
+
"8:1",
|
|
973
|
+
"1:8"
|
|
974
|
+
],
|
|
975
|
+
supportedResolutions: [
|
|
976
|
+
"1K",
|
|
977
|
+
"2K",
|
|
978
|
+
"4K"
|
|
979
|
+
],
|
|
980
|
+
supportsAspect: true,
|
|
981
|
+
supportsEdit: true,
|
|
982
|
+
supportsLimitGenerations: true,
|
|
983
|
+
supportsNumImages: true,
|
|
984
|
+
supportsOutputFormat: true,
|
|
985
|
+
supportsResolution: true,
|
|
986
|
+
supportsSafetyTolerance: true,
|
|
987
|
+
supportsSeed: true,
|
|
988
|
+
supportsSyncMode: true,
|
|
989
|
+
supportsThinkingLevel: true,
|
|
990
|
+
supportsWebSearch: true,
|
|
991
|
+
type: "generation"
|
|
992
|
+
},
|
|
993
|
+
"mai-image-2.5": {
|
|
917
994
|
benchmark: {
|
|
918
995
|
artificialAnalysis: {
|
|
919
996
|
editing: {
|
|
920
|
-
elo:
|
|
997
|
+
elo: 1114,
|
|
921
998
|
rank: 7
|
|
922
999
|
},
|
|
923
1000
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
924
1001
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
925
1002
|
textToImage: {
|
|
926
|
-
elo:
|
|
927
|
-
rank:
|
|
1003
|
+
elo: 1104,
|
|
1004
|
+
rank: 10
|
|
1005
|
+
}
|
|
1006
|
+
},
|
|
1007
|
+
useCase: "Strong single-reference editing at a lower price than MAI 2.5 Pro"
|
|
1008
|
+
},
|
|
1009
|
+
editEndpoint: "microsoft/mai-image-2.5/edit",
|
|
1010
|
+
endpoint: "microsoft/mai-image-2.5",
|
|
1011
|
+
maxReferenceImages: 1,
|
|
1012
|
+
name: "MAI Image 2.5",
|
|
1013
|
+
pricePerImageUsd: null,
|
|
1014
|
+
pricing: "Token-based: text input $5/M, image input $8/M; ~$0.05 image output plus input",
|
|
1015
|
+
sizeMode: "aspect_ratio",
|
|
1016
|
+
supportedAspects: [
|
|
1017
|
+
"auto",
|
|
1018
|
+
"1:1",
|
|
1019
|
+
"4:3",
|
|
1020
|
+
"3:4",
|
|
1021
|
+
"16:9",
|
|
1022
|
+
"9:16",
|
|
1023
|
+
"3:2",
|
|
1024
|
+
"2:3"
|
|
1025
|
+
],
|
|
1026
|
+
supportsAspect: true,
|
|
1027
|
+
supportsEdit: true,
|
|
1028
|
+
supportsNumImages: true,
|
|
1029
|
+
supportsOutputFormat: true,
|
|
1030
|
+
supportsResolution: false,
|
|
1031
|
+
supportsSyncMode: true,
|
|
1032
|
+
type: "generation"
|
|
1033
|
+
},
|
|
1034
|
+
banana2: {
|
|
1035
|
+
benchmark: {
|
|
1036
|
+
artificialAnalysis: {
|
|
1037
|
+
editing: {
|
|
1038
|
+
elo: 1110,
|
|
1039
|
+
rank: 9
|
|
1040
|
+
},
|
|
1041
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1042
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
1043
|
+
textToImage: {
|
|
1044
|
+
elo: 1126,
|
|
1045
|
+
rank: 6
|
|
928
1046
|
}
|
|
929
1047
|
},
|
|
930
1048
|
tiers: {
|
|
@@ -932,7 +1050,7 @@ const MODELS = {
|
|
|
932
1050
|
quality: "frontier",
|
|
933
1051
|
speed: "unknown"
|
|
934
1052
|
},
|
|
935
|
-
useCase: "
|
|
1053
|
+
useCase: "Previous-generation Gemini workhorse; retains 0.5K output"
|
|
936
1054
|
},
|
|
937
1055
|
editEndpoint: "fal-ai/nano-banana-2/edit",
|
|
938
1056
|
endpoint: "fal-ai/nano-banana-2",
|
|
@@ -968,14 +1086,14 @@ const MODELS = {
|
|
|
968
1086
|
benchmark: {
|
|
969
1087
|
artificialAnalysis: {
|
|
970
1088
|
editing: {
|
|
971
|
-
elo:
|
|
972
|
-
rank:
|
|
1089
|
+
elo: 1101,
|
|
1090
|
+
rank: 13
|
|
973
1091
|
},
|
|
974
1092
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
975
1093
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
976
1094
|
textToImage: {
|
|
977
|
-
elo:
|
|
978
|
-
rank:
|
|
1095
|
+
elo: 1102,
|
|
1096
|
+
rank: 11
|
|
979
1097
|
}
|
|
980
1098
|
},
|
|
981
1099
|
speed: {
|
|
@@ -1040,11 +1158,15 @@ const MODELS = {
|
|
|
1040
1158
|
gemini: {
|
|
1041
1159
|
benchmark: { artificialAnalysis: {
|
|
1042
1160
|
editing: {
|
|
1043
|
-
elo:
|
|
1044
|
-
rank:
|
|
1161
|
+
elo: 987,
|
|
1162
|
+
rank: 50
|
|
1045
1163
|
},
|
|
1046
1164
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1047
|
-
sourceUrls: AA_IMAGE_SOURCES
|
|
1165
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
1166
|
+
textToImage: {
|
|
1167
|
+
elo: 985,
|
|
1168
|
+
rank: 60
|
|
1169
|
+
}
|
|
1048
1170
|
} },
|
|
1049
1171
|
editEndpoint: "fal-ai/gemini-25-flash-image/edit",
|
|
1050
1172
|
endpoint: "fal-ai/gemini-25-flash-image",
|
|
@@ -1085,18 +1207,6 @@ const MODELS = {
|
|
|
1085
1207
|
type: "generation"
|
|
1086
1208
|
},
|
|
1087
1209
|
gemini3: {
|
|
1088
|
-
benchmark: { artificialAnalysis: {
|
|
1089
|
-
editing: {
|
|
1090
|
-
elo: 1245,
|
|
1091
|
-
rank: 9
|
|
1092
|
-
},
|
|
1093
|
-
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1094
|
-
sourceUrls: AA_IMAGE_SOURCES,
|
|
1095
|
-
textToImage: {
|
|
1096
|
-
elo: 1297,
|
|
1097
|
-
rank: 6
|
|
1098
|
-
}
|
|
1099
|
-
} },
|
|
1100
1210
|
editEndpoint: "fal-ai/gemini-3-pro-image-preview/edit",
|
|
1101
1211
|
endpoint: "fal-ai/gemini-3-pro-image-preview",
|
|
1102
1212
|
falPricing: {
|
|
@@ -1146,14 +1256,14 @@ const MODELS = {
|
|
|
1146
1256
|
benchmark: {
|
|
1147
1257
|
artificialAnalysis: {
|
|
1148
1258
|
editing: {
|
|
1149
|
-
elo:
|
|
1150
|
-
rank:
|
|
1259
|
+
elo: 1015,
|
|
1260
|
+
rank: 36
|
|
1151
1261
|
},
|
|
1152
1262
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1153
1263
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
1154
1264
|
textToImage: {
|
|
1155
|
-
elo:
|
|
1156
|
-
rank:
|
|
1265
|
+
elo: 1030,
|
|
1266
|
+
rank: 21
|
|
1157
1267
|
}
|
|
1158
1268
|
},
|
|
1159
1269
|
speed: {
|
|
@@ -1166,7 +1276,7 @@ const MODELS = {
|
|
|
1166
1276
|
quality: "best",
|
|
1167
1277
|
speed: "balanced"
|
|
1168
1278
|
},
|
|
1169
|
-
useCase: "
|
|
1279
|
+
useCase: "Legacy budget generation and large multi-reference edits"
|
|
1170
1280
|
},
|
|
1171
1281
|
customImageSize: {
|
|
1172
1282
|
maxPixels: 16777216,
|
|
@@ -1200,14 +1310,14 @@ const MODELS = {
|
|
|
1200
1310
|
benchmark: {
|
|
1201
1311
|
artificialAnalysis: {
|
|
1202
1312
|
editing: {
|
|
1203
|
-
elo:
|
|
1204
|
-
rank:
|
|
1313
|
+
elo: 1037,
|
|
1314
|
+
rank: 32
|
|
1205
1315
|
},
|
|
1206
1316
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1207
1317
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
1208
1318
|
textToImage: {
|
|
1209
|
-
elo:
|
|
1210
|
-
rank:
|
|
1319
|
+
elo: 1022,
|
|
1320
|
+
rank: 26
|
|
1211
1321
|
}
|
|
1212
1322
|
},
|
|
1213
1323
|
speed: {
|
|
@@ -1253,14 +1363,14 @@ const MODELS = {
|
|
|
1253
1363
|
seedream5: {
|
|
1254
1364
|
benchmark: { artificialAnalysis: {
|
|
1255
1365
|
editing: {
|
|
1256
|
-
elo:
|
|
1257
|
-
rank:
|
|
1366
|
+
elo: 1108,
|
|
1367
|
+
rank: 11
|
|
1258
1368
|
},
|
|
1259
1369
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1260
1370
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
1261
1371
|
textToImage: {
|
|
1262
|
-
elo:
|
|
1263
|
-
rank:
|
|
1372
|
+
elo: 1081,
|
|
1373
|
+
rank: 15
|
|
1264
1374
|
}
|
|
1265
1375
|
} },
|
|
1266
1376
|
customImageSize: {
|
|
@@ -1295,11 +1405,15 @@ const MODELS = {
|
|
|
1295
1405
|
"seedream5-lite": {
|
|
1296
1406
|
benchmark: { artificialAnalysis: {
|
|
1297
1407
|
editing: {
|
|
1298
|
-
elo:
|
|
1299
|
-
rank:
|
|
1408
|
+
elo: 1057,
|
|
1409
|
+
rank: 24
|
|
1300
1410
|
},
|
|
1301
1411
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1302
|
-
sourceUrls: AA_IMAGE_SOURCES
|
|
1412
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
1413
|
+
textToImage: {
|
|
1414
|
+
elo: 1012,
|
|
1415
|
+
rank: 36
|
|
1416
|
+
}
|
|
1303
1417
|
} },
|
|
1304
1418
|
customImageSize: {
|
|
1305
1419
|
maxPixels: 16777216,
|
|
@@ -1333,14 +1447,14 @@ const MODELS = {
|
|
|
1333
1447
|
benchmark: {
|
|
1334
1448
|
artificialAnalysis: {
|
|
1335
1449
|
editing: {
|
|
1336
|
-
elo:
|
|
1337
|
-
rank:
|
|
1450
|
+
elo: 997,
|
|
1451
|
+
rank: 49
|
|
1338
1452
|
},
|
|
1339
1453
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1340
1454
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
1341
1455
|
textToImage: {
|
|
1342
|
-
elo:
|
|
1343
|
-
rank:
|
|
1456
|
+
elo: 1020,
|
|
1457
|
+
rank: 28
|
|
1344
1458
|
}
|
|
1345
1459
|
},
|
|
1346
1460
|
speed: {
|
|
@@ -1392,14 +1506,14 @@ const MODELS = {
|
|
|
1392
1506
|
benchmark: {
|
|
1393
1507
|
artificialAnalysis: {
|
|
1394
1508
|
editing: {
|
|
1395
|
-
elo:
|
|
1396
|
-
rank:
|
|
1509
|
+
elo: 1007,
|
|
1510
|
+
rank: 41
|
|
1397
1511
|
},
|
|
1398
1512
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1399
1513
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
1400
1514
|
textToImage: {
|
|
1401
|
-
elo:
|
|
1402
|
-
rank:
|
|
1515
|
+
elo: 1004,
|
|
1516
|
+
rank: 41
|
|
1403
1517
|
}
|
|
1404
1518
|
},
|
|
1405
1519
|
speed: {
|
|
@@ -1450,11 +1564,15 @@ const MODELS = {
|
|
|
1450
1564
|
"flux2-flex": {
|
|
1451
1565
|
benchmark: {
|
|
1452
1566
|
artificialAnalysis: {
|
|
1567
|
+
editing: {
|
|
1568
|
+
elo: 1007,
|
|
1569
|
+
rank: 42
|
|
1570
|
+
},
|
|
1453
1571
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1454
1572
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
1455
1573
|
textToImage: {
|
|
1456
|
-
elo:
|
|
1457
|
-
rank:
|
|
1574
|
+
elo: 1027,
|
|
1575
|
+
rank: 22
|
|
1458
1576
|
}
|
|
1459
1577
|
},
|
|
1460
1578
|
speed: {
|
|
@@ -1508,8 +1626,16 @@ const MODELS = {
|
|
|
1508
1626
|
"flux2-dev": {
|
|
1509
1627
|
benchmark: {
|
|
1510
1628
|
artificialAnalysis: {
|
|
1629
|
+
editing: {
|
|
1630
|
+
elo: 1e3,
|
|
1631
|
+
rank: 45
|
|
1632
|
+
},
|
|
1511
1633
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1512
|
-
sourceUrls: AA_IMAGE_SOURCES
|
|
1634
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
1635
|
+
textToImage: {
|
|
1636
|
+
elo: 1e3,
|
|
1637
|
+
rank: 42
|
|
1638
|
+
}
|
|
1513
1639
|
},
|
|
1514
1640
|
speed: {
|
|
1515
1641
|
medianSeconds: 4.6,
|
|
@@ -1672,24 +1798,12 @@ const MODELS = {
|
|
|
1672
1798
|
},
|
|
1673
1799
|
reve: {
|
|
1674
1800
|
benchmark: {
|
|
1675
|
-
artificialAnalysis: {
|
|
1676
|
-
editing: {
|
|
1677
|
-
elo: 1263,
|
|
1678
|
-
rank: 2
|
|
1679
|
-
},
|
|
1680
|
-
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1681
|
-
sourceUrls: AA_IMAGE_SOURCES,
|
|
1682
|
-
textToImage: {
|
|
1683
|
-
elo: 1322,
|
|
1684
|
-
rank: 2
|
|
1685
|
-
}
|
|
1686
|
-
},
|
|
1687
1801
|
tiers: {
|
|
1688
1802
|
price: "premium",
|
|
1689
1803
|
quality: "frontier",
|
|
1690
1804
|
speed: "unknown"
|
|
1691
1805
|
},
|
|
1692
|
-
useCase: "
|
|
1806
|
+
useCase: "Historical Reve route; not currently verified on fal"
|
|
1693
1807
|
},
|
|
1694
1808
|
editEndpoint: "fal-ai/reve/edit",
|
|
1695
1809
|
endpoint: "fal-ai/reve/text-to-image",
|
|
@@ -1730,8 +1844,8 @@ const MODELS = {
|
|
|
1730
1844
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1731
1845
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
1732
1846
|
textToImage: {
|
|
1733
|
-
elo:
|
|
1734
|
-
rank:
|
|
1847
|
+
elo: 984,
|
|
1848
|
+
rank: 62
|
|
1735
1849
|
}
|
|
1736
1850
|
} },
|
|
1737
1851
|
customImageSize: {},
|
|
@@ -1789,8 +1903,8 @@ const MODELS = {
|
|
|
1789
1903
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1790
1904
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
1791
1905
|
textToImage: {
|
|
1792
|
-
elo:
|
|
1793
|
-
rank:
|
|
1906
|
+
elo: 1004,
|
|
1907
|
+
rank: 40
|
|
1794
1908
|
}
|
|
1795
1909
|
} },
|
|
1796
1910
|
customImageSize: {
|
|
@@ -1828,14 +1942,14 @@ const MODELS = {
|
|
|
1828
1942
|
benchmark: {
|
|
1829
1943
|
artificialAnalysis: {
|
|
1830
1944
|
editing: {
|
|
1831
|
-
elo:
|
|
1832
|
-
rank:
|
|
1945
|
+
elo: 1073,
|
|
1946
|
+
rank: 19
|
|
1833
1947
|
},
|
|
1834
1948
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1835
1949
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
1836
1950
|
textToImage: {
|
|
1837
|
-
elo:
|
|
1838
|
-
rank:
|
|
1951
|
+
elo: 1019,
|
|
1952
|
+
rank: 30
|
|
1839
1953
|
}
|
|
1840
1954
|
},
|
|
1841
1955
|
speed: {
|
|
@@ -1888,7 +2002,11 @@ const MODELS = {
|
|
|
1888
2002
|
benchmark: {
|
|
1889
2003
|
artificialAnalysis: {
|
|
1890
2004
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1891
|
-
sourceUrls: AA_IMAGE_SOURCES
|
|
2005
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
2006
|
+
textToImage: {
|
|
2007
|
+
elo: 890,
|
|
2008
|
+
rank: 106
|
|
2009
|
+
}
|
|
1892
2010
|
},
|
|
1893
2011
|
speed: {
|
|
1894
2012
|
medianSeconds: 23.3,
|
|
@@ -1930,14 +2048,14 @@ const MODELS = {
|
|
|
1930
2048
|
benchmark: {
|
|
1931
2049
|
artificialAnalysis: {
|
|
1932
2050
|
editing: {
|
|
1933
|
-
elo:
|
|
1934
|
-
rank:
|
|
2051
|
+
elo: 1056,
|
|
2052
|
+
rank: 25
|
|
1935
2053
|
},
|
|
1936
2054
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1937
2055
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
1938
2056
|
textToImage: {
|
|
1939
|
-
elo:
|
|
1940
|
-
rank:
|
|
2057
|
+
elo: 1075,
|
|
2058
|
+
rank: 16
|
|
1941
2059
|
}
|
|
1942
2060
|
},
|
|
1943
2061
|
tiers: {
|
|
@@ -1945,12 +2063,13 @@ const MODELS = {
|
|
|
1945
2063
|
quality: "better",
|
|
1946
2064
|
speed: "unknown"
|
|
1947
2065
|
},
|
|
1948
|
-
useCase: "Strong
|
|
2066
|
+
useCase: "Strong generation with negative-prompt and seed controls"
|
|
1949
2067
|
},
|
|
1950
2068
|
customImageSize: {
|
|
1951
2069
|
maxPixels: 4194304,
|
|
1952
2070
|
minPixels: 262144
|
|
1953
2071
|
},
|
|
2072
|
+
editEndpoint: "alibaba/qwen-image-3/edit",
|
|
1954
2073
|
endpoint: "alibaba/qwen-image-3/text-to-image",
|
|
1955
2074
|
falPricing: {
|
|
1956
2075
|
checkedAt: FAL_PRICING_CHECKED_SEP_2026,
|
|
@@ -1961,12 +2080,13 @@ const MODELS = {
|
|
|
1961
2080
|
unit: "images",
|
|
1962
2081
|
unitPrice: .04
|
|
1963
2082
|
},
|
|
2083
|
+
maxReferenceImages: 3,
|
|
1964
2084
|
name: "Qwen Image 3",
|
|
1965
2085
|
pricePerImageUsd: .04,
|
|
1966
2086
|
pricing: "$0.04 (1K) / $0.075 (2K)",
|
|
1967
2087
|
sizeMode: "image_size_enum",
|
|
1968
2088
|
supportsAspect: true,
|
|
1969
|
-
supportsEdit:
|
|
2089
|
+
supportsEdit: true,
|
|
1970
2090
|
supportsNegativePrompt: true,
|
|
1971
2091
|
supportsNumImages: true,
|
|
1972
2092
|
supportsOutputFormat: true,
|
|
@@ -1979,17 +2099,17 @@ const MODELS = {
|
|
|
1979
2099
|
benchmark: {
|
|
1980
2100
|
artificialAnalysis: {
|
|
1981
2101
|
editing: {
|
|
1982
|
-
elo:
|
|
1983
|
-
rank:
|
|
2102
|
+
elo: 1110,
|
|
2103
|
+
rank: 10
|
|
1984
2104
|
},
|
|
1985
2105
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
1986
2106
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
1987
2107
|
textToImage: {
|
|
1988
|
-
elo:
|
|
1989
|
-
rank:
|
|
2108
|
+
elo: 1100,
|
|
2109
|
+
rank: 12
|
|
1990
2110
|
}
|
|
1991
2111
|
},
|
|
1992
|
-
useCase: "
|
|
2112
|
+
useCase: "Strong single-reference editor; MAI 2.5 ranks higher on the current editing board"
|
|
1993
2113
|
},
|
|
1994
2114
|
editEndpoint: "microsoft/mai-image-2.5-pro/edit",
|
|
1995
2115
|
editImagesField: "image_url",
|
|
@@ -2028,20 +2148,26 @@ const MODELS = {
|
|
|
2028
2148
|
},
|
|
2029
2149
|
"banana2-lite": {
|
|
2030
2150
|
benchmark: { artificialAnalysis: {
|
|
2151
|
+
editing: {
|
|
2152
|
+
elo: 1046,
|
|
2153
|
+
rank: 26
|
|
2154
|
+
},
|
|
2031
2155
|
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
2032
2156
|
sourceUrls: AA_IMAGE_SOURCES,
|
|
2033
2157
|
textToImage: {
|
|
2034
|
-
elo:
|
|
2035
|
-
rank:
|
|
2158
|
+
elo: 1095,
|
|
2159
|
+
rank: 13
|
|
2036
2160
|
}
|
|
2037
2161
|
} },
|
|
2162
|
+
editEndpoint: "google/nano-banana-2-lite/edit",
|
|
2163
|
+
maxReferenceImages: 14,
|
|
2038
2164
|
endpoint: "google/nano-banana-2-lite",
|
|
2039
2165
|
name: "Nano Banana 2 Lite",
|
|
2040
|
-
pricing: "Token-based: text $0.3125/M input, $1.875/M output; image $0.3125/M input, $37.50/M output; fixed 1K output (~$0.
|
|
2041
|
-
pricePerImageUsd:
|
|
2166
|
+
pricing: "Token-based: text $0.3125/M input, $1.875/M output; image $0.3125/M input, $37.50/M output; fixed 1K output (~$0.042 image output, plus input/thinking)",
|
|
2167
|
+
pricePerImageUsd: null,
|
|
2042
2168
|
sizeMode: "aspect_ratio",
|
|
2043
2169
|
supportsAspect: true,
|
|
2044
|
-
supportsEdit:
|
|
2170
|
+
supportsEdit: true,
|
|
2045
2171
|
supportsLimitGenerations: true,
|
|
2046
2172
|
supportsNumImages: true,
|
|
2047
2173
|
supportsOutputFormat: true,
|
|
@@ -2114,6 +2240,21 @@ const MODELS = {
|
|
|
2114
2240
|
type: "generation"
|
|
2115
2241
|
},
|
|
2116
2242
|
"grok-image-2": {
|
|
2243
|
+
benchmark: {
|
|
2244
|
+
artificialAnalysis: {
|
|
2245
|
+
editing: {
|
|
2246
|
+
elo: 1110,
|
|
2247
|
+
rank: 8
|
|
2248
|
+
},
|
|
2249
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
2250
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
2251
|
+
textToImage: {
|
|
2252
|
+
elo: 1156,
|
|
2253
|
+
rank: 4
|
|
2254
|
+
}
|
|
2255
|
+
},
|
|
2256
|
+
useCase: "Strong generation and editing with predictable per-image billing"
|
|
2257
|
+
},
|
|
2117
2258
|
editEndpoint: "xai/grok-imagine-image/v2.0/edit",
|
|
2118
2259
|
endpoint: "xai/grok-imagine-image/v2.0/text-to-image",
|
|
2119
2260
|
falPricing: {
|
|
@@ -2148,6 +2289,120 @@ const MODELS = {
|
|
|
2148
2289
|
supportsSyncMode: true,
|
|
2149
2290
|
type: "generation"
|
|
2150
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
|
+
},
|
|
2151
2406
|
kling: {
|
|
2152
2407
|
endpoint: "fal-ai/kling-video/v3/pro/image-to-video",
|
|
2153
2408
|
name: "Kling v3 Pro",
|
|
@@ -2211,38 +2466,47 @@ const MODELS = {
|
|
|
2211
2466
|
type: "utility"
|
|
2212
2467
|
}
|
|
2213
2468
|
};
|
|
2469
|
+
/** Curated generation choices; predecessor routes are explicit-only. */
|
|
2214
2470
|
const GENERATION_MODELS = [
|
|
2215
|
-
"flare",
|
|
2216
2471
|
"sunburst",
|
|
2472
|
+
"flare",
|
|
2217
2473
|
"gpt2",
|
|
2218
2474
|
"gpt",
|
|
2475
|
+
"banana21",
|
|
2219
2476
|
"banana2",
|
|
2220
2477
|
"banana",
|
|
2478
|
+
"mai-image-2.5",
|
|
2479
|
+
"mai-image-2.5-pro",
|
|
2480
|
+
"seedream5",
|
|
2481
|
+
"qwen3",
|
|
2482
|
+
"banana2-lite",
|
|
2483
|
+
"grok-image-2",
|
|
2484
|
+
"grok-image-quality",
|
|
2485
|
+
"grok-image",
|
|
2486
|
+
"muse-image",
|
|
2487
|
+
"krea3",
|
|
2488
|
+
"flux2-flex",
|
|
2489
|
+
"flux2-pro",
|
|
2490
|
+
"flux2-turbo",
|
|
2491
|
+
"seedream5-lite",
|
|
2492
|
+
"ideogram4",
|
|
2493
|
+
"ideogram3-transparent",
|
|
2494
|
+
"recraft41"
|
|
2495
|
+
];
|
|
2496
|
+
/** Retained for old pins, explicit overrides and tuned Looks, never auto-selected. */
|
|
2497
|
+
const LEGACY_GENERATION_MODELS = [
|
|
2221
2498
|
"gemini",
|
|
2222
2499
|
"gemini3",
|
|
2223
2500
|
"seedream4",
|
|
2224
2501
|
"seedream45",
|
|
2225
|
-
"seedream5",
|
|
2226
|
-
"seedream5-lite",
|
|
2227
2502
|
"flux2-max",
|
|
2228
|
-
"flux2-pro",
|
|
2229
|
-
"flux2-flex",
|
|
2230
2503
|
"flux2-dev",
|
|
2231
|
-
"flux2-turbo",
|
|
2232
2504
|
"flux",
|
|
2233
2505
|
"flux-fast",
|
|
2234
2506
|
"recraft",
|
|
2235
2507
|
"recraft4",
|
|
2236
2508
|
"ideogram",
|
|
2237
|
-
"
|
|
2238
|
-
"grok-image",
|
|
2239
|
-
"grok-image-2",
|
|
2240
|
-
"qwen",
|
|
2241
|
-
"qwen3",
|
|
2242
|
-
"mai-image-2.5-pro",
|
|
2243
|
-
"banana2-lite",
|
|
2244
|
-
"ideogram3-transparent",
|
|
2245
|
-
"recraft41"
|
|
2509
|
+
"qwen"
|
|
2246
2510
|
];
|
|
2247
2511
|
GENERATION_MODELS.filter((id) => MODELS[id]?.supportsEdit === true);
|
|
2248
2512
|
const UTILITY_MODELS = [
|
|
@@ -2262,6 +2526,7 @@ function estimateCost(model, resolution, numImages = 1, editImages = 0) {
|
|
|
2262
2526
|
if (configuredPrice === null) return null;
|
|
2263
2527
|
if (model === "mai-image-2.5-pro" && editImages > 0) return .27 * numImages;
|
|
2264
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;
|
|
2265
2530
|
if (configuredPrice !== void 0) {
|
|
2266
2531
|
if ((model === "banana" || model === "gemini3") && resolution === "4K") return configuredPrice * 2 * numImages;
|
|
2267
2532
|
if (model === "seedream5" && (resolution === "2K" || resolution === "4K")) return configuredPrice * 2 * numImages;
|
|
@@ -2617,9 +2882,9 @@ function buildGenerateBody(options) {
|
|
|
2617
2882
|
break;
|
|
2618
2883
|
case "aspect_ratio":
|
|
2619
2884
|
if (config.supportsAspect) body.aspect_ratio = aspect;
|
|
2620
|
-
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;
|
|
2621
2886
|
}
|
|
2622
|
-
if (config.supportsQuality === true) body.quality = quality ?? "high";
|
|
2887
|
+
if (config.supportsQuality === true) body.quality = quality ?? config.defaultQuality ?? "high";
|
|
2623
2888
|
if (config.supportsBackground === true && background) body.background = background;
|
|
2624
2889
|
if (config.supportsBackground === true && transparent === true) body.background = "transparent";
|
|
2625
2890
|
if (transparent === true && config.supportsOutputFormat === true) body.output_format = "png";
|
|
@@ -5047,134 +5312,7 @@ const TIERS = [
|
|
|
5047
5312
|
];
|
|
5048
5313
|
const DEFAULT_TIER = "balanced";
|
|
5049
5314
|
const HAND_RANKED_AT = "2026-09-16";
|
|
5050
|
-
const
|
|
5051
|
-
{
|
|
5052
|
-
model: "gpt2",
|
|
5053
|
-
tier: "quality"
|
|
5054
|
-
},
|
|
5055
|
-
{
|
|
5056
|
-
model: "banana2",
|
|
5057
|
-
tier: "quality"
|
|
5058
|
-
},
|
|
5059
|
-
{
|
|
5060
|
-
model: "gpt",
|
|
5061
|
-
tier: "quality"
|
|
5062
|
-
},
|
|
5063
|
-
{
|
|
5064
|
-
model: "sunburst",
|
|
5065
|
-
tier: "quality"
|
|
5066
|
-
},
|
|
5067
|
-
{
|
|
5068
|
-
model: "gemini3",
|
|
5069
|
-
tier: "quality"
|
|
5070
|
-
},
|
|
5071
|
-
{
|
|
5072
|
-
model: "mai-image-2.5-pro",
|
|
5073
|
-
tier: "quality"
|
|
5074
|
-
},
|
|
5075
|
-
{
|
|
5076
|
-
model: "seedream5",
|
|
5077
|
-
tier: "quality"
|
|
5078
|
-
},
|
|
5079
|
-
{
|
|
5080
|
-
model: "flux2-max",
|
|
5081
|
-
tier: "quality"
|
|
5082
|
-
},
|
|
5083
|
-
{
|
|
5084
|
-
model: "banana",
|
|
5085
|
-
tier: "balanced"
|
|
5086
|
-
},
|
|
5087
|
-
{
|
|
5088
|
-
model: "ideogram3-transparent",
|
|
5089
|
-
requires: ["transparency"],
|
|
5090
|
-
supports: ["transparency"],
|
|
5091
|
-
tier: "balanced"
|
|
5092
|
-
},
|
|
5093
|
-
{
|
|
5094
|
-
model: "flare",
|
|
5095
|
-
tier: "balanced"
|
|
5096
|
-
},
|
|
5097
|
-
{
|
|
5098
|
-
model: "banana2-lite",
|
|
5099
|
-
tier: "balanced"
|
|
5100
|
-
},
|
|
5101
|
-
{
|
|
5102
|
-
model: "qwen3",
|
|
5103
|
-
tier: "balanced"
|
|
5104
|
-
},
|
|
5105
|
-
{
|
|
5106
|
-
model: "seedream4",
|
|
5107
|
-
tier: "balanced"
|
|
5108
|
-
},
|
|
5109
|
-
{
|
|
5110
|
-
model: "flux2-flex",
|
|
5111
|
-
tier: "balanced"
|
|
5112
|
-
},
|
|
5113
|
-
{
|
|
5114
|
-
model: "ideogram4",
|
|
5115
|
-
tier: "balanced"
|
|
5116
|
-
},
|
|
5117
|
-
{
|
|
5118
|
-
model: "grok-image",
|
|
5119
|
-
tier: "balanced"
|
|
5120
|
-
},
|
|
5121
|
-
{
|
|
5122
|
-
model: "recraft4",
|
|
5123
|
-
tier: "balanced"
|
|
5124
|
-
},
|
|
5125
|
-
{
|
|
5126
|
-
model: "flux2-pro",
|
|
5127
|
-
tier: "balanced"
|
|
5128
|
-
},
|
|
5129
|
-
{
|
|
5130
|
-
model: "seedream45",
|
|
5131
|
-
tier: "balanced"
|
|
5132
|
-
},
|
|
5133
|
-
{
|
|
5134
|
-
model: "grok-image-2",
|
|
5135
|
-
tier: "balanced"
|
|
5136
|
-
},
|
|
5137
|
-
{
|
|
5138
|
-
model: "recraft41",
|
|
5139
|
-
tier: "balanced"
|
|
5140
|
-
},
|
|
5141
|
-
{
|
|
5142
|
-
model: "flux2-turbo",
|
|
5143
|
-
tier: "fast"
|
|
5144
|
-
},
|
|
5145
|
-
{
|
|
5146
|
-
model: "flux2-dev",
|
|
5147
|
-
tier: "fast"
|
|
5148
|
-
},
|
|
5149
|
-
{
|
|
5150
|
-
model: "flux-fast",
|
|
5151
|
-
tier: "fast"
|
|
5152
|
-
},
|
|
5153
|
-
{
|
|
5154
|
-
model: "seedream5-lite",
|
|
5155
|
-
tier: "fast"
|
|
5156
|
-
},
|
|
5157
|
-
{
|
|
5158
|
-
model: "gemini",
|
|
5159
|
-
tier: "fast"
|
|
5160
|
-
},
|
|
5161
|
-
{
|
|
5162
|
-
model: "qwen",
|
|
5163
|
-
tier: "fast"
|
|
5164
|
-
},
|
|
5165
|
-
{
|
|
5166
|
-
model: "ideogram",
|
|
5167
|
-
tier: "fast"
|
|
5168
|
-
},
|
|
5169
|
-
{
|
|
5170
|
-
model: "recraft",
|
|
5171
|
-
tier: "fast"
|
|
5172
|
-
},
|
|
5173
|
-
{
|
|
5174
|
-
model: "flux",
|
|
5175
|
-
tier: "fast"
|
|
5176
|
-
}
|
|
5177
|
-
];
|
|
5315
|
+
const IMAGE_RANKED_AT = "2026-10-29";
|
|
5178
5316
|
/** Every Task with a Model. A Task is absent here until it has at least one Model. */
|
|
5179
5317
|
const TASKS = {
|
|
5180
5318
|
animate: {
|
|
@@ -5345,10 +5483,109 @@ const TASKS = {
|
|
|
5345
5483
|
summary: "Remove an object, person, text or clutter from an image and fill the gap."
|
|
5346
5484
|
},
|
|
5347
5485
|
generate: {
|
|
5348
|
-
basis: "
|
|
5349
|
-
models:
|
|
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.",
|
|
5487
|
+
models: [
|
|
5488
|
+
{
|
|
5489
|
+
model: "sunburst",
|
|
5490
|
+
tier: "quality"
|
|
5491
|
+
},
|
|
5492
|
+
{
|
|
5493
|
+
model: "flare",
|
|
5494
|
+
tier: "quality"
|
|
5495
|
+
},
|
|
5496
|
+
{
|
|
5497
|
+
model: "gpt2",
|
|
5498
|
+
tier: "quality"
|
|
5499
|
+
},
|
|
5500
|
+
{
|
|
5501
|
+
model: "seedream5",
|
|
5502
|
+
tier: "quality"
|
|
5503
|
+
},
|
|
5504
|
+
{
|
|
5505
|
+
model: "gpt",
|
|
5506
|
+
tier: "quality"
|
|
5507
|
+
},
|
|
5508
|
+
{
|
|
5509
|
+
model: "mai-image-2.5-pro",
|
|
5510
|
+
tier: "quality"
|
|
5511
|
+
},
|
|
5512
|
+
{
|
|
5513
|
+
model: "banana21",
|
|
5514
|
+
tier: "balanced"
|
|
5515
|
+
},
|
|
5516
|
+
{
|
|
5517
|
+
model: "grok-image-2",
|
|
5518
|
+
tier: "balanced"
|
|
5519
|
+
},
|
|
5520
|
+
{
|
|
5521
|
+
model: "muse-image",
|
|
5522
|
+
tier: "balanced"
|
|
5523
|
+
},
|
|
5524
|
+
{
|
|
5525
|
+
model: "banana2",
|
|
5526
|
+
tier: "balanced"
|
|
5527
|
+
},
|
|
5528
|
+
{
|
|
5529
|
+
model: "qwen3",
|
|
5530
|
+
tier: "balanced"
|
|
5531
|
+
},
|
|
5532
|
+
{
|
|
5533
|
+
model: "mai-image-2.5",
|
|
5534
|
+
tier: "balanced"
|
|
5535
|
+
},
|
|
5536
|
+
{
|
|
5537
|
+
model: "banana",
|
|
5538
|
+
tier: "balanced"
|
|
5539
|
+
},
|
|
5540
|
+
{
|
|
5541
|
+
model: "ideogram4",
|
|
5542
|
+
tier: "balanced"
|
|
5543
|
+
},
|
|
5544
|
+
{
|
|
5545
|
+
model: "flux2-flex",
|
|
5546
|
+
tier: "balanced"
|
|
5547
|
+
},
|
|
5548
|
+
{
|
|
5549
|
+
model: "recraft41",
|
|
5550
|
+
tier: "balanced"
|
|
5551
|
+
},
|
|
5552
|
+
{
|
|
5553
|
+
model: "flux2-pro",
|
|
5554
|
+
tier: "balanced"
|
|
5555
|
+
},
|
|
5556
|
+
{
|
|
5557
|
+
model: "krea3",
|
|
5558
|
+
tier: "balanced"
|
|
5559
|
+
},
|
|
5560
|
+
{
|
|
5561
|
+
model: "grok-image-quality",
|
|
5562
|
+
tier: "balanced"
|
|
5563
|
+
},
|
|
5564
|
+
{
|
|
5565
|
+
model: "ideogram3-transparent",
|
|
5566
|
+
requires: ["transparency"],
|
|
5567
|
+
supports: ["transparency"],
|
|
5568
|
+
tier: "balanced"
|
|
5569
|
+
},
|
|
5570
|
+
{
|
|
5571
|
+
model: "banana2-lite",
|
|
5572
|
+
tier: "fast"
|
|
5573
|
+
},
|
|
5574
|
+
{
|
|
5575
|
+
model: "grok-image",
|
|
5576
|
+
tier: "fast"
|
|
5577
|
+
},
|
|
5578
|
+
{
|
|
5579
|
+
model: "seedream5-lite",
|
|
5580
|
+
tier: "fast"
|
|
5581
|
+
},
|
|
5582
|
+
{
|
|
5583
|
+
model: "flux2-turbo",
|
|
5584
|
+
tier: "fast"
|
|
5585
|
+
}
|
|
5586
|
+
],
|
|
5350
5587
|
notFor: "Variations of an image you already have (vary), or a consistent set of images (series run).",
|
|
5351
|
-
rankedAt:
|
|
5588
|
+
rankedAt: IMAGE_RANKED_AT,
|
|
5352
5589
|
rankedFrom: "hand",
|
|
5353
5590
|
summary: "Make an image from a prompt, or change an image you pass as a reference."
|
|
5354
5591
|
},
|
|
@@ -5833,10 +6070,91 @@ const TASKS = {
|
|
|
5833
6070
|
summary: "Trace a raster image to a clean SVG."
|
|
5834
6071
|
},
|
|
5835
6072
|
vary: {
|
|
5836
|
-
basis: "
|
|
5837
|
-
models:
|
|
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.",
|
|
6074
|
+
models: [
|
|
6075
|
+
{
|
|
6076
|
+
model: "sunburst",
|
|
6077
|
+
tier: "quality"
|
|
6078
|
+
},
|
|
6079
|
+
{
|
|
6080
|
+
model: "flare",
|
|
6081
|
+
tier: "quality"
|
|
6082
|
+
},
|
|
6083
|
+
{
|
|
6084
|
+
model: "gpt2",
|
|
6085
|
+
tier: "quality"
|
|
6086
|
+
},
|
|
6087
|
+
{
|
|
6088
|
+
model: "seedream5",
|
|
6089
|
+
tier: "quality"
|
|
6090
|
+
},
|
|
6091
|
+
{
|
|
6092
|
+
model: "gpt",
|
|
6093
|
+
tier: "quality"
|
|
6094
|
+
},
|
|
6095
|
+
{
|
|
6096
|
+
model: "mai-image-2.5-pro",
|
|
6097
|
+
tier: "quality"
|
|
6098
|
+
},
|
|
6099
|
+
{
|
|
6100
|
+
model: "grok-image-2",
|
|
6101
|
+
tier: "balanced"
|
|
6102
|
+
},
|
|
6103
|
+
{
|
|
6104
|
+
model: "banana21",
|
|
6105
|
+
tier: "balanced"
|
|
6106
|
+
},
|
|
6107
|
+
{
|
|
6108
|
+
model: "mai-image-2.5",
|
|
6109
|
+
tier: "balanced"
|
|
6110
|
+
},
|
|
6111
|
+
{
|
|
6112
|
+
model: "muse-image",
|
|
6113
|
+
tier: "balanced"
|
|
6114
|
+
},
|
|
6115
|
+
{
|
|
6116
|
+
model: "grok-image-quality",
|
|
6117
|
+
tier: "balanced"
|
|
6118
|
+
},
|
|
6119
|
+
{
|
|
6120
|
+
model: "banana",
|
|
6121
|
+
tier: "balanced"
|
|
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
|
+
},
|
|
6135
|
+
{
|
|
6136
|
+
model: "flux2-pro",
|
|
6137
|
+
tier: "balanced"
|
|
6138
|
+
},
|
|
6139
|
+
{
|
|
6140
|
+
model: "flux2-flex",
|
|
6141
|
+
tier: "balanced"
|
|
6142
|
+
},
|
|
6143
|
+
{
|
|
6144
|
+
model: "grok-image",
|
|
6145
|
+
tier: "fast"
|
|
6146
|
+
},
|
|
6147
|
+
{
|
|
6148
|
+
model: "banana2-lite",
|
|
6149
|
+
tier: "fast"
|
|
6150
|
+
},
|
|
6151
|
+
{
|
|
6152
|
+
model: "seedream5-lite",
|
|
6153
|
+
tier: "fast"
|
|
6154
|
+
}
|
|
6155
|
+
],
|
|
5838
6156
|
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).",
|
|
5839
|
-
rankedAt:
|
|
6157
|
+
rankedAt: IMAGE_RANKED_AT,
|
|
5840
6158
|
rankedFrom: "hand",
|
|
5841
6159
|
summary: "Make variations of an image you already have."
|
|
5842
6160
|
}
|
|
@@ -8221,7 +8539,7 @@ function resolveFixed(task, fixed, request, needed, keys) {
|
|
|
8221
8539
|
const { chosenBy, model } = fixed;
|
|
8222
8540
|
const tier = request.tier ?? "balanced";
|
|
8223
8541
|
const entries = TASKS[task].models;
|
|
8224
|
-
const entry = entries.find((candidate) => candidate.model === model && candidate.mode === request.mode);
|
|
8542
|
+
const entry = entries.find((candidate) => candidate.model === model && candidate.mode === request.mode) ?? legacyEntry(task, model, request.mode, tier);
|
|
8225
8543
|
const profile = modelProfile(model);
|
|
8226
8544
|
if (entry === void 0 || profile === void 0) {
|
|
8227
8545
|
const servesTask = entries.some((candidate) => candidate.model === model);
|
|
@@ -8234,6 +8552,14 @@ function resolveFixed(task, fixed, request, needed, keys) {
|
|
|
8234
8552
|
unblockers.push(unblockerFor(result));
|
|
8235
8553
|
return unresolved(task, result.blockedBy, unblockers, `${model} (${chosenBy}) ${describeBlock(result.blockedBy, result.missingKey, result.missingInput)}.`, result.missingKey);
|
|
8236
8554
|
}
|
|
8555
|
+
/** Old pins and tuned Looks remain usable without recommending predecessors. */
|
|
8556
|
+
function legacyEntry(task, model, mode, tier) {
|
|
8557
|
+
if (mode !== void 0 || task !== "generate" && task !== "vary" || !LEGACY_GENERATION_MODELS.some((id) => id === model) || task === "vary" && MODELS[model]?.supportsEdit !== true) return;
|
|
8558
|
+
return {
|
|
8559
|
+
model,
|
|
8560
|
+
tier
|
|
8561
|
+
};
|
|
8562
|
+
}
|
|
8237
8563
|
function unknownForMode(task, model, mode, entries) {
|
|
8238
8564
|
const otherModes = entries.filter((candidate) => candidate.model === model).map((candidate) => candidate.mode ?? "no mode");
|
|
8239
8565
|
const inMode = [...new Set(entries.filter((candidate) => candidate.mode === mode).map((candidate) => candidate.model))];
|
|
@@ -8250,7 +8576,7 @@ function resolveRanked(task, request, needed, keys) {
|
|
|
8250
8576
|
const qualifying = /* @__PURE__ */ new Map();
|
|
8251
8577
|
let firstBlock;
|
|
8252
8578
|
let keyBlock;
|
|
8253
|
-
const definition = TASKS[task];
|
|
8579
|
+
const definition = task === "generate" && (request.references ?? 0) > 0 ? TASKS.vary : TASKS[task];
|
|
8254
8580
|
for (const entry of definition.models) {
|
|
8255
8581
|
if (entry.mode !== request.mode) continue;
|
|
8256
8582
|
const { model, tier: modelTier } = entry;
|
|
@@ -8399,6 +8725,8 @@ const FAL_IMAGE_PRICE_USD = {
|
|
|
8399
8725
|
"ideogram/v4": MODELS.ideogram4?.pricePerImageUsd ?? .03,
|
|
8400
8726
|
"xai/grok-imagine-image": MODELS["grok-image"]?.pricePerImageUsd ?? .02,
|
|
8401
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,
|
|
8402
8730
|
"microsoft/mai-image-2.5-pro": MODELS["mai-image-2.5-pro"]?.pricePerImageUsd ?? .17,
|
|
8403
8731
|
"fal-ai/ideogram/v3/generate-transparent": MODELS["ideogram3-transparent"]?.pricePerImageUsd ?? .06,
|
|
8404
8732
|
"alibaba/qwen-image-3/text-to-image": MODELS.qwen3?.pricePerImageUsd ?? .04,
|