egaki 0.5.0 → 0.7.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.
Files changed (280) hide show
  1. package/CHANGELOG.md +188 -0
  2. package/dist/cli/cache-utils.d.ts +33 -0
  3. package/dist/cli/cache-utils.d.ts.map +1 -0
  4. package/dist/cli/cache-utils.js +157 -0
  5. package/dist/cli/cached-generate.d.ts +105 -0
  6. package/dist/cli/cached-generate.d.ts.map +1 -0
  7. package/dist/cli/cached-generate.js +208 -0
  8. package/dist/cli/cached-generate.test.d.ts +11 -0
  9. package/dist/cli/cached-generate.test.d.ts.map +1 -0
  10. package/dist/cli/cached-generate.test.js +431 -0
  11. package/dist/cli/cartesia-provider.d.ts +16 -0
  12. package/dist/cli/cartesia-provider.d.ts.map +1 -0
  13. package/dist/cli/cartesia-provider.js +184 -0
  14. package/dist/cli/chatgpt-auth.d.ts.map +1 -0
  15. package/dist/cli/cli.d.ts +4 -0
  16. package/dist/cli/cli.d.ts.map +1 -0
  17. package/dist/cli/cli.js +1329 -0
  18. package/dist/cli/clone-generate.d.ts +26 -0
  19. package/dist/cli/clone-generate.d.ts.map +1 -0
  20. package/dist/cli/clone-generate.js +148 -0
  21. package/dist/{credentials.d.ts → cli/credentials.d.ts} +11 -2
  22. package/dist/cli/credentials.d.ts.map +1 -0
  23. package/dist/{credentials.js → cli/credentials.js} +88 -5
  24. package/dist/cli/elevenlabs-speech-provider.d.ts +26 -0
  25. package/dist/cli/elevenlabs-speech-provider.d.ts.map +1 -0
  26. package/dist/cli/elevenlabs-speech-provider.js +199 -0
  27. package/dist/cli/generate.d.ts +140 -0
  28. package/dist/cli/generate.d.ts.map +1 -0
  29. package/dist/cli/generate.js +604 -0
  30. package/dist/cli/generate.test.d.ts +2 -0
  31. package/dist/cli/generate.test.d.ts.map +1 -0
  32. package/dist/cli/generate.test.js +131 -0
  33. package/dist/cli/login.d.ts.map +1 -0
  34. package/dist/{login.js → cli/login.js} +45 -4
  35. package/dist/cli/main.d.ts +3 -0
  36. package/dist/cli/main.d.ts.map +1 -0
  37. package/dist/cli/main.js +7 -0
  38. package/dist/cli/model-catalog.d.ts +141 -0
  39. package/dist/cli/model-catalog.d.ts.map +1 -0
  40. package/dist/cli/model-catalog.js +2135 -0
  41. package/dist/{models.d.ts → cli/models.d.ts} +16 -9
  42. package/dist/cli/models.d.ts.map +1 -0
  43. package/dist/cli/models.js +313 -0
  44. package/dist/cli/open-browser.d.ts.map +1 -0
  45. package/dist/cli/openai-speech-provider.d.ts +3 -0
  46. package/dist/cli/openai-speech-provider.d.ts.map +1 -0
  47. package/dist/cli/openai-speech-provider.js +28 -0
  48. package/dist/cli/separation-generate.d.ts +34 -0
  49. package/dist/cli/separation-generate.d.ts.map +1 -0
  50. package/dist/cli/separation-generate.js +117 -0
  51. package/dist/cli/speech-catalog.d.ts +35 -0
  52. package/dist/cli/speech-catalog.d.ts.map +1 -0
  53. package/dist/cli/speech-catalog.js +195 -0
  54. package/dist/cli/speech-generate.d.ts +86 -0
  55. package/dist/cli/speech-generate.d.ts.map +1 -0
  56. package/dist/cli/speech-generate.js +156 -0
  57. package/dist/cli/speech-models.d.ts +8 -0
  58. package/dist/cli/speech-models.d.ts.map +1 -0
  59. package/dist/cli/speech-models.js +109 -0
  60. package/dist/cli/speech-provider.test.d.ts +2 -0
  61. package/dist/cli/speech-provider.test.d.ts.map +1 -0
  62. package/dist/cli/speech-provider.test.js +197 -0
  63. package/dist/cli/subscription.d.ts.map +1 -0
  64. package/dist/cli/transcription-catalog.d.ts +35 -0
  65. package/dist/cli/transcription-catalog.d.ts.map +1 -0
  66. package/dist/cli/transcription-catalog.js +192 -0
  67. package/dist/cli/transcription-generate.d.ts +62 -0
  68. package/dist/cli/transcription-generate.d.ts.map +1 -0
  69. package/dist/cli/transcription-generate.js +144 -0
  70. package/dist/cli/transcription-models.d.ts +9 -0
  71. package/dist/cli/transcription-models.d.ts.map +1 -0
  72. package/dist/cli/transcription-models.js +100 -0
  73. package/dist/cli/transcription-providers.d.ts +22 -0
  74. package/dist/cli/transcription-providers.d.ts.map +1 -0
  75. package/dist/cli/transcription-providers.js +290 -0
  76. package/dist/cli/video-model-catalog.d.ts +2 -0
  77. package/dist/cli/video-model-catalog.d.ts.map +1 -0
  78. package/dist/cli/video-model-catalog.js +5 -0
  79. package/dist/cli/xai-auth.d.ts +29 -0
  80. package/dist/cli/xai-auth.d.ts.map +1 -0
  81. package/dist/cli/xai-auth.js +325 -0
  82. package/dist/vite/angled-screen.d.ts +57 -0
  83. package/dist/vite/angled-screen.d.ts.map +1 -0
  84. package/dist/vite/angled-screen.js +115 -0
  85. package/dist/vite/app.d.ts +51 -0
  86. package/dist/vite/app.d.ts.map +1 -0
  87. package/dist/vite/app.js +150 -0
  88. package/dist/vite/bands-shader.d.ts +47 -0
  89. package/dist/vite/bands-shader.d.ts.map +1 -0
  90. package/dist/vite/bands-shader.js +267 -0
  91. package/dist/vite/code-block.d.ts +107 -0
  92. package/dist/vite/code-block.d.ts.map +1 -0
  93. package/dist/vite/code-block.js +641 -0
  94. package/dist/vite/components.d.ts +36 -0
  95. package/dist/vite/components.d.ts.map +1 -0
  96. package/dist/vite/components.js +113 -0
  97. package/dist/vite/dispersion-rings-shader.d.ts +44 -0
  98. package/dist/vite/dispersion-rings-shader.d.ts.map +1 -0
  99. package/dist/vite/dispersion-rings-shader.js +282 -0
  100. package/dist/vite/easing-curves.d.ts +129 -0
  101. package/dist/vite/easing-curves.d.ts.map +1 -0
  102. package/dist/vite/easing-curves.js +584 -0
  103. package/dist/vite/easing-curves.test.d.ts +2 -0
  104. package/dist/vite/easing-curves.test.d.ts.map +1 -0
  105. package/dist/vite/easing-curves.test.js +200 -0
  106. package/dist/vite/generated-media-client.d.ts +35 -0
  107. package/dist/vite/generated-media-client.d.ts.map +1 -0
  108. package/dist/vite/generated-media-client.js +76 -0
  109. package/dist/vite/keyframes.d.ts +129 -0
  110. package/dist/vite/keyframes.d.ts.map +1 -0
  111. package/dist/vite/keyframes.js +194 -0
  112. package/dist/vite/layout-editor.d.ts +45 -0
  113. package/dist/vite/layout-editor.d.ts.map +1 -0
  114. package/dist/vite/layout-editor.js +587 -0
  115. package/dist/vite/layout-transition.d.ts +136 -0
  116. package/dist/vite/layout-transition.d.ts.map +1 -0
  117. package/dist/vite/layout-transition.js +581 -0
  118. package/dist/vite/liquid-gradient-shader.d.ts +62 -0
  119. package/dist/vite/liquid-gradient-shader.d.ts.map +1 -0
  120. package/dist/vite/liquid-gradient-shader.js +413 -0
  121. package/dist/vite/mdx-client.d.ts +15 -0
  122. package/dist/vite/mdx-client.d.ts.map +1 -0
  123. package/dist/vite/mdx-client.js +265 -0
  124. package/dist/vite/mdx-parse.d.ts +102 -0
  125. package/dist/vite/mdx-parse.d.ts.map +1 -0
  126. package/dist/vite/mdx-parse.js +251 -0
  127. package/dist/vite/mdx-provided-components.d.ts +18 -0
  128. package/dist/vite/mdx-provided-components.d.ts.map +1 -0
  129. package/dist/vite/mdx-provided-components.js +14 -0
  130. package/dist/vite/mdx-video.d.ts +327 -0
  131. package/dist/vite/mdx-video.d.ts.map +1 -0
  132. package/dist/vite/mdx-video.js +596 -0
  133. package/dist/vite/mdx-video.test.d.ts +9 -0
  134. package/dist/vite/mdx-video.test.d.ts.map +1 -0
  135. package/dist/vite/mdx-video.test.js +1945 -0
  136. package/dist/vite/media-components.d.ts +45 -0
  137. package/dist/vite/media-components.d.ts.map +1 -0
  138. package/dist/vite/media-components.js +355 -0
  139. package/dist/vite/media-duration-store.d.ts +66 -0
  140. package/dist/vite/media-duration-store.d.ts.map +1 -0
  141. package/dist/vite/media-duration-store.js +204 -0
  142. package/dist/vite/player-page.d.ts +35 -0
  143. package/dist/vite/player-page.d.ts.map +1 -0
  144. package/dist/vite/player-page.js +720 -0
  145. package/dist/vite/render-client.d.ts +18 -0
  146. package/dist/vite/render-client.d.ts.map +1 -0
  147. package/dist/vite/render-client.js +67 -0
  148. package/dist/vite/sdk.d.ts +221 -0
  149. package/dist/vite/sdk.d.ts.map +1 -0
  150. package/dist/vite/sdk.js +355 -0
  151. package/dist/vite/server-components.d.ts +55 -0
  152. package/dist/vite/server-components.d.ts.map +1 -0
  153. package/dist/vite/server-components.js +156 -0
  154. package/dist/vite/server-mdx.d.ts +74 -0
  155. package/dist/vite/server-mdx.d.ts.map +1 -0
  156. package/dist/vite/server-mdx.js +259 -0
  157. package/dist/vite/shader-renderer.d.ts +48 -0
  158. package/dist/vite/shader-renderer.d.ts.map +1 -0
  159. package/dist/vite/shader-renderer.js +411 -0
  160. package/dist/vite/store-hooks.d.ts +12 -0
  161. package/dist/vite/store-hooks.d.ts.map +1 -0
  162. package/dist/vite/store-hooks.js +93 -0
  163. package/dist/vite/store.d.ts +75 -0
  164. package/dist/vite/store.d.ts.map +1 -0
  165. package/dist/vite/store.js +52 -0
  166. package/dist/vite/store.test.d.ts +6 -0
  167. package/dist/vite/store.test.d.ts.map +1 -0
  168. package/dist/vite/store.test.js +172 -0
  169. package/dist/vite/tweakpane-hook.d.ts +94 -0
  170. package/dist/vite/tweakpane-hook.d.ts.map +1 -0
  171. package/dist/vite/tweakpane-hook.js +450 -0
  172. package/dist/vite/vite-plugin.d.ts +28 -0
  173. package/dist/vite/vite-plugin.d.ts.map +1 -0
  174. package/dist/vite/vite-plugin.js +538 -0
  175. package/dist/vite/wave-gradient-shader.d.ts +41 -0
  176. package/dist/vite/wave-gradient-shader.d.ts.map +1 -0
  177. package/dist/vite/wave-gradient-shader.js +207 -0
  178. package/package.json +103 -25
  179. package/skills/egaki/SKILL.md +162 -1
  180. package/src/cli/cache-utils.ts +169 -0
  181. package/src/cli/cached-generate.test.ts +531 -0
  182. package/src/cli/cached-generate.ts +348 -0
  183. package/src/cli/cartesia-provider.ts +249 -0
  184. package/src/cli/cli.ts +1818 -0
  185. package/src/cli/clone-generate.ts +202 -0
  186. package/src/{credentials.ts → cli/credentials.ts} +90 -7
  187. package/src/cli/elevenlabs-speech-provider.ts +243 -0
  188. package/src/cli/generate.test.ts +166 -0
  189. package/src/cli/generate.ts +912 -0
  190. package/src/{login.ts → cli/login.ts} +48 -3
  191. package/src/cli/main.ts +8 -0
  192. package/src/cli/model-catalog.ts +2336 -0
  193. package/src/cli/models.ts +408 -0
  194. package/src/cli/openai-speech-provider.ts +34 -0
  195. package/src/cli/separation-generate.ts +187 -0
  196. package/src/cli/speech-catalog.ts +253 -0
  197. package/src/cli/speech-generate.ts +275 -0
  198. package/src/cli/speech-models.ts +146 -0
  199. package/src/cli/speech-provider.test.ts +226 -0
  200. package/src/cli/transcription-catalog.ts +250 -0
  201. package/src/cli/transcription-generate.ts +214 -0
  202. package/src/cli/transcription-models.ts +136 -0
  203. package/src/cli/transcription-providers.ts +427 -0
  204. package/src/cli/video-model-catalog.ts +14 -0
  205. package/src/cli/xai-auth.ts +396 -0
  206. package/src/vite/angled-screen.tsx +214 -0
  207. package/src/vite/app.tsx +197 -0
  208. package/src/vite/bands-shader.tsx +319 -0
  209. package/src/vite/code-block.tsx +939 -0
  210. package/src/vite/components.tsx +278 -0
  211. package/src/vite/dispersion-rings-shader.tsx +331 -0
  212. package/src/vite/easing-curves.test.ts +232 -0
  213. package/src/vite/easing-curves.ts +743 -0
  214. package/src/vite/generated-media-client.tsx +121 -0
  215. package/src/vite/keyframes.tsx +347 -0
  216. package/src/vite/layout-editor.tsx +709 -0
  217. package/src/vite/layout-transition.tsx +706 -0
  218. package/src/vite/liquid-gradient-shader.tsx +474 -0
  219. package/src/vite/mdx-client.tsx +420 -0
  220. package/src/vite/mdx-parse.ts +343 -0
  221. package/src/vite/mdx-provided-components.ts +19 -0
  222. package/src/vite/mdx-video.test.tsx +2219 -0
  223. package/src/vite/mdx-video.tsx +976 -0
  224. package/src/vite/media-components.tsx +473 -0
  225. package/src/vite/media-duration-store.ts +225 -0
  226. package/src/vite/motion-timing.ts +194 -0
  227. package/src/vite/player-page.tsx +1107 -0
  228. package/src/vite/render-client.ts +84 -0
  229. package/src/vite/sdk.ts +598 -0
  230. package/src/vite/server-components.tsx +241 -0
  231. package/src/vite/server-mdx.ts +285 -0
  232. package/src/vite/shader-renderer.tsx +535 -0
  233. package/src/vite/store-hooks.ts +117 -0
  234. package/src/vite/store.test.ts +202 -0
  235. package/src/vite/store.ts +115 -0
  236. package/src/vite/styles.css +21 -0
  237. package/src/vite/tweakpane-hook.tsx +593 -0
  238. package/src/vite/virtual-modules.d.ts +30 -0
  239. package/src/vite/vite-plugin.ts +584 -0
  240. package/src/vite/wave-gradient-shader.tsx +253 -0
  241. package/README.md +0 -266
  242. package/dist/antigravity-auth.d.ts +0 -15
  243. package/dist/antigravity-auth.d.ts.map +0 -1
  244. package/dist/antigravity-auth.js +0 -544
  245. package/dist/antigravity-image.d.ts +0 -11
  246. package/dist/antigravity-image.d.ts.map +0 -1
  247. package/dist/antigravity-image.js +0 -285
  248. package/dist/chatgpt-auth.d.ts.map +0 -1
  249. package/dist/cli.d.ts +0 -3
  250. package/dist/cli.d.ts.map +0 -1
  251. package/dist/cli.js +0 -968
  252. package/dist/credentials.d.ts.map +0 -1
  253. package/dist/gateway-model-candidates.generated.d.ts +0 -11
  254. package/dist/gateway-model-candidates.generated.d.ts.map +0 -1
  255. package/dist/gateway-model-candidates.generated.js +0 -64
  256. package/dist/login.d.ts.map +0 -1
  257. package/dist/model-catalog.d.ts +0 -42
  258. package/dist/model-catalog.d.ts.map +0 -1
  259. package/dist/model-catalog.js +0 -1001
  260. package/dist/models.d.ts.map +0 -1
  261. package/dist/models.js +0 -246
  262. package/dist/open-browser.d.ts.map +0 -1
  263. package/dist/subscription.d.ts.map +0 -1
  264. package/dist/video-model-catalog.d.ts +0 -52
  265. package/dist/video-model-catalog.d.ts.map +0 -1
  266. package/dist/video-model-catalog.js +0 -306
  267. package/src/cli.ts +0 -1378
  268. package/src/model-catalog.ts +0 -1077
  269. package/src/models.ts +0 -309
  270. package/src/video-model-catalog.ts +0 -363
  271. /package/dist/{chatgpt-auth.d.ts → cli/chatgpt-auth.d.ts} +0 -0
  272. /package/dist/{chatgpt-auth.js → cli/chatgpt-auth.js} +0 -0
  273. /package/dist/{login.d.ts → cli/login.d.ts} +0 -0
  274. /package/dist/{open-browser.d.ts → cli/open-browser.d.ts} +0 -0
  275. /package/dist/{open-browser.js → cli/open-browser.js} +0 -0
  276. /package/dist/{subscription.d.ts → cli/subscription.d.ts} +0 -0
  277. /package/dist/{subscription.js → cli/subscription.js} +0 -0
  278. /package/src/{chatgpt-auth.ts → cli/chatgpt-auth.ts} +0 -0
  279. /package/src/{open-browser.ts → cli/open-browser.ts} +0 -0
  280. /package/src/{subscription.ts → cli/subscription.ts} +0 -0
@@ -1,1001 +0,0 @@
1
- // Single source of truth for all image generation models.
2
- // Every model's provider, pricing, features, and generation strategy lives here.
3
- // Other modules derive their data from this catalog — no separate registries.
4
- //
5
- // To add a model: add an entry to CATALOG with the right shared fragment spread.
6
- // To update pricing: change the cost field on the model entry.
7
- // To add a provider: create a new shared fragment and add models using it.
8
- // ─── shared fragments ────────────────────────────────────────────────────────
9
- // Spread these into model entries to avoid repeating common fields.
10
- const googleImagen = {
11
- provider: 'google',
12
- strategy: 'image',
13
- features: {
14
- editing: true,
15
- inpainting: true,
16
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
17
- seed: true,
18
- multipleImages: true,
19
- },
20
- };
21
- const googleText = {
22
- provider: 'google',
23
- strategy: 'text',
24
- features: {
25
- editing: true,
26
- inpainting: false,
27
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9', '2:3', '3:2', '4:5', '5:4'],
28
- seed: false,
29
- multipleImages: false,
30
- },
31
- };
32
- const openaiImage = {
33
- provider: 'openai',
34
- strategy: 'image',
35
- };
36
- const replicateImage = {
37
- provider: 'replicate',
38
- strategy: 'image',
39
- };
40
- const falImage = {
41
- provider: 'fal',
42
- strategy: 'image',
43
- };
44
- const bflImage = {
45
- provider: 'bfl',
46
- strategy: 'image',
47
- };
48
- const recraftImage = {
49
- provider: 'recraft',
50
- strategy: 'image',
51
- };
52
- const xaiImage = {
53
- provider: 'xai',
54
- strategy: 'image',
55
- };
56
- const vertexImagen = {
57
- provider: 'vertex',
58
- strategy: 'image',
59
- features: {
60
- ...googleImagen.features,
61
- },
62
- };
63
- const vertexText = {
64
- provider: 'vertex',
65
- strategy: 'text',
66
- features: {
67
- ...googleText.features,
68
- },
69
- };
70
- const fluxAspectRatios = ['1:1', '3:4', '4:3', '9:16', '16:9', '9:21', '21:9'];
71
- // ─── catalog ─────────────────────────────────────────────────────────────────
72
- export const CATALOG = [
73
- // ── Google: Imagen ─────────────────────────────────────────────────────
74
- {
75
- id: 'imagen-4.0-generate-001',
76
- name: 'Imagen 4',
77
- released: '2025-08-15',
78
- ...googleImagen,
79
- cost: { type: 'per-image', perImage: 0.04 },
80
- },
81
- {
82
- id: 'imagen-4.0-ultra-generate-001',
83
- name: 'Imagen 4 Ultra',
84
- released: '2025-08-15',
85
- ...googleImagen,
86
- cost: { type: 'per-image', perImage: 0.06 },
87
- },
88
- {
89
- id: 'imagen-4.0-fast-generate-001',
90
- name: 'Imagen 4 Fast',
91
- released: '2025-08-15',
92
- ...googleImagen,
93
- cost: { type: 'per-image', perImage: 0.02 },
94
- },
95
- // ── Google: Gemini text+image ──────────────────────────────────────────
96
- {
97
- id: 'gemini-2.0-flash-exp-image-generation',
98
- name: 'Gemini 2.0 Flash (Image)',
99
- released: '2025-03',
100
- ...googleText,
101
- cost: { type: 'per-token', inputPerM: 0.1, outputPerM: 0.4 },
102
- },
103
- {
104
- id: 'gemini-2.5-flash-image',
105
- name: 'Gemini 2.5 Flash Image',
106
- released: '2025-08-26',
107
- ...googleText,
108
- cost: { type: 'per-token', inputPerM: 0.3, outputPerM: 30 },
109
- },
110
- {
111
- id: 'gemini-3-pro-image-preview',
112
- name: 'Gemini 3 Pro Image',
113
- released: '2025-11-20',
114
- ...googleText,
115
- cost: { type: 'per-token', inputPerM: 1.25, outputPerM: 10 },
116
- },
117
- {
118
- id: 'nano-banana-pro-preview',
119
- name: 'Nano Banana Pro',
120
- description: 'Nano Banana Pro — the high-fidelity variant in the Nano Banana line, built on the ' +
121
- 'Gemini Pro backbone. Best for complex scenes requiring maximum quality at the expense ' +
122
- 'of higher cost and slower speed. Still the best fit for specialized high-fidelity tasks ' +
123
- 'where Nano Banana 2 trades off some quality for much faster, cheaper generation.',
124
- released: '2025-11-20',
125
- ...googleText,
126
- cost: { type: 'per-token', inputPerM: 0.3, outputPerM: 30 },
127
- },
128
- {
129
- id: 'gemini-3.1-flash-image-preview',
130
- name: 'Gemini 3.1 Flash Image (Nano Banana 2)',
131
- description: 'Nano Banana 2 — high-efficiency successor in the Nano Banana line. Targets Pro-like ' +
132
- 'quality with faster iteration and lower cost. Built on Gemini 3.1 Flash backbone. ' +
133
- 'Key upgrades: consistent rendering of up to 5 characters per workflow, new native ' +
134
- 'aspect ratios (4:1, 1:4, 8:1, 1:8), resolutions from 512px to 4K, improved text ' +
135
- 'rendering and in-image localization. Nano Banana Pro remains the best fit for ' +
136
- 'specialized high-fidelity tasks.',
137
- released: '2026-02-26',
138
- ...googleText,
139
- features: {
140
- ...googleText.features,
141
- aspectRatios: [
142
- ...googleText.features.aspectRatios,
143
- '4:1',
144
- '1:4',
145
- '8:1',
146
- '1:8',
147
- ],
148
- },
149
- cost: { type: 'per-token', inputPerM: 0.5, outputPerM: 3.0 },
150
- },
151
- // ── Vertex: Imagen ──────────────────────────────────────────────────────
152
- // Same models as Google AI Studio but routed through Vertex AI / Google Cloud billing.
153
- // Use `egaki login --provider vertex --key <key>` to configure.
154
- {
155
- id: 'vertex/imagen-4.0-generate-001',
156
- name: 'Imagen 4 (Vertex)',
157
- released: '2025-08-15',
158
- ...vertexImagen,
159
- cost: { type: 'per-image', perImage: 0.04 },
160
- },
161
- {
162
- id: 'vertex/imagen-4.0-ultra-generate-001',
163
- name: 'Imagen 4 Ultra (Vertex)',
164
- released: '2025-08-15',
165
- ...vertexImagen,
166
- cost: { type: 'per-image', perImage: 0.06 },
167
- },
168
- {
169
- id: 'vertex/imagen-4.0-fast-generate-001',
170
- name: 'Imagen 4 Fast (Vertex)',
171
- released: '2025-08-15',
172
- ...vertexImagen,
173
- cost: { type: 'per-image', perImage: 0.02 },
174
- },
175
- // ── Vertex: Gemini text+image ─────────────────────────────────────────
176
- {
177
- id: 'vertex/gemini-2.5-flash-image',
178
- name: 'Gemini 2.5 Flash Image (Vertex)',
179
- released: '2025-08-26',
180
- ...vertexText,
181
- cost: { type: 'per-token', inputPerM: 0.3, outputPerM: 30 },
182
- },
183
- {
184
- id: 'vertex/gemini-3-pro-image-preview',
185
- name: 'Gemini 3 Pro Image (Vertex)',
186
- released: '2025-11-20',
187
- ...vertexText,
188
- cost: { type: 'per-token', inputPerM: 1.25, outputPerM: 10 },
189
- },
190
- {
191
- id: 'vertex/gemini-3.1-flash-image-preview',
192
- name: 'Gemini 3.1 Flash Image (Vertex)',
193
- released: '2026-02-26',
194
- ...vertexText,
195
- features: {
196
- ...vertexText.features,
197
- aspectRatios: [
198
- ...vertexText.features.aspectRatios,
199
- '4:1',
200
- '1:4',
201
- '8:1',
202
- '1:8',
203
- ],
204
- },
205
- cost: { type: 'per-token', inputPerM: 0.5, outputPerM: 3.0 },
206
- },
207
- // ── BFL (AI Gateway) ───────────────────────────────────────────────────
208
- {
209
- id: 'flux-kontext-max',
210
- name: 'FLUX Kontext Max',
211
- released: '2025-06-12',
212
- ...bflImage,
213
- cost: { type: 'per-image', perImage: 0.08 },
214
- features: {
215
- editing: true,
216
- inpainting: false,
217
- aspectRatios: fluxAspectRatios,
218
- seed: true,
219
- multipleImages: false,
220
- },
221
- },
222
- {
223
- id: 'flux-kontext-pro',
224
- name: 'FLUX Kontext Pro',
225
- released: '2025-06-12',
226
- ...bflImage,
227
- cost: { type: 'per-image', perImage: 0.04 },
228
- features: {
229
- editing: true,
230
- inpainting: false,
231
- aspectRatios: fluxAspectRatios,
232
- seed: true,
233
- multipleImages: false,
234
- },
235
- },
236
- {
237
- id: 'flux-pro-1.0-fill',
238
- name: 'FLUX Pro 1.0 Fill',
239
- released: '2024-10-15',
240
- ...bflImage,
241
- cost: { type: 'per-image', perImage: 0.05 },
242
- features: {
243
- editing: true,
244
- inpainting: true,
245
- aspectRatios: fluxAspectRatios,
246
- seed: true,
247
- multipleImages: false,
248
- },
249
- },
250
- {
251
- id: 'flux-pro-1.1',
252
- name: 'FLUX Pro 1.1',
253
- released: '2024-10-01',
254
- ...bflImage,
255
- cost: { type: 'per-image', perImage: 0.04 },
256
- features: {
257
- editing: false,
258
- inpainting: false,
259
- aspectRatios: fluxAspectRatios,
260
- seed: true,
261
- multipleImages: false,
262
- },
263
- },
264
- {
265
- id: 'flux-pro-1.1-ultra',
266
- name: 'FLUX Pro 1.1 Ultra',
267
- released: '2024-11-06',
268
- ...bflImage,
269
- cost: { type: 'per-image', perImage: 0.06 },
270
- features: {
271
- editing: false,
272
- inpainting: false,
273
- aspectRatios: fluxAspectRatios,
274
- seed: true,
275
- multipleImages: false,
276
- },
277
- },
278
- // ── Recraft (AI Gateway) ───────────────────────────────────────────────
279
- {
280
- id: 'recraft-v2',
281
- name: 'Recraft v2',
282
- released: '2024-08-19',
283
- ...recraftImage,
284
- cost: { type: 'per-image', perImage: 0.04 },
285
- features: {
286
- editing: false,
287
- inpainting: false,
288
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
289
- seed: false,
290
- multipleImages: false,
291
- },
292
- },
293
- {
294
- id: 'recraft-v3',
295
- name: 'Recraft v3 (AI Gateway)',
296
- released: '2024-10-29',
297
- ...recraftImage,
298
- cost: { type: 'per-image', perImage: 0.04 },
299
- features: {
300
- editing: false,
301
- inpainting: false,
302
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
303
- seed: false,
304
- multipleImages: false,
305
- },
306
- },
307
- {
308
- id: 'recraft-v4',
309
- name: 'Recraft v4',
310
- released: '2025-10-08',
311
- ...recraftImage,
312
- cost: { type: 'per-image', perImage: 0.04 },
313
- features: {
314
- editing: false,
315
- inpainting: false,
316
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
317
- seed: false,
318
- multipleImages: false,
319
- },
320
- },
321
- {
322
- id: 'recraft-v4-pro',
323
- name: 'Recraft v4 Pro',
324
- released: '2025-10-08',
325
- ...recraftImage,
326
- cost: { type: 'per-image', perImage: 0.25 },
327
- features: {
328
- editing: false,
329
- inpainting: false,
330
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
331
- seed: false,
332
- multipleImages: false,
333
- },
334
- },
335
- // ── xAI (AI Gateway) ────────────────────────────────────────────────────
336
- {
337
- id: 'grok-imagine-image',
338
- name: 'Grok Imagine Image',
339
- released: '2026-03',
340
- ...xaiImage,
341
- cost: { type: 'per-image', perImage: 0.02 },
342
- features: {
343
- editing: true,
344
- inpainting: false,
345
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
346
- seed: false,
347
- multipleImages: true,
348
- },
349
- },
350
- {
351
- id: 'grok-imagine-image-pro',
352
- name: 'Grok Imagine Image Pro',
353
- released: '2026-03',
354
- ...xaiImage,
355
- cost: { type: 'per-image', perImage: 0.07 },
356
- features: {
357
- editing: true,
358
- inpainting: false,
359
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
360
- seed: false,
361
- multipleImages: true,
362
- },
363
- },
364
- // ── OpenAI ─────────────────────────────────────────────────────────────
365
- {
366
- id: 'dall-e-2',
367
- name: 'DALL-E 2',
368
- released: '2022-11-03',
369
- ...openaiImage,
370
- cost: { type: 'per-image', perImage: 0.02 },
371
- features: {
372
- editing: true,
373
- inpainting: true,
374
- aspectRatios: [],
375
- sizes: ['256x256', '512x512', '1024x1024'],
376
- seed: false,
377
- multipleImages: true,
378
- },
379
- },
380
- {
381
- id: 'dall-e-3',
382
- name: 'DALL-E 3',
383
- released: '2023-10-03',
384
- ...openaiImage,
385
- cost: { type: 'per-image', perImage: 0.04 },
386
- features: {
387
- editing: false,
388
- inpainting: false,
389
- aspectRatios: [],
390
- sizes: ['1024x1024', '1792x1024', '1024x1792'],
391
- seed: false,
392
- multipleImages: false,
393
- },
394
- },
395
- {
396
- id: 'gpt-image-1',
397
- name: 'GPT Image 1',
398
- released: '2025-04-23',
399
- ...openaiImage,
400
- cost: { type: 'per-image', perImage: 0.04 },
401
- features: {
402
- editing: true,
403
- inpainting: true,
404
- aspectRatios: [],
405
- sizes: ['1024x1024', '1536x1024', '1024x1536'],
406
- seed: false,
407
- multipleImages: true,
408
- },
409
- },
410
- {
411
- id: 'gpt-image-1-mini',
412
- name: 'GPT Image 1 Mini',
413
- released: '2025-10-06',
414
- ...openaiImage,
415
- cost: { type: 'per-image', perImage: 0.009 },
416
- features: {
417
- editing: true,
418
- inpainting: true,
419
- aspectRatios: [],
420
- sizes: ['1024x1024', '1536x1024', '1024x1536'],
421
- seed: false,
422
- multipleImages: true,
423
- },
424
- },
425
- {
426
- id: 'gpt-image-1.5',
427
- name: 'GPT Image 1.5',
428
- released: '2025-12-16',
429
- ...openaiImage,
430
- cost: { type: 'per-image', perImage: 0.034 },
431
- features: {
432
- editing: true,
433
- inpainting: true,
434
- aspectRatios: [],
435
- sizes: ['1024x1024', '1536x1024', '1024x1536'],
436
- seed: false,
437
- multipleImages: true,
438
- },
439
- },
440
- {
441
- id: 'gpt-image-2',
442
- name: 'GPT Image 2',
443
- description: 'State-of-the-art image generation model with token-based pricing. ' +
444
- 'Cost varies by quality and size; $0.053 is the medium-quality 1024×1024 estimate.',
445
- released: '2026-04-21',
446
- ...openaiImage,
447
- // Token-based pricing: $30/1M output image tokens. Medium quality 1024×1024 ≈ $0.053.
448
- cost: { type: 'per-image', perImage: 0.053 },
449
- features: {
450
- editing: true,
451
- inpainting: true,
452
- aspectRatios: [],
453
- sizes: ['1024x1024', '1536x1024', '1024x1536'],
454
- seed: false,
455
- multipleImages: true,
456
- },
457
- },
458
- {
459
- id: 'chatgpt-image-latest',
460
- name: 'ChatGPT Image',
461
- description: 'Rolling-latest alias that tracks the newest ChatGPT image model. Currently points ' +
462
- 'to gpt-image-2. Pricing may shift when the alias retargets to a newer model.',
463
- released: '2026-01',
464
- ...openaiImage,
465
- // Matches gpt-image-2 medium quality 1024×1024 estimate.
466
- cost: { type: 'per-image', perImage: 0.053 },
467
- features: {
468
- editing: true,
469
- inpainting: true,
470
- aspectRatios: [],
471
- sizes: ['1024x1024', '1536x1024', '1024x1536'],
472
- seed: false,
473
- multipleImages: true,
474
- },
475
- },
476
- // ── Replicate ──────────────────────────────────────────────────────────
477
- {
478
- id: 'black-forest-labs/flux-1.1-pro',
479
- name: 'Flux 1.1 Pro',
480
- released: '2024-10-01',
481
- ...replicateImage,
482
- cost: { type: 'per-image', perImage: 0.04 },
483
- features: {
484
- editing: false,
485
- inpainting: false,
486
- aspectRatios: fluxAspectRatios,
487
- seed: true,
488
- multipleImages: false,
489
- },
490
- },
491
- {
492
- id: 'black-forest-labs/flux-1.1-pro-ultra',
493
- name: 'Flux 1.1 Pro Ultra',
494
- released: '2024-11-06',
495
- ...replicateImage,
496
- cost: { type: 'per-image', perImage: 0.06 },
497
- features: {
498
- editing: false,
499
- inpainting: false,
500
- aspectRatios: fluxAspectRatios,
501
- seed: true,
502
- multipleImages: false,
503
- },
504
- },
505
- {
506
- id: 'black-forest-labs/flux-2-pro',
507
- name: 'Flux 2 Pro',
508
- released: '2025-11-25',
509
- ...replicateImage,
510
- cost: { type: 'per-image', perImage: 0.015 },
511
- features: {
512
- editing: false,
513
- inpainting: false,
514
- aspectRatios: fluxAspectRatios,
515
- seed: true,
516
- multipleImages: false,
517
- },
518
- },
519
- {
520
- id: 'black-forest-labs/flux-2-dev',
521
- name: 'Flux 2 Dev',
522
- released: '2025-11-25',
523
- ...replicateImage,
524
- cost: { type: 'per-image', perImage: 0.012 },
525
- features: {
526
- editing: false,
527
- inpainting: false,
528
- aspectRatios: fluxAspectRatios,
529
- seed: true,
530
- multipleImages: false,
531
- },
532
- },
533
- {
534
- id: 'black-forest-labs/flux-dev',
535
- name: 'Flux Dev',
536
- released: '2024-08-01',
537
- ...replicateImage,
538
- cost: { type: 'per-image', perImage: 0.025 },
539
- features: {
540
- editing: false,
541
- inpainting: false,
542
- aspectRatios: fluxAspectRatios,
543
- seed: true,
544
- multipleImages: false,
545
- },
546
- },
547
- {
548
- id: 'black-forest-labs/flux-pro',
549
- name: 'Flux Pro',
550
- released: '2024-08-01',
551
- ...replicateImage,
552
- cost: { type: 'per-image', perImage: 0.055 },
553
- features: {
554
- editing: false,
555
- inpainting: false,
556
- aspectRatios: fluxAspectRatios,
557
- seed: true,
558
- multipleImages: false,
559
- },
560
- },
561
- {
562
- id: 'black-forest-labs/flux-schnell',
563
- name: 'Flux Schnell',
564
- released: '2024-08-01',
565
- ...replicateImage,
566
- cost: { type: 'per-image', perImage: 0.003 },
567
- features: {
568
- editing: false,
569
- inpainting: false,
570
- aspectRatios: fluxAspectRatios,
571
- seed: true,
572
- multipleImages: false,
573
- },
574
- },
575
- {
576
- id: 'black-forest-labs/flux-fill-pro',
577
- name: 'Flux Fill Pro',
578
- released: '2024-10-15',
579
- ...replicateImage,
580
- cost: { type: 'per-image', perImage: 0.05 },
581
- features: {
582
- editing: true,
583
- inpainting: true,
584
- aspectRatios: fluxAspectRatios,
585
- seed: true,
586
- multipleImages: false,
587
- },
588
- },
589
- {
590
- id: 'black-forest-labs/flux-fill-dev',
591
- name: 'Flux Fill Dev',
592
- released: '2024-10-15',
593
- ...replicateImage,
594
- cost: { type: 'per-image', perImage: 0.04 },
595
- features: {
596
- editing: true,
597
- inpainting: true,
598
- aspectRatios: fluxAspectRatios,
599
- seed: true,
600
- multipleImages: false,
601
- },
602
- },
603
- {
604
- id: 'ideogram-ai/ideogram-v2',
605
- name: 'Ideogram v2',
606
- released: '2024-08-19',
607
- ...replicateImage,
608
- cost: { type: 'per-image', perImage: 0.08 },
609
- features: {
610
- editing: false,
611
- inpainting: false,
612
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
613
- seed: true,
614
- multipleImages: false,
615
- },
616
- },
617
- {
618
- id: 'ideogram-ai/ideogram-v2-turbo',
619
- name: 'Ideogram v2 Turbo',
620
- released: '2024-08-19',
621
- ...replicateImage,
622
- cost: { type: 'per-image', perImage: 0.05 },
623
- features: {
624
- editing: false,
625
- inpainting: false,
626
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
627
- seed: true,
628
- multipleImages: false,
629
- },
630
- },
631
- {
632
- id: 'recraft-ai/recraft-v3',
633
- name: 'Recraft v3',
634
- released: '2024-10-29',
635
- ...replicateImage,
636
- cost: { type: 'per-image', perImage: 0.04 },
637
- features: {
638
- editing: false,
639
- inpainting: false,
640
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
641
- seed: true,
642
- multipleImages: false,
643
- },
644
- },
645
- {
646
- id: 'recraft-ai/recraft-v3-svg',
647
- name: 'Recraft v3 SVG',
648
- released: '2024-10-29',
649
- ...replicateImage,
650
- cost: { type: 'per-image', perImage: 0.08 },
651
- features: {
652
- editing: false,
653
- inpainting: false,
654
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
655
- seed: true,
656
- multipleImages: false,
657
- },
658
- },
659
- {
660
- id: 'stability-ai/stable-diffusion-3.5-large',
661
- name: 'SD 3.5 Large',
662
- released: '2024-10-22',
663
- ...replicateImage,
664
- cost: { type: 'per-image', perImage: 0.065 },
665
- features: {
666
- editing: false,
667
- inpainting: false,
668
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9', '9:21', '21:9'],
669
- seed: true,
670
- multipleImages: false,
671
- },
672
- },
673
- {
674
- id: 'stability-ai/stable-diffusion-3.5-large-turbo',
675
- name: 'SD 3.5 Large Turbo',
676
- released: '2024-10-22',
677
- ...replicateImage,
678
- cost: { type: 'per-image', perImage: 0.04 },
679
- features: {
680
- editing: false,
681
- inpainting: false,
682
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9', '9:21', '21:9'],
683
- seed: true,
684
- multipleImages: false,
685
- },
686
- },
687
- {
688
- id: 'stability-ai/stable-diffusion-3.5-medium',
689
- name: 'SD 3.5 Medium',
690
- released: '2024-10-29',
691
- ...replicateImage,
692
- cost: { type: 'per-image', perImage: 0.035 },
693
- features: {
694
- editing: false,
695
- inpainting: false,
696
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9', '9:21', '21:9'],
697
- seed: true,
698
- multipleImages: false,
699
- },
700
- },
701
- {
702
- id: 'luma/photon',
703
- name: 'Luma Photon',
704
- released: '2024-12-10',
705
- ...replicateImage,
706
- cost: { type: 'per-image', perImage: 0.03 },
707
- features: {
708
- editing: false,
709
- inpainting: false,
710
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9', '9:21', '21:9'],
711
- seed: true,
712
- multipleImages: false,
713
- },
714
- },
715
- {
716
- id: 'luma/photon-flash',
717
- name: 'Luma Photon Flash',
718
- released: '2024-12-10',
719
- ...replicateImage,
720
- cost: { type: 'per-image', perImage: 0.01 },
721
- features: {
722
- editing: false,
723
- inpainting: false,
724
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9', '9:21', '21:9'],
725
- seed: true,
726
- multipleImages: false,
727
- },
728
- },
729
- {
730
- id: 'nvidia/sana',
731
- name: 'NVIDIA Sana',
732
- released: '2024-11-27',
733
- ...replicateImage,
734
- cost: { type: 'per-image', perImage: 0.01 },
735
- features: {
736
- editing: false,
737
- inpainting: false,
738
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
739
- seed: true,
740
- multipleImages: false,
741
- },
742
- },
743
- // ── Fal ────────────────────────────────────────────────────────────────
744
- {
745
- id: 'fal-ai/flux/schnell',
746
- name: 'Flux Schnell',
747
- released: '2024-08-01',
748
- ...falImage,
749
- cost: { type: 'per-image', perImage: 0.003 },
750
- features: {
751
- editing: false,
752
- inpainting: false,
753
- aspectRatios: fluxAspectRatios,
754
- seed: true,
755
- multipleImages: true,
756
- },
757
- },
758
- {
759
- id: 'fal-ai/flux/dev',
760
- name: 'Flux Dev',
761
- released: '2024-08-01',
762
- ...falImage,
763
- cost: { type: 'per-image', perImage: 0.025 },
764
- features: {
765
- editing: false,
766
- inpainting: false,
767
- aspectRatios: fluxAspectRatios,
768
- seed: true,
769
- multipleImages: true,
770
- },
771
- },
772
- {
773
- id: 'fal-ai/flux-general',
774
- name: 'Flux General',
775
- released: '2025-01',
776
- ...falImage,
777
- cost: { type: 'per-image', perImage: 0.075 },
778
- features: {
779
- editing: true,
780
- inpainting: false,
781
- aspectRatios: fluxAspectRatios,
782
- seed: true,
783
- multipleImages: true,
784
- },
785
- },
786
- {
787
- id: 'fal-ai/flux-general/inpainting',
788
- name: 'Flux General Inpainting',
789
- released: '2025-01',
790
- ...falImage,
791
- cost: { type: 'per-image', perImage: 0.075 },
792
- features: {
793
- editing: true,
794
- inpainting: true,
795
- aspectRatios: fluxAspectRatios,
796
- seed: true,
797
- multipleImages: false,
798
- },
799
- },
800
- {
801
- id: 'fal-ai/flux-general/image-to-image',
802
- name: 'Flux General Image-to-Image',
803
- released: '2025-01',
804
- ...falImage,
805
- cost: { type: 'per-image', perImage: 0.075 },
806
- features: {
807
- editing: true,
808
- inpainting: false,
809
- aspectRatios: fluxAspectRatios,
810
- seed: true,
811
- multipleImages: false,
812
- },
813
- },
814
- {
815
- id: 'fal-ai/flux-pro/v1.1',
816
- name: 'Flux Pro 1.1',
817
- released: '2024-10-01',
818
- ...falImage,
819
- cost: { type: 'per-image', perImage: 0.04 },
820
- features: {
821
- editing: false,
822
- inpainting: false,
823
- aspectRatios: fluxAspectRatios,
824
- seed: true,
825
- multipleImages: false,
826
- },
827
- },
828
- {
829
- id: 'fal-ai/flux-pro/v1.1-ultra',
830
- name: 'Flux Pro 1.1 Ultra',
831
- released: '2024-11-06',
832
- ...falImage,
833
- cost: { type: 'per-image', perImage: 0.06 },
834
- features: {
835
- editing: false,
836
- inpainting: false,
837
- aspectRatios: fluxAspectRatios,
838
- seed: true,
839
- multipleImages: false,
840
- },
841
- },
842
- {
843
- id: 'fal-ai/flux-pro/kontext',
844
- name: 'Flux Kontext',
845
- released: '2025-06-12',
846
- ...falImage,
847
- cost: { type: 'per-image', perImage: 0.04 },
848
- features: {
849
- editing: true,
850
- inpainting: false,
851
- aspectRatios: fluxAspectRatios,
852
- seed: true,
853
- multipleImages: false,
854
- },
855
- },
856
- {
857
- id: 'fal-ai/flux-pro/kontext/max',
858
- name: 'Flux Kontext Max',
859
- released: '2025-06-12',
860
- ...falImage,
861
- cost: { type: 'per-image', perImage: 0.08 },
862
- features: {
863
- editing: true,
864
- inpainting: false,
865
- aspectRatios: fluxAspectRatios,
866
- seed: true,
867
- multipleImages: false,
868
- },
869
- },
870
- {
871
- id: 'fal-ai/flux-lora',
872
- name: 'Flux LoRA',
873
- released: '2024-09',
874
- ...falImage,
875
- cost: { type: 'per-image', perImage: 0.035 },
876
- features: {
877
- editing: false,
878
- inpainting: false,
879
- aspectRatios: fluxAspectRatios,
880
- seed: true,
881
- multipleImages: true,
882
- },
883
- },
884
- {
885
- id: 'fal-ai/recraft/v3/text-to-image',
886
- name: 'Recraft v3',
887
- released: '2024-10-29',
888
- ...falImage,
889
- cost: { type: 'per-image', perImage: 0.04 },
890
- features: {
891
- editing: false,
892
- inpainting: false,
893
- aspectRatios: fluxAspectRatios,
894
- seed: true,
895
- multipleImages: false,
896
- },
897
- },
898
- {
899
- id: 'fal-ai/recraft/v3/image-to-image',
900
- name: 'Recraft v3 Image-to-Image',
901
- released: '2024-10-29',
902
- ...falImage,
903
- cost: { type: 'per-image', perImage: 0.04 },
904
- features: {
905
- editing: true,
906
- inpainting: false,
907
- aspectRatios: fluxAspectRatios,
908
- seed: true,
909
- multipleImages: false,
910
- },
911
- },
912
- {
913
- id: 'fal-ai/ideogram/character',
914
- name: 'Ideogram Character',
915
- released: '2025-03',
916
- ...falImage,
917
- cost: { type: 'per-image', perImage: 0.10 },
918
- features: {
919
- editing: true,
920
- inpainting: true,
921
- aspectRatios: fluxAspectRatios,
922
- seed: true,
923
- multipleImages: false,
924
- },
925
- },
926
- {
927
- id: 'fal-ai/imagen4/preview',
928
- name: 'Imagen 4 (Fal)',
929
- released: '2025-08-15',
930
- ...falImage,
931
- cost: { type: 'per-image', perImage: 0.04 },
932
- features: {
933
- editing: false,
934
- inpainting: false,
935
- aspectRatios: ['1:1', '3:4', '4:3', '9:16', '16:9'],
936
- seed: true,
937
- multipleImages: false,
938
- },
939
- },
940
- {
941
- id: 'fal-ai/luma-photon',
942
- name: 'Luma Photon (Fal)',
943
- released: '2024-12-10',
944
- ...falImage,
945
- cost: { type: 'per-image', perImage: 0.019 },
946
- features: {
947
- editing: false,
948
- inpainting: false,
949
- aspectRatios: fluxAspectRatios,
950
- seed: false,
951
- multipleImages: false,
952
- },
953
- },
954
- {
955
- id: 'fal-ai/luma-photon/flash',
956
- name: 'Luma Photon Flash (Fal)',
957
- released: '2024-12-10',
958
- ...falImage,
959
- cost: { type: 'per-image', perImage: 0.005 },
960
- features: {
961
- editing: false,
962
- inpainting: false,
963
- aspectRatios: fluxAspectRatios,
964
- seed: false,
965
- multipleImages: false,
966
- },
967
- },
968
- {
969
- id: 'fal-ai/omnigen-v2',
970
- name: 'OmniGen v2',
971
- released: '2025-06',
972
- ...falImage,
973
- cost: { type: 'per-image', perImage: 0.03 },
974
- features: {
975
- editing: true,
976
- inpainting: false,
977
- aspectRatios: fluxAspectRatios,
978
- seed: true,
979
- multipleImages: false,
980
- },
981
- },
982
- {
983
- id: 'fal-ai/qwen-image',
984
- name: 'Qwen Image',
985
- released: '2025-06',
986
- ...falImage,
987
- cost: { type: 'per-image', perImage: 0.03 },
988
- features: {
989
- editing: false,
990
- inpainting: false,
991
- aspectRatios: fluxAspectRatios,
992
- seed: true,
993
- multipleImages: false,
994
- },
995
- },
996
- ];
997
- // ─── lookup helpers ──────────────────────────────────────────────────────────
998
- const catalogIndex = new Map(CATALOG.map((m) => [m.id, m]));
999
- export function findModel(id) {
1000
- return catalogIndex.get(id);
1001
- }