@howells/motif-sdk 5.1.0 → 5.2.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
@@ -32,6 +32,22 @@ console.log(result.value.model, result.value.files[0]?.url, result.value.cost);
32
32
 
33
33
  Every Task function returns `Result<TaskOutput, MotifError>` from `neverthrow` and does not throw for fal request failures; check `isErr()` / `isOk()`.
34
34
 
35
+ ## Curated Models and Tiers
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.
38
+
39
+ | Tier | Generation default | Editing default |
40
+ | -------------------- | ------------------ | ----------------- |
41
+ | `quality` | Sunburst at `max` | Sunburst at `max` |
42
+ | `balanced` (default) | Nano Banana 2.1 | Nano Banana 2.1 |
43
+ | `fast` | Nano Banana 2 Lite | Grok |
44
+
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.
46
+
47
+ Nano Banana 2.1 (`banana21`) supports up to 14 References and 1K/2K/4K output, with no 0.5K output. Its balanced placement uses preliminary Arena evidence. Sunburst and Flare default to the benchmarked `max` quality on fal; `params: { quality: "high" }` with an explicit `model` overrides it. The direct provider image layer described below has its own adapter capabilities and chooses no Model.
48
+
49
+ Token-billed Task plans, including Sunburst, Flare, Nano Banana 2.1, Banana Lite and MAI 2.5, report `cost: { usd: null, basis: "unknown" }`; a published representative price is not an exact total. The [curation audit](https://github.com/howells/motif/blob/main/docs/research/image-model-curation-2026-10-07.md) records the current rankings, specialist roles and provider coverage gaps.
50
+
35
51
  Pass `onProgress(status, queuePosition)` to hear fal's queue state while a run waits: `"queued"` with its place in line, then `"processing"`, then `"completed"` (or `"failed"`). Passing it sends the run through fal's queue, since only the queue reports state. Models without streaming report state, not a percentage.
36
52
 
37
53
  Pass `onSubmitted(requestId)` to hear the request id the moment fal's queue accepts the run, before any wait. Keep it: after a restart, `motif.resume(task, input, requestId)` waits for that same job and returns its output, submitting nothing and so paying nothing twice. Passing `onSubmitted` also queues the run.
package/dist/image.js CHANGED
@@ -51,7 +51,7 @@ function falHttpError(status, body, requestId) {
51
51
  }
52
52
  //#endregion
53
53
  //#region src/models.ts
54
- const AA_IMAGE_LEADERBOARD_SNAPSHOT = "2026-08-23";
54
+ const AA_IMAGE_LEADERBOARD_SNAPSHOT = "2026-10-07";
55
55
  const AA_IMAGE_SOURCES = ["https://artificialanalysis.ai/image/leaderboard/text-to-image", "https://artificialanalysis.ai/image/leaderboard/editing"];
56
56
  const FAL_PRICING_CHECKED_AT = "2026-05-12";
57
57
  const FAL_PRICING_CHECKED_JUL_2026 = "2026-07-11";
@@ -59,6 +59,22 @@ const FAL_PRICING_CHECKED_AUG_2026 = "2026-08-23";
59
59
  const FAL_PRICING_CHECKED_SEP_2026 = "2026-09-16";
60
60
  const MODELS = {
61
61
  flare: {
62
+ benchmark: {
63
+ artificialAnalysis: {
64
+ editing: {
65
+ elo: 1163,
66
+ rank: 2
67
+ },
68
+ snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
69
+ sourceUrls: AA_IMAGE_SOURCES,
70
+ textToImage: {
71
+ elo: 1191,
72
+ rank: 2
73
+ }
74
+ },
75
+ useCase: "Frontier generation and editing, evaluated at max quality"
76
+ },
77
+ defaultQuality: "max",
62
78
  customImageSize: {
63
79
  maxEdge: 3840,
64
80
  maxPixels: 8294400,
@@ -95,6 +111,22 @@ const MODELS = {
95
111
  useQueue: true
96
112
  },
97
113
  sunburst: {
114
+ benchmark: {
115
+ artificialAnalysis: {
116
+ editing: {
117
+ elo: 1183,
118
+ rank: 1
119
+ },
120
+ snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
121
+ sourceUrls: AA_IMAGE_SOURCES,
122
+ textToImage: {
123
+ elo: 1198,
124
+ rank: 1
125
+ }
126
+ },
127
+ useCase: "Frontier generation and editing, evaluated at max quality"
128
+ },
129
+ defaultQuality: "max",
98
130
  customImageSize: {
99
131
  maxEdge: 3840,
100
132
  maxPixels: 8294400,
@@ -134,14 +166,14 @@ const MODELS = {
134
166
  benchmark: {
135
167
  artificialAnalysis: {
136
168
  editing: {
137
- elo: 1256,
138
- rank: 3
169
+ elo: 1125,
170
+ rank: 5
139
171
  },
140
172
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
141
173
  sourceUrls: AA_IMAGE_SOURCES,
142
174
  textToImage: {
143
- elo: 1369,
144
- rank: 1
175
+ elo: 1172,
176
+ rank: 3
145
177
  }
146
178
  },
147
179
  speed: {
@@ -154,7 +186,7 @@ const MODELS = {
154
186
  quality: "frontier",
155
187
  speed: "very_slow"
156
188
  },
157
- useCase: "Highest-ranked text-to-image quality and transparent PNGs"
189
+ useCase: "Established frontier generation and transparent PNGs"
158
190
  },
159
191
  customImageSize: {
160
192
  maxEdge: 3840,
@@ -205,14 +237,14 @@ const MODELS = {
205
237
  benchmark: {
206
238
  artificialAnalysis: {
207
239
  editing: {
208
- elo: 1250,
209
- rank: 5
240
+ elo: 1103,
241
+ rank: 12
210
242
  },
211
243
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
212
244
  sourceUrls: AA_IMAGE_SOURCES,
213
245
  textToImage: {
214
- elo: 1310,
215
- rank: 4
246
+ elo: 1107,
247
+ rank: 8
216
248
  }
217
249
  },
218
250
  speed: {
@@ -225,7 +257,7 @@ const MODELS = {
225
257
  quality: "frontier",
226
258
  speed: "slow"
227
259
  },
228
- useCase: "Best OpenAI edit quality with transparent PNG support"
260
+ useCase: "Established OpenAI editor with transparent PNG support"
229
261
  },
230
262
  editEndpoint: "fal-ai/gpt-image-1.5/edit",
231
263
  endpoint: "fal-ai/gpt-image-1.5",
@@ -258,18 +290,103 @@ const MODELS = {
258
290
  supportsSyncMode: true,
259
291
  type: "generation"
260
292
  },
261
- banana2: {
293
+ banana21: {
294
+ benchmark: { useCase: "Efficient generation and reference editing; Arena #5 generation / #6 editing, preliminary 2026-10-06" },
295
+ editEndpoint: "google/nano-banana-2.1/edit",
296
+ endpoint: "google/nano-banana-2.1",
297
+ maxReferenceImages: 14,
298
+ name: "Nano Banana 2.1",
299
+ pricePerImageUsd: null,
300
+ 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",
301
+ sizeMode: "aspect_ratio",
302
+ supportedAspects: [
303
+ "auto",
304
+ "21:9",
305
+ "16:9",
306
+ "3:2",
307
+ "4:3",
308
+ "5:4",
309
+ "1:1",
310
+ "4:5",
311
+ "3:4",
312
+ "2:3",
313
+ "9:16",
314
+ "4:1",
315
+ "1:4",
316
+ "8:1",
317
+ "1:8"
318
+ ],
319
+ supportedResolutions: [
320
+ "1K",
321
+ "2K",
322
+ "4K"
323
+ ],
324
+ supportsAspect: true,
325
+ supportsEdit: true,
326
+ supportsLimitGenerations: true,
327
+ supportsNumImages: true,
328
+ supportsOutputFormat: true,
329
+ supportsResolution: true,
330
+ supportsSafetyTolerance: true,
331
+ supportsSeed: true,
332
+ supportsSyncMode: true,
333
+ supportsThinkingLevel: true,
334
+ supportsWebSearch: true,
335
+ type: "generation"
336
+ },
337
+ "mai-image-2.5": {
262
338
  benchmark: {
263
339
  artificialAnalysis: {
264
340
  editing: {
265
- elo: 1249,
341
+ elo: 1114,
266
342
  rank: 7
267
343
  },
268
344
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
269
345
  sourceUrls: AA_IMAGE_SOURCES,
270
346
  textToImage: {
271
- elo: 1320,
272
- rank: 3
347
+ elo: 1104,
348
+ rank: 10
349
+ }
350
+ },
351
+ useCase: "Strong single-reference editing at a lower price than MAI 2.5 Pro"
352
+ },
353
+ editEndpoint: "microsoft/mai-image-2.5/edit",
354
+ endpoint: "microsoft/mai-image-2.5",
355
+ maxReferenceImages: 1,
356
+ name: "MAI Image 2.5",
357
+ pricePerImageUsd: null,
358
+ pricing: "Token-based: text input $5/M, image input $8/M; ~$0.05 image output plus input",
359
+ sizeMode: "aspect_ratio",
360
+ supportedAspects: [
361
+ "auto",
362
+ "1:1",
363
+ "4:3",
364
+ "3:4",
365
+ "16:9",
366
+ "9:16",
367
+ "3:2",
368
+ "2:3"
369
+ ],
370
+ supportsAspect: true,
371
+ supportsEdit: true,
372
+ supportsNumImages: true,
373
+ supportsOutputFormat: true,
374
+ supportsResolution: false,
375
+ supportsSyncMode: true,
376
+ type: "generation"
377
+ },
378
+ banana2: {
379
+ benchmark: {
380
+ artificialAnalysis: {
381
+ editing: {
382
+ elo: 1110,
383
+ rank: 9
384
+ },
385
+ snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
386
+ sourceUrls: AA_IMAGE_SOURCES,
387
+ textToImage: {
388
+ elo: 1126,
389
+ rank: 6
273
390
  }
274
391
  },
275
392
  tiers: {
@@ -277,7 +394,7 @@ const MODELS = {
277
394
  quality: "frontier",
278
395
  speed: "unknown"
279
396
  },
280
- useCase: "Best balance of quality, edit support, web search, and cost"
397
+ useCase: "Previous-generation Gemini workhorse; retains 0.5K output"
281
398
  },
282
399
  editEndpoint: "fal-ai/nano-banana-2/edit",
283
400
  endpoint: "fal-ai/nano-banana-2",
@@ -313,14 +430,14 @@ const MODELS = {
313
430
  benchmark: {
314
431
  artificialAnalysis: {
315
432
  editing: {
316
- elo: 1245,
317
- rank: 9
433
+ elo: 1101,
434
+ rank: 13
318
435
  },
319
436
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
320
437
  sourceUrls: AA_IMAGE_SOURCES,
321
438
  textToImage: {
322
- elo: 1297,
323
- rank: 6
439
+ elo: 1102,
440
+ rank: 11
324
441
  }
325
442
  },
326
443
  speed: {
@@ -385,11 +502,15 @@ const MODELS = {
385
502
  gemini: {
386
503
  benchmark: { artificialAnalysis: {
387
504
  editing: {
388
- elo: 1180,
389
- rank: 29
505
+ elo: 987,
506
+ rank: 50
390
507
  },
391
508
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
392
- sourceUrls: AA_IMAGE_SOURCES
509
+ sourceUrls: AA_IMAGE_SOURCES,
510
+ textToImage: {
511
+ elo: 985,
512
+ rank: 60
513
+ }
393
514
  } },
394
515
  editEndpoint: "fal-ai/gemini-25-flash-image/edit",
395
516
  endpoint: "fal-ai/gemini-25-flash-image",
@@ -430,18 +551,6 @@ const MODELS = {
430
551
  type: "generation"
431
552
  },
432
553
  gemini3: {
433
- benchmark: { artificialAnalysis: {
434
- editing: {
435
- elo: 1245,
436
- rank: 9
437
- },
438
- snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
439
- sourceUrls: AA_IMAGE_SOURCES,
440
- textToImage: {
441
- elo: 1297,
442
- rank: 6
443
- }
444
- } },
445
554
  editEndpoint: "fal-ai/gemini-3-pro-image-preview/edit",
446
555
  endpoint: "fal-ai/gemini-3-pro-image-preview",
447
556
  falPricing: {
@@ -491,14 +600,14 @@ const MODELS = {
491
600
  benchmark: {
492
601
  artificialAnalysis: {
493
602
  editing: {
494
- elo: 1185,
495
- rank: 28
603
+ elo: 1015,
604
+ rank: 36
496
605
  },
497
606
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
498
607
  sourceUrls: AA_IMAGE_SOURCES,
499
608
  textToImage: {
500
- elo: 1226,
501
- rank: 16
609
+ elo: 1030,
610
+ rank: 21
502
611
  }
503
612
  },
504
613
  speed: {
@@ -511,7 +620,7 @@ const MODELS = {
511
620
  quality: "best",
512
621
  speed: "balanced"
513
622
  },
514
- useCase: "High-ranked budget generation and large multi-reference edits"
623
+ useCase: "Legacy budget generation and large multi-reference edits"
515
624
  },
516
625
  customImageSize: {
517
626
  maxPixels: 16777216,
@@ -545,14 +654,14 @@ const MODELS = {
545
654
  benchmark: {
546
655
  artificialAnalysis: {
547
656
  editing: {
548
- elo: 1186,
549
- rank: 26
657
+ elo: 1037,
658
+ rank: 32
550
659
  },
551
660
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
552
661
  sourceUrls: AA_IMAGE_SOURCES,
553
662
  textToImage: {
554
- elo: 1203,
555
- rank: 32
663
+ elo: 1022,
664
+ rank: 26
556
665
  }
557
666
  },
558
667
  speed: {
@@ -598,14 +707,14 @@ const MODELS = {
598
707
  seedream5: {
599
708
  benchmark: { artificialAnalysis: {
600
709
  editing: {
601
- elo: 1248,
602
- rank: 8
710
+ elo: 1108,
711
+ rank: 11
603
712
  },
604
713
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
605
714
  sourceUrls: AA_IMAGE_SOURCES,
606
715
  textToImage: {
607
- elo: 1279,
608
- rank: 10
716
+ elo: 1081,
717
+ rank: 15
609
718
  }
610
719
  } },
611
720
  customImageSize: {
@@ -640,11 +749,15 @@ const MODELS = {
640
749
  "seedream5-lite": {
641
750
  benchmark: { artificialAnalysis: {
642
751
  editing: {
643
- elo: 1169,
644
- rank: 32
752
+ elo: 1057,
753
+ rank: 24
645
754
  },
646
755
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
647
- sourceUrls: AA_IMAGE_SOURCES
756
+ sourceUrls: AA_IMAGE_SOURCES,
757
+ textToImage: {
758
+ elo: 1012,
759
+ rank: 36
760
+ }
648
761
  } },
649
762
  customImageSize: {
650
763
  maxPixels: 16777216,
@@ -678,14 +791,14 @@ const MODELS = {
678
791
  benchmark: {
679
792
  artificialAnalysis: {
680
793
  editing: {
681
- elo: 1201,
682
- rank: 19
794
+ elo: 997,
795
+ rank: 49
683
796
  },
684
797
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
685
798
  sourceUrls: AA_IMAGE_SOURCES,
686
799
  textToImage: {
687
- elo: 1225,
688
- rank: 17
800
+ elo: 1020,
801
+ rank: 28
689
802
  }
690
803
  },
691
804
  speed: {
@@ -737,14 +850,14 @@ const MODELS = {
737
850
  benchmark: {
738
851
  artificialAnalysis: {
739
852
  editing: {
740
- elo: 1170,
741
- rank: 31
853
+ elo: 1007,
854
+ rank: 41
742
855
  },
743
856
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
744
857
  sourceUrls: AA_IMAGE_SOURCES,
745
858
  textToImage: {
746
- elo: 1207,
747
- rank: 30
859
+ elo: 1004,
860
+ rank: 41
748
861
  }
749
862
  },
750
863
  speed: {
@@ -795,11 +908,15 @@ const MODELS = {
795
908
  "flux2-flex": {
796
909
  benchmark: {
797
910
  artificialAnalysis: {
911
+ editing: {
912
+ elo: 1007,
913
+ rank: 42
914
+ },
798
915
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
799
916
  sourceUrls: AA_IMAGE_SOURCES,
800
917
  textToImage: {
801
- elo: 1223,
802
- rank: 18
918
+ elo: 1027,
919
+ rank: 22
803
920
  }
804
921
  },
805
922
  speed: {
@@ -853,8 +970,16 @@ const MODELS = {
853
970
  "flux2-dev": {
854
971
  benchmark: {
855
972
  artificialAnalysis: {
973
+ editing: {
974
+ elo: 1e3,
975
+ rank: 45
976
+ },
856
977
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
857
- sourceUrls: AA_IMAGE_SOURCES
978
+ sourceUrls: AA_IMAGE_SOURCES,
979
+ textToImage: {
980
+ elo: 1e3,
981
+ rank: 42
982
+ }
858
983
  },
859
984
  speed: {
860
985
  medianSeconds: 4.6,
@@ -1017,24 +1142,12 @@ const MODELS = {
1017
1142
  },
1018
1143
  reve: {
1019
1144
  benchmark: {
1020
- artificialAnalysis: {
1021
- editing: {
1022
- elo: 1263,
1023
- rank: 2
1024
- },
1025
- snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
1026
- sourceUrls: AA_IMAGE_SOURCES,
1027
- textToImage: {
1028
- elo: 1322,
1029
- rank: 2
1030
- }
1031
- },
1032
1145
  tiers: {
1033
1146
  price: "premium",
1034
1147
  quality: "frontier",
1035
1148
  speed: "unknown"
1036
1149
  },
1037
- useCase: "Highest-ranked editor reachable on fal; strong prompt adherence and text rendering"
1150
+ useCase: "Historical Reve route; not currently verified on fal"
1038
1151
  },
1039
1152
  editEndpoint: "fal-ai/reve/edit",
1040
1153
  endpoint: "fal-ai/reve/text-to-image",
@@ -1075,8 +1188,8 @@ const MODELS = {
1075
1188
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
1076
1189
  sourceUrls: AA_IMAGE_SOURCES,
1077
1190
  textToImage: {
1078
- elo: 1215,
1079
- rank: 25
1191
+ elo: 984,
1192
+ rank: 62
1080
1193
  }
1081
1194
  } },
1082
1195
  customImageSize: {},
@@ -1134,8 +1247,8 @@ const MODELS = {
1134
1247
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
1135
1248
  sourceUrls: AA_IMAGE_SOURCES,
1136
1249
  textToImage: {
1137
- elo: 1220,
1138
- rank: 19
1250
+ elo: 1004,
1251
+ rank: 40
1139
1252
  }
1140
1253
  } },
1141
1254
  customImageSize: {
@@ -1173,14 +1286,14 @@ const MODELS = {
1173
1286
  benchmark: {
1174
1287
  artificialAnalysis: {
1175
1288
  editing: {
1176
- elo: 1214,
1177
- rank: 16
1289
+ elo: 1073,
1290
+ rank: 19
1178
1291
  },
1179
1292
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
1180
1293
  sourceUrls: AA_IMAGE_SOURCES,
1181
1294
  textToImage: {
1182
- elo: 1216,
1183
- rank: 23
1295
+ elo: 1019,
1296
+ rank: 30
1184
1297
  }
1185
1298
  },
1186
1299
  speed: {
@@ -1233,7 +1346,11 @@ const MODELS = {
1233
1346
  benchmark: {
1234
1347
  artificialAnalysis: {
1235
1348
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
1236
- sourceUrls: AA_IMAGE_SOURCES
1349
+ sourceUrls: AA_IMAGE_SOURCES,
1350
+ textToImage: {
1351
+ elo: 890,
1352
+ rank: 106
1353
+ }
1237
1354
  },
1238
1355
  speed: {
1239
1356
  medianSeconds: 23.3,
@@ -1275,14 +1392,14 @@ const MODELS = {
1275
1392
  benchmark: {
1276
1393
  artificialAnalysis: {
1277
1394
  editing: {
1278
- elo: 1218,
1279
- rank: 15
1395
+ elo: 1056,
1396
+ rank: 25
1280
1397
  },
1281
1398
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
1282
1399
  sourceUrls: AA_IMAGE_SOURCES,
1283
1400
  textToImage: {
1284
- elo: 1272,
1285
- rank: 11
1401
+ elo: 1075,
1402
+ rank: 16
1286
1403
  }
1287
1404
  },
1288
1405
  tiers: {
@@ -1290,7 +1407,7 @@ const MODELS = {
1290
1407
  quality: "better",
1291
1408
  speed: "unknown"
1292
1409
  },
1293
- useCase: "Strong quality per dollar - 11th on text-to-image at $30/1k"
1410
+ useCase: "Strong generation with negative-prompt and seed controls"
1294
1411
  },
1295
1412
  customImageSize: {
1296
1413
  maxPixels: 4194304,
@@ -1324,17 +1441,17 @@ const MODELS = {
1324
1441
  benchmark: {
1325
1442
  artificialAnalysis: {
1326
1443
  editing: {
1327
- elo: 1272,
1328
- rank: 1
1444
+ elo: 1110,
1445
+ rank: 10
1329
1446
  },
1330
1447
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
1331
1448
  sourceUrls: AA_IMAGE_SOURCES,
1332
1449
  textToImage: {
1333
- elo: 1293,
1334
- rank: 7
1450
+ elo: 1100,
1451
+ rank: 12
1335
1452
  }
1336
1453
  },
1337
- useCase: "Highest-ranked image editor, single reference image"
1454
+ useCase: "Strong single-reference editor; MAI 2.5 ranks higher on the current editing board"
1338
1455
  },
1339
1456
  editEndpoint: "microsoft/mai-image-2.5-pro/edit",
1340
1457
  editImagesField: "image_url",
@@ -1373,20 +1490,26 @@ const MODELS = {
1373
1490
  },
1374
1491
  "banana2-lite": {
1375
1492
  benchmark: { artificialAnalysis: {
1493
+ editing: {
1494
+ elo: 1046,
1495
+ rank: 26
1496
+ },
1376
1497
  snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
1377
1498
  sourceUrls: AA_IMAGE_SOURCES,
1378
1499
  textToImage: {
1379
- elo: 1289,
1380
- rank: 8
1500
+ elo: 1095,
1501
+ rank: 13
1381
1502
  }
1382
1503
  } },
1504
+ editEndpoint: "google/nano-banana-2-lite/edit",
1505
+ maxReferenceImages: 14,
1383
1506
  endpoint: "google/nano-banana-2-lite",
1384
1507
  name: "Nano Banana 2 Lite",
1385
- 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.048)",
1386
- pricePerImageUsd: .048,
1508
+ 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)",
1509
+ pricePerImageUsd: null,
1387
1510
  sizeMode: "aspect_ratio",
1388
1511
  supportsAspect: true,
1389
- supportsEdit: false,
1512
+ supportsEdit: true,
1390
1513
  supportsLimitGenerations: true,
1391
1514
  supportsNumImages: true,
1392
1515
  supportsOutputFormat: true,
@@ -1459,6 +1582,21 @@ const MODELS = {
1459
1582
  type: "generation"
1460
1583
  },
1461
1584
  "grok-image-2": {
1585
+ benchmark: {
1586
+ artificialAnalysis: {
1587
+ editing: {
1588
+ elo: 1110,
1589
+ rank: 8
1590
+ },
1591
+ snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
1592
+ sourceUrls: AA_IMAGE_SOURCES,
1593
+ textToImage: {
1594
+ elo: 1156,
1595
+ rank: 4
1596
+ }
1597
+ },
1598
+ useCase: "Strong generation and editing with predictable per-image billing"
1599
+ },
1462
1600
  editEndpoint: "xai/grok-imagine-image/v2.0/edit",
1463
1601
  endpoint: "xai/grok-imagine-image/v2.0/text-to-image",
1464
1602
  falPricing: {
@@ -1557,35 +1695,25 @@ const MODELS = {
1557
1695
  }
1558
1696
  };
1559
1697
  [
1560
- "flare",
1561
1698
  "sunburst",
1699
+ "flare",
1562
1700
  "gpt2",
1563
1701
  "gpt",
1702
+ "banana21",
1564
1703
  "banana2",
1565
1704
  "banana",
1566
- "gemini",
1567
- "gemini3",
1568
- "seedream4",
1569
- "seedream45",
1705
+ "mai-image-2.5",
1706
+ "mai-image-2.5-pro",
1570
1707
  "seedream5",
1571
- "seedream5-lite",
1572
- "flux2-max",
1573
- "flux2-pro",
1708
+ "qwen3",
1709
+ "banana2-lite",
1710
+ "grok-image-2",
1711
+ "grok-image",
1574
1712
  "flux2-flex",
1575
- "flux2-dev",
1713
+ "flux2-pro",
1576
1714
  "flux2-turbo",
1577
- "flux",
1578
- "flux-fast",
1579
- "recraft",
1580
- "recraft4",
1581
- "ideogram",
1715
+ "seedream5-lite",
1582
1716
  "ideogram4",
1583
- "grok-image",
1584
- "grok-image-2",
1585
- "qwen",
1586
- "qwen3",
1587
- "mai-image-2.5-pro",
1588
- "banana2-lite",
1589
1717
  "ideogram3-transparent",
1590
1718
  "recraft41"
1591
1719
  ].filter((id) => MODELS[id]?.supportsEdit === true);