@howells/motif-sdk 5.4.0 → 7.0.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 +7 -7
- package/dist/image.js +8 -679
- package/dist/index.cjs +45 -1792
- package/dist/index.d.cts +7 -14
- package/dist/index.d.ts +7 -14
- package/dist/index.js +46 -1792
- package/dist/registry.d.ts +1757 -0
- package/dist/registry.js +2714 -0
- package/package.json +5 -1
package/dist/registry.js
ADDED
|
@@ -0,0 +1,2714 @@
|
|
|
1
|
+
//#region src/aspects.ts
|
|
2
|
+
/** Pixel sizes of fal's named `image_size` presets. `auto` has none. */
|
|
3
|
+
const FAL_PRESET_SIZES = {
|
|
4
|
+
landscape_16_9: {
|
|
5
|
+
height: 576,
|
|
6
|
+
width: 1024
|
|
7
|
+
},
|
|
8
|
+
landscape_4_3: {
|
|
9
|
+
height: 768,
|
|
10
|
+
width: 1024
|
|
11
|
+
},
|
|
12
|
+
portrait_16_9: {
|
|
13
|
+
height: 1024,
|
|
14
|
+
width: 576
|
|
15
|
+
},
|
|
16
|
+
portrait_4_3: {
|
|
17
|
+
height: 1024,
|
|
18
|
+
width: 768
|
|
19
|
+
},
|
|
20
|
+
square: {
|
|
21
|
+
height: 512,
|
|
22
|
+
width: 512
|
|
23
|
+
},
|
|
24
|
+
square_hd: {
|
|
25
|
+
height: 1024,
|
|
26
|
+
width: 1024
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//#endregion
|
|
30
|
+
//#region src/models.ts
|
|
31
|
+
const AA_IMAGE_LEADERBOARD_SNAPSHOT = "2026-10-07";
|
|
32
|
+
const AA_IMAGE_SOURCES = ["https://artificialanalysis.ai/image/leaderboard/text-to-image", "https://artificialanalysis.ai/image/leaderboard/editing"];
|
|
33
|
+
const FAL_PRICING_CHECKED_AT = "2026-05-12";
|
|
34
|
+
const FAL_PRICING_CHECKED_JUL_2026 = "2026-07-11";
|
|
35
|
+
const FAL_PRICING_CHECKED_SEP_2026 = "2026-09-16";
|
|
36
|
+
const FAL_PRICING_CHECKED_OCT_2026 = "2026-10-29";
|
|
37
|
+
const MODELS = {
|
|
38
|
+
flare: {
|
|
39
|
+
benchmark: {
|
|
40
|
+
artificialAnalysis: {
|
|
41
|
+
editing: {
|
|
42
|
+
elo: 1163,
|
|
43
|
+
rank: 2
|
|
44
|
+
},
|
|
45
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
46
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
47
|
+
textToImage: {
|
|
48
|
+
elo: 1191,
|
|
49
|
+
rank: 2
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
useCase: "Frontier generation and editing at max reasoning effort; scored as GPT Image 2.5 until 2.6 is benchmarked"
|
|
53
|
+
},
|
|
54
|
+
defaultQuality: "max",
|
|
55
|
+
customImageSize: {
|
|
56
|
+
maxEdge: 3840,
|
|
57
|
+
maxPixels: 8294400,
|
|
58
|
+
maxRatio: 3,
|
|
59
|
+
minPixels: 655360,
|
|
60
|
+
multipleOf: 16
|
|
61
|
+
},
|
|
62
|
+
editEndpoint: "openai/gpt-image-2.6/flare/edit",
|
|
63
|
+
endpoint: "openai/gpt-image-2.6/flare/text-to-image",
|
|
64
|
+
maxReferenceImages: 16,
|
|
65
|
+
name: "GPT Image 2.6 Flare",
|
|
66
|
+
pricing: "Token-based: image $8/M input, $2/M cached, $30/M output; text $5/M input, $1.25/M cached",
|
|
67
|
+
pricePerImageUsd: null,
|
|
68
|
+
sizeMode: "image_size_enum",
|
|
69
|
+
supportsAspect: true,
|
|
70
|
+
supportsBackground: true,
|
|
71
|
+
supportsEdit: true,
|
|
72
|
+
supportsMaskImage: true,
|
|
73
|
+
maskImageField: "mask_url",
|
|
74
|
+
supportsMarkupImage: true,
|
|
75
|
+
autoEditSize: true,
|
|
76
|
+
supportsNumImages: true,
|
|
77
|
+
supportsOutputFormat: true,
|
|
78
|
+
supportedOutputFormats: [
|
|
79
|
+
"jpeg",
|
|
80
|
+
"png",
|
|
81
|
+
"webp",
|
|
82
|
+
"gif",
|
|
83
|
+
"svg"
|
|
84
|
+
],
|
|
85
|
+
supportedEditOutputFormats: [
|
|
86
|
+
"jpeg",
|
|
87
|
+
"png",
|
|
88
|
+
"webp",
|
|
89
|
+
"gif"
|
|
90
|
+
],
|
|
91
|
+
supportsQuality: true,
|
|
92
|
+
supportedQualities: [
|
|
93
|
+
"auto",
|
|
94
|
+
"low",
|
|
95
|
+
"medium",
|
|
96
|
+
"high",
|
|
97
|
+
"xhigh",
|
|
98
|
+
"max"
|
|
99
|
+
],
|
|
100
|
+
supportsResolution: false,
|
|
101
|
+
supportsSyncMode: true,
|
|
102
|
+
type: "generation",
|
|
103
|
+
useQueue: true
|
|
104
|
+
},
|
|
105
|
+
sunburst: {
|
|
106
|
+
benchmark: {
|
|
107
|
+
artificialAnalysis: {
|
|
108
|
+
editing: {
|
|
109
|
+
elo: 1183,
|
|
110
|
+
rank: 1
|
|
111
|
+
},
|
|
112
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
113
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
114
|
+
textToImage: {
|
|
115
|
+
elo: 1198,
|
|
116
|
+
rank: 1
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
useCase: "Frontier generation and editing at max reasoning effort; scored as GPT Image 2.5 until 2.6 is benchmarked"
|
|
120
|
+
},
|
|
121
|
+
defaultQuality: "max",
|
|
122
|
+
customImageSize: {
|
|
123
|
+
maxEdge: 3840,
|
|
124
|
+
maxPixels: 8294400,
|
|
125
|
+
maxRatio: 3,
|
|
126
|
+
minPixels: 655360,
|
|
127
|
+
multipleOf: 16
|
|
128
|
+
},
|
|
129
|
+
editEndpoint: "openai/gpt-image-2.6/sunburst/edit",
|
|
130
|
+
endpoint: "openai/gpt-image-2.6/sunburst/text-to-image",
|
|
131
|
+
maxReferenceImages: 16,
|
|
132
|
+
name: "GPT Image 2.6 Sunburst",
|
|
133
|
+
pricing: "Token-based: image $8/M input, $2/M cached, $30/M output; text $5/M input, $1.25/M cached",
|
|
134
|
+
pricePerImageUsd: null,
|
|
135
|
+
sizeMode: "image_size_enum",
|
|
136
|
+
supportsAspect: true,
|
|
137
|
+
supportsBackground: true,
|
|
138
|
+
supportsEdit: true,
|
|
139
|
+
supportsMaskImage: true,
|
|
140
|
+
maskImageField: "mask_url",
|
|
141
|
+
supportsMarkupImage: true,
|
|
142
|
+
autoEditSize: true,
|
|
143
|
+
supportsNumImages: true,
|
|
144
|
+
supportsOutputFormat: true,
|
|
145
|
+
supportedOutputFormats: [
|
|
146
|
+
"jpeg",
|
|
147
|
+
"png",
|
|
148
|
+
"webp",
|
|
149
|
+
"gif",
|
|
150
|
+
"svg"
|
|
151
|
+
],
|
|
152
|
+
supportedEditOutputFormats: [
|
|
153
|
+
"jpeg",
|
|
154
|
+
"png",
|
|
155
|
+
"webp",
|
|
156
|
+
"gif"
|
|
157
|
+
],
|
|
158
|
+
supportsQuality: true,
|
|
159
|
+
supportedQualities: [
|
|
160
|
+
"auto",
|
|
161
|
+
"low",
|
|
162
|
+
"medium",
|
|
163
|
+
"high",
|
|
164
|
+
"xhigh",
|
|
165
|
+
"max"
|
|
166
|
+
],
|
|
167
|
+
supportsResolution: false,
|
|
168
|
+
supportsSyncMode: true,
|
|
169
|
+
type: "generation",
|
|
170
|
+
useQueue: true
|
|
171
|
+
},
|
|
172
|
+
gpt: {
|
|
173
|
+
benchmark: {
|
|
174
|
+
artificialAnalysis: {
|
|
175
|
+
editing: {
|
|
176
|
+
elo: 1103,
|
|
177
|
+
rank: 12
|
|
178
|
+
},
|
|
179
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
180
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
181
|
+
textToImage: {
|
|
182
|
+
elo: 1107,
|
|
183
|
+
rank: 8
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
speed: {
|
|
187
|
+
medianSeconds: 34.6,
|
|
188
|
+
p95Seconds: 38.3,
|
|
189
|
+
source: "artificial-analysis-models"
|
|
190
|
+
},
|
|
191
|
+
tiers: {
|
|
192
|
+
price: "ultra",
|
|
193
|
+
quality: "frontier",
|
|
194
|
+
speed: "slow"
|
|
195
|
+
},
|
|
196
|
+
useCase: "Established OpenAI editor with transparent PNG support"
|
|
197
|
+
},
|
|
198
|
+
editEndpoint: "fal-ai/gpt-image-1.5/edit",
|
|
199
|
+
endpoint: "fal-ai/gpt-image-1.5",
|
|
200
|
+
falPricing: {
|
|
201
|
+
checkedAt: FAL_PRICING_CHECKED_AT,
|
|
202
|
+
currency: "USD",
|
|
203
|
+
endpointId: "fal-ai/gpt-image-1.5",
|
|
204
|
+
estimatedCostPerImageUsd: .133,
|
|
205
|
+
source: "fal-pricing-api",
|
|
206
|
+
unit: "units",
|
|
207
|
+
unitPrice: 1
|
|
208
|
+
},
|
|
209
|
+
maxReferenceImages: 4,
|
|
210
|
+
name: "GPT Image 1.5",
|
|
211
|
+
pricePerImageUsd: .133,
|
|
212
|
+
pricing: "$0.133",
|
|
213
|
+
sizeMode: "gpt_size",
|
|
214
|
+
supportsAspect: false,
|
|
215
|
+
supportsBackground: true,
|
|
216
|
+
streaming: {
|
|
217
|
+
generation: true,
|
|
218
|
+
edit: true
|
|
219
|
+
},
|
|
220
|
+
supportsEdit: true,
|
|
221
|
+
supportsMaskImage: true,
|
|
222
|
+
supportsNumImages: true,
|
|
223
|
+
supportsOutputFormat: true,
|
|
224
|
+
supportsQuality: true,
|
|
225
|
+
supportsResolution: false,
|
|
226
|
+
supportsSyncMode: true,
|
|
227
|
+
type: "generation"
|
|
228
|
+
},
|
|
229
|
+
banana21: {
|
|
230
|
+
benchmark: { useCase: "Efficient generation and reference editing; Arena #5 generation / #6 editing, preliminary 2026-10-06" },
|
|
231
|
+
editEndpoint: "google/nano-banana-2.1/edit",
|
|
232
|
+
endpoint: "google/nano-banana-2.1",
|
|
233
|
+
maxReferenceImages: 14,
|
|
234
|
+
name: "Nano Banana 2.1",
|
|
235
|
+
pricePerImageUsd: null,
|
|
236
|
+
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",
|
|
237
|
+
sizeMode: "aspect_ratio",
|
|
238
|
+
supportedAspects: [
|
|
239
|
+
"auto",
|
|
240
|
+
"21:9",
|
|
241
|
+
"16:9",
|
|
242
|
+
"3:2",
|
|
243
|
+
"4:3",
|
|
244
|
+
"5:4",
|
|
245
|
+
"1:1",
|
|
246
|
+
"4:5",
|
|
247
|
+
"3:4",
|
|
248
|
+
"2:3",
|
|
249
|
+
"9:16",
|
|
250
|
+
"4:1",
|
|
251
|
+
"1:4",
|
|
252
|
+
"8:1",
|
|
253
|
+
"1:8"
|
|
254
|
+
],
|
|
255
|
+
supportedResolutions: [
|
|
256
|
+
"1K",
|
|
257
|
+
"2K",
|
|
258
|
+
"4K"
|
|
259
|
+
],
|
|
260
|
+
supportsAspect: true,
|
|
261
|
+
supportsEdit: true,
|
|
262
|
+
supportsLimitGenerations: true,
|
|
263
|
+
supportsNumImages: true,
|
|
264
|
+
supportsOutputFormat: true,
|
|
265
|
+
supportsResolution: true,
|
|
266
|
+
supportsSafetyTolerance: true,
|
|
267
|
+
supportsSeed: true,
|
|
268
|
+
supportsSyncMode: true,
|
|
269
|
+
supportsThinkingLevel: true,
|
|
270
|
+
supportsWebSearch: true,
|
|
271
|
+
type: "generation"
|
|
272
|
+
},
|
|
273
|
+
"mai-image-2.5": {
|
|
274
|
+
benchmark: {
|
|
275
|
+
artificialAnalysis: {
|
|
276
|
+
editing: {
|
|
277
|
+
elo: 1114,
|
|
278
|
+
rank: 7
|
|
279
|
+
},
|
|
280
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
281
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
282
|
+
textToImage: {
|
|
283
|
+
elo: 1104,
|
|
284
|
+
rank: 10
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
useCase: "Strong single-reference editing at a lower price than MAI 2.5 Pro"
|
|
288
|
+
},
|
|
289
|
+
editEndpoint: "microsoft/mai-image-2.5/edit",
|
|
290
|
+
endpoint: "microsoft/mai-image-2.5",
|
|
291
|
+
maxReferenceImages: 1,
|
|
292
|
+
name: "MAI Image 2.5",
|
|
293
|
+
pricePerImageUsd: null,
|
|
294
|
+
pricing: "Token-based: text input $5/M, image input $8/M; ~$0.05 image output plus input",
|
|
295
|
+
sizeMode: "aspect_ratio",
|
|
296
|
+
supportedAspects: [
|
|
297
|
+
"auto",
|
|
298
|
+
"1:1",
|
|
299
|
+
"4:3",
|
|
300
|
+
"3:4",
|
|
301
|
+
"16:9",
|
|
302
|
+
"9:16",
|
|
303
|
+
"3:2",
|
|
304
|
+
"2:3"
|
|
305
|
+
],
|
|
306
|
+
supportsAspect: true,
|
|
307
|
+
supportsEdit: true,
|
|
308
|
+
supportsNumImages: true,
|
|
309
|
+
supportsOutputFormat: true,
|
|
310
|
+
supportsResolution: false,
|
|
311
|
+
supportsSyncMode: true,
|
|
312
|
+
type: "generation"
|
|
313
|
+
},
|
|
314
|
+
banana2: {
|
|
315
|
+
benchmark: {
|
|
316
|
+
artificialAnalysis: {
|
|
317
|
+
editing: {
|
|
318
|
+
elo: 1110,
|
|
319
|
+
rank: 9
|
|
320
|
+
},
|
|
321
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
322
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
323
|
+
textToImage: {
|
|
324
|
+
elo: 1126,
|
|
325
|
+
rank: 6
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
tiers: {
|
|
329
|
+
price: "premium",
|
|
330
|
+
quality: "frontier",
|
|
331
|
+
speed: "unknown"
|
|
332
|
+
},
|
|
333
|
+
useCase: "Gemini workhorse with 0.5K output"
|
|
334
|
+
},
|
|
335
|
+
editEndpoint: "fal-ai/nano-banana-2/edit",
|
|
336
|
+
endpoint: "fal-ai/nano-banana-2",
|
|
337
|
+
falPricing: {
|
|
338
|
+
checkedAt: FAL_PRICING_CHECKED_AT,
|
|
339
|
+
currency: "USD",
|
|
340
|
+
endpointId: "fal-ai/nano-banana-2",
|
|
341
|
+
estimatedCostPerImageUsd: .08,
|
|
342
|
+
source: "fal-pricing-api",
|
|
343
|
+
unit: "images",
|
|
344
|
+
unitPrice: .08
|
|
345
|
+
},
|
|
346
|
+
maxReferenceImages: 4,
|
|
347
|
+
name: "Nano Banana 2",
|
|
348
|
+
pricePerImageUsd: .08,
|
|
349
|
+
pricing: "$0.08",
|
|
350
|
+
sizeMode: "aspect_ratio",
|
|
351
|
+
supportsAspect: true,
|
|
352
|
+
supportsEdit: true,
|
|
353
|
+
supportsGoogleSearch: true,
|
|
354
|
+
supportsLimitGenerations: true,
|
|
355
|
+
supportsNumImages: true,
|
|
356
|
+
supportsOutputFormat: true,
|
|
357
|
+
supportsResolution: true,
|
|
358
|
+
supportsSafetyTolerance: true,
|
|
359
|
+
supportsSeed: true,
|
|
360
|
+
supportsSyncMode: true,
|
|
361
|
+
supportsThinkingLevel: true,
|
|
362
|
+
supportsWebSearch: true,
|
|
363
|
+
type: "generation"
|
|
364
|
+
},
|
|
365
|
+
banana: {
|
|
366
|
+
benchmark: {
|
|
367
|
+
artificialAnalysis: {
|
|
368
|
+
editing: {
|
|
369
|
+
elo: 1101,
|
|
370
|
+
rank: 13
|
|
371
|
+
},
|
|
372
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
373
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
374
|
+
textToImage: {
|
|
375
|
+
elo: 1102,
|
|
376
|
+
rank: 11
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
speed: {
|
|
380
|
+
medianSeconds: 19.2,
|
|
381
|
+
p95Seconds: 30.3,
|
|
382
|
+
source: "artificial-analysis-models"
|
|
383
|
+
},
|
|
384
|
+
tiers: {
|
|
385
|
+
price: "ultra",
|
|
386
|
+
quality: "frontier",
|
|
387
|
+
speed: "balanced"
|
|
388
|
+
},
|
|
389
|
+
useCase: "Premium Gemini image generation and multi-reference edits"
|
|
390
|
+
},
|
|
391
|
+
editEndpoint: "fal-ai/nano-banana-pro/edit",
|
|
392
|
+
endpoint: "fal-ai/nano-banana-pro",
|
|
393
|
+
falPricing: {
|
|
394
|
+
checkedAt: FAL_PRICING_CHECKED_AT,
|
|
395
|
+
currency: "USD",
|
|
396
|
+
endpointId: "fal-ai/nano-banana-pro",
|
|
397
|
+
estimatedCostPerImageUsd: .15,
|
|
398
|
+
source: "fal-pricing-api",
|
|
399
|
+
unit: "images",
|
|
400
|
+
unitPrice: .15
|
|
401
|
+
},
|
|
402
|
+
maxReferenceImages: 14,
|
|
403
|
+
name: "Nano Banana Pro",
|
|
404
|
+
pricePerImageUsd: .15,
|
|
405
|
+
pricing: "$0.15",
|
|
406
|
+
sizeMode: "aspect_ratio",
|
|
407
|
+
supportedAspects: [
|
|
408
|
+
"auto",
|
|
409
|
+
"21:9",
|
|
410
|
+
"16:9",
|
|
411
|
+
"3:2",
|
|
412
|
+
"4:3",
|
|
413
|
+
"5:4",
|
|
414
|
+
"1:1",
|
|
415
|
+
"4:5",
|
|
416
|
+
"3:4",
|
|
417
|
+
"2:3",
|
|
418
|
+
"9:16"
|
|
419
|
+
],
|
|
420
|
+
supportedResolutions: [
|
|
421
|
+
"1K",
|
|
422
|
+
"2K",
|
|
423
|
+
"4K"
|
|
424
|
+
],
|
|
425
|
+
supportsAspect: true,
|
|
426
|
+
supportsEdit: true,
|
|
427
|
+
supportsGoogleSearch: true,
|
|
428
|
+
supportsLimitGenerations: true,
|
|
429
|
+
supportsNumImages: true,
|
|
430
|
+
supportsOutputFormat: true,
|
|
431
|
+
supportsResolution: true,
|
|
432
|
+
supportsSafetyTolerance: true,
|
|
433
|
+
supportsSeed: true,
|
|
434
|
+
supportsSyncMode: true,
|
|
435
|
+
supportsWebSearch: true,
|
|
436
|
+
type: "generation"
|
|
437
|
+
},
|
|
438
|
+
seedream5: {
|
|
439
|
+
benchmark: { artificialAnalysis: {
|
|
440
|
+
editing: {
|
|
441
|
+
elo: 1108,
|
|
442
|
+
rank: 11
|
|
443
|
+
},
|
|
444
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
445
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
446
|
+
textToImage: {
|
|
447
|
+
elo: 1081,
|
|
448
|
+
rank: 15
|
|
449
|
+
}
|
|
450
|
+
} },
|
|
451
|
+
customImageSize: {
|
|
452
|
+
maxPixels: 4194304,
|
|
453
|
+
maxRatio: 16,
|
|
454
|
+
minPixels: 1048576
|
|
455
|
+
},
|
|
456
|
+
name: "Seedream 5.0 Pro",
|
|
457
|
+
endpoint: "bytedance/seedream/v5/pro/text-to-image",
|
|
458
|
+
editEndpoint: "bytedance/seedream/v5/pro/edit",
|
|
459
|
+
type: "generation",
|
|
460
|
+
pricing: "$0.0675 (≤1536²) / $0.135 (≤2048²)",
|
|
461
|
+
pricePerImageUsd: .0675,
|
|
462
|
+
falPricing: {
|
|
463
|
+
checkedAt: FAL_PRICING_CHECKED_JUL_2026,
|
|
464
|
+
currency: "USD",
|
|
465
|
+
endpointId: "bytedance/seedream/v5/pro/text-to-image",
|
|
466
|
+
estimatedCostPerImageUsd: .0675,
|
|
467
|
+
source: "fal-pricing-api",
|
|
468
|
+
unit: "images",
|
|
469
|
+
unitPrice: .0675
|
|
470
|
+
},
|
|
471
|
+
sizeMode: "image_size_enum",
|
|
472
|
+
supportsAspect: true,
|
|
473
|
+
supportsResolution: false,
|
|
474
|
+
supportsEdit: true,
|
|
475
|
+
supportsNumImages: true,
|
|
476
|
+
supportsSeed: true,
|
|
477
|
+
supportsSyncMode: true,
|
|
478
|
+
maxReferenceImages: 10
|
|
479
|
+
},
|
|
480
|
+
"seedream5-lite": {
|
|
481
|
+
benchmark: { artificialAnalysis: {
|
|
482
|
+
editing: {
|
|
483
|
+
elo: 1057,
|
|
484
|
+
rank: 24
|
|
485
|
+
},
|
|
486
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
487
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
488
|
+
textToImage: {
|
|
489
|
+
elo: 1012,
|
|
490
|
+
rank: 36
|
|
491
|
+
}
|
|
492
|
+
} },
|
|
493
|
+
customImageSize: {
|
|
494
|
+
maxPixels: 16777216,
|
|
495
|
+
minPixels: 3686400
|
|
496
|
+
},
|
|
497
|
+
name: "Seedream 5.0 Lite",
|
|
498
|
+
endpoint: "bytedance/seedream/v5/lite/text-to-image",
|
|
499
|
+
editEndpoint: "bytedance/seedream/v5/lite/edit",
|
|
500
|
+
type: "generation",
|
|
501
|
+
pricing: "$0.035",
|
|
502
|
+
pricePerImageUsd: .035,
|
|
503
|
+
falPricing: {
|
|
504
|
+
checkedAt: FAL_PRICING_CHECKED_JUL_2026,
|
|
505
|
+
currency: "USD",
|
|
506
|
+
endpointId: "bytedance/seedream/v5/lite/text-to-image",
|
|
507
|
+
estimatedCostPerImageUsd: .035,
|
|
508
|
+
source: "fal-pricing-api",
|
|
509
|
+
unit: "images",
|
|
510
|
+
unitPrice: .035
|
|
511
|
+
},
|
|
512
|
+
sizeMode: "image_size_enum",
|
|
513
|
+
supportsAspect: true,
|
|
514
|
+
supportsResolution: false,
|
|
515
|
+
supportsEdit: true,
|
|
516
|
+
supportsNumImages: true,
|
|
517
|
+
supportsSeed: true,
|
|
518
|
+
supportsSyncMode: true,
|
|
519
|
+
maxReferenceImages: 10
|
|
520
|
+
},
|
|
521
|
+
"flux2-pro": {
|
|
522
|
+
benchmark: {
|
|
523
|
+
artificialAnalysis: {
|
|
524
|
+
editing: {
|
|
525
|
+
elo: 1007,
|
|
526
|
+
rank: 41
|
|
527
|
+
},
|
|
528
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
529
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
530
|
+
textToImage: {
|
|
531
|
+
elo: 1004,
|
|
532
|
+
rank: 41
|
|
533
|
+
}
|
|
534
|
+
},
|
|
535
|
+
speed: {
|
|
536
|
+
medianSeconds: 16.1,
|
|
537
|
+
p95Seconds: 23.9,
|
|
538
|
+
source: "artificial-analysis-models"
|
|
539
|
+
},
|
|
540
|
+
tiers: {
|
|
541
|
+
price: "budget",
|
|
542
|
+
quality: "best",
|
|
543
|
+
speed: "balanced"
|
|
544
|
+
},
|
|
545
|
+
useCase: "Production FLUX quality at a low per-megapixel price"
|
|
546
|
+
},
|
|
547
|
+
customImageSize: {
|
|
548
|
+
maxEdge: 2560,
|
|
549
|
+
maxPixels: 4194304,
|
|
550
|
+
minEdge: 256,
|
|
551
|
+
multipleOf: 16
|
|
552
|
+
},
|
|
553
|
+
editEndpoint: "fal-ai/flux-2-pro/edit",
|
|
554
|
+
endpoint: "fal-ai/flux-2-pro",
|
|
555
|
+
falPricing: {
|
|
556
|
+
checkedAt: FAL_PRICING_CHECKED_AT,
|
|
557
|
+
currency: "USD",
|
|
558
|
+
endpointId: "fal-ai/flux-2-pro",
|
|
559
|
+
estimatedCostPerImageUsd: .03,
|
|
560
|
+
source: "fal-pricing-api",
|
|
561
|
+
unit: "processed megapixels",
|
|
562
|
+
unitPrice: .03
|
|
563
|
+
},
|
|
564
|
+
maxReferenceImages: 10,
|
|
565
|
+
name: "FLUX.2 Pro",
|
|
566
|
+
pricePerImageUsd: .03,
|
|
567
|
+
pricing: "$0.03/MP",
|
|
568
|
+
sizeMode: "image_size_enum",
|
|
569
|
+
supportsAspect: true,
|
|
570
|
+
supportsEdit: true,
|
|
571
|
+
supportsNumImages: false,
|
|
572
|
+
supportsOutputFormat: true,
|
|
573
|
+
supportsResolution: false,
|
|
574
|
+
supportsSafetyChecker: true,
|
|
575
|
+
supportsSafetyTolerance: true,
|
|
576
|
+
supportsSeed: true,
|
|
577
|
+
supportsSyncMode: true,
|
|
578
|
+
type: "generation"
|
|
579
|
+
},
|
|
580
|
+
"flux2-flex": {
|
|
581
|
+
benchmark: {
|
|
582
|
+
artificialAnalysis: {
|
|
583
|
+
editing: {
|
|
584
|
+
elo: 1007,
|
|
585
|
+
rank: 42
|
|
586
|
+
},
|
|
587
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
588
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
589
|
+
textToImage: {
|
|
590
|
+
elo: 1027,
|
|
591
|
+
rank: 22
|
|
592
|
+
}
|
|
593
|
+
},
|
|
594
|
+
speed: {
|
|
595
|
+
medianSeconds: 15.3,
|
|
596
|
+
p95Seconds: 22.2,
|
|
597
|
+
source: "artificial-analysis-models"
|
|
598
|
+
},
|
|
599
|
+
tiers: {
|
|
600
|
+
price: "standard",
|
|
601
|
+
quality: "best",
|
|
602
|
+
speed: "balanced"
|
|
603
|
+
},
|
|
604
|
+
useCase: "FLUX quality with guidance and step controls"
|
|
605
|
+
},
|
|
606
|
+
customImageSize: {
|
|
607
|
+
maxEdge: 2560,
|
|
608
|
+
maxPixels: 4194304,
|
|
609
|
+
minEdge: 256,
|
|
610
|
+
multipleOf: 16
|
|
611
|
+
},
|
|
612
|
+
editEndpoint: "fal-ai/flux-2-flex/edit",
|
|
613
|
+
endpoint: "fal-ai/flux-2-flex",
|
|
614
|
+
falPricing: {
|
|
615
|
+
checkedAt: FAL_PRICING_CHECKED_AT,
|
|
616
|
+
currency: "USD",
|
|
617
|
+
endpointId: "fal-ai/flux-2-flex",
|
|
618
|
+
estimatedCostPerImageUsd: .05,
|
|
619
|
+
source: "fal-pricing-api",
|
|
620
|
+
unit: "processed megapixels",
|
|
621
|
+
unitPrice: .05
|
|
622
|
+
},
|
|
623
|
+
maxReferenceImages: 10,
|
|
624
|
+
name: "FLUX.2 Flex",
|
|
625
|
+
pricePerImageUsd: .05,
|
|
626
|
+
pricing: "$0.05/MP",
|
|
627
|
+
sizeMode: "image_size_enum",
|
|
628
|
+
supportedOutputFormats: ["jpeg", "png"],
|
|
629
|
+
supportsAspect: true,
|
|
630
|
+
supportsEdit: true,
|
|
631
|
+
supportsGuidanceScale: true,
|
|
632
|
+
supportsInferenceSteps: true,
|
|
633
|
+
supportsNumImages: false,
|
|
634
|
+
supportsOutputFormat: true,
|
|
635
|
+
supportsResolution: false,
|
|
636
|
+
supportsSafetyChecker: true,
|
|
637
|
+
supportsSafetyTolerance: true,
|
|
638
|
+
supportsSeed: true,
|
|
639
|
+
supportsSyncMode: true,
|
|
640
|
+
type: "generation"
|
|
641
|
+
},
|
|
642
|
+
"flux2-turbo": {
|
|
643
|
+
customImageSize: {
|
|
644
|
+
maxEdge: 2048,
|
|
645
|
+
minEdge: 512
|
|
646
|
+
},
|
|
647
|
+
endpoint: "fal-ai/flux-2/turbo",
|
|
648
|
+
falPricing: {
|
|
649
|
+
checkedAt: FAL_PRICING_CHECKED_JUL_2026,
|
|
650
|
+
currency: "USD",
|
|
651
|
+
endpointId: "fal-ai/flux-2/turbo",
|
|
652
|
+
estimatedCostPerImageUsd: .008,
|
|
653
|
+
source: "fal-pricing-api",
|
|
654
|
+
unit: "megapixels",
|
|
655
|
+
unitPrice: .008
|
|
656
|
+
},
|
|
657
|
+
name: "FLUX.2 Turbo",
|
|
658
|
+
pricePerImageUsd: .008,
|
|
659
|
+
pricing: "$0.008/MP",
|
|
660
|
+
sizeMode: "image_size_enum",
|
|
661
|
+
supportsAspect: true,
|
|
662
|
+
supportsEdit: false,
|
|
663
|
+
supportsGuidanceScale: true,
|
|
664
|
+
supportsNumImages: true,
|
|
665
|
+
supportsOutputFormat: true,
|
|
666
|
+
supportsResolution: false,
|
|
667
|
+
supportsSafetyChecker: true,
|
|
668
|
+
supportsSeed: true,
|
|
669
|
+
supportsSyncMode: true,
|
|
670
|
+
type: "generation"
|
|
671
|
+
},
|
|
672
|
+
ideogram4: {
|
|
673
|
+
benchmark: { artificialAnalysis: {
|
|
674
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
675
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
676
|
+
textToImage: {
|
|
677
|
+
elo: 1004,
|
|
678
|
+
rank: 40
|
|
679
|
+
}
|
|
680
|
+
} },
|
|
681
|
+
customImageSize: {
|
|
682
|
+
maxEdge: 3840,
|
|
683
|
+
minEdge: 512,
|
|
684
|
+
multipleOf: 16
|
|
685
|
+
},
|
|
686
|
+
name: "Ideogram V4",
|
|
687
|
+
endpoint: "ideogram/v4",
|
|
688
|
+
type: "generation",
|
|
689
|
+
pricing: "$0.03",
|
|
690
|
+
pricePerImageUsd: .03,
|
|
691
|
+
falPricing: {
|
|
692
|
+
checkedAt: FAL_PRICING_CHECKED_JUL_2026,
|
|
693
|
+
currency: "USD",
|
|
694
|
+
endpointId: "ideogram/v4",
|
|
695
|
+
estimatedCostPerImageUsd: .03,
|
|
696
|
+
source: "fal-pricing-api",
|
|
697
|
+
unit: "megapixels",
|
|
698
|
+
unitPrice: .03
|
|
699
|
+
},
|
|
700
|
+
sizeMode: "image_size_enum",
|
|
701
|
+
supportsAspect: true,
|
|
702
|
+
supportsResolution: false,
|
|
703
|
+
supportsEdit: false,
|
|
704
|
+
supportsNumImages: true,
|
|
705
|
+
supportsRenderingSpeed: true,
|
|
706
|
+
supportsSeed: true,
|
|
707
|
+
supportsOutputFormat: true,
|
|
708
|
+
supportedOutputFormats: ["jpeg", "png"],
|
|
709
|
+
supportsSafetyChecker: true,
|
|
710
|
+
supportsSyncMode: true
|
|
711
|
+
},
|
|
712
|
+
"grok-image": {
|
|
713
|
+
benchmark: {
|
|
714
|
+
artificialAnalysis: {
|
|
715
|
+
editing: {
|
|
716
|
+
elo: 1073,
|
|
717
|
+
rank: 19
|
|
718
|
+
},
|
|
719
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
720
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
721
|
+
textToImage: {
|
|
722
|
+
elo: 1019,
|
|
723
|
+
rank: 30
|
|
724
|
+
}
|
|
725
|
+
},
|
|
726
|
+
speed: {
|
|
727
|
+
medianSeconds: 5.1,
|
|
728
|
+
p95Seconds: 6.5,
|
|
729
|
+
source: "artificial-analysis-models"
|
|
730
|
+
},
|
|
731
|
+
tiers: {
|
|
732
|
+
price: "budget",
|
|
733
|
+
quality: "best",
|
|
734
|
+
speed: "fast"
|
|
735
|
+
},
|
|
736
|
+
useCase: "Very fast, cheap generation and edits"
|
|
737
|
+
},
|
|
738
|
+
editEndpoint: "xai/grok-imagine-image/edit",
|
|
739
|
+
endpoint: "xai/grok-imagine-image",
|
|
740
|
+
falPricing: {
|
|
741
|
+
checkedAt: FAL_PRICING_CHECKED_AT,
|
|
742
|
+
currency: "USD",
|
|
743
|
+
endpointId: "xai/grok-imagine-image",
|
|
744
|
+
estimatedCostPerImageUsd: .02,
|
|
745
|
+
source: "fal-pricing-api",
|
|
746
|
+
unit: "images",
|
|
747
|
+
unitPrice: .02
|
|
748
|
+
},
|
|
749
|
+
maxReferenceImages: 3,
|
|
750
|
+
name: "Grok Imagine Image",
|
|
751
|
+
pricePerImageUsd: .02,
|
|
752
|
+
pricing: "$0.02",
|
|
753
|
+
sizeMode: "aspect_ratio",
|
|
754
|
+
supportedAspects: [
|
|
755
|
+
"16:9",
|
|
756
|
+
"4:3",
|
|
757
|
+
"3:2",
|
|
758
|
+
"1:1",
|
|
759
|
+
"2:3",
|
|
760
|
+
"3:4",
|
|
761
|
+
"9:16"
|
|
762
|
+
],
|
|
763
|
+
supportedResolutions: ["1K", "2K"],
|
|
764
|
+
supportsAspect: true,
|
|
765
|
+
supportsEdit: true,
|
|
766
|
+
supportsNumImages: true,
|
|
767
|
+
supportsOutputFormat: true,
|
|
768
|
+
supportsResolution: true,
|
|
769
|
+
supportsSyncMode: true,
|
|
770
|
+
type: "generation"
|
|
771
|
+
},
|
|
772
|
+
qwen3: {
|
|
773
|
+
benchmark: {
|
|
774
|
+
artificialAnalysis: {
|
|
775
|
+
editing: {
|
|
776
|
+
elo: 1056,
|
|
777
|
+
rank: 25
|
|
778
|
+
},
|
|
779
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
780
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
781
|
+
textToImage: {
|
|
782
|
+
elo: 1075,
|
|
783
|
+
rank: 16
|
|
784
|
+
}
|
|
785
|
+
},
|
|
786
|
+
tiers: {
|
|
787
|
+
price: "budget",
|
|
788
|
+
quality: "better",
|
|
789
|
+
speed: "unknown"
|
|
790
|
+
},
|
|
791
|
+
useCase: "Strong generation with negative-prompt and seed controls"
|
|
792
|
+
},
|
|
793
|
+
customImageSize: {
|
|
794
|
+
maxPixels: 4194304,
|
|
795
|
+
minPixels: 262144
|
|
796
|
+
},
|
|
797
|
+
editEndpoint: "alibaba/qwen-image-3/edit",
|
|
798
|
+
endpoint: "alibaba/qwen-image-3/text-to-image",
|
|
799
|
+
falPricing: {
|
|
800
|
+
checkedAt: FAL_PRICING_CHECKED_SEP_2026,
|
|
801
|
+
currency: "USD",
|
|
802
|
+
endpointId: "alibaba/qwen-image-3/text-to-image",
|
|
803
|
+
estimatedCostPerImageUsd: .04,
|
|
804
|
+
source: "fal-pricing-api",
|
|
805
|
+
unit: "images",
|
|
806
|
+
unitPrice: .04
|
|
807
|
+
},
|
|
808
|
+
maxReferenceImages: 3,
|
|
809
|
+
name: "Qwen Image 3",
|
|
810
|
+
pricePerImageUsd: .04,
|
|
811
|
+
pricing: "$0.04 (1K) / $0.075 (2K)",
|
|
812
|
+
sizeMode: "image_size_enum",
|
|
813
|
+
supportsAspect: true,
|
|
814
|
+
supportsEdit: true,
|
|
815
|
+
supportsNegativePrompt: true,
|
|
816
|
+
supportsNumImages: true,
|
|
817
|
+
supportsOutputFormat: true,
|
|
818
|
+
supportsResolution: false,
|
|
819
|
+
supportsSafetyChecker: true,
|
|
820
|
+
supportsSeed: true,
|
|
821
|
+
type: "generation"
|
|
822
|
+
},
|
|
823
|
+
"mai-image-2.5-pro": {
|
|
824
|
+
benchmark: {
|
|
825
|
+
artificialAnalysis: {
|
|
826
|
+
editing: {
|
|
827
|
+
elo: 1110,
|
|
828
|
+
rank: 10
|
|
829
|
+
},
|
|
830
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
831
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
832
|
+
textToImage: {
|
|
833
|
+
elo: 1100,
|
|
834
|
+
rank: 12
|
|
835
|
+
}
|
|
836
|
+
},
|
|
837
|
+
useCase: "Strong single-reference editor; MAI 2.5 ranks higher on the current editing board"
|
|
838
|
+
},
|
|
839
|
+
editEndpoint: "microsoft/mai-image-2.5-pro/edit",
|
|
840
|
+
editImagesField: "image_url",
|
|
841
|
+
endpoint: "microsoft/mai-image-2.5-pro",
|
|
842
|
+
falPricing: {
|
|
843
|
+
checkedAt: FAL_PRICING_CHECKED_SEP_2026,
|
|
844
|
+
currency: "USD",
|
|
845
|
+
endpointId: "microsoft/mai-image-2.5-pro",
|
|
846
|
+
estimatedCostPerImageUsd: .17,
|
|
847
|
+
source: "fal-pricing-api",
|
|
848
|
+
unit: "images",
|
|
849
|
+
unitPrice: .17
|
|
850
|
+
},
|
|
851
|
+
maxReferenceImages: 1,
|
|
852
|
+
name: "MAI Image 2.5 Pro",
|
|
853
|
+
pricePerImageUsd: .17,
|
|
854
|
+
pricing: "~$0.17 (edit ~$0.18-$0.27)",
|
|
855
|
+
sizeMode: "aspect_ratio",
|
|
856
|
+
supportedAspects: [
|
|
857
|
+
"auto",
|
|
858
|
+
"1:1",
|
|
859
|
+
"4:3",
|
|
860
|
+
"3:4",
|
|
861
|
+
"16:9",
|
|
862
|
+
"9:16",
|
|
863
|
+
"3:2",
|
|
864
|
+
"2:3"
|
|
865
|
+
],
|
|
866
|
+
supportsAspect: true,
|
|
867
|
+
supportsEdit: true,
|
|
868
|
+
supportsNumImages: true,
|
|
869
|
+
supportsOutputFormat: true,
|
|
870
|
+
supportsResolution: false,
|
|
871
|
+
supportsSyncMode: true,
|
|
872
|
+
type: "generation"
|
|
873
|
+
},
|
|
874
|
+
"banana2-lite": {
|
|
875
|
+
benchmark: { artificialAnalysis: {
|
|
876
|
+
editing: {
|
|
877
|
+
elo: 1046,
|
|
878
|
+
rank: 26
|
|
879
|
+
},
|
|
880
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
881
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
882
|
+
textToImage: {
|
|
883
|
+
elo: 1095,
|
|
884
|
+
rank: 13
|
|
885
|
+
}
|
|
886
|
+
} },
|
|
887
|
+
editEndpoint: "google/nano-banana-2-lite/edit",
|
|
888
|
+
maxReferenceImages: 14,
|
|
889
|
+
endpoint: "google/nano-banana-2-lite",
|
|
890
|
+
name: "Nano Banana 2 Lite",
|
|
891
|
+
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)",
|
|
892
|
+
pricePerImageUsd: null,
|
|
893
|
+
sizeMode: "aspect_ratio",
|
|
894
|
+
supportsAspect: true,
|
|
895
|
+
supportsEdit: true,
|
|
896
|
+
supportsLimitGenerations: true,
|
|
897
|
+
supportsNumImages: true,
|
|
898
|
+
supportsOutputFormat: true,
|
|
899
|
+
supportsResolution: false,
|
|
900
|
+
supportsSafetyTolerance: true,
|
|
901
|
+
supportsSeed: true,
|
|
902
|
+
supportsSyncMode: true,
|
|
903
|
+
supportsThinkingLevel: true,
|
|
904
|
+
type: "generation"
|
|
905
|
+
},
|
|
906
|
+
"ideogram3-transparent": {
|
|
907
|
+
endpoint: "fal-ai/ideogram/v3/generate-transparent",
|
|
908
|
+
falPricing: {
|
|
909
|
+
checkedAt: FAL_PRICING_CHECKED_SEP_2026,
|
|
910
|
+
currency: "USD",
|
|
911
|
+
endpointId: "fal-ai/ideogram/v3/generate-transparent",
|
|
912
|
+
estimatedCostPerImageUsd: .06,
|
|
913
|
+
source: "fal-pricing-api",
|
|
914
|
+
unit: "images",
|
|
915
|
+
unitPrice: .06
|
|
916
|
+
},
|
|
917
|
+
name: "Ideogram V3 Transparent",
|
|
918
|
+
pricePerImageUsd: .06,
|
|
919
|
+
pricing: "$0.03 TURBO / $0.06 BALANCED / $0.09 QUALITY",
|
|
920
|
+
sizeMode: "aspect_ratio",
|
|
921
|
+
supportedAspects: [
|
|
922
|
+
"16:9",
|
|
923
|
+
"9:16",
|
|
924
|
+
"3:2",
|
|
925
|
+
"2:3",
|
|
926
|
+
"4:3",
|
|
927
|
+
"3:4",
|
|
928
|
+
"5:4",
|
|
929
|
+
"4:5",
|
|
930
|
+
"1:1"
|
|
931
|
+
],
|
|
932
|
+
supportsAspect: true,
|
|
933
|
+
supportsEdit: false,
|
|
934
|
+
supportsExpandPrompt: true,
|
|
935
|
+
supportsNegativePrompt: true,
|
|
936
|
+
supportsNumImages: true,
|
|
937
|
+
supportsRenderingSpeed: true,
|
|
938
|
+
supportsResolution: false,
|
|
939
|
+
supportsSeed: true,
|
|
940
|
+
supportsSyncMode: true,
|
|
941
|
+
transparentOutput: true,
|
|
942
|
+
type: "generation"
|
|
943
|
+
},
|
|
944
|
+
recraft41: {
|
|
945
|
+
customImageSize: {},
|
|
946
|
+
endpoint: "fal-ai/recraft/v4.1/text-to-image",
|
|
947
|
+
falPricing: {
|
|
948
|
+
checkedAt: FAL_PRICING_CHECKED_SEP_2026,
|
|
949
|
+
currency: "USD",
|
|
950
|
+
endpointId: "fal-ai/recraft/v4.1/text-to-image",
|
|
951
|
+
estimatedCostPerImageUsd: .035,
|
|
952
|
+
source: "fal-pricing-api",
|
|
953
|
+
unit: "images",
|
|
954
|
+
unitPrice: .035
|
|
955
|
+
},
|
|
956
|
+
name: "Recraft V4.1",
|
|
957
|
+
pricePerImageUsd: .035,
|
|
958
|
+
pricing: "$0.035",
|
|
959
|
+
sizeMode: "image_size_enum",
|
|
960
|
+
supportsAspect: true,
|
|
961
|
+
supportsEdit: false,
|
|
962
|
+
supportsNumImages: false,
|
|
963
|
+
supportsResolution: false,
|
|
964
|
+
supportsSafetyChecker: true,
|
|
965
|
+
type: "generation"
|
|
966
|
+
},
|
|
967
|
+
"grok-image-2": {
|
|
968
|
+
benchmark: {
|
|
969
|
+
artificialAnalysis: {
|
|
970
|
+
editing: {
|
|
971
|
+
elo: 1110,
|
|
972
|
+
rank: 8
|
|
973
|
+
},
|
|
974
|
+
snapshotDate: AA_IMAGE_LEADERBOARD_SNAPSHOT,
|
|
975
|
+
sourceUrls: AA_IMAGE_SOURCES,
|
|
976
|
+
textToImage: {
|
|
977
|
+
elo: 1156,
|
|
978
|
+
rank: 4
|
|
979
|
+
}
|
|
980
|
+
},
|
|
981
|
+
useCase: "Strong generation and editing with predictable per-image billing"
|
|
982
|
+
},
|
|
983
|
+
editEndpoint: "xai/grok-imagine-image/v2.0/edit",
|
|
984
|
+
endpoint: "xai/grok-imagine-image/v2.0/text-to-image",
|
|
985
|
+
falPricing: {
|
|
986
|
+
checkedAt: FAL_PRICING_CHECKED_SEP_2026,
|
|
987
|
+
currency: "USD",
|
|
988
|
+
endpointId: "xai/grok-imagine-image/v2.0/text-to-image",
|
|
989
|
+
estimatedCostPerImageUsd: .06,
|
|
990
|
+
source: "fal-pricing-api",
|
|
991
|
+
unit: "images",
|
|
992
|
+
unitPrice: .06
|
|
993
|
+
},
|
|
994
|
+
maxReferenceImages: 3,
|
|
995
|
+
name: "Grok Imagine Image 2.0",
|
|
996
|
+
pricePerImageUsd: .06,
|
|
997
|
+
pricing: "$0.06 (1K) / $0.08 (2K) at medium quality",
|
|
998
|
+
sizeMode: "aspect_ratio",
|
|
999
|
+
supportedAspects: [
|
|
1000
|
+
"16:9",
|
|
1001
|
+
"4:3",
|
|
1002
|
+
"3:2",
|
|
1003
|
+
"1:1",
|
|
1004
|
+
"2:3",
|
|
1005
|
+
"3:4",
|
|
1006
|
+
"9:16"
|
|
1007
|
+
],
|
|
1008
|
+
supportedResolutions: ["1K", "2K"],
|
|
1009
|
+
supportsAspect: true,
|
|
1010
|
+
supportsEdit: true,
|
|
1011
|
+
supportsNumImages: true,
|
|
1012
|
+
supportsOutputFormat: true,
|
|
1013
|
+
supportsResolution: true,
|
|
1014
|
+
supportsSyncMode: true,
|
|
1015
|
+
type: "generation"
|
|
1016
|
+
},
|
|
1017
|
+
"muse-image": {
|
|
1018
|
+
benchmark: { useCase: "Low-cost generation and multi-reference editing; Arena #8 generation / #10 editing, 2026-10-29" },
|
|
1019
|
+
editEndpoint: "meta/muse-image/edit",
|
|
1020
|
+
endpoint: "meta/muse-image/text-to-image",
|
|
1021
|
+
falPricing: {
|
|
1022
|
+
checkedAt: FAL_PRICING_CHECKED_OCT_2026,
|
|
1023
|
+
currency: "USD",
|
|
1024
|
+
endpointId: "meta/muse-image/text-to-image",
|
|
1025
|
+
estimatedCostPerImageUsd: .01,
|
|
1026
|
+
source: "fal-pricing-api",
|
|
1027
|
+
unit: "images",
|
|
1028
|
+
unitPrice: .01
|
|
1029
|
+
},
|
|
1030
|
+
maxReferenceImages: 10,
|
|
1031
|
+
name: "Meta Muse Image",
|
|
1032
|
+
pricePerImageUsd: .01,
|
|
1033
|
+
pricing: "$0.01",
|
|
1034
|
+
sizeMode: "aspect_ratio",
|
|
1035
|
+
supportedAspects: [
|
|
1036
|
+
"1:1",
|
|
1037
|
+
"4:3",
|
|
1038
|
+
"3:4",
|
|
1039
|
+
"16:9",
|
|
1040
|
+
"9:16",
|
|
1041
|
+
"3:2",
|
|
1042
|
+
"2:3",
|
|
1043
|
+
"4:5",
|
|
1044
|
+
"5:4",
|
|
1045
|
+
"21:9",
|
|
1046
|
+
"4:1",
|
|
1047
|
+
"1:4",
|
|
1048
|
+
"8:1",
|
|
1049
|
+
"1:8"
|
|
1050
|
+
],
|
|
1051
|
+
supportsAspect: true,
|
|
1052
|
+
supportsEdit: true,
|
|
1053
|
+
supportsNumImages: true,
|
|
1054
|
+
supportsOutputFormat: true,
|
|
1055
|
+
supportsResolution: false,
|
|
1056
|
+
supportsSyncMode: true,
|
|
1057
|
+
type: "generation"
|
|
1058
|
+
},
|
|
1059
|
+
krea3: {
|
|
1060
|
+
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" },
|
|
1061
|
+
customImageSize: {
|
|
1062
|
+
maxEdge: 3200,
|
|
1063
|
+
maxPixels: 4220160,
|
|
1064
|
+
minEdge: 256,
|
|
1065
|
+
multipleOf: 16
|
|
1066
|
+
},
|
|
1067
|
+
editEndpoint: "krea/v3/edit",
|
|
1068
|
+
endpoint: "krea/v3/text-to-image",
|
|
1069
|
+
falPricing: {
|
|
1070
|
+
checkedAt: FAL_PRICING_CHECKED_OCT_2026,
|
|
1071
|
+
currency: "USD",
|
|
1072
|
+
endpointId: "krea/v3/text-to-image",
|
|
1073
|
+
estimatedCostPerImageUsd: .025,
|
|
1074
|
+
source: "fal-pricing-api",
|
|
1075
|
+
unit: "megapixels",
|
|
1076
|
+
unitPrice: .025
|
|
1077
|
+
},
|
|
1078
|
+
maxReferenceImages: 8,
|
|
1079
|
+
name: "Krea 3",
|
|
1080
|
+
pricePerImageUsd: .025,
|
|
1081
|
+
pricing: "$0.025/MP (edits also bill each reference)",
|
|
1082
|
+
sizeMode: "image_size_enum",
|
|
1083
|
+
supportedOutputFormats: ["png", "jpeg"],
|
|
1084
|
+
supportsAspect: true,
|
|
1085
|
+
supportsEdit: true,
|
|
1086
|
+
supportsNegativePrompt: true,
|
|
1087
|
+
supportsNumImages: false,
|
|
1088
|
+
supportsOutputFormat: true,
|
|
1089
|
+
supportsResolution: false,
|
|
1090
|
+
supportsSafetyChecker: true,
|
|
1091
|
+
supportsSeed: true,
|
|
1092
|
+
supportsSyncMode: true,
|
|
1093
|
+
type: "generation"
|
|
1094
|
+
},
|
|
1095
|
+
"grok-image-quality": {
|
|
1096
|
+
benchmark: { useCase: "Detailed generation and editing with stronger text rendering; Arena #11 editing, 2026-10-29" },
|
|
1097
|
+
editEndpoint: "xai/grok-imagine-image/quality/edit",
|
|
1098
|
+
endpoint: "xai/grok-imagine-image/quality/text-to-image",
|
|
1099
|
+
falPricing: {
|
|
1100
|
+
checkedAt: FAL_PRICING_CHECKED_OCT_2026,
|
|
1101
|
+
currency: "USD",
|
|
1102
|
+
endpointId: "xai/grok-imagine-image/quality/text-to-image",
|
|
1103
|
+
estimatedCostPerImageUsd: .05,
|
|
1104
|
+
source: "fal-pricing-api",
|
|
1105
|
+
unit: "images",
|
|
1106
|
+
unitPrice: .05
|
|
1107
|
+
},
|
|
1108
|
+
maxReferenceImages: 3,
|
|
1109
|
+
name: "Grok Imagine Image Quality",
|
|
1110
|
+
pricePerImageUsd: .05,
|
|
1111
|
+
pricing: "$0.05 (1K) / $0.07 (2K)",
|
|
1112
|
+
sizeMode: "aspect_ratio",
|
|
1113
|
+
supportedAspects: [
|
|
1114
|
+
"16:9",
|
|
1115
|
+
"4:3",
|
|
1116
|
+
"3:2",
|
|
1117
|
+
"1:1",
|
|
1118
|
+
"2:3",
|
|
1119
|
+
"3:4",
|
|
1120
|
+
"9:16"
|
|
1121
|
+
],
|
|
1122
|
+
supportedResolutions: ["1K", "2K"],
|
|
1123
|
+
supportsAspect: true,
|
|
1124
|
+
supportsEdit: true,
|
|
1125
|
+
supportsNumImages: true,
|
|
1126
|
+
supportsOutputFormat: true,
|
|
1127
|
+
supportsResolution: true,
|
|
1128
|
+
supportsSyncMode: true,
|
|
1129
|
+
type: "generation"
|
|
1130
|
+
},
|
|
1131
|
+
kling: {
|
|
1132
|
+
endpoint: "fal-ai/kling-video/v3/pro/image-to-video",
|
|
1133
|
+
name: "Kling v3 Pro",
|
|
1134
|
+
pricing: "$0.11/sec",
|
|
1135
|
+
sizeMode: "none",
|
|
1136
|
+
supportsAspect: false,
|
|
1137
|
+
supportsEdit: false,
|
|
1138
|
+
supportsNumImages: false,
|
|
1139
|
+
supportsResolution: false,
|
|
1140
|
+
type: "video"
|
|
1141
|
+
},
|
|
1142
|
+
"kling-turbo": {
|
|
1143
|
+
endpoint: "fal-ai/kling-video/v3/turbo/pro/image-to-video",
|
|
1144
|
+
name: "Kling v3 Turbo Pro",
|
|
1145
|
+
pricing: "$0.14/sec",
|
|
1146
|
+
sizeMode: "none",
|
|
1147
|
+
supportsAspect: false,
|
|
1148
|
+
supportsEdit: false,
|
|
1149
|
+
supportsNumImages: false,
|
|
1150
|
+
supportsResolution: false,
|
|
1151
|
+
type: "video"
|
|
1152
|
+
},
|
|
1153
|
+
clarity: {
|
|
1154
|
+
endpoint: "fal-ai/clarity-upscaler",
|
|
1155
|
+
name: "Clarity Upscaler",
|
|
1156
|
+
pricing: "$0.03/MP",
|
|
1157
|
+
supportsAspect: false,
|
|
1158
|
+
supportsEdit: false,
|
|
1159
|
+
supportsNumImages: false,
|
|
1160
|
+
supportsResolution: false,
|
|
1161
|
+
type: "utility"
|
|
1162
|
+
},
|
|
1163
|
+
crystal: {
|
|
1164
|
+
endpoint: "clarityai/crystal-upscaler",
|
|
1165
|
+
name: "Crystal Upscaler",
|
|
1166
|
+
pricing: "$0.02",
|
|
1167
|
+
supportsAspect: false,
|
|
1168
|
+
supportsEdit: false,
|
|
1169
|
+
supportsNumImages: false,
|
|
1170
|
+
supportsResolution: false,
|
|
1171
|
+
type: "utility"
|
|
1172
|
+
}
|
|
1173
|
+
};
|
|
1174
|
+
[
|
|
1175
|
+
"sunburst",
|
|
1176
|
+
"flare",
|
|
1177
|
+
"gpt",
|
|
1178
|
+
"banana21",
|
|
1179
|
+
"banana2",
|
|
1180
|
+
"banana",
|
|
1181
|
+
"mai-image-2.5",
|
|
1182
|
+
"mai-image-2.5-pro",
|
|
1183
|
+
"seedream5",
|
|
1184
|
+
"qwen3",
|
|
1185
|
+
"banana2-lite",
|
|
1186
|
+
"grok-image-2",
|
|
1187
|
+
"grok-image-quality",
|
|
1188
|
+
"grok-image",
|
|
1189
|
+
"muse-image",
|
|
1190
|
+
"krea3",
|
|
1191
|
+
"flux2-flex",
|
|
1192
|
+
"flux2-pro",
|
|
1193
|
+
"flux2-turbo",
|
|
1194
|
+
"seedream5-lite",
|
|
1195
|
+
"ideogram4",
|
|
1196
|
+
"ideogram3-transparent",
|
|
1197
|
+
"recraft41"
|
|
1198
|
+
].filter((id) => MODELS[id]?.supportsEdit === true);
|
|
1199
|
+
//#endregion
|
|
1200
|
+
//#region src/cost.ts
|
|
1201
|
+
/**
|
|
1202
|
+
* Estimate cost based on model and settings. `editImages` is the number of
|
|
1203
|
+
* input images on an edit, for Models whose edits cost more than generation.
|
|
1204
|
+
*/
|
|
1205
|
+
function estimateCost(model, resolution, numImages = 1, editImages = 0) {
|
|
1206
|
+
const configuredPrice = MODELS[model]?.pricePerImageUsd;
|
|
1207
|
+
if (configuredPrice === null) return null;
|
|
1208
|
+
if (model === "mai-image-2.5-pro" && editImages > 0) return .27 * numImages;
|
|
1209
|
+
if (model === "grok-image-2" && editImages > 0) return (resolution === "2K" || resolution === "4K" ? .08 : .06) * numImages + .01 * editImages;
|
|
1210
|
+
if (model === "grok-image-quality") return (resolution === "2K" || resolution === "4K" ? .07 : .05) * numImages + .01 * editImages;
|
|
1211
|
+
if (configuredPrice !== void 0) {
|
|
1212
|
+
if (model === "banana" && resolution === "4K") return configuredPrice * 2 * numImages;
|
|
1213
|
+
if (model === "seedream5" && (resolution === "2K" || resolution === "4K")) return configuredPrice * 2 * numImages;
|
|
1214
|
+
if (model === "grok-image-2" && (resolution === "2K" || resolution === "4K")) return .08 * numImages;
|
|
1215
|
+
if (model === "banana2") return configuredPrice * (resolution === "4K" ? 2 : resolution === "2K" ? 1.5 : resolution === "0.5K" ? .75 : 1) * numImages;
|
|
1216
|
+
return configuredPrice * numImages;
|
|
1217
|
+
}
|
|
1218
|
+
switch (model) {
|
|
1219
|
+
case "gpt": return .133 * numImages;
|
|
1220
|
+
case "clarity": return .03 * numImages;
|
|
1221
|
+
case "crystal": return .02 * numImages;
|
|
1222
|
+
default: return .1 * numImages;
|
|
1223
|
+
}
|
|
1224
|
+
}
|
|
1225
|
+
//#endregion
|
|
1226
|
+
//#region src/tool-registry/analysis.ts
|
|
1227
|
+
const ANALYSIS_TOOLS = {
|
|
1228
|
+
"got-ocr": {
|
|
1229
|
+
category: "analysis",
|
|
1230
|
+
description: "Transcribe text from one or more images, optionally as formatted multi-page output.",
|
|
1231
|
+
endpoint: "fal-ai/got-ocr/v2",
|
|
1232
|
+
inputField: "input_image_urls",
|
|
1233
|
+
inputKind: "images",
|
|
1234
|
+
name: "GOT-OCR 2.0",
|
|
1235
|
+
outputKeys: ["outputs"],
|
|
1236
|
+
price: {
|
|
1237
|
+
kind: "call",
|
|
1238
|
+
per: ["input_image_urls"],
|
|
1239
|
+
usd: .05
|
|
1240
|
+
},
|
|
1241
|
+
pricing: "$0.05/image",
|
|
1242
|
+
queued: true,
|
|
1243
|
+
sourceUrl: "https://fal.ai/models/fal-ai/got-ocr/v2",
|
|
1244
|
+
task: "optical character recognition"
|
|
1245
|
+
},
|
|
1246
|
+
"moondream-caption": {
|
|
1247
|
+
category: "analysis",
|
|
1248
|
+
description: "Write a short, normal, or long caption for an image.",
|
|
1249
|
+
endpoint: "fal-ai/moondream3-preview/caption",
|
|
1250
|
+
inputField: "image_url",
|
|
1251
|
+
inputKind: "image",
|
|
1252
|
+
name: "Moondream 3 Caption",
|
|
1253
|
+
outputKeys: ["output"],
|
|
1254
|
+
price: {
|
|
1255
|
+
inputPerMillion: .4,
|
|
1256
|
+
inputTokens: 737,
|
|
1257
|
+
kind: "token",
|
|
1258
|
+
outputPerMillion: 3.5,
|
|
1259
|
+
outputTokens: 200
|
|
1260
|
+
},
|
|
1261
|
+
pricing: "$0.40/M input tokens, $3.50/M output tokens",
|
|
1262
|
+
sourceUrl: "https://fal.ai/models/fal-ai/moondream3-preview/caption",
|
|
1263
|
+
task: "image captioning"
|
|
1264
|
+
},
|
|
1265
|
+
"moondream-detect": {
|
|
1266
|
+
category: "analysis",
|
|
1267
|
+
description: "Detect prompted objects and return their bounding boxes, with an optional preview.",
|
|
1268
|
+
endpoint: "fal-ai/moondream3-preview/detect",
|
|
1269
|
+
inputField: "image_url",
|
|
1270
|
+
inputKind: "image",
|
|
1271
|
+
name: "Moondream 3 Detect",
|
|
1272
|
+
outputKeys: ["objects", "image"],
|
|
1273
|
+
price: {
|
|
1274
|
+
inputPerMillion: .4,
|
|
1275
|
+
inputTokens: 737,
|
|
1276
|
+
kind: "token",
|
|
1277
|
+
outputPerMillion: 3.5,
|
|
1278
|
+
outputTokens: 100
|
|
1279
|
+
},
|
|
1280
|
+
pricing: "$0.40/M input tokens, $3.50/M output tokens",
|
|
1281
|
+
sourceUrl: "https://fal.ai/models/fal-ai/moondream3-preview/detect",
|
|
1282
|
+
task: "object detection"
|
|
1283
|
+
},
|
|
1284
|
+
"moondream-point": {
|
|
1285
|
+
category: "analysis",
|
|
1286
|
+
description: "Return point coordinates for every instance of a prompted subject.",
|
|
1287
|
+
endpoint: "fal-ai/moondream3-preview/point",
|
|
1288
|
+
inputField: "image_url",
|
|
1289
|
+
inputKind: "image",
|
|
1290
|
+
name: "Moondream 3 Point",
|
|
1291
|
+
outputKeys: ["points", "image"],
|
|
1292
|
+
price: {
|
|
1293
|
+
inputPerMillion: .4,
|
|
1294
|
+
inputTokens: 737,
|
|
1295
|
+
kind: "token",
|
|
1296
|
+
outputPerMillion: 3.5,
|
|
1297
|
+
outputTokens: 100
|
|
1298
|
+
},
|
|
1299
|
+
pricing: "$0.40/M input tokens, $3.50/M output tokens",
|
|
1300
|
+
sourceUrl: "https://fal.ai/models/fal-ai/moondream3-preview/point",
|
|
1301
|
+
task: "object pointing"
|
|
1302
|
+
},
|
|
1303
|
+
"moondream-query": {
|
|
1304
|
+
category: "analysis",
|
|
1305
|
+
description: "Answer a free-form question about an image, with reasoning.",
|
|
1306
|
+
endpoint: "fal-ai/moondream3-preview/query",
|
|
1307
|
+
inputField: "image_url",
|
|
1308
|
+
inputKind: "image",
|
|
1309
|
+
name: "Moondream 3 Query",
|
|
1310
|
+
outputKeys: ["output", "reasoning"],
|
|
1311
|
+
price: {
|
|
1312
|
+
inputPerMillion: .4,
|
|
1313
|
+
inputTokens: 737,
|
|
1314
|
+
kind: "token",
|
|
1315
|
+
outputPerMillion: 3.5,
|
|
1316
|
+
outputTokens: 500
|
|
1317
|
+
},
|
|
1318
|
+
pricing: "$0.40/M input tokens, $3.50/M output tokens",
|
|
1319
|
+
sourceUrl: "https://fal.ai/models/fal-ai/moondream3-preview/query",
|
|
1320
|
+
task: "visual question answering"
|
|
1321
|
+
},
|
|
1322
|
+
nsfw: {
|
|
1323
|
+
category: "moderation",
|
|
1324
|
+
description: "Predict whether one or more images contain NSFW concepts.",
|
|
1325
|
+
endpoint: "fal-ai/x-ailab/nsfw",
|
|
1326
|
+
inputField: "image_urls",
|
|
1327
|
+
inputKind: "images",
|
|
1328
|
+
name: "NSFW Checker",
|
|
1329
|
+
outputKeys: ["has_nsfw_concepts"],
|
|
1330
|
+
price: {
|
|
1331
|
+
kind: "call",
|
|
1332
|
+
per: ["image_urls"],
|
|
1333
|
+
usd: .001
|
|
1334
|
+
},
|
|
1335
|
+
pricing: "$0.001/image",
|
|
1336
|
+
sourceUrl: "https://fal.ai/models/fal-ai/x-ailab/nsfw",
|
|
1337
|
+
task: "vision moderation"
|
|
1338
|
+
}
|
|
1339
|
+
};
|
|
1340
|
+
//#endregion
|
|
1341
|
+
//#region src/tool-registry/assets.ts
|
|
1342
|
+
const ASSET_TOOLS = {
|
|
1343
|
+
"hunyuan3d-v3": {
|
|
1344
|
+
category: "3d",
|
|
1345
|
+
description: "Reconstruct a textured 3D mesh from a single image, with optional multi-view inputs.",
|
|
1346
|
+
endpoint: "fal-ai/hunyuan3d-v3/image-to-3d",
|
|
1347
|
+
inputField: "input_image_url",
|
|
1348
|
+
inputKind: "image",
|
|
1349
|
+
name: "Hunyuan3D v3 Image to 3D",
|
|
1350
|
+
outputKeys: [
|
|
1351
|
+
"model_glb",
|
|
1352
|
+
"model_urls",
|
|
1353
|
+
"thumbnail"
|
|
1354
|
+
],
|
|
1355
|
+
price: {
|
|
1356
|
+
kind: "call",
|
|
1357
|
+
usd: .375
|
|
1358
|
+
},
|
|
1359
|
+
pricing: "$0.375/generation at the default Normal type; $0.45 low poly, $0.225 geometry only, and $0.15 each for PBR, multi-view, or a custom face count",
|
|
1360
|
+
queued: true,
|
|
1361
|
+
sourceUrl: "https://fal.ai/models/fal-ai/hunyuan3d-v3/image-to-3d",
|
|
1362
|
+
task: "single-image 3D reconstruction"
|
|
1363
|
+
},
|
|
1364
|
+
"ideogram-layerize-text": {
|
|
1365
|
+
category: "layers",
|
|
1366
|
+
description: "Split an image into background image layers plus editable HTML text containers.",
|
|
1367
|
+
endpoint: "fal-ai/ideogram/v3/layerize-text",
|
|
1368
|
+
inputField: "image_url",
|
|
1369
|
+
inputKind: "image",
|
|
1370
|
+
name: "Ideogram v3 Text Layerize",
|
|
1371
|
+
outputKeys: [
|
|
1372
|
+
"image_layers",
|
|
1373
|
+
"image",
|
|
1374
|
+
"text_html",
|
|
1375
|
+
"text_containers"
|
|
1376
|
+
],
|
|
1377
|
+
price: {
|
|
1378
|
+
kind: "call",
|
|
1379
|
+
usd: .09
|
|
1380
|
+
},
|
|
1381
|
+
pricing: "$0.09/image",
|
|
1382
|
+
queued: true,
|
|
1383
|
+
sourceUrl: "https://fal.ai/models/fal-ai/ideogram/v3/layerize-text",
|
|
1384
|
+
task: "text and image layer extraction"
|
|
1385
|
+
},
|
|
1386
|
+
"ideogram-tiling": {
|
|
1387
|
+
category: "material",
|
|
1388
|
+
description: "Generate a seamlessly tiling texture, optionally conditioned on a source image.",
|
|
1389
|
+
endpoint: "ideogram/v4/tiling",
|
|
1390
|
+
inputField: "image_url",
|
|
1391
|
+
inputKind: "image",
|
|
1392
|
+
name: "Ideogram v4 Tiling",
|
|
1393
|
+
outputKeys: ["images"],
|
|
1394
|
+
price: {
|
|
1395
|
+
kind: "megapixel",
|
|
1396
|
+
usd: .06
|
|
1397
|
+
},
|
|
1398
|
+
pricing: "$0.06/megapixel at the default BALANCED speed; $0.03 turbo, $0.10 quality",
|
|
1399
|
+
sourceUrl: "https://fal.ai/models/ideogram/v4/tiling",
|
|
1400
|
+
task: "seamless texture generation"
|
|
1401
|
+
},
|
|
1402
|
+
image2svg: {
|
|
1403
|
+
category: "vector",
|
|
1404
|
+
description: "Trace a raster image into layered SVG paths.",
|
|
1405
|
+
endpoint: "fal-ai/image2svg",
|
|
1406
|
+
inputField: "image_url",
|
|
1407
|
+
inputKind: "image",
|
|
1408
|
+
name: "Image to SVG",
|
|
1409
|
+
outputKeys: ["images"],
|
|
1410
|
+
price: {
|
|
1411
|
+
kind: "call",
|
|
1412
|
+
usd: .005
|
|
1413
|
+
},
|
|
1414
|
+
pricing: "$0.005/image",
|
|
1415
|
+
sourceUrl: "https://fal.ai/models/fal-ai/image2svg",
|
|
1416
|
+
task: "raster to vector tracing"
|
|
1417
|
+
},
|
|
1418
|
+
"meshy-v7": {
|
|
1419
|
+
category: "3d",
|
|
1420
|
+
description: "Make a textured 3D mesh from one image, optionally rigged for animation.",
|
|
1421
|
+
endpoint: "meshy/v7/image-to-3d",
|
|
1422
|
+
inputField: "image_url",
|
|
1423
|
+
inputKind: "image",
|
|
1424
|
+
name: "Meshy v7 Image to 3D",
|
|
1425
|
+
outputKeys: [
|
|
1426
|
+
"model_glb",
|
|
1427
|
+
"model_urls",
|
|
1428
|
+
"thumbnail",
|
|
1429
|
+
"rigged_character_glb",
|
|
1430
|
+
"rigged_character_fbx"
|
|
1431
|
+
],
|
|
1432
|
+
price: {
|
|
1433
|
+
extras: {
|
|
1434
|
+
enable_animation: .12,
|
|
1435
|
+
enable_rigging: .2,
|
|
1436
|
+
ultra_mode: .2
|
|
1437
|
+
},
|
|
1438
|
+
kind: "call",
|
|
1439
|
+
usd: 1.2
|
|
1440
|
+
},
|
|
1441
|
+
pricing: "$1.20/generation at the default textured model; $0.80 untextured, $1.40 ultra, plus $0.20 for rigging and $0.12 for animation",
|
|
1442
|
+
queued: true,
|
|
1443
|
+
sourceUrl: "https://fal.ai/models/meshy/v7/image-to-3d",
|
|
1444
|
+
task: "single-image 3D reconstruction"
|
|
1445
|
+
},
|
|
1446
|
+
patina: {
|
|
1447
|
+
category: "material",
|
|
1448
|
+
description: "Decompose a surface photograph into PBR maps: basecolor, normal, roughness, metalness, height.",
|
|
1449
|
+
endpoint: "fal-ai/patina",
|
|
1450
|
+
inputField: "image_url",
|
|
1451
|
+
inputKind: "image",
|
|
1452
|
+
name: "Patina PBR Maps",
|
|
1453
|
+
outputKeys: ["images"],
|
|
1454
|
+
outputLabels: { images: {
|
|
1455
|
+
fallback: [
|
|
1456
|
+
"basecolor",
|
|
1457
|
+
"normal",
|
|
1458
|
+
"roughness",
|
|
1459
|
+
"metalness",
|
|
1460
|
+
"height"
|
|
1461
|
+
],
|
|
1462
|
+
fromOption: "maps"
|
|
1463
|
+
} },
|
|
1464
|
+
price: {
|
|
1465
|
+
base: .01,
|
|
1466
|
+
kind: "maps",
|
|
1467
|
+
perMapMegapixel: .01,
|
|
1468
|
+
perMegapixel: 0
|
|
1469
|
+
},
|
|
1470
|
+
pricing: "$0.01 base plus $0.01/megapixel per output map, so all 5 maps on a 1MP image cost $0.06; the listed rate is per map",
|
|
1471
|
+
queued: true,
|
|
1472
|
+
sourceUrl: "https://fal.ai/models/fal-ai/patina",
|
|
1473
|
+
task: "PBR material decomposition"
|
|
1474
|
+
},
|
|
1475
|
+
"patina-extract": {
|
|
1476
|
+
category: "material",
|
|
1477
|
+
description: "Extract a tiling PBR material from a prompted region of a photograph.",
|
|
1478
|
+
endpoint: "fal-ai/patina/material/extract",
|
|
1479
|
+
inputField: "image_url",
|
|
1480
|
+
inputKind: "image",
|
|
1481
|
+
name: "Patina Material Extract",
|
|
1482
|
+
outputKeys: ["images"],
|
|
1483
|
+
outputLabels: { images: {
|
|
1484
|
+
fallback: [
|
|
1485
|
+
"basecolor",
|
|
1486
|
+
"normal",
|
|
1487
|
+
"roughness",
|
|
1488
|
+
"metalness",
|
|
1489
|
+
"height"
|
|
1490
|
+
],
|
|
1491
|
+
fromOption: "maps"
|
|
1492
|
+
} },
|
|
1493
|
+
price: {
|
|
1494
|
+
base: .1,
|
|
1495
|
+
kind: "maps",
|
|
1496
|
+
perMapMegapixel: .01,
|
|
1497
|
+
perMegapixel: .02,
|
|
1498
|
+
upscale: {
|
|
1499
|
+
"2": .004,
|
|
1500
|
+
"4": .016
|
|
1501
|
+
}
|
|
1502
|
+
},
|
|
1503
|
+
pricing: "$0.10 plus $0.02/megapixel plus $0.01/megapixel per map, so 1MP with all 5 maps is $0.17; upscaling adds $0.004 (2x) or $0.016 (4x) per pre-upscale megapixel per map",
|
|
1504
|
+
queued: true,
|
|
1505
|
+
sourceUrl: "https://fal.ai/models/fal-ai/patina/material/extract",
|
|
1506
|
+
task: "tiling material extraction"
|
|
1507
|
+
},
|
|
1508
|
+
"qwen-layered": {
|
|
1509
|
+
category: "layers",
|
|
1510
|
+
description: "Split an image into a configurable number of stacked RGBA layers.",
|
|
1511
|
+
endpoint: "fal-ai/qwen-image-layered",
|
|
1512
|
+
inputField: "image_url",
|
|
1513
|
+
inputKind: "image",
|
|
1514
|
+
name: "Qwen Image Layered",
|
|
1515
|
+
outputKeys: ["images"],
|
|
1516
|
+
price: {
|
|
1517
|
+
kind: "call",
|
|
1518
|
+
usd: .05
|
|
1519
|
+
},
|
|
1520
|
+
pricing: "$0.05 per image, one input image a call",
|
|
1521
|
+
queued: true,
|
|
1522
|
+
sourceUrl: "https://fal.ai/models/fal-ai/qwen-image-layered",
|
|
1523
|
+
task: "image layer decomposition"
|
|
1524
|
+
},
|
|
1525
|
+
"recraft-vectorize": {
|
|
1526
|
+
category: "vector",
|
|
1527
|
+
description: "Convert a raster image into a clean SVG.",
|
|
1528
|
+
endpoint: "fal-ai/recraft/vectorize",
|
|
1529
|
+
inputField: "image_url",
|
|
1530
|
+
inputKind: "image",
|
|
1531
|
+
name: "Recraft Vectorize",
|
|
1532
|
+
outputKeys: ["image"],
|
|
1533
|
+
price: {
|
|
1534
|
+
kind: "call",
|
|
1535
|
+
usd: .04
|
|
1536
|
+
},
|
|
1537
|
+
pricing: "$0.04/image, $0.08 with a vector style",
|
|
1538
|
+
sourceUrl: "https://fal.ai/models/fal-ai/recraft/vectorize",
|
|
1539
|
+
task: "raster to vector conversion"
|
|
1540
|
+
},
|
|
1541
|
+
"sam3-3d-align": {
|
|
1542
|
+
category: "3d",
|
|
1543
|
+
description: "Align SAM 3D objects and bodies into a shared scene.",
|
|
1544
|
+
endpoint: "fal-ai/sam-3/3d-align",
|
|
1545
|
+
inputField: "image_url",
|
|
1546
|
+
inputKind: "image",
|
|
1547
|
+
name: "SAM 3D Align",
|
|
1548
|
+
outputKeys: [
|
|
1549
|
+
"scene_glb",
|
|
1550
|
+
"model_glb",
|
|
1551
|
+
"visualization",
|
|
1552
|
+
"body_mesh_ply",
|
|
1553
|
+
"metadata"
|
|
1554
|
+
],
|
|
1555
|
+
price: { kind: "metered" },
|
|
1556
|
+
pricing: "$0.02 per unit; fal does not define a unit, so no estimate is reported",
|
|
1557
|
+
queued: true,
|
|
1558
|
+
sourceUrl: "https://fal.ai/models/fal-ai/sam-3/3d-align",
|
|
1559
|
+
task: "3D scene alignment"
|
|
1560
|
+
},
|
|
1561
|
+
"sam3-3d-body": {
|
|
1562
|
+
category: "3d",
|
|
1563
|
+
defaultOptions: {
|
|
1564
|
+
export_meshes: true,
|
|
1565
|
+
include_3d_keypoints: true,
|
|
1566
|
+
include_mhr_params: true
|
|
1567
|
+
},
|
|
1568
|
+
description: "Reconstruct human body meshes and keypoints from a single image.",
|
|
1569
|
+
endpoint: "fal-ai/sam-3/3d-body",
|
|
1570
|
+
inputField: "image_url",
|
|
1571
|
+
inputKind: "image",
|
|
1572
|
+
name: "SAM 3D Body",
|
|
1573
|
+
outputKeys: [
|
|
1574
|
+
"model_glb",
|
|
1575
|
+
"visualization",
|
|
1576
|
+
"meshes",
|
|
1577
|
+
"metadata"
|
|
1578
|
+
],
|
|
1579
|
+
price: { kind: "metered" },
|
|
1580
|
+
pricing: "$0.02 per unit; fal does not define a unit, so no estimate is reported",
|
|
1581
|
+
queued: true,
|
|
1582
|
+
sourceUrl: "https://fal.ai/models/fal-ai/sam-3/3d-body",
|
|
1583
|
+
task: "single-image 3D body reconstruction"
|
|
1584
|
+
},
|
|
1585
|
+
"sam3-3d-objects": {
|
|
1586
|
+
category: "3d",
|
|
1587
|
+
description: "Reconstruct one or more 3D objects from an image and prompts.",
|
|
1588
|
+
endpoint: "fal-ai/sam-3/3d-objects",
|
|
1589
|
+
inputField: "image_url",
|
|
1590
|
+
inputKind: "image",
|
|
1591
|
+
name: "SAM 3D Objects",
|
|
1592
|
+
outputKeys: [
|
|
1593
|
+
"gaussian_splat",
|
|
1594
|
+
"model_glb",
|
|
1595
|
+
"metadata",
|
|
1596
|
+
"individual_splats",
|
|
1597
|
+
"individual_glbs",
|
|
1598
|
+
"artifacts_zip"
|
|
1599
|
+
],
|
|
1600
|
+
price: { kind: "metered" },
|
|
1601
|
+
pricing: "$0.02 per unit; fal does not define a unit, and this endpoint returns one mesh per detected object, so no estimate is reported",
|
|
1602
|
+
queued: true,
|
|
1603
|
+
sourceUrl: "https://fal.ai/models/fal-ai/sam-3/3d-objects",
|
|
1604
|
+
task: "single-image 3D object reconstruction"
|
|
1605
|
+
},
|
|
1606
|
+
"seedream-layerize": {
|
|
1607
|
+
category: "layers",
|
|
1608
|
+
description: "Split an image into editable Seedream layers plus flattened previews.",
|
|
1609
|
+
endpoint: "bytedance/seedream/v5/pro/layerize",
|
|
1610
|
+
inputField: "image_url",
|
|
1611
|
+
inputKind: "image",
|
|
1612
|
+
name: "Seedream v5 Pro Layerize",
|
|
1613
|
+
outputKeys: ["layers", "images"],
|
|
1614
|
+
outputLabels: { layers: { fromItem: {
|
|
1615
|
+
nameField: "name",
|
|
1616
|
+
orderField: "z_index"
|
|
1617
|
+
} } },
|
|
1618
|
+
price: { kind: "metered" },
|
|
1619
|
+
pricing: "$0.03375 per generated layer below 1536x1536 total area, $0.0675 per layer above; the listed rate is per layer, not per call",
|
|
1620
|
+
queued: true,
|
|
1621
|
+
sourceUrl: "https://fal.ai/models/bytedance/seedream/v5/pro/layerize",
|
|
1622
|
+
task: "image layer decomposition"
|
|
1623
|
+
},
|
|
1624
|
+
"seedvr-seamless": {
|
|
1625
|
+
category: "material",
|
|
1626
|
+
description: "Upscale a tiling texture while keeping its edges seamless. ",
|
|
1627
|
+
endpoint: "fal-ai/seedvr/upscale/image/seamless",
|
|
1628
|
+
inputField: "image_url",
|
|
1629
|
+
inputKind: "image",
|
|
1630
|
+
name: "SeedVR Seamless Upscale",
|
|
1631
|
+
outputKeys: ["image"],
|
|
1632
|
+
price: {
|
|
1633
|
+
kind: "megapixel",
|
|
1634
|
+
usd: .0025
|
|
1635
|
+
},
|
|
1636
|
+
pricing: "$0.0025/megapixel",
|
|
1637
|
+
queued: true,
|
|
1638
|
+
sourceUrl: "https://fal.ai/models/fal-ai/seedvr/upscale/image/seamless",
|
|
1639
|
+
task: "seamless texture upscaling"
|
|
1640
|
+
},
|
|
1641
|
+
"trellis-2": {
|
|
1642
|
+
category: "3d",
|
|
1643
|
+
description: "Reconstruct a textured 3D mesh from a single image, with UV unwrapping.",
|
|
1644
|
+
endpoint: "fal-ai/trellis-2",
|
|
1645
|
+
inputField: "image_url",
|
|
1646
|
+
inputKind: "image",
|
|
1647
|
+
name: "TRELLIS 2",
|
|
1648
|
+
outputKeys: ["model_glb"],
|
|
1649
|
+
price: {
|
|
1650
|
+
kind: "call",
|
|
1651
|
+
usd: .3
|
|
1652
|
+
},
|
|
1653
|
+
pricing: "$0.30 at the default 1024p; $0.25 at 512p, $0.35 at 1536p",
|
|
1654
|
+
queued: true,
|
|
1655
|
+
sourceUrl: "https://fal.ai/models/fal-ai/trellis-2",
|
|
1656
|
+
task: "single-image 3D reconstruction"
|
|
1657
|
+
}
|
|
1658
|
+
};
|
|
1659
|
+
//#endregion
|
|
1660
|
+
//#region src/tool-registry/background.ts
|
|
1661
|
+
const BACKGROUND_TOOLS = {
|
|
1662
|
+
"ben-v2": {
|
|
1663
|
+
category: "background",
|
|
1664
|
+
description: "Fast, high-quality background removal for images.",
|
|
1665
|
+
endpoint: "fal-ai/ben/v2/image",
|
|
1666
|
+
inputField: "image_url",
|
|
1667
|
+
inputKind: "image",
|
|
1668
|
+
name: "BEN v2 Background Removal",
|
|
1669
|
+
outputKeys: ["image"],
|
|
1670
|
+
price: {
|
|
1671
|
+
kind: "megapixel",
|
|
1672
|
+
usd: .025
|
|
1673
|
+
},
|
|
1674
|
+
pricing: "$0.025/megapixel",
|
|
1675
|
+
sourceUrl: "https://fal.ai/models/fal-ai/ben/v2/image",
|
|
1676
|
+
task: "image background removal"
|
|
1677
|
+
},
|
|
1678
|
+
birefnet: {
|
|
1679
|
+
category: "background",
|
|
1680
|
+
defaultOptions: {
|
|
1681
|
+
model: "General Use (Light)",
|
|
1682
|
+
operating_resolution: "1024x1024",
|
|
1683
|
+
output_format: "png",
|
|
1684
|
+
refine_foreground: true
|
|
1685
|
+
},
|
|
1686
|
+
description: "High-resolution dichotomous image segmentation and background removal.",
|
|
1687
|
+
endpoint: "fal-ai/birefnet/v2",
|
|
1688
|
+
inputField: "image_url",
|
|
1689
|
+
inputKind: "image",
|
|
1690
|
+
name: "BirefNet Background Removal",
|
|
1691
|
+
outputKeys: ["image", "mask_image"],
|
|
1692
|
+
price: {
|
|
1693
|
+
kind: "call",
|
|
1694
|
+
usd: 0
|
|
1695
|
+
},
|
|
1696
|
+
pricing: "$0/compute-second listed by fal",
|
|
1697
|
+
sourceUrl: "https://fal.ai/models/fal-ai/birefnet/v2",
|
|
1698
|
+
task: "image background removal"
|
|
1699
|
+
},
|
|
1700
|
+
"bria-rmbg": {
|
|
1701
|
+
category: "background",
|
|
1702
|
+
description: "Commercial-safe background removal for images.",
|
|
1703
|
+
endpoint: "fal-ai/bria/background/remove",
|
|
1704
|
+
inputField: "image_url",
|
|
1705
|
+
inputKind: "image",
|
|
1706
|
+
name: "Bria RMBG 2.0",
|
|
1707
|
+
outputKeys: ["image"],
|
|
1708
|
+
price: {
|
|
1709
|
+
kind: "call",
|
|
1710
|
+
usd: .018
|
|
1711
|
+
},
|
|
1712
|
+
pricing: "$0.018/generation",
|
|
1713
|
+
sourceUrl: "https://fal.ai/models/fal-ai/bria/background/remove",
|
|
1714
|
+
task: "image background removal"
|
|
1715
|
+
},
|
|
1716
|
+
"bria-video-rmbg": {
|
|
1717
|
+
category: "background",
|
|
1718
|
+
defaultOptions: {
|
|
1719
|
+
background_color: "Black",
|
|
1720
|
+
output_container_and_codec: "webm_vp9",
|
|
1721
|
+
preserve_audio: true
|
|
1722
|
+
},
|
|
1723
|
+
description: "Remove video backgrounds with configurable output container.",
|
|
1724
|
+
endpoint: "bria/video/background-removal",
|
|
1725
|
+
inputField: "video_url",
|
|
1726
|
+
inputKind: "video",
|
|
1727
|
+
name: "Bria Video Background Removal",
|
|
1728
|
+
outputKeys: ["video"],
|
|
1729
|
+
price: {
|
|
1730
|
+
kind: "second",
|
|
1731
|
+
usd: .14
|
|
1732
|
+
},
|
|
1733
|
+
pricing: "$0.14/sec",
|
|
1734
|
+
queued: true,
|
|
1735
|
+
sourceUrl: "https://fal.ai/models/bria/video/background-removal",
|
|
1736
|
+
task: "video background removal"
|
|
1737
|
+
},
|
|
1738
|
+
"bria-video-rmbg-v3": {
|
|
1739
|
+
category: "background",
|
|
1740
|
+
defaultOptions: {
|
|
1741
|
+
background_color: "Black",
|
|
1742
|
+
output_container_and_codec: "webm_vp9",
|
|
1743
|
+
preserve_audio: true
|
|
1744
|
+
},
|
|
1745
|
+
description: "Remove video backgrounds with Bria's VRMBG 3.0, with configurable output container.",
|
|
1746
|
+
endpoint: "bria/video/background-removal/v3",
|
|
1747
|
+
inputField: "video_url",
|
|
1748
|
+
inputKind: "video",
|
|
1749
|
+
name: "Bria Video Background Removal 3.0",
|
|
1750
|
+
outputKeys: ["video"],
|
|
1751
|
+
price: {
|
|
1752
|
+
kind: "second",
|
|
1753
|
+
usd: .05
|
|
1754
|
+
},
|
|
1755
|
+
pricing: "$0.05/sec",
|
|
1756
|
+
queued: true,
|
|
1757
|
+
sourceUrl: "https://fal.ai/models/bria/video/background-removal/v3",
|
|
1758
|
+
task: "video background removal"
|
|
1759
|
+
},
|
|
1760
|
+
"control-light": {
|
|
1761
|
+
category: "restoration",
|
|
1762
|
+
description: "Brighten a dark or underexposed photo, recovering detail while keeping its identity, geometry and colour.",
|
|
1763
|
+
endpoint: "fal-ai/control-light",
|
|
1764
|
+
inputField: "image_url",
|
|
1765
|
+
inputKind: "image",
|
|
1766
|
+
name: "Control Light",
|
|
1767
|
+
outputKeys: ["images"],
|
|
1768
|
+
price: {
|
|
1769
|
+
kind: "megapixel",
|
|
1770
|
+
usd: .03
|
|
1771
|
+
},
|
|
1772
|
+
pricing: "$0.03/megapixel",
|
|
1773
|
+
sourceUrl: "https://fal.ai/models/fal-ai/control-light",
|
|
1774
|
+
task: "low-light enhancement"
|
|
1775
|
+
},
|
|
1776
|
+
ddcolor: {
|
|
1777
|
+
category: "restoration",
|
|
1778
|
+
description: "Colourise black-and-white photographs.",
|
|
1779
|
+
endpoint: "fal-ai/ddcolor",
|
|
1780
|
+
inputField: "image_url",
|
|
1781
|
+
inputKind: "image",
|
|
1782
|
+
name: "DDColor Colourisation",
|
|
1783
|
+
outputKeys: ["image"],
|
|
1784
|
+
price: {
|
|
1785
|
+
kind: "megapixel",
|
|
1786
|
+
usd: .001
|
|
1787
|
+
},
|
|
1788
|
+
pricing: "$0.001/megapixel",
|
|
1789
|
+
sourceUrl: "https://fal.ai/models/fal-ai/ddcolor",
|
|
1790
|
+
task: "photo colourisation"
|
|
1791
|
+
},
|
|
1792
|
+
rembg: {
|
|
1793
|
+
category: "background",
|
|
1794
|
+
defaultOptions: { crop_to_bbox: false },
|
|
1795
|
+
description: "Generic image background removal utility.",
|
|
1796
|
+
endpoint: "fal-ai/imageutils/rembg",
|
|
1797
|
+
inputField: "image_url",
|
|
1798
|
+
inputKind: "image",
|
|
1799
|
+
name: "Remove Background",
|
|
1800
|
+
outputKeys: ["image"],
|
|
1801
|
+
price: {
|
|
1802
|
+
kind: "call",
|
|
1803
|
+
usd: 0
|
|
1804
|
+
},
|
|
1805
|
+
pricing: "$0/compute-second listed by fal",
|
|
1806
|
+
sourceUrl: "https://fal.ai/models/fal-ai/imageutils/rembg",
|
|
1807
|
+
task: "image background removal"
|
|
1808
|
+
},
|
|
1809
|
+
"seedvr-upscale": {
|
|
1810
|
+
category: "restoration",
|
|
1811
|
+
defaultOptions: { output_format: "png" },
|
|
1812
|
+
description: "Diffusion image restoration and upscaling with SeedVR.",
|
|
1813
|
+
endpoint: "fal-ai/seedvr/upscale/image",
|
|
1814
|
+
inputField: "image_url",
|
|
1815
|
+
inputKind: "image",
|
|
1816
|
+
name: "SeedVR Image Upscale",
|
|
1817
|
+
outputKeys: ["image"],
|
|
1818
|
+
price: {
|
|
1819
|
+
kind: "megapixel",
|
|
1820
|
+
usd: .001
|
|
1821
|
+
},
|
|
1822
|
+
pricing: "$0.001/megapixel",
|
|
1823
|
+
queued: true,
|
|
1824
|
+
sourceUrl: "https://fal.ai/models/fal-ai/seedvr/upscale/image",
|
|
1825
|
+
task: "image restoration and upscaling"
|
|
1826
|
+
},
|
|
1827
|
+
"topaz-adjust": {
|
|
1828
|
+
category: "restoration",
|
|
1829
|
+
defaultOptions: { output_format: "png" },
|
|
1830
|
+
description: "Topaz exposure, white balance, and colour adjustment.",
|
|
1831
|
+
endpoint: "topaz/adjust/image",
|
|
1832
|
+
inputField: "image_url",
|
|
1833
|
+
inputKind: "image",
|
|
1834
|
+
name: "Topaz Adjust",
|
|
1835
|
+
outputKeys: ["image"],
|
|
1836
|
+
price: {
|
|
1837
|
+
kind: "megapixel-step",
|
|
1838
|
+
megapixels: 24,
|
|
1839
|
+
usd: .08
|
|
1840
|
+
},
|
|
1841
|
+
pricing: "$0.08 per 24 output megapixels",
|
|
1842
|
+
queued: true,
|
|
1843
|
+
sourceUrl: "https://fal.ai/models/topaz/adjust/image",
|
|
1844
|
+
task: "tonal adjustment"
|
|
1845
|
+
},
|
|
1846
|
+
"topaz-creative": {
|
|
1847
|
+
category: "restoration",
|
|
1848
|
+
defaultOptions: { output_format: "png" },
|
|
1849
|
+
description: "Topaz Bloom upscaling, which reimagines detail rather than preserving it.",
|
|
1850
|
+
endpoint: "topaz/upscale/image/creative",
|
|
1851
|
+
inputField: "image_url",
|
|
1852
|
+
inputKind: "image",
|
|
1853
|
+
name: "Topaz Creative Upscale",
|
|
1854
|
+
outputKeys: ["image"],
|
|
1855
|
+
price: {
|
|
1856
|
+
kind: "megapixel-step",
|
|
1857
|
+
megapixels: 2,
|
|
1858
|
+
usd: .08
|
|
1859
|
+
},
|
|
1860
|
+
pricing: "$0.08 per started 2 output megapixels, any Bloom model",
|
|
1861
|
+
queued: true,
|
|
1862
|
+
sourceUrl: "https://fal.ai/models/topaz/upscale/image/creative",
|
|
1863
|
+
task: "creative image upscaling"
|
|
1864
|
+
},
|
|
1865
|
+
"topaz-denoise": {
|
|
1866
|
+
category: "restoration",
|
|
1867
|
+
defaultOptions: { output_format: "png" },
|
|
1868
|
+
description: "Topaz noise reduction at source resolution.",
|
|
1869
|
+
endpoint: "topaz/denoise/image",
|
|
1870
|
+
inputField: "image_url",
|
|
1871
|
+
inputKind: "image",
|
|
1872
|
+
name: "Topaz Denoise",
|
|
1873
|
+
outputKeys: ["image"],
|
|
1874
|
+
price: {
|
|
1875
|
+
kind: "megapixel-step",
|
|
1876
|
+
megapixels: 24,
|
|
1877
|
+
usd: .08
|
|
1878
|
+
},
|
|
1879
|
+
pricing: "$0.08 per 24 output megapixels at the default Normal model; $0.16 with Denoise Max",
|
|
1880
|
+
queued: true,
|
|
1881
|
+
sourceUrl: "https://fal.ai/models/topaz/denoise/image",
|
|
1882
|
+
task: "image denoising"
|
|
1883
|
+
},
|
|
1884
|
+
"topaz-generative": {
|
|
1885
|
+
category: "restoration",
|
|
1886
|
+
defaultOptions: { output_format: "png" },
|
|
1887
|
+
description: "Topaz Wonder upscaling, which synthesises plausible detail as it enlarges.",
|
|
1888
|
+
endpoint: "topaz/upscale/image/generative",
|
|
1889
|
+
inputField: "image_url",
|
|
1890
|
+
inputKind: "image",
|
|
1891
|
+
name: "Topaz Generative Upscale",
|
|
1892
|
+
outputKeys: ["image"],
|
|
1893
|
+
price: {
|
|
1894
|
+
kind: "megapixel-step",
|
|
1895
|
+
megapixels: 8,
|
|
1896
|
+
usd: .08
|
|
1897
|
+
},
|
|
1898
|
+
pricing: "$0.08 per started 8 output megapixels at the default Wonder 3; per started 4 with Wonder, Wonder 2, Standard MAX, Redefine or Recover 3",
|
|
1899
|
+
queued: true,
|
|
1900
|
+
sourceUrl: "https://fal.ai/models/topaz/upscale/image/generative",
|
|
1901
|
+
task: "generative image upscaling"
|
|
1902
|
+
},
|
|
1903
|
+
"topaz-image": {
|
|
1904
|
+
category: "upscale",
|
|
1905
|
+
defaultOptions: {
|
|
1906
|
+
model: "Standard V2",
|
|
1907
|
+
output_format: "jpeg",
|
|
1908
|
+
upscale_factor: 2
|
|
1909
|
+
},
|
|
1910
|
+
description: "Professional Topaz image enhancement and upscaling.",
|
|
1911
|
+
endpoint: "fal-ai/topaz/upscale/image",
|
|
1912
|
+
inputField: "image_url",
|
|
1913
|
+
inputKind: "image",
|
|
1914
|
+
name: "Topaz Image Upscale",
|
|
1915
|
+
outputKeys: ["image"],
|
|
1916
|
+
price: {
|
|
1917
|
+
kind: "megapixel-step",
|
|
1918
|
+
megapixels: 24,
|
|
1919
|
+
usd: .08
|
|
1920
|
+
},
|
|
1921
|
+
pricing: "$0.08 for output up to 24MP; $0.16 to 48MP, $0.32 to 96MP, up to $1.36 at 512MP",
|
|
1922
|
+
queued: true,
|
|
1923
|
+
sourceUrl: "https://fal.ai/models/fal-ai/topaz/upscale/image",
|
|
1924
|
+
task: "image enhancement"
|
|
1925
|
+
},
|
|
1926
|
+
"topaz-precision": {
|
|
1927
|
+
category: "restoration",
|
|
1928
|
+
defaultOptions: { output_format: "png" },
|
|
1929
|
+
description: "Topaz upscaling that preserves the original detail rather than inventing it.",
|
|
1930
|
+
endpoint: "topaz/upscale/image/precision",
|
|
1931
|
+
inputField: "image_url",
|
|
1932
|
+
inputKind: "image",
|
|
1933
|
+
name: "Topaz Precision Upscale",
|
|
1934
|
+
outputKeys: ["image"],
|
|
1935
|
+
price: {
|
|
1936
|
+
kind: "megapixel-step",
|
|
1937
|
+
megapixels: 24,
|
|
1938
|
+
usd: .08
|
|
1939
|
+
},
|
|
1940
|
+
pricing: "$0.08 per 24 output megapixels, any precision model",
|
|
1941
|
+
queued: true,
|
|
1942
|
+
sourceUrl: "https://fal.ai/models/topaz/upscale/image/precision",
|
|
1943
|
+
task: "faithful image upscaling"
|
|
1944
|
+
},
|
|
1945
|
+
"topaz-restore": {
|
|
1946
|
+
category: "restoration",
|
|
1947
|
+
defaultOptions: { output_format: "png" },
|
|
1948
|
+
description: "Topaz restoration of damaged or degraded photographs at source resolution.",
|
|
1949
|
+
endpoint: "topaz/restore/image",
|
|
1950
|
+
inputField: "image_url",
|
|
1951
|
+
inputKind: "image",
|
|
1952
|
+
name: "Topaz Restore",
|
|
1953
|
+
outputKeys: ["image"],
|
|
1954
|
+
price: {
|
|
1955
|
+
kind: "megapixel-step",
|
|
1956
|
+
megapixels: 24,
|
|
1957
|
+
usd: .48
|
|
1958
|
+
},
|
|
1959
|
+
pricing: "$0.48 per 24 output megapixels at the default Recover 3; $0.08 with Dust-Scratch V2",
|
|
1960
|
+
queued: true,
|
|
1961
|
+
sourceUrl: "https://fal.ai/models/topaz/restore/image",
|
|
1962
|
+
task: "photo restoration"
|
|
1963
|
+
},
|
|
1964
|
+
"topaz-sharpen": {
|
|
1965
|
+
category: "restoration",
|
|
1966
|
+
defaultOptions: { output_format: "png" },
|
|
1967
|
+
description: "Topaz deblurring and sharpening at source resolution.",
|
|
1968
|
+
endpoint: "topaz/sharpen/image",
|
|
1969
|
+
inputField: "image_url",
|
|
1970
|
+
inputKind: "image",
|
|
1971
|
+
name: "Topaz Sharpen",
|
|
1972
|
+
outputKeys: ["image"],
|
|
1973
|
+
price: {
|
|
1974
|
+
kind: "megapixel-step",
|
|
1975
|
+
megapixels: 24,
|
|
1976
|
+
usd: .08
|
|
1977
|
+
},
|
|
1978
|
+
pricing: "$0.08 per 24 output megapixels at the default Standard model; $0.16 with Super Focus",
|
|
1979
|
+
queued: true,
|
|
1980
|
+
sourceUrl: "https://fal.ai/models/topaz/sharpen/image",
|
|
1981
|
+
task: "image sharpening"
|
|
1982
|
+
},
|
|
1983
|
+
"topaz-transparent": {
|
|
1984
|
+
category: "restoration",
|
|
1985
|
+
description: "Topaz upscaling that preserves the alpha channel end to end.",
|
|
1986
|
+
endpoint: "topaz/upscale/image/transparent",
|
|
1987
|
+
inputField: "image_url",
|
|
1988
|
+
inputKind: "image",
|
|
1989
|
+
name: "Topaz Transparent Upscale",
|
|
1990
|
+
outputKeys: ["image"],
|
|
1991
|
+
price: {
|
|
1992
|
+
kind: "megapixel-step",
|
|
1993
|
+
megapixels: 24,
|
|
1994
|
+
usd: .08
|
|
1995
|
+
},
|
|
1996
|
+
pricing: "$0.08 per 24 output megapixels",
|
|
1997
|
+
queued: true,
|
|
1998
|
+
sourceUrl: "https://fal.ai/models/topaz/upscale/image/transparent",
|
|
1999
|
+
task: "transparent image upscaling"
|
|
2000
|
+
},
|
|
2001
|
+
"topaz-video": {
|
|
2002
|
+
category: "upscale",
|
|
2003
|
+
defaultOptions: {
|
|
2004
|
+
model: "Proteus",
|
|
2005
|
+
upscale_factor: 2
|
|
2006
|
+
},
|
|
2007
|
+
description: "Professional Topaz video enhancement and upscaling.",
|
|
2008
|
+
endpoint: "fal-ai/topaz/upscale/video",
|
|
2009
|
+
inputField: "video_url",
|
|
2010
|
+
inputKind: "video",
|
|
2011
|
+
name: "Topaz Video Upscale",
|
|
2012
|
+
outputKeys: ["video"],
|
|
2013
|
+
price: {
|
|
2014
|
+
doubleAtFps: 60,
|
|
2015
|
+
halfWithModel: "Gaia 2",
|
|
2016
|
+
kind: "video-second",
|
|
2017
|
+
tiers: [
|
|
2018
|
+
{
|
|
2019
|
+
upTo: 720,
|
|
2020
|
+
usd: .01
|
|
2021
|
+
},
|
|
2022
|
+
{
|
|
2023
|
+
upTo: 1080,
|
|
2024
|
+
usd: .02
|
|
2025
|
+
},
|
|
2026
|
+
{ usd: .08 }
|
|
2027
|
+
]
|
|
2028
|
+
},
|
|
2029
|
+
pricing: "$0.01/sec up to 720p output; $0.02 to 1080p, $0.08 above, doubled at 60fps, halved with Gaia 2",
|
|
2030
|
+
queued: true,
|
|
2031
|
+
sourceUrl: "https://fal.ai/models/fal-ai/topaz/upscale/video",
|
|
2032
|
+
task: "video enhancement"
|
|
2033
|
+
}
|
|
2034
|
+
};
|
|
2035
|
+
//#endregion
|
|
2036
|
+
//#region src/tool-registry/editing.ts
|
|
2037
|
+
const EDITING_TOOLS = {
|
|
2038
|
+
"bria-eraser": {
|
|
2039
|
+
category: "erase",
|
|
2040
|
+
description: "Commercial-safe removal of a masked region, inpainted from surrounding context.",
|
|
2041
|
+
endpoint: "fal-ai/bria/eraser",
|
|
2042
|
+
inputField: "image_url",
|
|
2043
|
+
inputKind: "image",
|
|
2044
|
+
name: "Bria Eraser",
|
|
2045
|
+
outputKeys: ["image"],
|
|
2046
|
+
price: {
|
|
2047
|
+
kind: "call",
|
|
2048
|
+
usd: .04
|
|
2049
|
+
},
|
|
2050
|
+
pricing: "$0.04/generation",
|
|
2051
|
+
sourceUrl: "https://fal.ai/models/fal-ai/bria/eraser",
|
|
2052
|
+
task: "masked object erasure"
|
|
2053
|
+
},
|
|
2054
|
+
"bria-expand": {
|
|
2055
|
+
category: "reframe",
|
|
2056
|
+
description: "Expand an image onto a larger canvas, generating the new border area.",
|
|
2057
|
+
endpoint: "fal-ai/bria/expand",
|
|
2058
|
+
inputField: "image_url",
|
|
2059
|
+
inputKind: "image",
|
|
2060
|
+
name: "Bria Image Expansion",
|
|
2061
|
+
outputKeys: ["image"],
|
|
2062
|
+
price: {
|
|
2063
|
+
kind: "call",
|
|
2064
|
+
usd: .04
|
|
2065
|
+
},
|
|
2066
|
+
pricing: "$0.04/generation",
|
|
2067
|
+
sourceUrl: "https://fal.ai/models/fal-ai/bria/expand",
|
|
2068
|
+
task: "image outpainting"
|
|
2069
|
+
},
|
|
2070
|
+
"bria-genfill": {
|
|
2071
|
+
category: "erase",
|
|
2072
|
+
description: "Generative fill of a masked region from a prompt, commercial-safe.",
|
|
2073
|
+
endpoint: "fal-ai/bria/genfill",
|
|
2074
|
+
inputField: "image_url",
|
|
2075
|
+
inputKind: "image",
|
|
2076
|
+
name: "Bria GenFill",
|
|
2077
|
+
outputKeys: ["images"],
|
|
2078
|
+
price: {
|
|
2079
|
+
kind: "call",
|
|
2080
|
+
perImage: true,
|
|
2081
|
+
usd: .04
|
|
2082
|
+
},
|
|
2083
|
+
pricing: "$0.04/generation",
|
|
2084
|
+
sourceUrl: "https://fal.ai/models/fal-ai/bria/genfill",
|
|
2085
|
+
task: "masked generative fill"
|
|
2086
|
+
},
|
|
2087
|
+
"finegrain-eraser": {
|
|
2088
|
+
category: "erase",
|
|
2089
|
+
description: "Remove a prompted object and its shadows and reflections, filling the gap.",
|
|
2090
|
+
endpoint: "fal-ai/finegrain-eraser",
|
|
2091
|
+
inputField: "image_url",
|
|
2092
|
+
inputKind: "image",
|
|
2093
|
+
name: "Finegrain Object Eraser",
|
|
2094
|
+
outputKeys: ["image"],
|
|
2095
|
+
price: {
|
|
2096
|
+
kind: "call",
|
|
2097
|
+
usd: .27
|
|
2098
|
+
},
|
|
2099
|
+
pricing: "$0.27/image at the default standard mode; $0.18 express, $0.36 premium",
|
|
2100
|
+
sourceUrl: "https://fal.ai/models/fal-ai/finegrain-eraser",
|
|
2101
|
+
task: "prompted object erasure"
|
|
2102
|
+
},
|
|
2103
|
+
"flux-outpaint": {
|
|
2104
|
+
category: "reframe",
|
|
2105
|
+
description: "Outpaint an image by a per-edge pixel expansion with FLUX.2 pro.",
|
|
2106
|
+
endpoint: "fal-ai/flux-2-pro/outpaint",
|
|
2107
|
+
inputField: "image_url",
|
|
2108
|
+
inputKind: "image",
|
|
2109
|
+
name: "FLUX.2 Pro Outpaint",
|
|
2110
|
+
outputKeys: ["images"],
|
|
2111
|
+
price: {
|
|
2112
|
+
extra: .015,
|
|
2113
|
+
first: .03,
|
|
2114
|
+
kind: "megapixel-first"
|
|
2115
|
+
},
|
|
2116
|
+
pricing: "$0.03 for the first output megapixel, then $0.015 per extra megapixel of input and output, rounded up",
|
|
2117
|
+
sourceUrl: "https://fal.ai/models/fal-ai/flux-2-pro/outpaint",
|
|
2118
|
+
task: "image outpainting"
|
|
2119
|
+
},
|
|
2120
|
+
"iclight-v2": {
|
|
2121
|
+
category: "relight",
|
|
2122
|
+
description: "Relight a subject from a prompt, harmonising it with a new light direction.",
|
|
2123
|
+
endpoint: "fal-ai/iclight-v2",
|
|
2124
|
+
inputField: "image_url",
|
|
2125
|
+
inputKind: "image",
|
|
2126
|
+
name: "IC-Light v2",
|
|
2127
|
+
outputKeys: ["images"],
|
|
2128
|
+
price: {
|
|
2129
|
+
kind: "megapixel",
|
|
2130
|
+
usd: .1
|
|
2131
|
+
},
|
|
2132
|
+
pricing: "$0.10/megapixel",
|
|
2133
|
+
sourceUrl: "https://fal.ai/models/fal-ai/iclight-v2",
|
|
2134
|
+
task: "prompted relighting"
|
|
2135
|
+
},
|
|
2136
|
+
"ideogram-reframe": {
|
|
2137
|
+
category: "reframe",
|
|
2138
|
+
description: "Reframe an image to a new aspect ratio, generating the fill.",
|
|
2139
|
+
endpoint: "fal-ai/ideogram/v3/reframe",
|
|
2140
|
+
inputField: "image_url",
|
|
2141
|
+
inputKind: "image",
|
|
2142
|
+
name: "Ideogram v3 Reframe",
|
|
2143
|
+
outputKeys: ["images"],
|
|
2144
|
+
price: {
|
|
2145
|
+
kind: "call",
|
|
2146
|
+
perImage: true,
|
|
2147
|
+
usd: .06
|
|
2148
|
+
},
|
|
2149
|
+
pricing: "$0.06/image at the default BALANCED speed; $0.03 turbo, $0.09 quality",
|
|
2150
|
+
sourceUrl: "https://fal.ai/models/fal-ai/ideogram/v3/reframe",
|
|
2151
|
+
task: "aspect ratio reframing"
|
|
2152
|
+
},
|
|
2153
|
+
"lighting-restoration": {
|
|
2154
|
+
category: "relight",
|
|
2155
|
+
description: "Restore natural, even lighting across one or more input images.",
|
|
2156
|
+
endpoint: "fal-ai/qwen-image-edit-plus-lora-gallery/lighting-restoration",
|
|
2157
|
+
inputField: "image_urls",
|
|
2158
|
+
inputKind: "images",
|
|
2159
|
+
name: "Qwen Lighting Restoration",
|
|
2160
|
+
outputKeys: ["images"],
|
|
2161
|
+
price: {
|
|
2162
|
+
kind: "megapixel",
|
|
2163
|
+
usd: .035
|
|
2164
|
+
},
|
|
2165
|
+
pricing: "$0.035/megapixel",
|
|
2166
|
+
sourceUrl: "https://fal.ai/models/fal-ai/qwen-image-edit-plus-lora-gallery/lighting-restoration",
|
|
2167
|
+
task: "lighting restoration"
|
|
2168
|
+
},
|
|
2169
|
+
"object-removal": {
|
|
2170
|
+
category: "erase",
|
|
2171
|
+
description: "Remove a prompted object from an image and fill the gap.",
|
|
2172
|
+
endpoint: "fal-ai/object-removal",
|
|
2173
|
+
inputField: "image_url",
|
|
2174
|
+
inputKind: "image",
|
|
2175
|
+
name: "Object Removal",
|
|
2176
|
+
outputKeys: ["images"],
|
|
2177
|
+
price: {
|
|
2178
|
+
kind: "call",
|
|
2179
|
+
usd: .024
|
|
2180
|
+
},
|
|
2181
|
+
pricing: "$0.024/image at the default best quality; $0.006 low, $0.012 medium, $0.018 high",
|
|
2182
|
+
sourceUrl: "https://fal.ai/models/fal-ai/object-removal",
|
|
2183
|
+
task: "prompted object removal"
|
|
2184
|
+
},
|
|
2185
|
+
"object-removal-bbox": {
|
|
2186
|
+
category: "erase",
|
|
2187
|
+
description: "Remove whatever falls inside supplied bounding boxes.",
|
|
2188
|
+
endpoint: "fal-ai/object-removal/bbox",
|
|
2189
|
+
inputField: "image_url",
|
|
2190
|
+
inputKind: "image",
|
|
2191
|
+
name: "Object Removal by Box",
|
|
2192
|
+
outputKeys: ["images"],
|
|
2193
|
+
price: {
|
|
2194
|
+
kind: "call",
|
|
2195
|
+
usd: .024
|
|
2196
|
+
},
|
|
2197
|
+
pricing: "$0.024/image at the default best quality; $0.006 low, $0.012 medium, $0.018 high",
|
|
2198
|
+
sourceUrl: "https://fal.ai/models/fal-ai/object-removal/bbox",
|
|
2199
|
+
task: "bounding box object removal"
|
|
2200
|
+
},
|
|
2201
|
+
"object-removal-mask": {
|
|
2202
|
+
category: "erase",
|
|
2203
|
+
description: "Remove the masked region of an image and fill the gap.",
|
|
2204
|
+
endpoint: "fal-ai/object-removal/mask",
|
|
2205
|
+
inputField: "image_url",
|
|
2206
|
+
inputKind: "image",
|
|
2207
|
+
name: "Object Removal by Mask",
|
|
2208
|
+
outputKeys: ["images"],
|
|
2209
|
+
price: {
|
|
2210
|
+
kind: "call",
|
|
2211
|
+
usd: .024
|
|
2212
|
+
},
|
|
2213
|
+
pricing: "$0.024/image at the default best quality; $0.006 low, $0.012 medium, $0.018 high",
|
|
2214
|
+
sourceUrl: "https://fal.ai/models/fal-ai/object-removal/mask",
|
|
2215
|
+
task: "masked object removal"
|
|
2216
|
+
},
|
|
2217
|
+
"remove-lighting": {
|
|
2218
|
+
category: "relight",
|
|
2219
|
+
description: "Strip baked-in lighting and shadows to leave a flat, neutral surface.",
|
|
2220
|
+
endpoint: "fal-ai/qwen-image-edit-plus-lora-gallery/remove-lighting",
|
|
2221
|
+
inputField: "image_urls",
|
|
2222
|
+
inputKind: "images",
|
|
2223
|
+
name: "Qwen Remove Lighting",
|
|
2224
|
+
outputKeys: ["images"],
|
|
2225
|
+
price: {
|
|
2226
|
+
kind: "megapixel",
|
|
2227
|
+
usd: .035
|
|
2228
|
+
},
|
|
2229
|
+
pricing: "$0.035/megapixel",
|
|
2230
|
+
sourceUrl: "https://fal.ai/models/fal-ai/qwen-image-edit-plus-lora-gallery/remove-lighting",
|
|
2231
|
+
task: "lighting removal"
|
|
2232
|
+
},
|
|
2233
|
+
"smart-resize": {
|
|
2234
|
+
category: "reframe",
|
|
2235
|
+
description: "Resize one image to several target sizes, recomposing rather than cropping.",
|
|
2236
|
+
endpoint: "fal-ai/smart-resize",
|
|
2237
|
+
inputField: "image_url",
|
|
2238
|
+
inputKind: "image",
|
|
2239
|
+
name: "Smart Resize",
|
|
2240
|
+
outputKeys: ["images", "results"],
|
|
2241
|
+
price: {
|
|
2242
|
+
fee: .05,
|
|
2243
|
+
kind: "call",
|
|
2244
|
+
multipliers: { resolution: { "4K": 2 } },
|
|
2245
|
+
per: ["target_sizes", "num_images_per_size"],
|
|
2246
|
+
usd: .15
|
|
2247
|
+
},
|
|
2248
|
+
pricing: "$0.15 per output image, doubled at 4K, plus a $0.05 vision analysis fee per request",
|
|
2249
|
+
queued: true,
|
|
2250
|
+
sourceUrl: "https://fal.ai/models/fal-ai/smart-resize",
|
|
2251
|
+
task: "multi-size recomposition"
|
|
2252
|
+
},
|
|
2253
|
+
"telestyle-v2": {
|
|
2254
|
+
category: "restyle",
|
|
2255
|
+
description: "Redraw a content image in the style of a second, style image.",
|
|
2256
|
+
endpoint: "fal-ai/telestyle-v2",
|
|
2257
|
+
inputField: "content_image_url",
|
|
2258
|
+
inputKind: "image",
|
|
2259
|
+
name: "TeleStyle v2",
|
|
2260
|
+
outputKeys: ["images"],
|
|
2261
|
+
price: {
|
|
2262
|
+
kind: "megapixel",
|
|
2263
|
+
usd: .035
|
|
2264
|
+
},
|
|
2265
|
+
pricing: "$0.035/megapixel",
|
|
2266
|
+
referenceField: "style_image_url",
|
|
2267
|
+
sourceUrl: "https://fal.ai/models/fal-ai/telestyle-v2",
|
|
2268
|
+
task: "style transfer from a reference image"
|
|
2269
|
+
},
|
|
2270
|
+
"text-removal": {
|
|
2271
|
+
category: "erase",
|
|
2272
|
+
defaultOptions: { output_format: "png" },
|
|
2273
|
+
description: "Remove all rendered text from an image, rebuilding what sat behind it.",
|
|
2274
|
+
endpoint: "fal-ai/image-editing/text-removal",
|
|
2275
|
+
inputField: "image_url",
|
|
2276
|
+
inputKind: "image",
|
|
2277
|
+
name: "Text Removal",
|
|
2278
|
+
outputKeys: ["images"],
|
|
2279
|
+
price: {
|
|
2280
|
+
kind: "call",
|
|
2281
|
+
usd: .04
|
|
2282
|
+
},
|
|
2283
|
+
pricing: "$0.04/image",
|
|
2284
|
+
sourceUrl: "https://fal.ai/models/fal-ai/image-editing/text-removal",
|
|
2285
|
+
task: "text removal"
|
|
2286
|
+
},
|
|
2287
|
+
"virtual-try-on": {
|
|
2288
|
+
category: "try-on",
|
|
2289
|
+
description: "Dress the person in one image in the garment shown in another.",
|
|
2290
|
+
endpoint: "google/virtual-try-on",
|
|
2291
|
+
inputField: "person_image_url",
|
|
2292
|
+
inputKind: "image",
|
|
2293
|
+
name: "Google Virtual Try-On",
|
|
2294
|
+
outputKeys: ["images"],
|
|
2295
|
+
price: {
|
|
2296
|
+
kind: "call",
|
|
2297
|
+
perImage: true,
|
|
2298
|
+
usd: .075
|
|
2299
|
+
},
|
|
2300
|
+
pricing: "$0.075/image",
|
|
2301
|
+
queued: true,
|
|
2302
|
+
referenceField: "product_image_url",
|
|
2303
|
+
sourceUrl: "https://fal.ai/models/google/virtual-try-on",
|
|
2304
|
+
task: "virtual garment try-on"
|
|
2305
|
+
}
|
|
2306
|
+
};
|
|
2307
|
+
//#endregion
|
|
2308
|
+
//#region src/tool-registry/structure.ts
|
|
2309
|
+
const STRUCTURE_TOOLS = {
|
|
2310
|
+
"depth-anything": {
|
|
2311
|
+
category: "preprocess",
|
|
2312
|
+
description: "Generate Depth Anything v2 depth maps from input images.",
|
|
2313
|
+
endpoint: "fal-ai/image-preprocessors/depth-anything/v2",
|
|
2314
|
+
inputField: "image_url",
|
|
2315
|
+
inputKind: "image",
|
|
2316
|
+
name: "Depth Anything v2 Preprocessor",
|
|
2317
|
+
outputKeys: ["image"],
|
|
2318
|
+
price: {
|
|
2319
|
+
kind: "call",
|
|
2320
|
+
usd: 0
|
|
2321
|
+
},
|
|
2322
|
+
pricing: "$0/compute-second listed by fal",
|
|
2323
|
+
sourceUrl: "https://fal.ai/models/fal-ai/image-preprocessors/depth-anything/v2",
|
|
2324
|
+
task: "depth preprocessing"
|
|
2325
|
+
},
|
|
2326
|
+
dwpose: {
|
|
2327
|
+
category: "preprocess",
|
|
2328
|
+
description: "Extract body, hand, and face pose skeletons from an image.",
|
|
2329
|
+
endpoint: "fal-ai/dwpose",
|
|
2330
|
+
inputField: "image_url",
|
|
2331
|
+
inputKind: "image",
|
|
2332
|
+
name: "DWPose Estimation",
|
|
2333
|
+
outputKeys: ["image"],
|
|
2334
|
+
price: {
|
|
2335
|
+
kind: "second",
|
|
2336
|
+
usd: 6e-4
|
|
2337
|
+
},
|
|
2338
|
+
pricing: "$0.0006/compute-second",
|
|
2339
|
+
sourceUrl: "https://fal.ai/models/fal-ai/dwpose",
|
|
2340
|
+
task: "pose preprocessing"
|
|
2341
|
+
},
|
|
2342
|
+
hed: {
|
|
2343
|
+
category: "preprocess",
|
|
2344
|
+
description: "Generate HED soft edge maps for ControlNet-style workflows.",
|
|
2345
|
+
endpoint: "fal-ai/image-preprocessors/hed",
|
|
2346
|
+
inputField: "image_url",
|
|
2347
|
+
inputKind: "image",
|
|
2348
|
+
name: "HED Edge Preprocessor",
|
|
2349
|
+
outputKeys: ["image"],
|
|
2350
|
+
price: {
|
|
2351
|
+
kind: "call",
|
|
2352
|
+
usd: 0
|
|
2353
|
+
},
|
|
2354
|
+
pricing: "$0/compute-second listed by fal",
|
|
2355
|
+
sourceUrl: "https://fal.ai/models/fal-ai/image-preprocessors/hed",
|
|
2356
|
+
task: "edge preprocessing"
|
|
2357
|
+
},
|
|
2358
|
+
lineart: {
|
|
2359
|
+
category: "preprocess",
|
|
2360
|
+
defaultOptions: { coarse: false },
|
|
2361
|
+
description: "Generate line art/control-style edges from an input image.",
|
|
2362
|
+
endpoint: "fal-ai/image-preprocessors/lineart",
|
|
2363
|
+
inputField: "image_url",
|
|
2364
|
+
inputKind: "image",
|
|
2365
|
+
name: "Line Art Preprocessor",
|
|
2366
|
+
outputKeys: ["image"],
|
|
2367
|
+
price: {
|
|
2368
|
+
kind: "call",
|
|
2369
|
+
usd: 0
|
|
2370
|
+
},
|
|
2371
|
+
pricing: "$0/compute-second listed by fal",
|
|
2372
|
+
sourceUrl: "https://fal.ai/models/fal-ai/image-preprocessors/lineart",
|
|
2373
|
+
task: "image preprocessing"
|
|
2374
|
+
},
|
|
2375
|
+
"marigold-depth": {
|
|
2376
|
+
category: "depth",
|
|
2377
|
+
defaultOptions: {
|
|
2378
|
+
ensemble_size: 10,
|
|
2379
|
+
num_inference_steps: 10
|
|
2380
|
+
},
|
|
2381
|
+
description: "Create depth maps using Marigold depth estimation.",
|
|
2382
|
+
endpoint: "fal-ai/imageutils/marigold-depth",
|
|
2383
|
+
inputField: "image_url",
|
|
2384
|
+
inputKind: "image",
|
|
2385
|
+
name: "Marigold Depth Estimation",
|
|
2386
|
+
outputKeys: ["image"],
|
|
2387
|
+
price: {
|
|
2388
|
+
kind: "call",
|
|
2389
|
+
usd: 0
|
|
2390
|
+
},
|
|
2391
|
+
pricing: "$0/compute-second listed by fal",
|
|
2392
|
+
sourceUrl: "https://fal.ai/models/fal-ai/imageutils/marigold-depth",
|
|
2393
|
+
task: "depth map"
|
|
2394
|
+
},
|
|
2395
|
+
"midas-depth": {
|
|
2396
|
+
category: "depth",
|
|
2397
|
+
defaultOptions: {
|
|
2398
|
+
a: Math.PI * 2,
|
|
2399
|
+
bg_th: .1
|
|
2400
|
+
},
|
|
2401
|
+
description: "Create MiDaS depth maps from input images.",
|
|
2402
|
+
endpoint: "fal-ai/imageutils/depth",
|
|
2403
|
+
inputField: "image_url",
|
|
2404
|
+
inputKind: "image",
|
|
2405
|
+
name: "MiDaS Depth Estimation",
|
|
2406
|
+
outputKeys: ["image"],
|
|
2407
|
+
price: {
|
|
2408
|
+
kind: "call",
|
|
2409
|
+
usd: 0
|
|
2410
|
+
},
|
|
2411
|
+
pricing: "$0/compute-second listed by fal",
|
|
2412
|
+
sourceUrl: "https://fal.ai/models/fal-ai/imageutils/depth",
|
|
2413
|
+
task: "depth map"
|
|
2414
|
+
},
|
|
2415
|
+
"midas-preprocessor": {
|
|
2416
|
+
category: "preprocess",
|
|
2417
|
+
description: "Generate MiDaS depth and normal maps for image workflows.",
|
|
2418
|
+
endpoint: "fal-ai/image-preprocessors/midas",
|
|
2419
|
+
inputField: "image_url",
|
|
2420
|
+
inputKind: "image",
|
|
2421
|
+
name: "MiDaS Preprocessor",
|
|
2422
|
+
outputKeys: ["depth_map", "normal_map"],
|
|
2423
|
+
price: {
|
|
2424
|
+
kind: "call",
|
|
2425
|
+
usd: 0
|
|
2426
|
+
},
|
|
2427
|
+
pricing: "$0/compute-second listed by fal",
|
|
2428
|
+
sourceUrl: "https://fal.ai/models/fal-ai/image-preprocessors/midas",
|
|
2429
|
+
task: "depth and normal preprocessing"
|
|
2430
|
+
},
|
|
2431
|
+
mlsd: {
|
|
2432
|
+
category: "preprocess",
|
|
2433
|
+
description: "Detect straight line segments for architectural and interior control maps.",
|
|
2434
|
+
endpoint: "fal-ai/image-preprocessors/mlsd",
|
|
2435
|
+
inputField: "image_url",
|
|
2436
|
+
inputKind: "image",
|
|
2437
|
+
name: "M-LSD Line Preprocessor",
|
|
2438
|
+
outputKeys: ["image"],
|
|
2439
|
+
price: {
|
|
2440
|
+
kind: "call",
|
|
2441
|
+
usd: 0
|
|
2442
|
+
},
|
|
2443
|
+
pricing: "$0/compute-second listed by fal",
|
|
2444
|
+
sourceUrl: "https://fal.ai/models/fal-ai/image-preprocessors/mlsd",
|
|
2445
|
+
task: "line segment preprocessing"
|
|
2446
|
+
},
|
|
2447
|
+
pidi: {
|
|
2448
|
+
category: "preprocess",
|
|
2449
|
+
description: "Generate PiDiNet soft edge maps from an input image.",
|
|
2450
|
+
endpoint: "fal-ai/image-preprocessors/pidi",
|
|
2451
|
+
inputField: "image_url",
|
|
2452
|
+
inputKind: "image",
|
|
2453
|
+
name: "PiDiNet Edge Preprocessor",
|
|
2454
|
+
outputKeys: ["image"],
|
|
2455
|
+
price: {
|
|
2456
|
+
kind: "call",
|
|
2457
|
+
usd: 0
|
|
2458
|
+
},
|
|
2459
|
+
pricing: "$0/compute-second listed by fal",
|
|
2460
|
+
sourceUrl: "https://fal.ai/models/fal-ai/image-preprocessors/pidi",
|
|
2461
|
+
task: "edge preprocessing"
|
|
2462
|
+
},
|
|
2463
|
+
"sam-preprocessor": {
|
|
2464
|
+
category: "preprocess",
|
|
2465
|
+
description: "Generate a SAM segmentation map for ControlNet-style workflows.",
|
|
2466
|
+
endpoint: "fal-ai/image-preprocessors/sam",
|
|
2467
|
+
inputField: "image_url",
|
|
2468
|
+
inputKind: "image",
|
|
2469
|
+
name: "SAM Preprocessor",
|
|
2470
|
+
outputKeys: ["image"],
|
|
2471
|
+
price: {
|
|
2472
|
+
kind: "call",
|
|
2473
|
+
usd: 0
|
|
2474
|
+
},
|
|
2475
|
+
pricing: "$0/compute-second listed by fal",
|
|
2476
|
+
sourceUrl: "https://fal.ai/models/fal-ai/image-preprocessors/sam",
|
|
2477
|
+
task: "segmentation preprocessing"
|
|
2478
|
+
},
|
|
2479
|
+
"sam2-auto": {
|
|
2480
|
+
category: "segmentation",
|
|
2481
|
+
defaultOptions: {
|
|
2482
|
+
min_mask_region_area: 100,
|
|
2483
|
+
output_format: "png",
|
|
2484
|
+
points_per_side: 32,
|
|
2485
|
+
pred_iou_thresh: .88,
|
|
2486
|
+
stability_score_thresh: .95
|
|
2487
|
+
},
|
|
2488
|
+
description: "Automatically segment an image into combined and individual masks.",
|
|
2489
|
+
endpoint: "fal-ai/sam2/auto-segment",
|
|
2490
|
+
inputField: "image_url",
|
|
2491
|
+
inputKind: "image",
|
|
2492
|
+
name: "SAM 2 Auto Segment",
|
|
2493
|
+
outputKeys: ["combined_mask", "individual_masks"],
|
|
2494
|
+
price: {
|
|
2495
|
+
kind: "call",
|
|
2496
|
+
usd: 0
|
|
2497
|
+
},
|
|
2498
|
+
pricing: "$0/compute-second listed by fal",
|
|
2499
|
+
queued: true,
|
|
2500
|
+
sourceUrl: "https://fal.ai/models/fal-ai/sam2/auto-segment",
|
|
2501
|
+
task: "automatic image segmentation"
|
|
2502
|
+
},
|
|
2503
|
+
"sam3-1-image": {
|
|
2504
|
+
category: "segmentation",
|
|
2505
|
+
defaultOptions: {
|
|
2506
|
+
apply_mask: true,
|
|
2507
|
+
max_masks: 3,
|
|
2508
|
+
output_format: "png"
|
|
2509
|
+
},
|
|
2510
|
+
description: "Segment image objects with text, point, or box prompts. SAM 3.1 adds Object Multiplex for faster multi-object tracking.",
|
|
2511
|
+
endpoint: "fal-ai/sam-3-1/image",
|
|
2512
|
+
inputField: "image_url",
|
|
2513
|
+
inputKind: "image",
|
|
2514
|
+
name: "SAM 3.1 Image",
|
|
2515
|
+
outputKeys: [
|
|
2516
|
+
"image",
|
|
2517
|
+
"masks",
|
|
2518
|
+
"metadata",
|
|
2519
|
+
"scores",
|
|
2520
|
+
"boxes"
|
|
2521
|
+
],
|
|
2522
|
+
price: {
|
|
2523
|
+
kind: "call",
|
|
2524
|
+
usd: .01
|
|
2525
|
+
},
|
|
2526
|
+
pricing: "$0.01/request",
|
|
2527
|
+
sourceUrl: "https://fal.ai/models/fal-ai/sam-3-1/image",
|
|
2528
|
+
task: "promptable image segmentation"
|
|
2529
|
+
},
|
|
2530
|
+
"sam3-1-video": {
|
|
2531
|
+
category: "segmentation",
|
|
2532
|
+
defaultOptions: {
|
|
2533
|
+
apply_mask: true,
|
|
2534
|
+
prompt: "person"
|
|
2535
|
+
},
|
|
2536
|
+
description: "SAM 3.1 video segmentation with Object Multiplex tracking for multiple objects.",
|
|
2537
|
+
endpoint: "fal-ai/sam-3-1/video",
|
|
2538
|
+
inputField: "video_url",
|
|
2539
|
+
inputKind: "video",
|
|
2540
|
+
name: "SAM 3.1 Video",
|
|
2541
|
+
outputKeys: ["video", "boundingbox_frames_zip"],
|
|
2542
|
+
price: {
|
|
2543
|
+
frames: 16,
|
|
2544
|
+
kind: "frames",
|
|
2545
|
+
usd: .01
|
|
2546
|
+
},
|
|
2547
|
+
pricing: "$0.01/16 frames of video input",
|
|
2548
|
+
queued: true,
|
|
2549
|
+
sourceUrl: "https://fal.ai/models/fal-ai/sam-3-1/video",
|
|
2550
|
+
task: "multi-object video segmentation"
|
|
2551
|
+
},
|
|
2552
|
+
"sam3-image": {
|
|
2553
|
+
category: "segmentation",
|
|
2554
|
+
defaultOptions: {
|
|
2555
|
+
apply_mask: true,
|
|
2556
|
+
max_masks: 3,
|
|
2557
|
+
output_format: "png"
|
|
2558
|
+
},
|
|
2559
|
+
description: "Segment image objects with text, point, or box prompts.",
|
|
2560
|
+
endpoint: "fal-ai/sam-3/image",
|
|
2561
|
+
inputField: "image_url",
|
|
2562
|
+
inputKind: "image",
|
|
2563
|
+
name: "SAM 3 Image",
|
|
2564
|
+
outputKeys: [
|
|
2565
|
+
"image",
|
|
2566
|
+
"masks",
|
|
2567
|
+
"metadata",
|
|
2568
|
+
"scores",
|
|
2569
|
+
"boxes"
|
|
2570
|
+
],
|
|
2571
|
+
price: {
|
|
2572
|
+
kind: "call",
|
|
2573
|
+
usd: .005
|
|
2574
|
+
},
|
|
2575
|
+
pricing: "$0.005/request",
|
|
2576
|
+
sourceUrl: "https://fal.ai/models/fal-ai/sam-3/image",
|
|
2577
|
+
task: "promptable image segmentation"
|
|
2578
|
+
},
|
|
2579
|
+
"sam3-image-rle": {
|
|
2580
|
+
category: "segmentation",
|
|
2581
|
+
defaultOptions: {
|
|
2582
|
+
apply_mask: true,
|
|
2583
|
+
max_masks: 3
|
|
2584
|
+
},
|
|
2585
|
+
description: "Segment image objects and return run-length encoded masks.",
|
|
2586
|
+
endpoint: "fal-ai/sam-3/image-rle",
|
|
2587
|
+
inputField: "image_url",
|
|
2588
|
+
inputKind: "image",
|
|
2589
|
+
name: "SAM 3 Image RLE",
|
|
2590
|
+
outputKeys: [
|
|
2591
|
+
"rle",
|
|
2592
|
+
"scores",
|
|
2593
|
+
"boxes",
|
|
2594
|
+
"metadata"
|
|
2595
|
+
],
|
|
2596
|
+
price: {
|
|
2597
|
+
kind: "call",
|
|
2598
|
+
usd: .005
|
|
2599
|
+
},
|
|
2600
|
+
pricing: "$0.005/request",
|
|
2601
|
+
sourceUrl: "https://fal.ai/models/fal-ai/sam-3/image-rle",
|
|
2602
|
+
task: "promptable image segmentation to RLE"
|
|
2603
|
+
},
|
|
2604
|
+
"sam3-video": {
|
|
2605
|
+
category: "segmentation",
|
|
2606
|
+
defaultOptions: {
|
|
2607
|
+
apply_mask: true,
|
|
2608
|
+
detection_threshold: .5,
|
|
2609
|
+
prompt: "person",
|
|
2610
|
+
video_output_type: "X264 (.mp4)"
|
|
2611
|
+
},
|
|
2612
|
+
description: "Segment and track prompted objects across video frames.",
|
|
2613
|
+
endpoint: "fal-ai/sam-3/video",
|
|
2614
|
+
inputField: "video_url",
|
|
2615
|
+
inputKind: "video",
|
|
2616
|
+
name: "SAM 3 Video",
|
|
2617
|
+
outputKeys: ["video", "boundingbox_frames_zip"],
|
|
2618
|
+
price: {
|
|
2619
|
+
frames: 16,
|
|
2620
|
+
kind: "frames",
|
|
2621
|
+
usd: .005
|
|
2622
|
+
},
|
|
2623
|
+
pricing: "$0.005/16 frames of video input",
|
|
2624
|
+
queued: true,
|
|
2625
|
+
sourceUrl: "https://fal.ai/models/fal-ai/sam-3/video",
|
|
2626
|
+
task: "promptable video segmentation"
|
|
2627
|
+
},
|
|
2628
|
+
"sam3-video-rle": {
|
|
2629
|
+
category: "segmentation",
|
|
2630
|
+
defaultOptions: {
|
|
2631
|
+
apply_mask: true,
|
|
2632
|
+
detection_threshold: .5,
|
|
2633
|
+
prompt: "person"
|
|
2634
|
+
},
|
|
2635
|
+
description: "Track prompted video objects and return RLE mask data.",
|
|
2636
|
+
endpoint: "fal-ai/sam-3/video-rle",
|
|
2637
|
+
inputField: "video_url",
|
|
2638
|
+
inputKind: "video",
|
|
2639
|
+
name: "SAM 3 Video RLE",
|
|
2640
|
+
outputKeys: ["video", "boundingbox_frames_zip"],
|
|
2641
|
+
price: {
|
|
2642
|
+
frames: 16,
|
|
2643
|
+
kind: "frames",
|
|
2644
|
+
usd: .005
|
|
2645
|
+
},
|
|
2646
|
+
pricing: "$0.005/16 frames of video",
|
|
2647
|
+
queued: true,
|
|
2648
|
+
sourceUrl: "https://fal.ai/models/fal-ai/sam-3/video-rle",
|
|
2649
|
+
task: "promptable video segmentation to RLE"
|
|
2650
|
+
},
|
|
2651
|
+
scribble: {
|
|
2652
|
+
category: "preprocess",
|
|
2653
|
+
description: "Turn an image into a scribble-style control map.",
|
|
2654
|
+
endpoint: "fal-ai/image-preprocessors/scribble",
|
|
2655
|
+
inputField: "image_url",
|
|
2656
|
+
inputKind: "image",
|
|
2657
|
+
name: "Scribble Preprocessor",
|
|
2658
|
+
outputKeys: ["image"],
|
|
2659
|
+
price: {
|
|
2660
|
+
kind: "call",
|
|
2661
|
+
usd: 0
|
|
2662
|
+
},
|
|
2663
|
+
pricing: "$0/compute-second listed by fal",
|
|
2664
|
+
sourceUrl: "https://fal.ai/models/fal-ai/image-preprocessors/scribble",
|
|
2665
|
+
task: "scribble preprocessing"
|
|
2666
|
+
},
|
|
2667
|
+
teed: {
|
|
2668
|
+
category: "preprocess",
|
|
2669
|
+
description: "Generate TEED edge maps from an input image.",
|
|
2670
|
+
endpoint: "fal-ai/image-preprocessors/teed",
|
|
2671
|
+
inputField: "image_url",
|
|
2672
|
+
inputKind: "image",
|
|
2673
|
+
name: "TEED Edge Preprocessor",
|
|
2674
|
+
outputKeys: ["image"],
|
|
2675
|
+
price: {
|
|
2676
|
+
kind: "call",
|
|
2677
|
+
usd: 0
|
|
2678
|
+
},
|
|
2679
|
+
pricing: "$0/compute-second listed by fal",
|
|
2680
|
+
sourceUrl: "https://fal.ai/models/fal-ai/image-preprocessors/teed",
|
|
2681
|
+
task: "edge preprocessing"
|
|
2682
|
+
},
|
|
2683
|
+
"zoe-depth": {
|
|
2684
|
+
category: "preprocess",
|
|
2685
|
+
description: "Generate ZoeDepth metric depth maps from an input image.",
|
|
2686
|
+
endpoint: "fal-ai/image-preprocessors/zoe",
|
|
2687
|
+
inputField: "image_url",
|
|
2688
|
+
inputKind: "image",
|
|
2689
|
+
name: "ZoeDepth Preprocessor",
|
|
2690
|
+
outputKeys: ["image"],
|
|
2691
|
+
price: {
|
|
2692
|
+
kind: "call",
|
|
2693
|
+
usd: 0
|
|
2694
|
+
},
|
|
2695
|
+
pricing: "$0/compute-second listed by fal",
|
|
2696
|
+
sourceUrl: "https://fal.ai/models/fal-ai/image-preprocessors/zoe",
|
|
2697
|
+
task: "depth preprocessing"
|
|
2698
|
+
}
|
|
2699
|
+
};
|
|
2700
|
+
//#endregion
|
|
2701
|
+
//#region src/tools.ts
|
|
2702
|
+
const FAL_TOOLS = {
|
|
2703
|
+
...ANALYSIS_TOOLS,
|
|
2704
|
+
...ASSET_TOOLS,
|
|
2705
|
+
...BACKGROUND_TOOLS,
|
|
2706
|
+
...EDITING_TOOLS,
|
|
2707
|
+
...STRUCTURE_TOOLS
|
|
2708
|
+
};
|
|
2709
|
+
Object.keys(FAL_TOOLS);
|
|
2710
|
+
function isFalToolId(tool) {
|
|
2711
|
+
return Object.hasOwn(FAL_TOOLS, tool);
|
|
2712
|
+
}
|
|
2713
|
+
//#endregion
|
|
2714
|
+
export { FAL_PRESET_SIZES, FAL_TOOLS, MODELS, estimateCost, isFalToolId };
|