@fudrouter/fsrouter 0.6.43 → 0.6.44

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 (418) hide show
  1. package/package.json +1 -1
  2. package/public/.vite/manifest.json +469 -0
  3. package/public/CHANGELOG.md +103 -0
  4. package/public/assets/EndpointPageClient.CGB3HjDe.js +6 -0
  5. package/public/assets/EndpointPageClient.Cee8kfmV.js +6 -0
  6. package/public/assets/EndpointPageClient.DdAfxJoK.js +6 -0
  7. package/public/assets/EndpointPageClient.GpJ_FKds.js +6 -0
  8. package/public/assets/Loading.BhEzHe-X.js +1 -0
  9. package/public/assets/Loading.DFkQ-Ly9.js +1 -0
  10. package/public/assets/Loading.DaQG3sHF.js +1 -0
  11. package/public/assets/Loading.QMOYJhLu.js +1 -0
  12. package/public/assets/NoAuthProxyCard.Buvt0BVH.js +89 -0
  13. package/public/assets/NoAuthProxyCard.C18iZ3Fk.js +89 -0
  14. package/public/assets/NoAuthProxyCard.C5ap-Sga.css +1 -0
  15. package/public/assets/NoAuthProxyCard.DyEjms20.js +89 -0
  16. package/public/assets/NoAuthProxyCard.VRP7gDcs.js +89 -0
  17. package/public/assets/cliTools.CsdwAybi.js +23 -0
  18. package/public/assets/index.1VBQU7rF.js +11 -0
  19. package/public/assets/index.B-zMpSp_.js +89 -0
  20. package/public/assets/index.BuPfZebu.css +1 -0
  21. package/public/assets/index.CoYbjSIL.js +89 -0
  22. package/public/assets/index.DQDDDpp7.js +89 -0
  23. package/public/assets/index.KMEObSAk.js +89 -0
  24. package/public/assets/machine.CagOtseJ.js +1 -0
  25. package/public/assets/material-symbols-outlined.B4RtTC4Y.woff2 +0 -0
  26. package/public/assets/page.1gncE-Vr.js +1 -0
  27. package/public/assets/page.3QwV1pLl.js +1 -0
  28. package/public/assets/page.5Aj6RvuD.js +1 -0
  29. package/public/assets/page.A7FRfarX.js +1 -0
  30. package/public/assets/page.Amtgxj_r.js +1 -0
  31. package/public/assets/page.B1a01Vfg.js +1 -0
  32. package/public/assets/page.B7h6EPVo.js +1 -0
  33. package/public/assets/page.B9r7QI90.js +1 -0
  34. package/public/assets/page.BAjUiqtJ.js +4 -0
  35. package/public/assets/page.BBMJAyy7.js +1 -0
  36. package/public/assets/page.BBSUQskO.js +64 -0
  37. package/public/assets/page.BCPmNscX.js +1 -0
  38. package/public/assets/page.BFENid_V.js +31 -0
  39. package/public/assets/page.BIG_uMBA.js +1 -0
  40. package/public/assets/page.BINfJPNt.js +1 -0
  41. package/public/assets/page.BJzBUr1v.js +2 -0
  42. package/public/assets/page.BKM5Up2Y.js +1 -0
  43. package/public/assets/page.BLUEyope.js +1 -0
  44. package/public/assets/page.BMeBT03D.js +5 -0
  45. package/public/assets/page.BMf0BFTW.js +1 -0
  46. package/public/assets/page.BONoTspJ.js +1 -0
  47. package/public/assets/page.BQwH91-m.js +1 -0
  48. package/public/assets/page.BRgXbpJe.js +1 -0
  49. package/public/assets/page.BV28PqHr.js +1 -0
  50. package/public/assets/page.BW6Rv-_k.js +1 -0
  51. package/public/assets/page.BXq7Sixg.js +1 -0
  52. package/public/assets/page.Bb3E5EzI.js +6 -0
  53. package/public/assets/page.Bbf1xxJj.js +1 -0
  54. package/public/assets/page.BcuklMLO.js +2 -0
  55. package/public/assets/page.BdPGDnx0.js +6 -0
  56. package/public/assets/page.Bi5OEfgq.js +1 -0
  57. package/public/assets/page.Bi9gIWN0.js +1 -0
  58. package/public/assets/page.BiLGOe6j.js +1 -0
  59. package/public/assets/page.BicDCwTa.js +1 -0
  60. package/public/assets/page.Bj0au_ka.js +5 -0
  61. package/public/assets/page.Bjd38gaf.js +1 -0
  62. package/public/assets/page.BmOXfa4k.js +1 -0
  63. package/public/assets/page.Bqk4tX-5.js +1 -0
  64. package/public/assets/page.BrrSjbBJ.js +1 -0
  65. package/public/assets/page.BsUeE2Y_.js +1 -0
  66. package/public/assets/page.BthVvW1e.js +64 -0
  67. package/public/assets/page.BxAWh20c.js +1 -0
  68. package/public/assets/page.C-2GmPmS.js +4 -0
  69. package/public/assets/page.C27wrrub.js +1 -0
  70. package/public/assets/page.C3FwsCq_.js +23 -0
  71. package/public/assets/page.C4RMU4Xv.js +23 -0
  72. package/public/assets/page.C7SC9vwX.js +1 -0
  73. package/public/assets/page.C8gTAwsH.js +5 -0
  74. package/public/assets/page.CB__T51y.js +2 -0
  75. package/public/assets/page.CDVZIbSe.js +2 -0
  76. package/public/assets/page.CECQKY1y.js +5 -0
  77. package/public/assets/page.CEN8xgCA.js +1 -0
  78. package/public/assets/page.CF5pD5lz.js +1 -0
  79. package/public/assets/page.CHG9mx5l.js +1 -0
  80. package/public/assets/page.CMUOu9fe.js +1 -0
  81. package/public/assets/page.CRex977Y.js +5 -0
  82. package/public/assets/page.CTdMdgI4.js +23 -0
  83. package/public/assets/page.CUsb0F5t.js +1 -0
  84. package/public/assets/page.CVu_9TAu.js +64 -0
  85. package/public/assets/page.CXE5AWV3.js +1 -0
  86. package/public/assets/page.CXIP8Wzi.js +4 -0
  87. package/public/assets/page.CXOuLQhq.js +1 -0
  88. package/public/assets/page.CXPMjDX9.js +1 -0
  89. package/public/assets/page.CXPPlybJ.js +6 -0
  90. package/public/assets/page.CYfjd9SF.js +1 -0
  91. package/public/assets/page.CZtbttgE.js +1 -0
  92. package/public/assets/page.CbOSwuwi.js +1 -0
  93. package/public/assets/page.CbWWyTC4.js +1 -0
  94. package/public/assets/page.CdbMx9XI.js +1 -0
  95. package/public/assets/page.CfDkX9XZ.js +31 -0
  96. package/public/assets/page.CfXJWUgA.js +1 -0
  97. package/public/assets/page.CfdTLncK.js +1 -0
  98. package/public/assets/page.ChqEg6y-.js +1 -0
  99. package/public/assets/page.ClXnUNhb.js +1 -0
  100. package/public/assets/page.CmbatQd6.js +4 -0
  101. package/public/assets/page.Cp7XaHGI.js +1 -0
  102. package/public/assets/page.CqR-Z0pY.js +1 -0
  103. package/public/assets/page.CrzjUbZg.js +1 -0
  104. package/public/assets/page.CsLBZFbk.js +1 -0
  105. package/public/assets/page.CyqTG9Kn.js +2 -0
  106. package/public/assets/page.CzKSjT-r.js +1 -0
  107. package/public/assets/page.D1S50DvR.js +1 -0
  108. package/public/assets/page.D3b1o69R.js +5 -0
  109. package/public/assets/page.D5B_p_2E.js +31 -0
  110. package/public/assets/page.D6TULIkh.js +1 -0
  111. package/public/assets/page.D8X-8LSd.js +2 -0
  112. package/public/assets/page.DA2dX7iN.js +1 -0
  113. package/public/assets/page.DAgwiopx.js +1 -0
  114. package/public/assets/page.DBNjxgJS.js +6 -0
  115. package/public/assets/page.DEBBy5qz.js +1 -0
  116. package/public/assets/page.DEOXc6iv.js +6 -0
  117. package/public/assets/page.DG46DZcu.js +1 -0
  118. package/public/assets/page.DGAKp9YS.js +1 -0
  119. package/public/assets/page.DGico7sP.js +1 -0
  120. package/public/assets/page.DHBHS2oS.js +1 -0
  121. package/public/assets/page.DIrcssm-.js +1 -0
  122. package/public/assets/page.DKdtfq8E.js +2 -0
  123. package/public/assets/page.DKj8qFYb.js +1 -0
  124. package/public/assets/page.DNofNt4p.js +1 -0
  125. package/public/assets/page.DVdv-E5d.js +1 -0
  126. package/public/assets/page.Da-kutqN.js +1 -0
  127. package/public/assets/page.DaW7T6nt.js +1 -0
  128. package/public/assets/page.DgnlzpNx.js +1 -0
  129. package/public/assets/page.DhPzWwGm.js +1 -0
  130. package/public/assets/page.DhcizW_i.js +1 -0
  131. package/public/assets/page.Dju6Kwa5.js +1 -0
  132. package/public/assets/page.Dlh3Q_rt.js +1 -0
  133. package/public/assets/page.DmNhmYKk.js +64 -0
  134. package/public/assets/page.Dmvhu2ua.js +1 -0
  135. package/public/assets/page.Dp30ZzXE.js +1 -0
  136. package/public/assets/page.DsY8qNEU.js +1 -0
  137. package/public/assets/page.DskvkVIF.js +1 -0
  138. package/public/assets/page.DtGEStU7.js +1 -0
  139. package/public/assets/page.DuXsnK8A.js +1 -0
  140. package/public/assets/page.DwU6Ubqf.js +1 -0
  141. package/public/assets/page.FmrKiZlG.js +2 -0
  142. package/public/assets/page.GSAm83Cv.js +6 -0
  143. package/public/assets/page.IgH-AWcu.js +1 -0
  144. package/public/assets/page.Ii8wGSnt.js +1 -0
  145. package/public/assets/page.KtURQA9Q.js +1 -0
  146. package/public/assets/page.NFGJtdfx.js +1 -0
  147. package/public/assets/page.QPaIzKAa.js +1 -0
  148. package/public/assets/page.QuBXfL80.js +1 -0
  149. package/public/assets/page.S02TdGZT.js +1 -0
  150. package/public/assets/page.V3CmUOJF.js +1 -0
  151. package/public/assets/page.VClP2n2B.js +1 -0
  152. package/public/assets/page.Vo9Oe8DJ.js +1 -0
  153. package/public/assets/page.WIMFvXoG.js +1 -0
  154. package/public/assets/page.XUya1XZj.js +23 -0
  155. package/public/assets/page.XqKIvnmq.js +31 -0
  156. package/public/assets/page.aAUPKg0H.js +1 -0
  157. package/public/assets/page.aRQdaBbf.js +1 -0
  158. package/public/assets/page.e-Zxfi03.js +1 -0
  159. package/public/assets/page.e-cA5aB5.js +6 -0
  160. package/public/assets/page.eNXd9f58.js +6 -0
  161. package/public/assets/page.gj2B5h2d.js +1 -0
  162. package/public/assets/page.gvZgqycR.js +1 -0
  163. package/public/assets/page.jvowBQYJ.js +1 -0
  164. package/public/assets/page.k_WzlZwU.js +5 -0
  165. package/public/assets/page.qK1RUb_S.js +1 -0
  166. package/public/assets/page.ryYPRTww.js +1 -0
  167. package/public/assets/page.u7XFxplU.js +1 -0
  168. package/public/assets/page.xm98_0dX.js +5 -0
  169. package/public/assets/page.yjCJ-4Uh.js +1 -0
  170. package/public/assets/react.l0sNRNKZ.js +1 -0
  171. package/public/assets/router.Cjj1--8t.js +28 -0
  172. package/public/assets/zustand.akaTi5uX.js +1 -0
  173. package/public/favicon.ico +0 -0
  174. package/public/favicon.png +0 -0
  175. package/public/icons/icon-192.svg +4 -0
  176. package/public/icons/icon-512.svg +4 -0
  177. package/public/image-video-docs.html +1363 -0
  178. package/public/index.html +21 -0
  179. package/public/logo_amrouter.png +0 -0
  180. package/public/logo_fsrouter.png +0 -0
  181. package/public/logo_fsrouter.svg +10 -0
  182. package/public/logo_fsrouter_backup.png +0 -0
  183. package/public/logo_v2.png +0 -0
  184. package/public/providers/agentrouter.png +0 -0
  185. package/public/providers/agentrouter.webp +0 -0
  186. package/public/providers/alicode-intl.png +0 -0
  187. package/public/providers/alicode-intl.webp +0 -0
  188. package/public/providers/alicode.png +0 -0
  189. package/public/providers/alicode.webp +0 -0
  190. package/public/providers/amp.png +0 -0
  191. package/public/providers/amp.webp +0 -0
  192. package/public/providers/anthropic-m.png +0 -0
  193. package/public/providers/anthropic-m.webp +0 -0
  194. package/public/providers/anthropic.png +0 -0
  195. package/public/providers/anthropic.webp +0 -0
  196. package/public/providers/antigravity.png +0 -0
  197. package/public/providers/antigravity.webp +0 -0
  198. package/public/providers/assemblyai.png +0 -0
  199. package/public/providers/assemblyai.webp +0 -0
  200. package/public/providers/aws-polly.png +0 -0
  201. package/public/providers/aws-polly.webp +0 -0
  202. package/public/providers/azure.png +0 -0
  203. package/public/providers/azure.webp +0 -0
  204. package/public/providers/black-forest-labs.png +0 -0
  205. package/public/providers/black-forest-labs.webp +0 -0
  206. package/public/providers/blackbox.png +0 -0
  207. package/public/providers/blackbox.webp +0 -0
  208. package/public/providers/brave-search.png +0 -0
  209. package/public/providers/brave-search.webp +0 -0
  210. package/public/providers/byteplus.png +0 -0
  211. package/public/providers/byteplus.webp +0 -0
  212. package/public/providers/cartesia.png +0 -0
  213. package/public/providers/cartesia.webp +0 -0
  214. package/public/providers/cerebras.png +0 -0
  215. package/public/providers/cerebras.webp +0 -0
  216. package/public/providers/chutes.png +0 -0
  217. package/public/providers/chutes.webp +0 -0
  218. package/public/providers/claude.png +0 -0
  219. package/public/providers/claude.webp +0 -0
  220. package/public/providers/cline.png +0 -0
  221. package/public/providers/cline.webp +0 -0
  222. package/public/providers/clinepass.png +0 -0
  223. package/public/providers/cloudflare-ai.png +0 -0
  224. package/public/providers/cloudflare-ai.webp +0 -0
  225. package/public/providers/codebuddy-cn.png +0 -0
  226. package/public/providers/codebuddy-cn.webp +0 -0
  227. package/public/providers/codebuddy.png +0 -0
  228. package/public/providers/codebuddy.svg +1 -0
  229. package/public/providers/codex.png +0 -0
  230. package/public/providers/codex.webp +0 -0
  231. package/public/providers/cohere.png +0 -0
  232. package/public/providers/cohere.webp +0 -0
  233. package/public/providers/comfyui.png +0 -0
  234. package/public/providers/comfyui.webp +0 -0
  235. package/public/providers/commandcode.png +0 -0
  236. package/public/providers/commandcode.webp +0 -0
  237. package/public/providers/continue.png +0 -0
  238. package/public/providers/continue.webp +0 -0
  239. package/public/providers/copilot.png +0 -0
  240. package/public/providers/copilot.webp +0 -0
  241. package/public/providers/coqui.png +0 -0
  242. package/public/providers/coqui.webp +0 -0
  243. package/public/providers/cursor.png +0 -0
  244. package/public/providers/cursor.webp +0 -0
  245. package/public/providers/deepgram.png +0 -0
  246. package/public/providers/deepgram.webp +0 -0
  247. package/public/providers/deepseek-tui.png +0 -0
  248. package/public/providers/deepseek-tui.webp +0 -0
  249. package/public/providers/deepseek.png +0 -0
  250. package/public/providers/deepseek.webp +0 -0
  251. package/public/providers/digitalocean.png +0 -0
  252. package/public/providers/droid.png +0 -0
  253. package/public/providers/droid.webp +0 -0
  254. package/public/providers/edge-tts.png +0 -0
  255. package/public/providers/edge-tts.webp +0 -0
  256. package/public/providers/elevenlabs.png +0 -0
  257. package/public/providers/elevenlabs.webp +0 -0
  258. package/public/providers/exa.png +0 -0
  259. package/public/providers/exa.webp +0 -0
  260. package/public/providers/fal-ai.png +0 -0
  261. package/public/providers/fal-ai.webp +0 -0
  262. package/public/providers/firecrawl.png +0 -0
  263. package/public/providers/firecrawl.webp +0 -0
  264. package/public/providers/fireworks.png +0 -0
  265. package/public/providers/fireworks.webp +0 -0
  266. package/public/providers/gemini-cli.png +0 -0
  267. package/public/providers/gemini-cli.webp +0 -0
  268. package/public/providers/gemini.png +0 -0
  269. package/public/providers/gemini.webp +0 -0
  270. package/public/providers/gigachat.png +0 -0
  271. package/public/providers/gigachat.webp +0 -0
  272. package/public/providers/github.png +0 -0
  273. package/public/providers/github.webp +0 -0
  274. package/public/providers/glm-cn.png +0 -0
  275. package/public/providers/glm-cn.webp +0 -0
  276. package/public/providers/glm.png +0 -0
  277. package/public/providers/glm.webp +0 -0
  278. package/public/providers/google-pse.png +0 -0
  279. package/public/providers/google-pse.webp +0 -0
  280. package/public/providers/google-tts.png +0 -0
  281. package/public/providers/google-tts.webp +0 -0
  282. package/public/providers/grok-web.png +0 -0
  283. package/public/providers/grok-web.webp +0 -0
  284. package/public/providers/groq.png +0 -0
  285. package/public/providers/groq.webp +0 -0
  286. package/public/providers/hermes.png +0 -0
  287. package/public/providers/hermes.webp +0 -0
  288. package/public/providers/heroku.png +0 -0
  289. package/public/providers/heroku.webp +0 -0
  290. package/public/providers/huggingface.png +0 -0
  291. package/public/providers/huggingface.webp +0 -0
  292. package/public/providers/hyperbolic.png +0 -0
  293. package/public/providers/hyperbolic.webp +0 -0
  294. package/public/providers/ibm-bob.png +0 -0
  295. package/public/providers/iflow.png +0 -0
  296. package/public/providers/iflow.webp +0 -0
  297. package/public/providers/inworld.png +0 -0
  298. package/public/providers/inworld.webp +0 -0
  299. package/public/providers/jcode.png +0 -0
  300. package/public/providers/jcode.webp +0 -0
  301. package/public/providers/jina-ai.png +0 -0
  302. package/public/providers/jina-ai.webp +0 -0
  303. package/public/providers/jina-reader.png +0 -0
  304. package/public/providers/jina-reader.webp +0 -0
  305. package/public/providers/kilocode.png +0 -0
  306. package/public/providers/kilocode.webp +0 -0
  307. package/public/providers/kimchi.png +0 -0
  308. package/public/providers/kimchi.webp +0 -0
  309. package/public/providers/kimi-coding.png +0 -0
  310. package/public/providers/kimi-coding.webp +0 -0
  311. package/public/providers/kimi.png +0 -0
  312. package/public/providers/kimi.webp +0 -0
  313. package/public/providers/kiro.png +0 -0
  314. package/public/providers/kiro.webp +0 -0
  315. package/public/providers/leonardo.png +0 -0
  316. package/public/providers/linkup.png +0 -0
  317. package/public/providers/linkup.webp +0 -0
  318. package/public/providers/llamagate.png +0 -0
  319. package/public/providers/llamagate.webp +0 -0
  320. package/public/providers/local-device.png +0 -0
  321. package/public/providers/local-device.webp +0 -0
  322. package/public/providers/mimo-free.png +0 -0
  323. package/public/providers/mimo-free.webp +0 -0
  324. package/public/providers/minimax-cn.png +0 -0
  325. package/public/providers/minimax-cn.webp +0 -0
  326. package/public/providers/minimax.png +0 -0
  327. package/public/providers/minimax.webp +0 -0
  328. package/public/providers/mistral.png +0 -0
  329. package/public/providers/mistral.webp +0 -0
  330. package/public/providers/nanobanana.png +0 -0
  331. package/public/providers/nanobanana.webp +0 -0
  332. package/public/providers/nanogpt.png +0 -0
  333. package/public/providers/nanogpt.webp +0 -0
  334. package/public/providers/nebius.png +0 -0
  335. package/public/providers/nebius.webp +0 -0
  336. package/public/providers/nscale.png +0 -0
  337. package/public/providers/nscale.webp +0 -0
  338. package/public/providers/nvidia.png +0 -0
  339. package/public/providers/nvidia.webp +0 -0
  340. package/public/providers/oai-cc.png +0 -0
  341. package/public/providers/oai-cc.webp +0 -0
  342. package/public/providers/oai-r.png +0 -0
  343. package/public/providers/oai-r.webp +0 -0
  344. package/public/providers/ollama-local.png +0 -0
  345. package/public/providers/ollama-local.webp +0 -0
  346. package/public/providers/ollama.png +0 -0
  347. package/public/providers/ollama.webp +0 -0
  348. package/public/providers/openai.png +0 -0
  349. package/public/providers/openai.webp +0 -0
  350. package/public/providers/openclaw.png +0 -0
  351. package/public/providers/openclaw.webp +0 -0
  352. package/public/providers/opencode-go.png +0 -0
  353. package/public/providers/opencode-go.webp +0 -0
  354. package/public/providers/opencode.png +0 -0
  355. package/public/providers/opencode.webp +0 -0
  356. package/public/providers/openrouter.png +0 -0
  357. package/public/providers/openrouter.webp +0 -0
  358. package/public/providers/ovhcloud.png +0 -0
  359. package/public/providers/ovhcloud.webp +0 -0
  360. package/public/providers/perplexity-web.png +0 -0
  361. package/public/providers/perplexity-web.webp +0 -0
  362. package/public/providers/perplexity.png +0 -0
  363. package/public/providers/perplexity.webp +0 -0
  364. package/public/providers/playht.png +0 -0
  365. package/public/providers/playht.webp +0 -0
  366. package/public/providers/predibase.png +0 -0
  367. package/public/providers/predibase.webp +0 -0
  368. package/public/providers/qoder.png +0 -0
  369. package/public/providers/qoder.webp +0 -0
  370. package/public/providers/qwen.png +0 -0
  371. package/public/providers/qwen.webp +0 -0
  372. package/public/providers/recraft.png +0 -0
  373. package/public/providers/recraft.webp +0 -0
  374. package/public/providers/roo.png +0 -0
  375. package/public/providers/roo.webp +0 -0
  376. package/public/providers/runwayml.png +0 -0
  377. package/public/providers/runwayml.webp +0 -0
  378. package/public/providers/sdwebui.png +0 -0
  379. package/public/providers/sdwebui.webp +0 -0
  380. package/public/providers/searchapi.png +0 -0
  381. package/public/providers/searchapi.webp +0 -0
  382. package/public/providers/searxng.png +0 -0
  383. package/public/providers/searxng.webp +0 -0
  384. package/public/providers/serper.png +0 -0
  385. package/public/providers/serper.webp +0 -0
  386. package/public/providers/siliconflow.png +0 -0
  387. package/public/providers/siliconflow.webp +0 -0
  388. package/public/providers/stability-ai.png +0 -0
  389. package/public/providers/stability-ai.webp +0 -0
  390. package/public/providers/tavily.png +0 -0
  391. package/public/providers/tavily.webp +0 -0
  392. package/public/providers/together.png +0 -0
  393. package/public/providers/together.webp +0 -0
  394. package/public/providers/topaz.png +0 -0
  395. package/public/providers/topaz.webp +0 -0
  396. package/public/providers/tortoise.png +0 -0
  397. package/public/providers/tortoise.webp +0 -0
  398. package/public/providers/vertex-partner.png +0 -0
  399. package/public/providers/vertex-partner.webp +0 -0
  400. package/public/providers/vertex.png +0 -0
  401. package/public/providers/vertex.webp +0 -0
  402. package/public/providers/volcengine-ark.png +0 -0
  403. package/public/providers/volcengine-ark.webp +0 -0
  404. package/public/providers/voyage-ai.png +0 -0
  405. package/public/providers/voyage-ai.webp +0 -0
  406. package/public/providers/weavy.jpeg +0 -0
  407. package/public/providers/weavy.png +0 -0
  408. package/public/providers/xai.png +0 -0
  409. package/public/providers/xai.webp +0 -0
  410. package/public/providers/xiaomi-mimo.png +0 -0
  411. package/public/providers/xiaomi-mimo.webp +0 -0
  412. package/public/providers/xiaomi-tokenplan.png +0 -0
  413. package/public/providers/xiaomi-tokenplan.webp +0 -0
  414. package/public/providers/youcom.png +0 -0
  415. package/public/providers/youcom.webp +0 -0
  416. package/public/providers/zcode.png +0 -0
  417. package/public/providers/zcode.webp +0 -0
  418. package/public/weavy.jpeg +0 -0
@@ -0,0 +1,1363 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>9Router — Image & Video Generation API Docs</title>
7
+ <meta name="description" content="Complete API reference for 9Router image and video generation endpoints. Covers all providers, models, parameters, and usage examples." />
8
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
11
+ <style>
12
+ /* ── 9Router theme tokens (mirrors globals.css) ── */
13
+ :root {
14
+ --brand: #E56A4A;
15
+ --brand-hover: #cc5236;
16
+ --brand-glow: rgba(229, 106, 74, 0.15);
17
+ --brand-glow2: rgba(229, 106, 74, 0.08);
18
+
19
+ --bg: #FDFAF6;
20
+ --bg2: #F7F3EE;
21
+ --bg3: #ffffff;
22
+ --bg4: #f4f4f5;
23
+ --border: #e5e7eb;
24
+ --border2: #d1d5db;
25
+ --text: #0a0a0a;
26
+ --text2: #374151;
27
+ --text3: #6B7280;
28
+ --surface: #ffffff;
29
+ --surface2: #f4f4f5;
30
+ --surface3: #e7e7e9;
31
+
32
+ --accent: #E56A4A;
33
+ --accent-pale: #fdf1ed;
34
+ --green: #10B981;
35
+ --green-bg: rgba(16,185,129,0.1);
36
+ --purple: #8B5CF6;
37
+ --purple-bg: rgba(139,92,246,0.1);
38
+ --orange: #F59E0B;
39
+ --orange-bg: rgba(245,158,11,0.1);
40
+ --red: #cf222e;
41
+ --red-bg: rgba(207,34,46,0.1);
42
+ --cyan: #3B82F6;
43
+ --cyan-bg: rgba(59,130,246,0.1);
44
+ --yellow: #D97706;
45
+ --yellow-bg: rgba(217,119,6,0.08);
46
+
47
+ --shadow-soft: 0 1px 2px rgba(0,0,0,0.04);
48
+ --shadow-elev: 0 4px 16px -4px rgba(60,50,45,0.08);
49
+
50
+ --sidebar-w: 272px;
51
+ --radius: 10px;
52
+ --radius-sm: 6px;
53
+ }
54
+
55
+ @media (prefers-color-scheme: dark) {
56
+ :root {
57
+ --bg: #1a1a1a;
58
+ --bg2: #1F1F1E;
59
+ --bg3: #262626;
60
+ --bg4: #303030;
61
+ --border: #333333;
62
+ --border2: #3a3a3a;
63
+ --text: #ededed;
64
+ --text2: #9ca3af;
65
+ --text3: #6b7280;
66
+ --surface: #262626;
67
+ --surface2: #303030;
68
+ --surface3: #3a3a3a;
69
+
70
+ --accent-pale: rgba(229,106,74,0.12);
71
+ --green: #22c55e;
72
+ --green-bg: rgba(34,197,94,0.12);
73
+ --purple: #a78bfa;
74
+ --purple-bg: rgba(167,139,250,0.12);
75
+ --orange: #fbbf24;
76
+ --orange-bg: rgba(251,191,36,0.1);
77
+ --red: #ef4444;
78
+ --red-bg: rgba(239,68,68,0.12);
79
+ --cyan: #60a5fa;
80
+ --cyan-bg: rgba(96,165,250,0.12);
81
+ --yellow: #fbbf24;
82
+ --yellow-bg: rgba(251,191,36,0.1);
83
+
84
+ --shadow-soft: 0 1px 2px rgba(0,0,0,0.3);
85
+ --shadow-elev: 0 8px 32px -8px rgba(0,0,0,0.5);
86
+ }
87
+ }
88
+
89
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
90
+ html { scroll-behavior: smooth; }
91
+ body {
92
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif;
93
+ background: var(--bg);
94
+ color: var(--text);
95
+ line-height: 1.7;
96
+ font-size: 14px;
97
+ -webkit-font-smoothing: antialiased;
98
+ }
99
+
100
+ /* ── LAYOUT ── */
101
+ .layout { display: flex; min-height: 100vh; }
102
+
103
+ /* ── SIDEBAR ── */
104
+ .sidebar {
105
+ width: var(--sidebar-w);
106
+ background: var(--bg2);
107
+ border-right: 1px solid var(--border);
108
+ position: fixed;
109
+ top: 0; left: 0; bottom: 0;
110
+ overflow-y: auto;
111
+ z-index: 100;
112
+ display: flex; flex-direction: column;
113
+ }
114
+ .sidebar::-webkit-scrollbar { width: 4px; }
115
+ .sidebar::-webkit-scrollbar-track { background: transparent; }
116
+ .sidebar::-webkit-scrollbar-thumb { background: var(--border2); border-radius: 2px; }
117
+ .sidebar::-webkit-scrollbar-thumb:hover { background: var(--brand); }
118
+
119
+ .sidebar-logo {
120
+ padding: 20px 20px 16px;
121
+ border-bottom: 1px solid var(--border);
122
+ }
123
+ .logo-mark { display: flex; align-items: center; gap: 10px; margin-bottom: 4px; }
124
+ .logo-icon {
125
+ width: 32px; height: 32px; border-radius: 8px;
126
+ background: linear-gradient(135deg, var(--brand), #a64027);
127
+ box-shadow: 0 2px 8px rgba(229,106,74,0.3);
128
+ display: flex; align-items: center; justify-content: center;
129
+ font-weight: 700; font-size: 14px; color: white; flex-shrink: 0;
130
+ }
131
+ .logo-title { font-size: 15px; font-weight: 700; color: var(--text); }
132
+ .logo-sub { font-size: 11px; color: var(--text3); margin-top: 2px; }
133
+
134
+ .sidebar-search {
135
+ padding: 10px 14px 10px 14px;
136
+ border-bottom: 1px solid var(--border);
137
+ position: relative;
138
+ }
139
+ .sidebar-search::before {
140
+ content: '⌕'; position: absolute; left: 24px;
141
+ top: 50%; transform: translateY(-50%);
142
+ color: var(--text3); font-size: 15px; pointer-events: none;
143
+ }
144
+ .sidebar-search input {
145
+ width: 100%; background: var(--bg3); border: 1px solid var(--border);
146
+ border-radius: var(--radius-sm); padding: 7px 10px 7px 28px;
147
+ color: var(--text); font-size: 12px; font-family: inherit;
148
+ outline: none; transition: border-color .2s;
149
+ }
150
+ .sidebar-search input:focus { border-color: var(--brand); }
151
+ .sidebar-search input::placeholder { color: var(--text3); }
152
+
153
+ nav { padding: 8px 0; flex: 1; }
154
+ .nav-section {
155
+ padding: 8px 16px 4px; font-size: 10px; font-weight: 600;
156
+ text-transform: uppercase; letter-spacing: .8px; color: var(--text3);
157
+ }
158
+ .nav-item {
159
+ display: flex; align-items: center; gap: 8px;
160
+ padding: 6px 16px; cursor: pointer; font-size: 12.5px; color: var(--text2);
161
+ transition: all .15s; border-left: 2px solid transparent;
162
+ text-decoration: none; user-select: none;
163
+ }
164
+ .nav-item:hover { color: var(--text); background: var(--surface2); }
165
+ .nav-item.active {
166
+ color: var(--brand); border-left-color: var(--brand);
167
+ background: var(--brand-glow);
168
+ }
169
+ .nav-badge {
170
+ margin-left: auto; font-size: 10px; background: var(--bg4);
171
+ border-radius: 9px; padding: 1px 7px; color: var(--text3); font-weight: 500;
172
+ }
173
+ .nav-badge.img { background: var(--green-bg); color: var(--green); }
174
+ .nav-badge.vid { background: var(--purple-bg); color: var(--purple); }
175
+ .nav-badge.both { background: var(--cyan-bg); color: var(--cyan); }
176
+
177
+ /* ── MAIN ── */
178
+ .main { margin-left: var(--sidebar-w); flex: 1; min-width: 0; }
179
+
180
+ /* ── HERO ── */
181
+ .hero {
182
+ background: var(--bg2);
183
+ border-bottom: 1px solid var(--border);
184
+ padding: 48px 48px 40px;
185
+ position: relative; overflow: hidden;
186
+ }
187
+ .hero::before {
188
+ content: ''; position: absolute; inset: 0;
189
+ background: radial-gradient(ellipse 50% 60% at 80% 40%, var(--brand-glow2), transparent);
190
+ pointer-events: none;
191
+ }
192
+ .hero-badge {
193
+ display: inline-flex; align-items: center; gap: 6px;
194
+ background: var(--brand-glow); border: 1px solid rgba(229,106,74,0.3);
195
+ border-radius: 20px; padding: 4px 12px; font-size: 11px;
196
+ color: var(--brand); font-weight: 500; margin-bottom: 14px;
197
+ }
198
+ .hero-badge::before { content: '●'; font-size: 7px; animation: blink 2s infinite; }
199
+ @keyframes blink { 0%,100%{opacity:1}50%{opacity:.3} }
200
+ h1 {
201
+ font-size: 32px; font-weight: 700; line-height: 1.2;
202
+ color: var(--text); margin-bottom: 10px;
203
+ }
204
+ .hero-sub { font-size: 15px; color: var(--text2); max-width: 560px; line-height: 1.6; }
205
+ .hero-stats { display: flex; gap: 28px; margin-top: 28px; flex-wrap: wrap; }
206
+ .stat { display: flex; flex-direction: column; gap: 2px; }
207
+ .stat-num { font-size: 26px; font-weight: 700; color: var(--brand); line-height: 1; }
208
+ .stat-label { font-size: 12px; color: var(--text3); }
209
+
210
+ /* ── CONTENT ── */
211
+ .content { padding: 0 48px 80px; }
212
+
213
+ /* ── SECTION ── */
214
+ .section { padding-top: 44px; border-top: 1px solid var(--border); margin-top: 44px; }
215
+ .section:first-child { border-top: none; margin-top: 0; padding-top: 44px; }
216
+ .section-header { display: flex; align-items: flex-start; gap: 14px; margin-bottom: 24px; }
217
+ .section-icon {
218
+ width: 38px; height: 38px; border-radius: 10px; flex-shrink: 0;
219
+ display: flex; align-items: center; justify-content: center; font-size: 17px;
220
+ }
221
+ h2 { font-size: 20px; font-weight: 700; color: var(--text); }
222
+ .section-desc { font-size: 13px; color: var(--text2); margin-top: 3px; }
223
+
224
+ /* ── ENDPOINT CARD ── */
225
+ .endpoint-card {
226
+ background: var(--surface); border: 1px solid var(--border);
227
+ border-radius: var(--radius); margin-bottom: 16px; overflow: hidden;
228
+ transition: border-color .2s; box-shadow: var(--shadow-soft);
229
+ }
230
+ .endpoint-card:hover { border-color: var(--border2); box-shadow: var(--shadow-elev); }
231
+ .endpoint-header {
232
+ display: flex; align-items: center; gap: 10px;
233
+ padding: 12px 16px; background: var(--bg2);
234
+ border-bottom: 1px solid var(--border);
235
+ }
236
+ .method {
237
+ font-family: 'JetBrains Mono', 'Fira Code', monospace; font-size: 11px; font-weight: 600;
238
+ padding: 2px 8px; border-radius: 5px; letter-spacing: .3px;
239
+ }
240
+ .method.post { background: var(--green-bg); color: var(--green); border: 1px solid rgba(16,185,129,.2); }
241
+ .method.get { background: var(--cyan-bg); color: var(--cyan); border: 1px solid rgba(59,130,246,.2); }
242
+ .endpoint-path {
243
+ font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
244
+ font-size: 13px; color: var(--text); font-weight: 500;
245
+ }
246
+ .endpoint-body { padding: 16px; }
247
+ .endpoint-desc { font-size: 13px; color: var(--text2); margin-bottom: 14px; }
248
+
249
+ /* ── PARAM TABLE ── */
250
+ .param-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
251
+ .param-table th {
252
+ text-align: left; padding: 8px 12px; color: var(--text3);
253
+ font-size: 10.5px; font-weight: 600; text-transform: uppercase; letter-spacing: .5px;
254
+ border-bottom: 1px solid var(--border); background: var(--bg2);
255
+ }
256
+ .param-table td {
257
+ padding: 9px 12px; border-bottom: 1px solid var(--border);
258
+ vertical-align: top; line-height: 1.5;
259
+ }
260
+ .param-table tr:last-child td { border-bottom: none; }
261
+ .param-table tr:hover td { background: var(--brand-glow2); }
262
+ .param-name {
263
+ font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
264
+ font-size: 12px; color: var(--brand); font-weight: 500;
265
+ }
266
+ .param-required {
267
+ font-size: 10px; font-weight: 600; padding: 1px 6px; border-radius: 4px;
268
+ background: var(--red-bg); color: var(--red); border: 1px solid rgba(207,34,46,.2);
269
+ }
270
+ .param-optional {
271
+ font-size: 10px; font-weight: 600; padding: 1px 6px; border-radius: 4px;
272
+ background: var(--bg4); color: var(--text3); border: 1px solid var(--border);
273
+ }
274
+ .param-type {
275
+ font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
276
+ font-size: 11px; color: var(--purple);
277
+ background: var(--purple-bg); padding: 1px 6px; border-radius: 4px;
278
+ }
279
+ .param-desc { color: var(--text2); }
280
+ .param-default {
281
+ font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
282
+ font-size: 11px; color: var(--yellow);
283
+ background: var(--yellow-bg); padding: 1px 6px; border-radius: 4px; white-space: nowrap;
284
+ }
285
+
286
+ /* ── CODE BLOCK ── */
287
+ .code-block {
288
+ background: var(--bg2); border: 1px solid var(--border);
289
+ border-radius: var(--radius-sm); padding: 14px 16px;
290
+ font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
291
+ font-size: 12.5px; line-height: 1.7; overflow-x: auto; position: relative; margin: 10px 0;
292
+ }
293
+ .code-block .comment { color: var(--text3); }
294
+ .code-block .key { color: var(--cyan); }
295
+ .code-block .str { color: var(--green); }
296
+ .code-block .num { color: var(--orange); }
297
+ .code-block .kw { color: var(--brand); }
298
+ .copy-btn {
299
+ position: absolute; top: 10px; right: 10px;
300
+ background: var(--surface2); border: 1px solid var(--border2);
301
+ border-radius: var(--radius-sm); padding: 3px 9px; font-size: 11px;
302
+ color: var(--text2); cursor: pointer; font-family: inherit; transition: all .15s;
303
+ }
304
+ .copy-btn:hover { background: var(--brand); color: white; border-color: var(--brand); }
305
+ .copy-btn.copied { background: var(--green-bg); color: var(--green); border-color: rgba(16,185,129,.3); }
306
+
307
+ /* ── PROVIDER SECTION ── */
308
+ .provider-block { margin-bottom: 32px; }
309
+ .provider-title {
310
+ display: flex; align-items: center; gap: 10px;
311
+ font-size: 15px; font-weight: 600; color: var(--text);
312
+ margin-bottom: 12px; padding-bottom: 10px; border-bottom: 1px solid var(--border);
313
+ }
314
+ .provider-pill {
315
+ font-family: monospace; font-size: 11px;
316
+ background: var(--bg4); border: 1px solid var(--border2);
317
+ padding: 2px 8px; border-radius: 5px; color: var(--text2);
318
+ }
319
+
320
+ /* ── MODEL ACCORDION ── */
321
+ .model-list { display: flex; flex-direction: column; gap: 6px; }
322
+ .model-item {
323
+ background: var(--surface); border: 1px solid var(--border);
324
+ border-radius: var(--radius-sm); overflow: hidden; transition: all .15s;
325
+ box-shadow: var(--shadow-soft);
326
+ }
327
+ .model-item:hover { border-color: var(--border2); box-shadow: var(--shadow-elev); }
328
+ .model-header {
329
+ display: flex; align-items: center; gap: 10px;
330
+ padding: 9px 14px; cursor: pointer; user-select: none;
331
+ }
332
+ .model-header:hover { background: var(--brand-glow2); }
333
+ .model-type-badge {
334
+ font-size: 10px; font-weight: 600; padding: 2px 7px; border-radius: 4px; flex-shrink: 0;
335
+ }
336
+ .model-type-badge.image { background: var(--green-bg); color: var(--green); border: 1px solid rgba(16,185,129,.2); }
337
+ .model-type-badge.video { background: var(--purple-bg); color: var(--purple); border: 1px solid rgba(139,92,246,.2); }
338
+ .model-id {
339
+ font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
340
+ font-size: 12px; color: var(--brand);
341
+ }
342
+ .model-name { font-size: 12px; color: var(--text2); }
343
+ .model-toggle { margin-left: auto; color: var(--text3); font-size: 12px; transition: transform .2s; }
344
+ .model-item.open .model-toggle { transform: rotate(180deg); }
345
+ .model-body {
346
+ display: none; padding: 0 14px 14px; border-top: 1px solid var(--border);
347
+ background: var(--bg2);
348
+ }
349
+ .model-item.open .model-body { display: block; }
350
+ .model-desc { font-size: 12px; color: var(--text2); margin: 10px 0; }
351
+
352
+ /* ── TABS ── */
353
+ .tabs { display: flex; gap: 2px; margin-bottom: 14px; }
354
+ .tab {
355
+ padding: 6px 14px; border-radius: var(--radius-sm); font-size: 12px;
356
+ cursor: pointer; color: var(--text2); transition: all .15s; font-weight: 500;
357
+ user-select: none; border: 1px solid transparent;
358
+ }
359
+ .tab:hover { color: var(--text); background: var(--surface2); }
360
+ .tab.active { background: var(--brand); color: white; border-color: var(--brand); }
361
+ .tab-content { display: none; }
362
+ .tab-content.active { display: block; }
363
+
364
+ /* ── ALERT BOXES ── */
365
+ .alert {
366
+ display: flex; gap: 12px; padding: 12px 16px; border-radius: var(--radius-sm);
367
+ margin: 14px 0; font-size: 12.5px;
368
+ }
369
+ .alert-icon { font-size: 15px; flex-shrink: 0; margin-top: 1px; }
370
+ .alert.info { background: var(--cyan-bg); border: 1px solid rgba(59,130,246,.2); color: var(--text2); }
371
+ .alert.warn { background: var(--orange-bg); border: 1px solid rgba(245,158,11,.2); color: var(--text2); }
372
+ .alert.note { background: var(--brand-glow); border: 1px solid rgba(229,106,74,.2); color: var(--text2); }
373
+
374
+ /* ── INLINE CODE ── */
375
+ code {
376
+ font-family: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
377
+ font-size: 11.5px; background: var(--bg4); border: 1px solid var(--border);
378
+ padding: 1px 5px; border-radius: 4px; color: var(--brand);
379
+ }
380
+
381
+ /* ── GRID ── */
382
+ .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
383
+ .grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; }
384
+
385
+ /* ── FEATURE CARD ── */
386
+ .feature-card {
387
+ background: var(--surface); border: 1px solid var(--border);
388
+ border-radius: var(--radius); padding: 16px; transition: border-color .2s;
389
+ box-shadow: var(--shadow-soft);
390
+ }
391
+ .feature-card:hover { border-color: var(--brand); box-shadow: var(--shadow-elev); }
392
+ .feature-card h4 { font-size: 13px; font-weight: 600; color: var(--text); margin-bottom: 5px; }
393
+ .feature-card p { font-size: 12px; color: var(--text2); }
394
+
395
+ /* ── RESPONSE FORMAT ── */
396
+ .response-box {
397
+ background: var(--bg2); border: 1px solid var(--border);
398
+ border-radius: var(--radius); padding: 14px; margin: 10px 0;
399
+ }
400
+ .response-field {
401
+ display: flex; gap: 12px; padding: 6px 0;
402
+ border-bottom: 1px solid var(--border); align-items: flex-start;
403
+ }
404
+ .response-field:last-child { border-bottom: none; }
405
+ .rf-name { font-family: monospace; font-size: 12px; color: var(--brand); min-width: 120px; }
406
+ .rf-type { font-size: 11px; color: var(--purple); min-width: 60px; }
407
+ .rf-desc { font-size: 12px; color: var(--text2); }
408
+
409
+ /* ── SCROLL TOP ── */
410
+ .scroll-top {
411
+ position: fixed; bottom: 20px; right: 20px; z-index: 200;
412
+ width: 36px; height: 36px; background: var(--surface); border: 1px solid var(--border2);
413
+ border-radius: 50%; display: flex; align-items: center; justify-content: center;
414
+ cursor: pointer; color: var(--text2); font-size: 15px;
415
+ transition: all .2s; opacity: 0; pointer-events: none;
416
+ box-shadow: var(--shadow-elev);
417
+ }
418
+ .scroll-top.visible { opacity: 1; pointer-events: auto; }
419
+ .scroll-top:hover { background: var(--brand); color: white; border-color: var(--brand); }
420
+
421
+ /* ── SELECTION ── */
422
+ ::selection { background: rgba(229,106,74,0.25); color: var(--brand); }
423
+
424
+ /* ── MOBILE ── */
425
+ @media (max-width: 900px) {
426
+ :root { --sidebar-w: 0px; }
427
+ .sidebar { transform: translateX(-272px); }
428
+ .hero { padding: 28px 20px 24px; }
429
+ h1 { font-size: 24px; }
430
+ .content { padding: 0 20px 60px; }
431
+ .grid-2, .grid-3 { grid-template-columns: 1fr; }
432
+ }
433
+ </style>
434
+ </head>
435
+ <body>
436
+
437
+ <div class="layout">
438
+ <!-- SIDEBAR -->
439
+ <aside class="sidebar" id="sidebar">
440
+ <div class="sidebar-logo">
441
+ <div class="logo-mark">
442
+ <div class="logo-icon">9R</div>
443
+ <span class="logo-title">9Router</span>
444
+ </div>
445
+ <div class="logo-sub">Image &amp; Video API Reference</div>
446
+ </div>
447
+ <div class="sidebar-search">
448
+ <input type="text" id="searchInput" placeholder="Search models, params…" />
449
+ </div>
450
+ <nav id="sidebarNav">
451
+ <div class="nav-section">Overview</div>
452
+ <a class="nav-item active" href="#overview" onclick="setActive(this)">Getting Started</a>
453
+ <a class="nav-item" href="#endpoints" onclick="setActive(this)">Endpoints</a>
454
+ <a class="nav-item" href="#auth" onclick="setActive(this)">Authentication</a>
455
+ <a class="nav-item" href="#request-body" onclick="setActive(this)">Request Body</a>
456
+ <a class="nav-item" href="#response" onclick="setActive(this)">Response Format</a>
457
+
458
+ <div class="nav-section" style="margin-top:8px">Image Providers</div>
459
+ <a class="nav-item" href="#openai" onclick="setActive(this)">OpenAI <span class="nav-badge img">3</span></a>
460
+ <a class="nav-item" href="#gemini" onclick="setActive(this)">Gemini <span class="nav-badge img">3</span></a>
461
+ <a class="nav-item" href="#xai" onclick="setActive(this)">xAI Grok <span class="nav-badge img">1</span></a>
462
+ <a class="nav-item" href="#stability-ai" onclick="setActive(this)">Stability AI <span class="nav-badge img">5</span></a>
463
+ <a class="nav-item" href="#black-forest-labs" onclick="setActive(this)">Black Forest Labs <span class="nav-badge img">6</span></a>
464
+ <a class="nav-item" href="#openrouter" onclick="setActive(this)">OpenRouter <span class="nav-badge img">4</span></a>
465
+ <a class="nav-item" href="#fal-ai" onclick="setActive(this)">fal.ai <span class="nav-badge img">7</span></a>
466
+ <a class="nav-item" href="#cloudflare-ai" onclick="setActive(this)">Cloudflare AI <span class="nav-badge img">11</span></a>
467
+ <a class="nav-item" href="#minimax" onclick="setActive(this)">MiniMax <span class="nav-badge img">1</span></a>
468
+ <a class="nav-item" href="#nanobanana" onclick="setActive(this)">NanoBanana <span class="nav-badge img">2</span></a>
469
+ <a class="nav-item" href="#sdwebui" onclick="setActive(this)">SD WebUI <span class="nav-badge img">2</span></a>
470
+ <a class="nav-item" href="#comfyui" onclick="setActive(this)">ComfyUI <span class="nav-badge img">2</span></a>
471
+ <a class="nav-item" href="#huggingface" onclick="setActive(this)">HuggingFace <span class="nav-badge img">2</span></a>
472
+ <a class="nav-item" href="#recraft" onclick="setActive(this)">Recraft <span class="nav-badge img">2</span></a>
473
+
474
+ <div class="nav-section" style="margin-top:8px">Image + Video</div>
475
+ <a class="nav-item" href="#runwayml" onclick="setActive(this)">RunwayML <span class="nav-badge both">4</span></a>
476
+ <a class="nav-item" href="#leonardo" onclick="setActive(this)">Leonardo AI <span class="nav-badge both">54</span></a>
477
+ <a class="nav-item" href="#weavy" onclick="setActive(this)">Weavy <span class="nav-badge both">75</span></a>
478
+
479
+ <div class="nav-section" style="margin-top:8px">Utilities</div>
480
+ <a class="nav-item" href="#model-info" onclick="setActive(this)">Model Info API</a>
481
+ <a class="nav-item" href="#errors" onclick="setActive(this)">Error Reference</a>
482
+ <a class="nav-item" href="#examples" onclick="setActive(this)">Code Examples</a>
483
+ </nav>
484
+ </aside>
485
+
486
+ <!-- MAIN -->
487
+ <main class="main">
488
+ <!-- HERO -->
489
+ <div class="hero" id="overview">
490
+ <div class="hero-badge">Image &amp; Video Generation</div>
491
+ <h1>9Router API Reference</h1>
492
+ <p class="hero-sub">
493
+ OpenAI-compatible image and video generation API with access to 170+ models across 18 providers.
494
+ Single endpoint, unified request format.
495
+ </p>
496
+ <div class="hero-stats">
497
+ <div class="stat"><span class="stat-num">170+</span><span class="stat-label">Total Models</span></div>
498
+ <div class="stat"><span class="stat-num">108</span><span class="stat-label">Image Models</span></div>
499
+ <div class="stat"><span class="stat-num">73</span><span class="stat-label">Video Models</span></div>
500
+ <div class="stat"><span class="stat-num">18</span><span class="stat-label">Providers</span></div>
501
+ </div>
502
+ </div>
503
+
504
+ <div class="content">
505
+
506
+ <!-- ── ENDPOINTS ── -->
507
+ <section class="section" id="endpoints">
508
+ <div class="section-header">
509
+ <div class="section-icon" style="background:var(--cyan-bg)">🔌</div>
510
+ <div>
511
+ <h2>API Endpoints</h2>
512
+ <p class="section-desc">All endpoints follow OpenAI-compatible conventions</p>
513
+ </div>
514
+ </div>
515
+
516
+ <div class="endpoint-card">
517
+ <div class="endpoint-header">
518
+ <span class="method post">POST</span>
519
+ <span class="endpoint-path">/v1/images/generations</span>
520
+ </div>
521
+ <div class="endpoint-body">
522
+ <p class="endpoint-desc">
523
+ Generate images or videos. For video models (RunwayML, Leonardo, Weavy video models),
524
+ the response uses the same format but the <code>url</code> fields point to video files.
525
+ This endpoint handles all image and video generation requests.
526
+ </p>
527
+ <table class="param-table">
528
+ <thead><tr><th>Parameter</th><th>Type</th><th>Required</th><th>Description</th></tr></thead>
529
+ <tbody>
530
+ <tr>
531
+ <td><span class="param-name">model</span></td>
532
+ <td><span class="param-type">string</span></td>
533
+ <td><span class="param-required">required</span></td>
534
+ <td class="param-desc">Model identifier (e.g. <code>dall-e-3</code>, <code>weavy-kling</code>, <code>leo-sora-2</code>)</td>
535
+ </tr>
536
+ <tr>
537
+ <td><span class="param-name">prompt</span></td>
538
+ <td><span class="param-type">string</span></td>
539
+ <td><span class="param-required">required</span></td>
540
+ <td class="param-desc">Text description of the image or video to generate</td>
541
+ </tr>
542
+ <tr>
543
+ <td><span class="param-name">n</span></td>
544
+ <td><span class="param-type">integer</span></td>
545
+ <td><span class="param-optional">optional</span></td>
546
+ <td class="param-desc">Number of images to generate. Default: <span class="param-default">1</span>. Max: 4 (provider-dependent)</td>
547
+ </tr>
548
+ <tr>
549
+ <td><span class="param-name">size</span></td>
550
+ <td><span class="param-type">string</span></td>
551
+ <td><span class="param-optional">optional</span></td>
552
+ <td class="param-desc">Output dimensions or aspect ratio. Format varies by provider — see per-provider details below</td>
553
+ </tr>
554
+ <tr>
555
+ <td><span class="param-name">quality</span></td>
556
+ <td><span class="param-type">string</span></td>
557
+ <td><span class="param-optional">optional</span></td>
558
+ <td class="param-desc">Quality preset. Values: <code>standard</code> | <code>hd</code> (DALL-E 3), <code>low</code> | <code>medium</code> | <code>high</code> | <code>auto</code> (GPT Image)</td>
559
+ </tr>
560
+ <tr>
561
+ <td><span class="param-name">negative_prompt</span></td>
562
+ <td><span class="param-type">string</span></td>
563
+ <td><span class="param-optional">optional</span></td>
564
+ <td class="param-desc">Elements to exclude from the output (supported by most non-OpenAI providers)</td>
565
+ </tr>
566
+ <tr>
567
+ <td><span class="param-name">image_url</span></td>
568
+ <td><span class="param-type">string</span></td>
569
+ <td><span class="param-optional">optional</span></td>
570
+ <td class="param-desc">Reference image URL or base64 data URI. Used for img2img conditioning or as video start frame</td>
571
+ </tr>
572
+ <tr>
573
+ <td><span class="param-name">end_image_url</span></td>
574
+ <td><span class="param-type">string</span></td>
575
+ <td><span class="param-optional">optional</span></td>
576
+ <td class="param-desc">End/last-frame image URL. For first-last-frame video models (Kling, Veo). Interpolates between <code>image_url</code> and <code>end_image_url</code></td>
577
+ </tr>
578
+ <tr>
579
+ <td><span class="param-name">duration</span></td>
580
+ <td><span class="param-type">integer</span></td>
581
+ <td><span class="param-optional">optional</span></td>
582
+ <td class="param-desc">Video duration in seconds. Valid values are model-specific (e.g. 5/8/10 for Runway, 3–15 for Kling)</td>
583
+ </tr>
584
+ <tr>
585
+ <td><span class="param-name">resolution</span></td>
586
+ <td><span class="param-type">string</span></td>
587
+ <td><span class="param-optional">optional</span></td>
588
+ <td class="param-desc">Video resolution: <code>480p</code> | <code>720p</code> | <code>1080p</code> (Weavy video models)</td>
589
+ </tr>
590
+ <tr>
591
+ <td><span class="param-name">aspect_ratio</span></td>
592
+ <td><span class="param-type">string</span></td>
593
+ <td><span class="param-optional">optional</span></td>
594
+ <td class="param-desc">Explicit aspect ratio string (e.g. <code>16:9</code>). Some providers accept this instead of <code>size</code></td>
595
+ </tr>
596
+ </tbody>
597
+ </table>
598
+ </div>
599
+ </div>
600
+
601
+ <div class="endpoint-card">
602
+ <div class="endpoint-header">
603
+ <span class="method get">GET</span>
604
+ <span class="endpoint-path">/v1/models/info?id={provider}/{modelId}</span>
605
+ </div>
606
+ <div class="endpoint-body">
607
+ <p class="endpoint-desc">
608
+ Returns full metadata for a single model including all supported parameters and their constraints.
609
+ </p>
610
+ <div class="code-block">
611
+ <span class="comment"># Example</span>
612
+ GET /v1/models/info?id=<span class="str">weavy/weavy-kling</span>
613
+ GET /v1/models/info?id=<span class="str">openai/dall-e-3</span>
614
+ GET /v1/models/info?id=<span class="str">leonardo/leo-sora-2</span></div>
615
+ </div>
616
+ </div>
617
+
618
+ <div class="endpoint-card">
619
+ <div class="endpoint-header">
620
+ <span class="method get">GET</span>
621
+ <span class="endpoint-path">/v1/models</span>
622
+ </div>
623
+ <div class="endpoint-body">
624
+ <p class="endpoint-desc">Lists all available models in OpenAI-compatible format.</p>
625
+ </div>
626
+ </div>
627
+ </section>
628
+
629
+ <!-- ── AUTHENTICATION ── -->
630
+ <section class="section" id="auth">
631
+ <div class="section-header">
632
+ <div class="section-icon" style="background:var(--yellow-bg)">🔑</div>
633
+ <div>
634
+ <h2>Authentication</h2>
635
+ <p class="section-desc">Bearer token authentication, provider-dependent credential handling</p>
636
+ </div>
637
+ </div>
638
+
639
+ <div class="alert note">
640
+ <span class="alert-icon">ℹ️</span>
641
+ <span>9Router uses a <strong>provider connection</strong> system. The API key or Bearer token you pass is the 9Router connection credential — not the upstream provider key directly. Credentials are mapped to provider accounts internally.</span>
642
+ </div>
643
+
644
+ <div class="code-block" id="auth-example">
645
+ <button class="copy-btn" onclick="copyCode('auth-example', this)">Copy</button>
646
+ <span class="kw">curl</span> -X POST https://your-9router-host/v1/images/generations \
647
+ -H <span class="str">"Authorization: Bearer YOUR_9ROUTER_KEY"</span> \
648
+ -H <span class="str">"Content-Type: application/json"</span> \
649
+ -d <span class="str">'{
650
+ "model": "weavy-kling",
651
+ "prompt": "A cinematic drone shot over a misty mountain valley at sunrise",
652
+ "size": "16:9",
653
+ "duration": 10
654
+ }'</span></div>
655
+ </section>
656
+
657
+ <!-- ── REQUEST BODY ── -->
658
+ <section class="section" id="request-body">
659
+ <div class="section-header">
660
+ <div class="section-icon" style="background:var(--green-bg)">📦</div>
661
+ <div>
662
+ <h2>Request Format</h2>
663
+ <p class="section-desc">JSON body with OpenAI-compatible fields plus extended provider params</p>
664
+ </div>
665
+ </div>
666
+
667
+ <div class="tabs" id="req-tabs">
668
+ <div data-target="req-image" class="tab active" onclick="switchTab('req-tabs','req-image')">Image Request</div>
669
+ <div data-target="req-video" class="tab" onclick="switchTab('req-tabs','req-video')">Video Request</div>
670
+ <div data-target="req-img2img" class="tab" onclick="switchTab('req-tabs','req-img2img')">Image-to-Image</div>
671
+ <div data-target="req-firstlast" class="tab" onclick="switchTab('req-tabs','req-firstlast')">First-Last Frame</div>
672
+ </div>
673
+
674
+ <div id="req-image" class="tab-content active">
675
+ <div class="code-block" id="c1"><button class="copy-btn" onclick="copyCode('c1',this)">Copy</button>
676
+ {
677
+ <span class="key">"model"</span>: <span class="str">"dall-e-3"</span>,
678
+ <span class="key">"prompt"</span>: <span class="str">"A futuristic city skyline at sunset, 4K, dramatic lighting"</span>,
679
+ <span class="key">"n"</span>: <span class="num">1</span>,
680
+ <span class="key">"size"</span>: <span class="str">"1792x1024"</span>,
681
+ <span class="key">"quality"</span>: <span class="str">"hd"</span>
682
+ }</div>
683
+ </div>
684
+
685
+ <div id="req-video" class="tab-content">
686
+ <div class="code-block" id="c2"><button class="copy-btn" onclick="copyCode('c2',this)">Copy</button>
687
+ {
688
+ <span class="key">"model"</span>: <span class="str">"weavy-kling"</span>,
689
+ <span class="key">"prompt"</span>: <span class="str">"Slow motion waterfall in a tropical jungle, cinematic"</span>,
690
+ <span class="key">"size"</span>: <span class="str">"16:9"</span>,
691
+ <span class="key">"duration"</span>: <span class="num">10</span>,
692
+ <span class="key">"resolution"</span>: <span class="str">"1080p"</span>
693
+ }</div>
694
+ </div>
695
+
696
+ <div id="req-img2img" class="tab-content">
697
+ <div class="code-block" id="c3"><button class="copy-btn" onclick="copyCode('c3',this)">Copy</button>
698
+ {
699
+ <span class="key">"model"</span>: <span class="str">"weavy-veo"</span>,
700
+ <span class="key">"prompt"</span>: <span class="str">"Add gentle camera movement, reveal the horizon"</span>,
701
+ <span class="key">"size"</span>: <span class="str">"16:9"</span>,
702
+ <span class="key">"image_url"</span>: <span class="str">"https://example.com/start-frame.jpg"</span>,
703
+ <span class="key">"duration"</span>: <span class="num">8</span>
704
+ }</div>
705
+ </div>
706
+
707
+ <div id="req-firstlast" class="tab-content">
708
+ <div class="code-block" id="c4"><button class="copy-btn" onclick="copyCode('c4',this)">Copy</button>
709
+ {
710
+ <span class="key">"model"</span>: <span class="str">"weavy-kling-2-5-first-last-frame"</span>,
711
+ <span class="key">"prompt"</span>: <span class="str">"Smooth transition between the two frames"</span>,
712
+ <span class="key">"size"</span>: <span class="str">"16:9"</span>,
713
+ <span class="key">"image_url"</span>: <span class="str">"https://example.com/first-frame.jpg"</span>,
714
+ <span class="key">"end_image_url"</span>: <span class="str">"https://example.com/last-frame.jpg"</span>,
715
+ <span class="key">"duration"</span>: <span class="num">5</span>
716
+ }</div>
717
+ </div>
718
+ </section>
719
+
720
+ <!-- ── RESPONSE ── -->
721
+ <section class="section" id="response">
722
+ <div class="section-header">
723
+ <div class="section-icon" style="background:var(--purple-bg)">📤</div>
724
+ <div>
725
+ <h2>Response Format</h2>
726
+ <p class="section-desc">OpenAI-compatible response for both images and videos</p>
727
+ </div>
728
+ </div>
729
+
730
+ <div class="code-block" id="c-resp"><button class="copy-btn" onclick="copyCode('c-resp',this)">Copy</button>
731
+ {
732
+ <span class="key">"created"</span>: <span class="num">1735600000</span>,
733
+ <span class="key">"data"</span>: [
734
+ {
735
+ <span class="key">"url"</span>: <span class="str">"https://..."</span> <span class="comment">// Direct URL to the generated image or video file</span>
736
+ }
737
+ ]
738
+ }</div>
739
+
740
+ <div class="response-box">
741
+ <div class="response-field">
742
+ <span class="rf-name">created</span>
743
+ <span class="rf-type">integer</span>
744
+ <span class="rf-desc">Unix timestamp of when the generation completed</span>
745
+ </div>
746
+ <div class="response-field">
747
+ <span class="rf-name">data</span>
748
+ <span class="rf-type">array</span>
749
+ <span class="rf-desc">Array of generated outputs. Length matches <code>n</code> parameter (usually 1)</span>
750
+ </div>
751
+ <div class="response-field">
752
+ <span class="rf-name">data[].url</span>
753
+ <span class="rf-type">string</span>
754
+ <span class="rf-desc">Direct URL to the generated image (PNG/JPEG) or video (MP4/WebM). Temporary — download promptly</span>
755
+ </div>
756
+ </div>
757
+ </section>
758
+
759
+ <!-- ══════════════════════════════════════════════════════════════
760
+ PROVIDER: OPENAI
761
+ ══════════════════════════════════════════════════════════════ -->
762
+ <section class="section" id="openai">
763
+ <div class="section-header">
764
+ <div class="section-icon" style="background:linear-gradient(135deg,#10a37f22,#10a37f11);border:1px solid #10a37f33">🤖</div>
765
+ <div>
766
+ <h2>OpenAI</h2>
767
+ <p class="section-desc">DALL-E 3, DALL-E 2, GPT Image 1 — native OpenAI image generation</p>
768
+ </div>
769
+ </div>
770
+ <div class="alert note"><span class="alert-icon">ℹ️</span>
771
+ <span><code>size</code> accepts OpenAI pixel strings: <code>1024x1024</code>, <code>1792x1024</code>, <code>1024x1792</code>, <code>512x512</code>, <code>256x256</code></span>
772
+ </div>
773
+ <div class="model-list" id="models-openai">
774
+ <!-- populated by JS -->
775
+ </div>
776
+ </section>
777
+
778
+ <!-- ══════════════════════════════════════════════════════════════
779
+ PROVIDER: GEMINI
780
+ ══════════════════════════════════════════════════════════════ -->
781
+ <section class="section" id="gemini">
782
+ <div class="section-header">
783
+ <div class="section-icon" style="background:linear-gradient(135deg,#4285f422,#34a85322);border:1px solid #4285f433">✨</div>
784
+ <div>
785
+ <h2>Gemini (Google)</h2>
786
+ <p class="section-desc">Imagen 3, Gemini Flash image generation</p>
787
+ </div>
788
+ </div>
789
+ <div class="model-list" id="models-gemini"></div>
790
+ </section>
791
+
792
+ <!-- xAI -->
793
+ <section class="section" id="xai">
794
+ <div class="section-header">
795
+ <div class="section-icon" style="background:var(--bg3);border:1px solid var(--border2)">⚡</div>
796
+ <div><h2>xAI Grok</h2><p class="section-desc">Aurora image generation model by xAI</p></div>
797
+ </div>
798
+ <div class="model-list" id="models-xai"></div>
799
+ </section>
800
+
801
+ <!-- Stability AI -->
802
+ <section class="section" id="stability-ai">
803
+ <div class="section-header">
804
+ <div class="section-icon" style="background:var(--purple-bg);border:1px solid rgba(167,139,250,.2)">🌊</div>
805
+ <div>
806
+ <h2>Stability AI</h2>
807
+ <p class="section-desc">Stable Diffusion 3.5, SDXL, SD Ultra — industry-standard open diffusion models</p>
808
+ </div>
809
+ </div>
810
+ <div class="alert note"><span class="alert-icon">ℹ️</span>
811
+ <span><code>size</code> accepts aspect ratio strings: <code>1:1</code>, <code>16:9</code>, <code>9:16</code>, <code>4:3</code>, <code>3:2</code>, etc.</span>
812
+ </div>
813
+ <div class="model-list" id="models-stability-ai"></div>
814
+ </section>
815
+
816
+ <!-- Black Forest Labs -->
817
+ <section class="section" id="black-forest-labs">
818
+ <div class="section-header">
819
+ <div class="section-icon" style="background:var(--bg3);border:1px solid var(--border2)">🌲</div>
820
+ <div>
821
+ <h2>Black Forest Labs (FLUX)</h2>
822
+ <p class="section-desc">FLUX Pro, FLUX Dev, FLUX Schnell — state-of-the-art text-to-image</p>
823
+ </div>
824
+ </div>
825
+ <div class="model-list" id="models-black-forest-labs"></div>
826
+ </section>
827
+
828
+ <!-- OpenRouter -->
829
+ <section class="section" id="openrouter">
830
+ <div class="section-header">
831
+ <div class="section-icon" style="background:var(--bg3);border:1px solid var(--border2)">🔀</div>
832
+ <div><h2>OpenRouter</h2><p class="section-desc">Access multiple model providers through OpenRouter</p></div>
833
+ </div>
834
+ <div class="model-list" id="models-openrouter"></div>
835
+ </section>
836
+
837
+ <!-- fal.ai -->
838
+ <section class="section" id="fal-ai">
839
+ <div class="section-header">
840
+ <div class="section-icon" style="background:var(--bg3);border:1px solid var(--border2)">⚡</div>
841
+ <div><h2>fal.ai</h2><p class="section-desc">Fast inference platform — FLUX, Ideogram, Recraft, and more</p></div>
842
+ </div>
843
+ <div class="model-list" id="models-fal-ai"></div>
844
+ </section>
845
+
846
+ <!-- Cloudflare AI -->
847
+ <section class="section" id="cloudflare-ai">
848
+ <div class="section-header">
849
+ <div class="section-icon" style="background:var(--orange-bg);border:1px solid rgba(251,146,60,.2)">☁️</div>
850
+ <div><h2>Cloudflare AI</h2><p class="section-desc">Edge-deployed AI workers — fast, low-latency generation</p></div>
851
+ </div>
852
+ <div class="model-list" id="models-cloudflare-ai"></div>
853
+ </section>
854
+
855
+ <!-- MiniMax -->
856
+ <section class="section" id="minimax">
857
+ <div class="section-header">
858
+ <div class="section-icon" style="background:var(--bg3);border:1px solid var(--border2)">🎭</div>
859
+ <div><h2>MiniMax</h2><p class="section-desc">MiniMax Image 01 — high-quality image generation</p></div>
860
+ </div>
861
+ <div class="model-list" id="models-minimax"></div>
862
+ </section>
863
+
864
+ <!-- NanoBanana -->
865
+ <section class="section" id="nanobanana">
866
+ <div class="section-header">
867
+ <div class="section-icon" style="background:var(--yellow-bg);border:1px solid rgba(251,191,36,.2)">🍌</div>
868
+ <div><h2>NanoBanana</h2><p class="section-desc">Proprietary fast generation models</p></div>
869
+ </div>
870
+ <div class="model-list" id="models-nanobanana"></div>
871
+ </section>
872
+
873
+ <!-- SD WebUI -->
874
+ <section class="section" id="sdwebui">
875
+ <div class="section-header">
876
+ <div class="section-icon" style="background:var(--bg3);border:1px solid var(--border2)">🖼️</div>
877
+ <div><h2>SD WebUI</h2><p class="section-desc">Local Stable Diffusion WebUI (AUTOMATIC1111) integration</p></div>
878
+ </div>
879
+ <div class="alert warn"><span class="alert-icon">⚠️</span>
880
+ <span>Requires a locally running SD WebUI instance. Configure the endpoint URL in 9Router settings.</span>
881
+ </div>
882
+ <div class="model-list" id="models-sdwebui"></div>
883
+ </section>
884
+
885
+ <!-- ComfyUI -->
886
+ <section class="section" id="comfyui">
887
+ <div class="section-header">
888
+ <div class="section-icon" style="background:var(--bg3);border:1px solid var(--border2)">🔧</div>
889
+ <div><h2>ComfyUI</h2><p class="section-desc">Local ComfyUI workflow integration</p></div>
890
+ </div>
891
+ <div class="model-list" id="models-comfyui"></div>
892
+ </section>
893
+
894
+ <!-- HuggingFace -->
895
+ <section class="section" id="huggingface">
896
+ <div class="section-header">
897
+ <div class="section-icon" style="background:var(--yellow-bg);border:1px solid rgba(251,191,36,.2)">🤗</div>
898
+ <div><h2>HuggingFace</h2><p class="section-desc">HuggingFace Inference API models</p></div>
899
+ </div>
900
+ <div class="model-list" id="models-huggingface"></div>
901
+ </section>
902
+
903
+ <!-- Recraft -->
904
+ <section class="section" id="recraft">
905
+ <div class="section-header">
906
+ <div class="section-icon" style="background:var(--bg3);border:1px solid var(--border2)">🎨</div>
907
+ <div><h2>Recraft</h2><p class="section-desc">Recraft V3 — design-focused vector and illustration generation</p></div>
908
+ </div>
909
+ <div class="model-list" id="models-recraft"></div>
910
+ </section>
911
+
912
+ <!-- ══════════════════════════════════════════════════════════════
913
+ PROVIDER: RUNWAYML
914
+ ══════════════════════════════════════════════════════════════ -->
915
+ <section class="section" id="runwayml">
916
+ <div class="section-header">
917
+ <div class="section-icon" style="background:var(--bg3);border:1px solid var(--border2)">🎬</div>
918
+ <div>
919
+ <h2>RunwayML</h2>
920
+ <p class="section-desc">Gen-4 Turbo, Gen-3 Alpha — professional AI video generation</p>
921
+ </div>
922
+ </div>
923
+ <div class="alert note"><span class="alert-icon">ℹ️</span>
924
+ <span>RunwayML models with <code>_image</code> suffix route to image endpoints. Video models: duration options <code>5</code>, <code>8</code>, <code>10</code> seconds.</span>
925
+ </div>
926
+ <div class="model-list" id="models-runwayml"></div>
927
+ </section>
928
+
929
+ <!-- ══════════════════════════════════════════════════════════════
930
+ PROVIDER: LEONARDO
931
+ ══════════════════════════════════════════════════════════════ -->
932
+ <section class="section" id="leonardo">
933
+ <div class="section-header">
934
+ <div class="section-icon" style="background:linear-gradient(135deg,rgba(229,106,74,.12),rgba(166,64,39,.08));border:1px solid rgba(229,106,74,.25)">🎭</div>
935
+ <div>
936
+ <h2>Leonardo AI</h2>
937
+ <p class="section-desc">24 image models + 30 video models via Leonardo's GraphQL API</p>
938
+ </div>
939
+ </div>
940
+
941
+ <div class="grid-2" style="margin-bottom:20px">
942
+ <div class="feature-card">
943
+ <h4>Image Generation (v1/v2)</h4>
944
+ <p>v1 path: Phoenix, Flux Dev, Lucid Origin — uses modelId UUID + contrast. v2 path: Seedream, GPT Image, Flux Pro, native models — no modelId UUID required.</p>
945
+ </div>
946
+ <div class="feature-card">
947
+ <h4>Video Generation</h4>
948
+ <p>Kling, Veo, Sora, Hailuo, Seedance, LTX and more — routed via Leonardo's GraphQL <code>Generate</code> mutation. Adapter currently forwards: <code>prompt</code>, <code>n</code>, <code>size</code>, <code>negative_prompt</code>.</p>
949
+ </div>
950
+ </div>
951
+
952
+ <div class="alert warn"><span class="alert-icon">⚠️</span>
953
+ <span>For Leonardo <strong>video models</strong>, the adapter currently forwards <code>prompt</code>, <code>n</code>, <code>size</code>, and <code>negative_prompt</code> only. Additional video params (<code>duration</code>, <code>image_url</code>, etc.) are listed for future support.</span>
954
+ </div>
955
+
956
+ <div style="margin-bottom:16px">
957
+ <div class="tabs" id="leo-tabs">
958
+ <div data-target="leo-image" class="tab active" onclick="switchTab('leo-tabs','leo-image')">Image Models (24)</div>
959
+ <div data-target="leo-video" class="tab" onclick="switchTab('leo-tabs','leo-video')">Video Models (30)</div>
960
+ </div>
961
+ <div id="leo-image" class="tab-content active">
962
+ <div class="model-list" id="models-leonardo-img"></div>
963
+ </div>
964
+ <div id="leo-video" class="tab-content">
965
+ <div class="model-list" id="models-leonardo-vid"></div>
966
+ </div>
967
+ </div>
968
+ </section>
969
+
970
+ <!-- ══════════════════════════════════════════════════════════════
971
+ PROVIDER: WEAVY
972
+ ══════════════════════════════════════════════════════════════ -->
973
+ <section class="section" id="weavy">
974
+ <div class="section-header">
975
+ <div class="section-icon" style="background:linear-gradient(135deg,rgba(16,185,129,.12),rgba(229,106,74,.08));border:1px solid rgba(16,185,129,.2)">🌊</div>
976
+ <div>
977
+ <h2>Weavy</h2>
978
+ <p class="section-desc">34 image models + 41 video models via Weavy's recipe execution API</p>
979
+ </div>
980
+ </div>
981
+
982
+ <div class="grid-2" style="margin-bottom:20px">
983
+ <div class="feature-card">
984
+ <h4>How Weavy Works</h4>
985
+ <p>Weavy executes AI workflows via a recipe/flow system. 9Router duplicates a template recipe, configures parameters, then polls for completion via a Python subprocess (<code>weavy_generate.py</code>).</p>
986
+ </div>
987
+ <div class="feature-card">
988
+ <h4>Image Architecture</h4>
989
+ <p>Image models use two paths: <strong>Predefined nodes</strong> (Flux Pro, Imagen 3, Gemini Nano) with native Weavy nodes, and <strong>Wildcard nodes</strong> (all FAL-ai based models) injected dynamically. The <code>size</code> ratio string is auto-converted to <code>params.aspect_ratio</code> internally.</p>
990
+ </div>
991
+ <div class="feature-card">
992
+ <h4>Video Architecture</h4>
993
+ <p>Video models use two routing paths: <strong>Predefined nodes</strong> (Runway, Kling, Seedance, Wan, Veo, LTX, Higgsfield) with direct duration mapping, and <strong>Wildcard nodes</strong> (all others) routing through fal.ai endpoints.</p>
994
+ </div>
995
+ </div>
996
+
997
+ <div class="alert info"><span class="alert-icon">ℹ️</span>
998
+ <span><strong>Weavy <code>size</code> parameter</strong> is always an <strong>aspect ratio string</strong> — NOT pixel dimensions. Valid values: <code>1:1</code> · <code>9:16</code> (portrait) · <code>16:9</code> (landscape) · <code>3:4</code> · <code>4:3</code>. Backend auto-converts to the correct format per model (<code>image_size</code>, <code>aspect_ratio</code>, or pixel dimensions).</span>
999
+ </div>
1000
+
1001
+ <div style="margin-bottom:16px">
1002
+ <div class="tabs" id="weavy-tabs">
1003
+ <div data-target="weavy-image" class="tab active" onclick="switchTab('weavy-tabs','weavy-image')">Image Models (34)</div>
1004
+ <div data-target="weavy-video" class="tab" onclick="switchTab('weavy-tabs','weavy-video')">Video Models (41)</div>
1005
+ </div>
1006
+ <div id="weavy-image" class="tab-content active">
1007
+ <div class="model-list" id="models-weavy-img"></div>
1008
+ </div>
1009
+ <div id="weavy-video" class="tab-content">
1010
+ <div class="alert note" style="margin-bottom:16px"><span class="alert-icon">ℹ️</span>
1011
+ <span><strong>Text-only models</strong> (Hunyuan, Wan Video, Veo Text-to-Image variants): <code>image_url</code> is NOT supported.<br>
1012
+ <strong>First-last-frame models</strong> (Kling O1/2.5/2.1): use <code>image_url</code> for first frame and <code>end_image_url</code> for last frame.<br>
1013
+ <strong>Predefined duration</strong> models: service maps your value to nearest valid option.</span>
1014
+ </div>
1015
+ <div class="model-list" id="models-weavy-vid"></div>
1016
+ </div>
1017
+ </div>
1018
+ </section>
1019
+
1020
+ <!-- ── MODEL INFO API ── -->
1021
+ <section class="section" id="model-info">
1022
+ <div class="section-header">
1023
+ <div class="section-icon" style="background:var(--cyan-bg)">📋</div>
1024
+ <div><h2>Model Info API</h2><p class="section-desc">Query full parameter schema for any model programmatically</p></div>
1025
+ </div>
1026
+
1027
+ <div class="code-block" id="c-info"><button class="copy-btn" onclick="copyCode('c-info',this)">Copy</button>
1028
+ <span class="comment"># Get full param schema for weavy-kling</span>
1029
+ <span class="kw">curl</span> https://your-9router-host/v1/models/info?id=<span class="str">weavy/weavy-kling</span>
1030
+
1031
+ <span class="comment"># Response</span>
1032
+ {
1033
+ <span class="key">"id"</span>: <span class="str">"weavy/weavy-kling"</span>,
1034
+ <span class="key">"name"</span>: <span class="str">"Kling 3.0"</span>,
1035
+ <span class="key">"kind"</span>: <span class="str">"video"</span>,
1036
+ <span class="key">"endpoint"</span>: <span class="str">"/v1/images/generations"</span>,
1037
+ <span class="key">"params"</span>: [<span class="str">"size"</span>, <span class="str">"duration"</span>, <span class="str">"resolution"</span>, <span class="str">"aspect_ratio"</span>, <span class="str">"image_url"</span>, <span class="str">"end_image_url"</span>]
1038
+ }</div>
1039
+ </section>
1040
+
1041
+ <!-- ── ERRORS ── -->
1042
+ <section class="section" id="errors">
1043
+ <div class="section-header">
1044
+ <div class="section-icon" style="background:var(--red-bg)">⚠️</div>
1045
+ <div><h2>Error Reference</h2><p class="section-desc">Standard error response format</p></div>
1046
+ </div>
1047
+
1048
+ <table class="param-table" style="margin-bottom:16px">
1049
+ <thead><tr><th>HTTP Status</th><th>Error Type</th><th>Description</th></tr></thead>
1050
+ <tbody>
1051
+ <tr><td><span class="param-default">400</span></td><td><code>invalid_request_error</code></td><td class="param-desc">Missing required parameters, invalid model ID, or unsupported parameter value</td></tr>
1052
+ <tr><td><span class="param-default">401</span></td><td><code>authentication_error</code></td><td class="param-desc">Invalid or missing API key / Bearer token</td></tr>
1053
+ <tr><td><span class="param-default">403</span></td><td><code>permission_error</code></td><td class="param-desc">Account does not have access to this model or provider</td></tr>
1054
+ <tr><td><span class="param-default">404</span></td><td><code>not_found</code></td><td class="param-desc">Model not found in registry</td></tr>
1055
+ <tr><td><span class="param-default">429</span></td><td><code>rate_limit_error</code></td><td class="param-desc">Provider rate limit or quota exceeded</td></tr>
1056
+ <tr><td><span class="param-default">500</span></td><td><code>server_error</code></td><td class="param-desc">Internal server error or upstream provider failure</td></tr>
1057
+ <tr><td><span class="param-default">504</span></td><td><code>timeout</code></td><td class="param-desc">Generation timed out. Video generation can take up to 10 minutes</td></tr>
1058
+ </tbody>
1059
+ </table>
1060
+
1061
+ <div class="code-block">
1062
+ <span class="comment">// Error response format</span>
1063
+ {
1064
+ <span class="key">"error"</span>: {
1065
+ <span class="key">"message"</span>: <span class="str">"Model not found: invalid-model-id"</span>,
1066
+ <span class="key">"type"</span>: <span class="str">"not_found"</span>,
1067
+ <span class="key">"code"</span>: <span class="num">null</span>
1068
+ }
1069
+ }</div>
1070
+ </section>
1071
+
1072
+ <!-- ── EXAMPLES ── -->
1073
+ <section class="section" id="examples">
1074
+ <div class="section-header">
1075
+ <div class="section-icon" style="background:var(--green-bg)">💡</div>
1076
+ <div><h2>Code Examples</h2><p class="section-desc">Ready-to-use code snippets</p></div>
1077
+ </div>
1078
+
1079
+ <div class="tabs" id="ex-tabs">
1080
+ <div data-target="ex-python" class="tab active" onclick="switchTab('ex-tabs','ex-python')">Python</div>
1081
+ <div data-target="ex-js" class="tab" onclick="switchTab('ex-tabs','ex-js')">JavaScript</div>
1082
+ <div data-target="ex-curl" class="tab" onclick="switchTab('ex-tabs','ex-curl')">cURL</div>
1083
+ </div>
1084
+
1085
+ <div id="ex-python" class="tab-content active">
1086
+ <div class="code-block" id="cp"><button class="copy-btn" onclick="copyCode('cp',this)">Copy</button>
1087
+ <span class="kw">from</span> openai <span class="kw">import</span> OpenAI
1088
+
1089
+ client = OpenAI(
1090
+ api_key=<span class="str">"your-9router-key"</span>,
1091
+ base_url=<span class="str">"https://your-9router-host/v1"</span>
1092
+ )
1093
+
1094
+ <span class="comment"># Generate an image</span>
1095
+ img = client.images.generate(
1096
+ model=<span class="str">"weavy-flux-2-pro"</span>,
1097
+ prompt=<span class="str">"A photorealistic cat sitting on a library shelf"</span>,
1098
+ size=<span class="str">"16:9"</span>,
1099
+ n=<span class="num">1</span>
1100
+ )
1101
+ <span class="kw">print</span>(img.data[<span class="num">0</span>].url)
1102
+
1103
+ <span class="comment"># Generate a video (uses same SDK, same endpoint)</span>
1104
+ vid = client.images.generate(
1105
+ model=<span class="str">"weavy-kling"</span>,
1106
+ prompt=<span class="str">"A cat playing with a ball of yarn, slow motion, cinematic"</span>,
1107
+ size=<span class="str">"16:9"</span>,
1108
+ extra_body={<span class="str">"duration"</span>: <span class="num">10</span>, <span class="str">"resolution"</span>: <span class="str">"1080p"</span>}
1109
+ )
1110
+ <span class="kw">print</span>(vid.data[<span class="num">0</span>].url)</div>
1111
+ </div>
1112
+
1113
+ <div id="ex-js" class="tab-content">
1114
+ <div class="code-block" id="cj"><button class="copy-btn" onclick="copyCode('cj',this)">Copy</button>
1115
+ <span class="kw">import</span> OpenAI <span class="kw">from</span> <span class="str">'openai'</span>;
1116
+
1117
+ <span class="kw">const</span> client = <span class="kw">new</span> OpenAI({
1118
+ apiKey: <span class="str">'your-9router-key'</span>,
1119
+ baseURL: <span class="str">'https://your-9router-host/v1'</span>,
1120
+ });
1121
+
1122
+ <span class="comment">// Generate an image</span>
1123
+ <span class="kw">const</span> img = <span class="kw">await</span> client.images.generate({
1124
+ model: <span class="str">'dall-e-3'</span>,
1125
+ prompt: <span class="str">'A surreal landscape with floating islands at twilight'</span>,
1126
+ size: <span class="str">'1792x1024'</span>,
1127
+ quality: <span class="str">'hd'</span>,
1128
+ });
1129
+ console.log(img.data[<span class="num">0</span>].url);
1130
+
1131
+ <span class="comment">// Generate a video (Weavy Veo 3.1 — fixed 8s)</span>
1132
+ <span class="kw">const</span> vid = <span class="kw">await</span> fetch(<span class="str">'https://your-9router-host/v1/images/generations'</span>, {
1133
+ method: <span class="str">'POST'</span>,
1134
+ headers: {
1135
+ <span class="str">'Authorization'</span>: <span class="str">'Bearer your-9router-key'</span>,
1136
+ <span class="str">'Content-Type'</span>: <span class="str">'application/json'</span>,
1137
+ },
1138
+ body: JSON.stringify({
1139
+ model: <span class="str">'weavy-veo'</span>,
1140
+ prompt: <span class="str">'Aerial view of a coral reef, underwater drone shot'</span>,
1141
+ size: <span class="str">'16:9'</span>,
1142
+ image_url: <span class="str">'https://example.com/reef.jpg'</span>, <span class="comment">// optional start frame</span>
1143
+ duration: <span class="num">8</span>,
1144
+ }),
1145
+ });
1146
+ <span class="kw">const</span> data = <span class="kw">await</span> vid.json();
1147
+ console.log(data.data[<span class="num">0</span>].url);</div>
1148
+ </div>
1149
+
1150
+ <div id="ex-curl" class="tab-content">
1151
+ <div class="code-block" id="cc"><button class="copy-btn" onclick="copyCode('cc',this)">Copy</button>
1152
+ <span class="comment"># Image generation (DALL-E 3, landscape)</span>
1153
+ <span class="kw">curl</span> -X POST https://your-9router-host/v1/images/generations \
1154
+ -H <span class="str">"Authorization: Bearer YOUR_KEY"</span> \
1155
+ -H <span class="str">"Content-Type: application/json"</span> \
1156
+ -d <span class="str">'{
1157
+ "model": "dall-e-3",
1158
+ "prompt": "A neon-lit Tokyo street at night, rain reflections",
1159
+ "size": "1792x1024",
1160
+ "quality": "hd"
1161
+ }'</span>
1162
+
1163
+ <span class="comment"># Weavy image generation (portrait 9:16)</span>
1164
+ <span class="kw">curl</span> -X POST https://your-9router-host/v1/images/generations \
1165
+ -H <span class="str">"Authorization: Bearer YOUR_KEY"</span> \
1166
+ -H <span class="str">"Content-Type: application/json"</span> \
1167
+ -d <span class="str">'{
1168
+ "model": "weavy/weavy-flux-pro",
1169
+ "prompt": "A cute cat wearing a hat, studio photo",
1170
+ "size": "9:16"
1171
+ }'</span>
1172
+
1173
+ <span class="comment"># Video generation (Weavy Kling 3.0)</span>
1174
+ <span class="kw">curl</span> -X POST https://your-9router-host/v1/images/generations \
1175
+ -H <span class="str">"Authorization: Bearer YOUR_KEY"</span> \
1176
+ -H <span class="str">"Content-Type: application/json"</span> \
1177
+ -d <span class="str">'{
1178
+ "model": "weavy/weavy-kling",
1179
+ "prompt": "A slow pan across an ancient Roman amphitheater at golden hour",
1180
+ "size": "16:9",
1181
+ "duration": 10,
1182
+ "resolution": "1080p"
1183
+ }'</span></div>
1184
+ </div>
1185
+ </section>
1186
+
1187
+ </div><!-- /content -->
1188
+ </main>
1189
+ </div><!-- /layout -->
1190
+
1191
+ <button class="scroll-top" id="scrollTop" onclick="window.scrollTo({top:0,behavior:'smooth'})">↑</button>
1192
+
1193
+ <script>
1194
+ // ── MODEL DATA (injected from providerModels) ──
1195
+ const MODEL_DATA = null; // will be populated by fetch
1196
+
1197
+ // Inline model catalog (extracted from registry)
1198
+ const PROVIDERS = {
1199
+ openai: { label: 'OpenAI', alias: 'openai' },
1200
+ gemini: { label: 'Gemini', alias: 'gemini' },
1201
+ xai: { label: 'xAI', alias: 'xai' },
1202
+ 'stability-ai': { label: 'Stability AI', alias: 'stability-ai' },
1203
+ 'black-forest-labs': { label: 'Black Forest Labs', alias: 'black-forest-labs' },
1204
+ openrouter: { label: 'OpenRouter', alias: 'openrouter' },
1205
+ 'fal-ai': { label: 'fal.ai', alias: 'fal-ai' },
1206
+ 'cloudflare-ai': { label: 'Cloudflare AI', alias: 'cloudflare-ai' },
1207
+ minimax: { label: 'MiniMax', alias: 'minimax' },
1208
+ nanobanana: { label: 'NanoBanana', alias: 'nanobanana' },
1209
+ sdwebui: { label: 'SD WebUI', alias: 'sdwebui' },
1210
+ comfyui: { label: 'ComfyUI', alias: 'comfyui' },
1211
+ huggingface: { label: 'HuggingFace', alias: 'huggingface' },
1212
+ recraft: { label: 'Recraft', alias: 'recraft' },
1213
+ runwayml: { label: 'RunwayML', alias: 'runwayml' },
1214
+ leonardo: { label: 'Leonardo AI', alias: 'leonardo' },
1215
+ weavy: { label: 'Weavy', alias: 'weavy' },
1216
+ };
1217
+
1218
+ // ── RENDER MODEL LIST ──
1219
+ function renderParamDefs(paramDefs) {
1220
+ if (!paramDefs || !paramDefs.length) return '<p style="color:var(--text3);font-size:12px;padding:8px 0">No configurable parameters</p>';
1221
+ return `<table class="param-table">
1222
+ <thead><tr><th>Parameter</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th></tr></thead>
1223
+ <tbody>${paramDefs.map(p => `
1224
+ <tr>
1225
+ <td><span class="param-name">${p.name}</span></td>
1226
+ <td><span class="param-type">${p.type || 'string'}</span></td>
1227
+ <td><span class="${p.required ? 'param-required' : 'param-optional'}">${p.required ? 'required' : 'optional'}</span></td>
1228
+ <td>${p.default != null ? `<span class="param-default">${JSON.stringify(p.default)}</span>` : '<span style="color:var(--text3)">—</span>'}</td>
1229
+ <td class="param-desc">
1230
+ ${p.description || ''}
1231
+ ${p.validValues ? `<br><span style="color:var(--text3);font-size:11px">Values: ${p.validValues.map(v=>`<code>${v}</code>`).join(' · ')}</span>` : ''}
1232
+ ${p.min != null && !p.validValues ? `<br><span style="color:var(--text3);font-size:11px">Range: <code>${p.min}</code> – <code>${p.max}</code></span>` : ''}
1233
+ </td>
1234
+ </tr>`).join('')}
1235
+ </tbody></table>`;
1236
+ }
1237
+
1238
+ function renderModels(models, containerId) {
1239
+ const el = document.getElementById(containerId);
1240
+ if (!el) return;
1241
+ if (!models || !models.length) { el.innerHTML = '<p style="color:var(--text3)">No models</p>'; return; }
1242
+ el.innerHTML = models.map((m, i) => `
1243
+ <div class="model-item" id="model-${m.id.replace(/[^a-z0-9]/g,'-')}">
1244
+ <div class="model-header" onclick="toggleModel(this)">
1245
+ <span class="model-type-badge ${m.type}">${m.type}</span>
1246
+ <span class="model-id">${m.id}</span>
1247
+ <span class="model-name">${m.name}</span>
1248
+ <span class="model-toggle">▾</span>
1249
+ </div>
1250
+ <div class="model-body">
1251
+ ${m.description ? `<p class="model-desc">${m.description}</p>` : ''}
1252
+ ${renderParamDefs(m.paramDefs)}
1253
+ </div>
1254
+ </div>`).join('');
1255
+ }
1256
+
1257
+ function toggleModel(header) {
1258
+ const item = header.closest('.model-item');
1259
+ item.classList.toggle('open');
1260
+ }
1261
+
1262
+ // ── TABS ──
1263
+ function switchTab(groupId, targetId) {
1264
+ // Toggle tab active states
1265
+ const group = document.getElementById(groupId);
1266
+ group.querySelectorAll('.tab').forEach(tab => {
1267
+ const match = tab.getAttribute('data-target') === targetId;
1268
+ tab.classList.toggle('active', match);
1269
+ });
1270
+ // Toggle content visibility (look upward from the tabs div for siblings)
1271
+ const parent = group.parentElement;
1272
+ parent.querySelectorAll('.tab-content').forEach(tc => {
1273
+ tc.classList.toggle('active', tc.id === targetId);
1274
+ });
1275
+ }
1276
+
1277
+ // ── SIDEBAR ACTIVE ──
1278
+ function setActive(el) {
1279
+ document.querySelectorAll('.nav-item').forEach(x => x.classList.remove('active'));
1280
+ el.classList.add('active');
1281
+ }
1282
+
1283
+ // ── COPY CODE ──
1284
+ function copyCode(id, btn) {
1285
+ const el = document.getElementById(id);
1286
+ const text = el.innerText.replace(/^Copy\n/, '').replace(/^Copy/, '');
1287
+ navigator.clipboard.writeText(text).then(() => {
1288
+ btn.textContent = '✓ Copied';
1289
+ btn.classList.add('copied');
1290
+ setTimeout(() => { btn.textContent = 'Copy'; btn.classList.remove('copied'); }, 2000);
1291
+ });
1292
+ }
1293
+
1294
+ // ── SCROLL TOP ──
1295
+ const scrollBtn = document.getElementById('scrollTop');
1296
+ window.addEventListener('scroll', () => {
1297
+ scrollBtn.classList.toggle('visible', window.scrollY > 300);
1298
+ });
1299
+
1300
+ // ── SEARCH ──
1301
+ const searchInput = document.getElementById('searchInput');
1302
+ searchInput.addEventListener('input', e => {
1303
+ const q = e.target.value.trim().toLowerCase();
1304
+ document.querySelectorAll('.model-item').forEach(item => {
1305
+ const text = item.textContent.toLowerCase();
1306
+ item.style.display = !q || text.includes(q) ? '' : 'none';
1307
+ });
1308
+ });
1309
+
1310
+ // ── INTERSECTION OBSERVER for sidebar active state ──
1311
+ const sections = document.querySelectorAll('section[id], div[id="overview"]');
1312
+ const observer = new IntersectionObserver(entries => {
1313
+ entries.forEach(e => {
1314
+ if (e.isIntersecting) {
1315
+ const id = e.target.id;
1316
+ const link = document.querySelector(`.nav-item[href="#${id}"]`);
1317
+ if (link) {
1318
+ document.querySelectorAll('.nav-item').forEach(x => x.classList.remove('active'));
1319
+ link.classList.add('active');
1320
+ }
1321
+ }
1322
+ });
1323
+ }, { rootMargin: '-20% 0px -70% 0px' });
1324
+ sections.forEach(s => observer.observe(s));
1325
+
1326
+ // ── LOAD MODEL DATA ──
1327
+ // Embedded model data (generated from providerModels.js)
1328
+ const EMBEDDED_MODELS = {"openai":[{"id":"gpt-5.4","name":"GPT-5.4","params":[],"description":"","paramDefs":[]},{"id":"gpt-5.4-mini","name":"GPT-5.4 Mini","params":[],"description":"","paramDefs":[]},{"id":"gpt-5.4-nano","name":"GPT-5.4 Nano","params":[],"description":"","paramDefs":[]},{"id":"gpt-5.2","name":"GPT-5.2","params":[],"description":"","paramDefs":[]},{"id":"gpt-5.1","name":"GPT-5.1","params":[],"description":"","paramDefs":[]},{"id":"gpt-5","name":"GPT-5","params":[],"description":"","paramDefs":[]},{"id":"gpt-5-mini","name":"GPT-5 Mini","params":[],"description":"","paramDefs":[]},{"id":"gpt-5-nano","name":"GPT-5 Nano","params":[],"description":"","paramDefs":[]},{"id":"gpt-4o","name":"GPT-4o","params":[],"description":"","paramDefs":[]},{"id":"gpt-4o-mini","name":"GPT-4o Mini","params":[],"description":"","paramDefs":[]},{"id":"gpt-4-turbo","name":"GPT-4 Turbo","params":[],"description":"","paramDefs":[]},{"id":"gpt-4.1","name":"GPT-4.1","params":[],"description":"","paramDefs":[]},{"id":"gpt-4.1-mini","name":"GPT-4.1 Mini","params":[],"description":"","paramDefs":[]},{"id":"gpt-4.1-nano","name":"GPT-4.1 Nano","params":[],"description":"","paramDefs":[]},{"id":"o3","name":"O3","params":[],"description":"","paramDefs":[]},{"id":"o3-mini","name":"O3 Mini","params":[],"description":"","paramDefs":[]},{"id":"o3-pro","name":"O3 Pro","params":[],"description":"","paramDefs":[]},{"id":"o4-mini","name":"O4 Mini","params":[],"description":"","paramDefs":[]},{"id":"o1","name":"O1","params":[],"description":"","paramDefs":[]},{"id":"o1-mini","name":"O1 Mini","params":[],"description":"","paramDefs":[]},{"id":"text-embedding-3-large","name":"Text Embedding 3 Large","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"text-embedding-3-small","name":"Text Embedding 3 Small","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"text-embedding-ada-002","name":"Text Embedding Ada 002","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"tts-1","name":"TTS-1","type":"tts","params":[],"description":"","paramDefs":[]},{"id":"tts-1-hd","name":"TTS-1 HD","type":"tts","params":[],"description":"","paramDefs":[]},{"id":"gpt-4o-mini-tts","name":"GPT-4o Mini TTS","type":"tts","params":[],"description":"","paramDefs":[]},{"id":"whisper-1","name":"Whisper 1","type":"stt","params":["language","response_format","temperature","prompt"],"description":"","paramDefs":[]},{"id":"gpt-4o-transcribe","name":"GPT-4o Transcribe","type":"stt","params":["language","response_format","temperature","prompt"],"description":"","paramDefs":[]},{"id":"gpt-4o-mini-transcribe","name":"GPT-4o Mini Transcribe","type":"stt","params":["language","response_format","temperature","prompt"],"description":"","paramDefs":[]},{"id":"gpt-image-1","name":"GPT Image 1","type":"image","params":["n","size","quality","response_format"],"description":"OpenAI GPT Image 1 — high-quality image generation with multi-turn editing support via OpenAI API.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"quality","type":"string","required":false,"default":"auto","validValues":["low","medium","high","auto"],"min":null,"max":null,"description":"Image rendering quality. Higher quality produces more detailed images but may take longer. Provider-specific values apply."},{"name":"response_format","type":"string","required":false,"default":"url","validValues":["url","b64_json"],"min":null,"max":null,"description":"How the image is returned: 'url' is a temporary public link; 'b64_json' is the raw image as a base64-encoded JSON string."}]},{"id":"dall-e-3","name":"DALL-E 3","type":"image","params":["size","quality","style","response_format"],"description":"OpenAI DALL-E 3 — photorealistic and artistic image generation. Does not support batch (n must be 1).","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"quality","type":"string","required":false,"default":"standard","validValues":["standard","hd"],"min":null,"max":null,"description":"Image rendering quality. Higher quality produces more detailed images but may take longer. Provider-specific values apply."},{"name":"style","type":"string","required":false,"default":null,"validValues":["vivid","natural","anime","realistic","digital-art"],"min":null,"max":null,"description":"Artistic style preset. 'vivid' produces hyper-real images; 'natural' is more subdued. Provider-specific presets may apply."},{"name":"response_format","type":"string","required":false,"default":"url","validValues":["url","b64_json"],"min":null,"max":null,"description":"How the image is returned: 'url' is a temporary public link; 'b64_json' is the raw image as a base64-encoded JSON string."}]},{"id":"dall-e-2","name":"DALL-E 2","type":"image","params":["n","size","response_format"],"description":"OpenAI DALL-E 2 — classic image generation model. Supports batch generation (n up to 10).","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":10,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["256x256","512x512","1024x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"response_format","type":"string","required":false,"default":"url","validValues":["url","b64_json"],"min":null,"max":null,"description":"How the image is returned: 'url' is a temporary public link; 'b64_json' is the raw image as a base64-encoded JSON string."}]}],"gemini":[{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","params":[],"description":"","paramDefs":[]},{"id":"gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite Preview","params":[],"description":"","paramDefs":[]},{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","params":[],"description":"","paramDefs":[]},{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","params":[],"description":"","paramDefs":[]},{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","params":[],"description":"","paramDefs":[]},{"id":"gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite","params":[],"description":"","paramDefs":[]},{"id":"gemini-2.0-flash","name":"Gemini 2.0 Flash","params":[],"description":"","paramDefs":[]},{"id":"gemini-2.0-flash-lite","name":"Gemini 2.0 Flash Lite","params":[],"description":"","paramDefs":[]},{"id":"gemma-4-31b-it","name":"Gemma 4 31B IT","params":[],"description":"","paramDefs":[]},{"id":"gemini-embedding-2-preview","name":"Gemini Embedding 2 Preview","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"gemini-embedding-001","name":"Gemini Embedding 001","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"text-embedding-005","name":"Text Embedding 005","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"text-embedding-004","name":"Text Embedding 004 (Legacy)","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"gemini-3.1-flash-image-preview","name":"Gemini 3.1 Flash Image (Nano Banana 2)","type":"image","params":[],"description":"Google Gemini 3.1 Flash multimodal image generation (Nano Banana 2 tier). Prompt only — no size or style params.","paramDefs":[]},{"id":"gemini-3-pro-image-preview","name":"Gemini 3 Pro Image (Nano Banana Pro)","type":"image","params":[],"description":"Google Gemini 3 Pro multimodal image generation (Nano Banana Pro tier). Prompt only — no size or style params.","paramDefs":[]},{"id":"gemini-2.5-flash-image","name":"Gemini 2.5 Flash Image (Nano Banana)","type":"image","params":[],"description":"Google Gemini 2.5 Flash multimodal image generation (Nano Banana tier). Prompt only — no size or style params.","paramDefs":[]},{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro (Best)","type":"stt","params":["language","prompt"],"description":"","paramDefs":[]},{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","type":"stt","params":["language","prompt"],"description":"","paramDefs":[]},{"id":"gemini-2.5-flash-lite","name":"Gemini 2.5 Flash Lite (Cheapest)","type":"stt","params":["language","prompt"],"description":"","paramDefs":[]},{"id":"gemini-2.0-flash","name":"Gemini 2.0 Flash","type":"stt","params":["language","prompt"],"description":"","paramDefs":[]}],"xai":[{"id":"grok-4","name":"Grok 4","params":[],"description":"","paramDefs":[]},{"id":"grok-4-fast-reasoning","name":"Grok 4 Fast Reasoning","params":[],"description":"","paramDefs":[]},{"id":"grok-code-fast-1","name":"Grok Code Fast","params":[],"description":"","paramDefs":[]},{"id":"grok-3","name":"Grok 3","params":[],"description":"","paramDefs":[]},{"id":"grok-2-image-1212","name":"Grok 2 Image","type":"image","params":["n","response_format"],"description":"xAI Grok 2 Image — image generation via xAI API. Does not support size or style parameters.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"response_format","type":"string","required":false,"default":"url","validValues":["url","b64_json"],"min":null,"max":null,"description":"How the image is returned: 'url' is a temporary public link; 'b64_json' is the raw image as a base64-encoded JSON string."}]}],"stability-ai":[{"id":"stable-image-ultra","name":"Stable Image Ultra","type":"image","params":["size","negative_prompt","seed","output_format"],"description":"Stability AI Stable Image Ultra — top-of-range photorealistic image generation. Returns base64 PNG.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"output_format","type":"string","required":false,"default":"png","validValues":["png","jpeg","webp"],"min":null,"max":null,"description":"Output image file format. 'png' supports transparency; 'jpeg'/'webp' are smaller for photos."}]},{"id":"stable-image-core","name":"Stable Image Core","type":"image","params":["size","style","negative_prompt","seed","output_format"],"description":"Stability AI Stable Image Core — balanced quality/speed with style presets.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"style","type":"string","required":false,"default":null,"validValues":["3d-model","analog-film","anime","cinematic","comic-book","digital-art","enhance","fantasy-art","isometric","line-art","low-poly","modeling-compound","neon-punk","origami","photographic","pixel-art","tile-texture"],"min":null,"max":null,"description":"Artistic style preset. 'vivid' produces hyper-real images; 'natural' is more subdued. Provider-specific presets may apply."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"output_format","type":"string","required":false,"default":"png","validValues":["png","jpeg","webp"],"min":null,"max":null,"description":"Output image file format. 'png' supports transparency; 'jpeg'/'webp' are smaller for photos."}]},{"id":"sd3.5-large","name":"Stable Diffusion 3.5 Large","type":"image","params":["size","negative_prompt","seed","guidance","output_format"],"description":"Stability AI SD 3.5 Large — highest quality SD3 variant. Supports negative prompt.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"guidance","type":"number","required":false,"default":null,"validValues":null,"min":0,"max":20,"description":"Classifier-free guidance scale. Higher values make the output follow the prompt more closely but may reduce visual quality. Typical range: 5–15."},{"name":"output_format","type":"string","required":false,"default":"png","validValues":["png","jpeg","webp"],"min":null,"max":null,"description":"Output image file format. 'png' supports transparency; 'jpeg'/'webp' are smaller for photos."}]},{"id":"sd3.5-large-turbo","name":"Stable Diffusion 3.5 Large Turbo","type":"image","params":["size","seed","output_format"],"description":"Stability AI SD 3.5 Large Turbo — faster distilled variant. Does not support guidance or negative_prompt.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"output_format","type":"string","required":false,"default":"png","validValues":["png","jpeg","webp"],"min":null,"max":null,"description":"Output image file format. 'png' supports transparency; 'jpeg'/'webp' are smaller for photos."}]},{"id":"sd3.5-medium","name":"Stable Diffusion 3.5 Medium","type":"image","params":["size","negative_prompt","seed","guidance","output_format"],"description":"Stability AI SD 3.5 Medium — balanced variant between Turbo and Large.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"guidance","type":"number","required":false,"default":null,"validValues":null,"min":0,"max":20,"description":"Classifier-free guidance scale. Higher values make the output follow the prompt more closely but may reduce visual quality. Typical range: 5–15."},{"name":"output_format","type":"string","required":false,"default":"png","validValues":["png","jpeg","webp"],"min":null,"max":null,"description":"Output image file format. 'png' supports transparency; 'jpeg'/'webp' are smaller for photos."}]}],"black-forest-labs":[{"id":"flux-pro-1.1","name":"FLUX Pro 1.1","type":"image","params":["n","size","seed"],"description":"Black Forest Labs FLUX Pro 1.1 — latest professional FLUX via BFL API. Async polling model.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."}]},{"id":"flux-pro-1.1-ultra","name":"FLUX Pro 1.1 Ultra","type":"image","params":["size","seed","output_format"],"description":"FLUX Pro 1.1 Ultra — 4MP high-resolution output. Supports raw mode. Single image per request.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"output_format","type":"string","required":false,"default":"png","validValues":["png","jpeg","webp"],"min":null,"max":null,"description":"Output image file format. 'png' supports transparency; 'jpeg'/'webp' are smaller for photos."}]},{"id":"flux-pro","name":"FLUX Pro","type":"image","params":["n","size","seed","guidance"],"description":"FLUX Pro (original) — state-of-the-art image generation via BFL API.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"guidance","type":"number","required":false,"default":null,"validValues":null,"min":0,"max":20,"description":"Classifier-free guidance scale. Higher values make the output follow the prompt more closely but may reduce visual quality. Typical range: 5–15."}]},{"id":"flux-dev","name":"FLUX Dev","type":"image","params":["n","size","seed","guidance","num_steps"],"description":"FLUX Dev — open-weight development model via BFL API. Supports guidance scale.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"guidance","type":"number","required":false,"default":null,"validValues":null,"min":0,"max":20,"description":"Classifier-free guidance scale. Higher values make the output follow the prompt more closely but may reduce visual quality. Typical range: 5–15."},{"name":"num_steps","type":"integer","required":false,"default":null,"validValues":null,"min":1,"max":50,"description":"Number of diffusion sampling steps. More steps = higher quality, slower generation. Typical range: 20–50."}]},{"id":"flux-kontext-pro","name":"FLUX Kontext Pro (Edit)","type":"image","params":["size","seed","image_url"],"description":"FLUX Kontext Pro — context-aware image editing. Provide image_url to edit existing images.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"flux-kontext-max","name":"FLUX Kontext Max (Edit)","type":"image","params":["size","seed","image_url"],"description":"FLUX Kontext Max — highest quality context-aware editing variant. Provide image_url to edit.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]}],"openrouter":[{"id":"openai/text-embedding-3-large","name":"OpenAI Text Embedding 3 Large","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"openai/text-embedding-3-small","name":"OpenAI Text Embedding 3 Small","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"openai/text-embedding-ada-002","name":"OpenAI Text Embedding Ada 002","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"qwen/qwen3-embedding-8b","name":"Qwen3 Embedding 8B","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"perplexity/pplx-embed-v1-4b","name":"Perplexity Embed V1 4B","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"perplexity/pplx-embed-v1-0.6b","name":"Perplexity Embed V1 0.6B","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"nvidia/llama-nemotron-embed-vl-1b-v2:free","name":"NVIDIA Nemotron Embed VL 1B V2 (Free)","type":"embedding","params":[],"description":"","paramDefs":[]},{"id":"openai/gpt-4o-mini-tts","name":"GPT-4o Mini TTS","type":"tts","params":[],"description":"","paramDefs":[]},{"id":"openai/tts-1-hd","name":"TTS-1 HD","type":"tts","params":[],"description":"","paramDefs":[]},{"id":"openai/tts-1","name":"TTS-1","type":"tts","params":[],"description":"","paramDefs":[]},{"id":"openai/dall-e-3","name":"DALL-E 3 (via OpenRouter)","type":"image","params":["size","quality","style","response_format"],"description":"OpenAI DALL-E 3 routed through OpenRouter. Same capabilities as direct DALL-E 3.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"quality","type":"string","required":false,"default":"standard","validValues":["standard","hd"],"min":null,"max":null,"description":"Image rendering quality. Higher quality produces more detailed images but may take longer. Provider-specific values apply."},{"name":"style","type":"string","required":false,"default":null,"validValues":["vivid","natural","anime","realistic","digital-art"],"min":null,"max":null,"description":"Artistic style preset. 'vivid' produces hyper-real images; 'natural' is more subdued. Provider-specific presets may apply."},{"name":"response_format","type":"string","required":false,"default":"url","validValues":["url","b64_json"],"min":null,"max":null,"description":"How the image is returned: 'url' is a temporary public link; 'b64_json' is the raw image as a base64-encoded JSON string."}]},{"id":"openai/gpt-image-1","name":"GPT Image 1 (via OpenRouter)","type":"image","params":["n","size","quality","response_format"],"description":"OpenAI GPT Image 1 routed through OpenRouter. High-quality generation with editing support.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"quality","type":"string","required":false,"default":"auto","validValues":["low","medium","high","auto"],"min":null,"max":null,"description":"Image rendering quality. Higher quality produces more detailed images but may take longer. Provider-specific values apply."},{"name":"response_format","type":"string","required":false,"default":"url","validValues":["url","b64_json"],"min":null,"max":null,"description":"How the image is returned: 'url' is a temporary public link; 'b64_json' is the raw image as a base64-encoded JSON string."}]},{"id":"google/imagen-3.0-generate-002","name":"Imagen 3 (via OpenRouter)","type":"image","params":["n","size"],"description":"Google Imagen 3 routed through OpenRouter — photorealistic generation optimized for natural scenes.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]},{"id":"black-forest-labs/FLUX.1-schnell","name":"FLUX.1 Schnell (via OpenRouter)","type":"image","params":["n","size"],"description":"FLUX.1 Schnell (4-step distilled) routed through OpenRouter — fast generation.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]}],"fal-ai":[{"id":"fal-ai/flux/schnell","name":"FLUX Schnell","type":"image","params":["n","size","seed","num_steps"],"description":"FLUX.1 Schnell (4-step distilled) via Fal.ai queue. Ultra-fast generation.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"num_steps","type":"integer","required":false,"default":null,"validValues":null,"min":1,"max":50,"description":"Number of diffusion sampling steps. More steps = higher quality, slower generation. Typical range: 20–50."}]},{"id":"fal-ai/flux/dev","name":"FLUX Dev","type":"image","params":["n","size","seed","guidance","num_steps"],"description":"FLUX.1 Dev via Fal.ai queue. Higher quality than Schnell, slower generation.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"guidance","type":"number","required":false,"default":null,"validValues":null,"min":0,"max":20,"description":"Classifier-free guidance scale. Higher values make the output follow the prompt more closely but may reduce visual quality. Typical range: 5–15."},{"name":"num_steps","type":"integer","required":false,"default":null,"validValues":null,"min":1,"max":50,"description":"Number of diffusion sampling steps. More steps = higher quality, slower generation. Typical range: 20–50."}]},{"id":"fal-ai/flux-pro/v1.1","name":"FLUX Pro v1.1","type":"image","params":["n","size","seed"],"description":"FLUX Pro v1.1 via Fal.ai queue — professional-grade quality.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."}]},{"id":"fal-ai/flux-pro/v1.1-ultra","name":"FLUX Pro v1.1 Ultra","type":"image","params":["n","size","seed"],"description":"FLUX Pro v1.1 Ultra via Fal.ai queue — highest quality FLUX variant, supports high-resolution output.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":1,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."}]},{"id":"fal-ai/recraft-v3","name":"Recraft V3","type":"image","params":["n","size","style"],"description":"Recraft V3 via Fal.ai queue — vector-clean design, illustration, and photorealistic styles.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"style","type":"string","required":false,"default":null,"validValues":["realistic_image","digital_illustration","vector_illustration","icon"],"min":null,"max":null,"description":"Artistic style preset. 'vivid' produces hyper-real images; 'natural' is more subdued. Provider-specific presets may apply."}]},{"id":"fal-ai/ideogram/v2","name":"Ideogram V2","type":"image","params":["n","size","style"],"description":"Ideogram V2 via Fal.ai queue — excels at text rendering within images.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"style","type":"string","required":false,"default":null,"validValues":["auto","general","realistic","design","render_3D","anime"],"min":null,"max":null,"description":"Artistic style preset. 'vivid' produces hyper-real images; 'natural' is more subdued. Provider-specific presets may apply."}]},{"id":"fal-ai/stable-diffusion-v35-large","name":"SD 3.5 Large","type":"image","params":["n","size","negative_prompt","seed","guidance"],"description":"Stable Diffusion 3.5 Large via Fal.ai queue — high-quality open-source model.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"guidance","type":"number","required":false,"default":null,"validValues":null,"min":0,"max":20,"description":"Classifier-free guidance scale. Higher values make the output follow the prompt more closely but may reduce visual quality. Typical range: 5–15."}]}],"cloudflare-ai":[{"id":"@cf/meta/llama-3.2-1b-instruct","name":"Llama 3.2 1B Instruct","params":[],"description":"","paramDefs":[]},{"id":"@cf/meta/llama-3.2-3b-instruct","name":"Llama 3.2 3B Instruct","params":[],"description":"","paramDefs":[]},{"id":"@cf/meta/llama-3.1-8b-instruct-fp8-fast","name":"Llama 3.1 8B Instruct FP8 Fast","params":[],"description":"","paramDefs":[]},{"id":"@cf/meta/llama-3.1-8b-instruct-awq","name":"Llama 3.1 8B Instruct AWQ","params":[],"description":"","paramDefs":[]},{"id":"@cf/mistralai/mistral-small-3.1-24b-instruct","name":"Mistral Small 3.1 24B Instruct","params":[],"description":"","paramDefs":[]},{"id":"@cf/meta/llama-3.1-70b-instruct-fp8-fast","name":"Llama 3.1 70B Instruct FP8 Fast","params":[],"description":"","paramDefs":[]},{"id":"@cf/meta/llama-3.3-70b-instruct-fp8-fast","name":"Llama 3.3 70B Instruct FP8 Fast","params":[],"description":"","paramDefs":[]},{"id":"@cf/deepseek-ai/deepseek-r1-distill-qwen-32b","name":"DeepSeek R1 Distill Qwen 32B","params":[],"description":"","paramDefs":[]},{"id":"@cf/moonshotai/kimi-k2.5","name":"Kimi K2.5","params":[],"description":"","paramDefs":[]},{"id":"@cf/moonshotai/kimi-k2.6","name":"Kimi K2.6","params":[],"description":"","paramDefs":[]},{"id":"@cf/zai-org/glm-4.7-flash","name":"GLM 4.7 Flash","params":[],"description":"","paramDefs":[]},{"id":"@cf/qwen/qwq-32b","name":"QwQ 32B","params":[],"description":"","paramDefs":[]},{"id":"@cf/qwen/qwen2.5-coder-32b-instruct","name":"Qwen 2.5 Coder 32B Instruct","params":[],"description":"","paramDefs":[]},{"id":"@cf/black-forest-labs/flux-2-klein-9b","name":"FLUX.2 Klein 9B","type":"image","params":["size"],"description":"FLUX.2 Klein 9B — fast text-to-image via Cloudflare AI Workers. FormData body, returns base64 PNG.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]},{"id":"@cf/black-forest-labs/flux-2-klein-4b","name":"FLUX.2 Klein 4B","type":"image","params":["size"],"description":"FLUX.2 Klein 4B — compact fast text-to-image via Cloudflare AI Workers.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]},{"id":"@cf/black-forest-labs/flux-2-dev","name":"FLUX.2 Dev","type":"image","params":["size"],"description":"FLUX.2 Dev — development variant of FLUX 2 via Cloudflare AI Workers.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]},{"id":"@cf/leonardo/lucid-origin","name":"Lucid Origin","type":"image","params":["size"],"description":"Leonardo Lucid Origin model served via Cloudflare AI Workers.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]},{"id":"@cf/leonardo/phoenix-1.0","name":"Phoenix 1.0","type":"image","params":["size"],"description":"Leonardo Phoenix 1.0 served via Cloudflare AI Workers.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]},{"id":"@cf/black-forest-labs/flux-1-schnell","name":"FLUX.1 Schnell","type":"image","params":["size"],"description":"FLUX.1 Schnell (4-step distilled) — ultra-fast generation via Cloudflare AI Workers.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]},{"id":"@cf/bytedance/stable-diffusion-xl-lightning","name":"SDXL Lightning","type":"image","params":["size"],"description":"SDXL Lightning (ByteDance) — high-speed SDXL variant via Cloudflare AI Workers.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]},{"id":"@cf/lykon/dreamshaper-8-lcm","name":"DreamShaper 8 LCM","type":"image","params":["size"],"description":"DreamShaper 8 LCM — artistic style diffusion model via Cloudflare AI Workers.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]},{"id":"@cf/runwayml/stable-diffusion-v1-5-img2img","name":"Stable Diffusion v1.5 Img2Img","type":"image","params":["size","image_url"],"description":"Stable Diffusion v1.5 img2img — transforms a reference image via Cloudflare AI Workers. Requires image_url.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"@cf/runwayml/stable-diffusion-v1-5-inpainting","name":"Stable Diffusion v1.5 Inpainting","type":"image","params":["size","image_url","mask_image"],"description":"Stable Diffusion v1.5 inpainting — fills masked regions via Cloudflare AI Workers. Requires image_url and mask_image.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."},{"name":"mask_image","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Mask image for inpainting. White areas = regions to regenerate; black areas = regions to preserve. Accepts HTTP URL or base64 Data URI."}]},{"id":"@cf/stabilityai/stable-diffusion-xl-base-1.0","name":"SDXL Base 1.0","type":"image","params":["size"],"description":"Stable Diffusion XL Base 1.0 via Cloudflare AI Workers — JSON body, returns base64 PNG.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]}],"minimax":[{"id":"MiniMax-M3","name":"MiniMax M3","params":[],"description":"","paramDefs":[]},{"id":"MiniMax-M2.7","name":"MiniMax M2.7","params":[],"description":"","paramDefs":[]},{"id":"MiniMax-M2.5","name":"MiniMax M2.5","params":[],"description":"","paramDefs":[]},{"id":"MiniMax-M2.1","name":"MiniMax M2.1","params":[],"description":"","paramDefs":[]},{"id":"minimax-image-01","name":"MiniMax Image 01","type":"image","params":["n","size","response_format"],"description":"MiniMax Image 01 — high-quality image generation via MiniMax API (T2I-01 model).","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"response_format","type":"string","required":false,"default":"url","validValues":["url","b64_json"],"min":null,"max":null,"description":"How the image is returned: 'url' is a temporary public link; 'b64_json' is the raw image as a base64-encoded JSON string."}]}],"nanobanana":[{"id":"nanobanana-flash","name":"NanoBanana Flash","type":"image","params":["n","size"],"description":"NanoBanana Flash — Google-tier fast image generation via NanoBanana API. Supports text-to-image and image-to-image.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]},{"id":"nanobanana-pro","name":"NanoBanana Pro","type":"image","params":["n","size"],"description":"NanoBanana Pro — high-quality image generation via NanoBanana API. Supports text-to-image and image-to-image.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]}],"sdwebui":[{"id":"stable-diffusion-v1-5","name":"Stable Diffusion v1.5","type":"image","params":["n","size","negative_prompt","seed","guidance","num_steps"],"description":"Stable Diffusion v1.5 via local SD WebUI (Automatic1111). Requires a running SD WebUI instance.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"guidance","type":"number","required":false,"default":null,"validValues":null,"min":0,"max":20,"description":"Classifier-free guidance scale. Higher values make the output follow the prompt more closely but may reduce visual quality. Typical range: 5–15."},{"name":"num_steps","type":"integer","required":false,"default":null,"validValues":null,"min":1,"max":50,"description":"Number of diffusion sampling steps. More steps = higher quality, slower generation. Typical range: 20–50."}]},{"id":"sdxl-base-1.0","name":"SDXL Base 1.0","type":"image","params":["n","size","negative_prompt","seed","guidance","num_steps"],"description":"SDXL Base 1.0 via local SD WebUI (Automatic1111). Higher resolution and quality than SD v1.5.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"guidance","type":"number","required":false,"default":null,"validValues":null,"min":0,"max":20,"description":"Classifier-free guidance scale. Higher values make the output follow the prompt more closely but may reduce visual quality. Typical range: 5–15."},{"name":"num_steps","type":"integer","required":false,"default":null,"validValues":null,"min":1,"max":50,"description":"Number of diffusion sampling steps. More steps = higher quality, slower generation. Typical range: 20–50."}]}],"comfyui":[{"id":"flux-dev","name":"FLUX Dev","type":"image","params":["n","size","seed","num_steps"],"description":"FLUX Dev via local ComfyUI. Requires a running ComfyUI instance with FLUX workflow.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."},{"name":"num_steps","type":"integer","required":false,"default":null,"validValues":null,"min":1,"max":50,"description":"Number of diffusion sampling steps. More steps = higher quality, slower generation. Typical range: 20–50."}]},{"id":"sdxl","name":"SDXL","type":"image","params":["n","size","negative_prompt","seed"],"description":"SDXL via local ComfyUI. Requires a running ComfyUI instance with SDXL workflow.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."},{"name":"seed","type":"integer","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Fixed random seed for reproducible results. Same seed + same prompt → same image (when other settings are equal)."}]}],"huggingface":[{"id":"black-forest-labs/FLUX.1-schnell","name":"FLUX.1 Schnell","type":"image","params":[],"description":"FLUX.1 Schnell via HuggingFace Inference API. Prompt only — no additional params supported by the HF endpoint.","paramDefs":[]},{"id":"stabilityai/stable-diffusion-xl-base-1.0","name":"SDXL Base 1.0","type":"image","params":[],"description":"SDXL Base 1.0 via HuggingFace Inference API. Prompt only — no additional params supported by the HF endpoint.","paramDefs":[]},{"id":"openai/whisper-large-v3","name":"Whisper Large v3 (HF)","type":"stt","params":["language"],"description":"","paramDefs":[]},{"id":"openai/whisper-small","name":"Whisper Small (HF)","type":"stt","params":["language"],"description":"","paramDefs":[]}],"recraft":[{"id":"recraftv3","name":"Recraft V3","type":"image","params":["n","size","style"],"description":"Recraft V3 — latest generation of Recraft models. Excels at vector art, illustrations, and design assets.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"style","type":"string","required":false,"default":null,"validValues":["realistic_image","digital_illustration","vector_illustration","icon","realistic_image/b_and_w","realistic_image/hard_flash","realistic_image/hdr","realistic_image/natural_light","realistic_image/studio_portrait","realistic_image/enterprise","realistic_image/motion_blur"],"min":null,"max":null,"description":"Artistic style preset. 'vivid' produces hyper-real images; 'natural' is more subdued. Provider-specific presets may apply."}]},{"id":"recraftv2","name":"Recraft V2","type":"image","params":["n","size","style"],"description":"Recraft V2 — previous generation. Reliable quality for illustrations and design assets.","paramDefs":[{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"style","type":"string","required":false,"default":null,"validValues":["realistic_image","digital_illustration","vector_illustration","icon"],"min":null,"max":null,"description":"Artistic style preset. 'vivid' produces hyper-real images; 'natural' is more subdued. Provider-specific presets may apply."}]}],"runwayml":[{"id":"gen4_image","name":"Gen-4 Image","type":"image","params":["size"],"description":"RunwayML Gen-4 Image — high-quality text-to-image via Runway API. Async polling.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]},{"id":"gen4_image_turbo","name":"Gen-4 Image Turbo","type":"image","params":["size"],"description":"RunwayML Gen-4 Image Turbo — faster variant of Gen-4 Image with slightly reduced quality.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."}]},{"id":"gen4_turbo","name":"Gen-4 Turbo","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"RunwayML Gen-4 Turbo — cinematic video generation from text or image. Async polling via Runway API.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1:1","16:9","9:16","4:3","3:4"],"min":null,"max":null,"description":"Output aspect ratio"},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds (5 or 10)"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"gen3a_turbo","name":"Gen-3 Alpha Turbo","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"RunwayML Gen-3 Alpha Turbo — fast video generation. Legacy model, recommended to use Gen-4 Turbo.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1:1","16:9","9:16","4:3"],"min":null,"max":null,"description":"Output aspect ratio"},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds (5 or 10)"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]}],"leonardo":[{"id":"leo-phoenix","name":"Phoenix 1.0","type":"image","params":["size","n","negative_prompt"],"description":"Leonardo Phoenix 1.0 (v1 path) — SDXL-based model via Leonardo GraphQL API.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-flux-dev","name":"Flux Dev","type":"image","params":["size","n","negative_prompt"],"description":"FLUX Dev served via Leonardo AI (v1 path) — open-weight quality via Leonardo's generation pipeline.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-lucid-origin","name":"Lucid Origin","type":"image","params":["size","n","negative_prompt"],"description":"Leonardo Lucid Origin (v1 path) — photorealistic style via Leonardo's GraphQL API.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-seedream","name":"Seedream 4.5","type":"image","params":["size","n","negative_prompt"],"description":"Seedream 4.5 via Leonardo AI — next-gen Chinese image model, high prompt fidelity.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-seedream-4.5","name":"Seedream 4.5 (alias)","type":"image","params":["size","n","negative_prompt"],"description":"Seedream 4.5 alias via Leonardo AI.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-flux-2-pro","name":"FLUX.2 Pro","type":"image","params":["size","n","negative_prompt"],"description":"FLUX.2 Pro via Leonardo AI — professional-grade FLUX 2 generation.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-gpt-image","name":"GPT Image-1.5","type":"image","params":["size","n"],"description":"GPT Image-1.5 via Leonardo AI — OpenAI's image model served through Leonardo's platform.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."}]},{"id":"leo-gpt-image-2","name":"GPT Image 2","type":"image","params":["size","n"],"description":"GPT Image 2 via Leonardo AI — latest OpenAI image model through Leonardo.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."}]},{"id":"leo-nano-banana-pro","name":"Nano Banana Pro","type":"image","params":["size","n"],"description":"Nano Banana Pro via Leonardo AI — Google-tier generation through Leonardo's platform.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."}]},{"id":"leo-nano-banana-2","name":"Nano Banana 2","type":"image","params":["size","n"],"description":"Nano Banana 2 via Leonardo AI — fast Google-tier generation.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."}]},{"id":"leo-gemini-image-2","name":"Gemini Image 2","type":"image","params":["size","n"],"description":"Gemini Image 2 via Leonardo AI — Google's multimodal image generation.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."}]},{"id":"leo-recraft-v4","name":"Recraft V4","type":"image","params":["size","n"],"description":"Recraft V4 via Leonardo AI — vector/illustration/design model.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."}]},{"id":"leo-recraft-v4-pro","name":"Recraft V4 Pro","type":"image","params":["size","n"],"description":"Recraft V4 Pro via Leonardo AI — premium tier of Recraft V4.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."}]},{"id":"leo-ideogram-v4","name":"Ideogram 4.0","type":"image","params":["size","n"],"description":"Ideogram 4.0 via Leonardo AI — excellent text rendering within images. Uses aspectRatio param internally.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."}]},{"id":"leo-ideogram-3","name":"Ideogram 3.0","type":"image","params":["size","n"],"description":"Ideogram 3.0 via Leonardo AI — previous Ideogram version with strong text rendering.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."}]},{"id":"leo-kino-xl","name":"Leonardo Kino XL","type":"image","params":["size","n","negative_prompt"],"description":"Leonardo Kino XL — cinematic, film-like image style.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-anime-xl","name":"Leonardo Anime XL","type":"image","params":["size","n","negative_prompt"],"description":"Leonardo Anime XL — anime and manga illustration style.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-flux-2-dev","name":"Flux 2.0 Dev","type":"image","params":["size","n","negative_prompt"],"description":"FLUX 2.0 Dev via Leonardo AI.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-flux-schnell","name":"Flux Schnell","type":"image","params":["size","n"],"description":"FLUX Schnell (4-step) via Leonardo AI.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."}]},{"id":"leo-flux-kontext-max","name":"Flux Kontext Max","type":"image","params":["size","n","image_url"],"description":"FLUX Kontext Max (editing) via Leonardo AI.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"leo-flux-kontext","name":"Flux Kontext","type":"image","params":["size","n","image_url"],"description":"FLUX Kontext (editing) via Leonardo AI.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"leo-lucid-realism","name":"Lucid Realism","type":"image","params":["size","n","negative_prompt"],"description":"Leonardo Lucid Realism — photorealistic portrait and scene generation.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-gpt-image-1","name":"GPT Image 1","type":"image","params":["size","n"],"description":"GPT Image 1 via Leonardo AI.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."}]},{"id":"leo-seedream-4","name":"Seedream 4.0","type":"image","params":["size","n","negative_prompt"],"description":"Seedream 4.0 via Leonardo AI.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"n","type":"integer","required":false,"default":1,"validValues":null,"min":1,"max":4,"description":"Number of images to generate in a single request (1–4)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-kling","name":"Kling 2.6","type":"video","params":["size","negative_prompt"],"description":"Kling 2.6 via Leonardo AI — versatile text-to-video and image-to-video. Supports motion strength control.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-kling-3","name":"Kling 3.0","type":"video","params":["size","negative_prompt"],"description":"Kling 3.0 via Leonardo AI — latest Kling model with improved motion quality.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-kling-3.0","name":"Kling 3.0 (alias)","type":"video","params":["size","negative_prompt"],"description":"Kling 3.0 alias via Leonardo AI.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-kling-3-turbo","name":"Kling 3.0 Turbo","type":"video","params":["size","negative_prompt"],"description":"Kling 3.0 Turbo via Leonardo AI — faster variant of Kling 3.0 with slightly reduced quality.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-kling-3.0-turbo","name":"Kling 3.0 Turbo (alias)","type":"video","params":["size","negative_prompt"],"description":"Kling 3.0 Turbo alias via Leonardo AI.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-kling-o1","name":"Kling O1 Video","type":"video","params":["size","negative_prompt"],"description":"Kling O1 via Leonardo AI — reasoning-enhanced video generation with high adherence to prompt.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-kling-o3","name":"Kling O3 Video","type":"video","params":["size","negative_prompt"],"description":"Kling O3 via Leonardo AI — latest reasoning-enhanced Kling variant.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-kling-2.5-turbo","name":"Kling 2.5 Turbo","type":"video","params":["size","negative_prompt"],"description":"Kling 2.5 Turbo via Leonardo AI — fast generation at lower cost than Kling 3.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-grok-imagine-1.5","name":"Grok Imagine 1.5","type":"video","params":["size","negative_prompt"],"description":"Grok Imagine 1.5 via Leonardo AI — xAI video generation model.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-seedance","name":"Seedance 1.0 Pro","type":"video","params":["size","negative_prompt"],"description":"Seedance 1.0 Pro via Leonardo AI — ByteDance high-quality text-to-video and image-to-video.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-seedance-pro-fast","name":"Seedance 1.0 Pro Fast","type":"video","params":["size","negative_prompt"],"description":"Seedance 1.0 Pro Fast via Leonardo AI — faster variant of Seedance 1.0 Pro.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-seedance-2","name":"Seedance 2.0","type":"video","params":["size","negative_prompt"],"description":"Seedance 2.0 via Leonardo AI — next-gen ByteDance video model with improved motion realism.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-seedance-2-pro","name":"Seedance 2.0 Pro","type":"video","params":["size","negative_prompt"],"description":"Seedance 2.0 Pro via Leonardo AI — premium tier of Seedance 2.0.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-seedance-2-fast","name":"Seedance 2.0 Fast","type":"video","params":["size","negative_prompt"],"description":"Seedance 2.0 Fast via Leonardo AI — fast generation at reduced cost.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-sora","name":"Sora 2","type":"video","params":["size","negative_prompt"],"description":"Sora 2 via Leonardo AI — OpenAI Sora text-to-video, cinematic quality with world simulation.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-sora-2-pro","name":"Sora 2 Pro","type":"video","params":["size","negative_prompt"],"description":"Sora 2 Pro via Leonardo AI — premium tier with higher resolution and longer clips.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-veo","name":"Veo 3","type":"video","params":["size","negative_prompt"],"description":"Veo 3 via Leonardo AI — Google DeepMind video model with native audio generation support.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-veo-fast","name":"Veo 3 Fast","type":"video","params":["size","negative_prompt"],"description":"Veo 3 Fast via Leonardo AI — faster variant of Veo 3.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-veo-3.1","name":"Veo 3.1","type":"video","params":["size","negative_prompt"],"description":"Veo 3.1 via Leonardo AI — latest Google Veo with improved consistency and audio.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-veo-3.1-fast","name":"Veo 3.1 Fast","type":"video","params":["size","negative_prompt"],"description":"Veo 3.1 Fast via Leonardo AI — faster tier of Veo 3.1.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-veo-3.1-lite","name":"Veo 3.1 Lite","type":"video","params":["size","negative_prompt"],"description":"Veo 3.1 Lite via Leonardo AI — lightweight, cost-effective Veo 3.1 tier.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-hailuo","name":"Hailuo 2.3","type":"video","params":["size","negative_prompt"],"description":"Hailuo 2.3 via Leonardo AI — MiniMax Hailuo video model with smooth motion.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-hailuo-fast","name":"Hailuo 2.3 Fast","type":"video","params":["size","negative_prompt"],"description":"Hailuo 2.3 Fast via Leonardo AI — faster tier of Hailuo 2.3.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-ltx-pro","name":"LTX-2.3 Pro","type":"video","params":["size","negative_prompt"],"description":"LTX-2.3 Pro via Leonardo AI — Lightricks LTX-Video 2.3 professional tier. Fast inference.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-ltx-fast","name":"LTX-2.3 Fast","type":"video","params":["size","negative_prompt"],"description":"LTX-2.3 Fast via Leonardo AI — faster, cost-efficient LTX-Video 2.3 tier.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-ltx-2.3-pro","name":"LTX-2.3 Pro (alias)","type":"video","params":["size","negative_prompt"],"description":"LTX-2.3 Pro alias via Leonardo AI.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-ltx-2.3-fast","name":"LTX-2.3 Fast (alias)","type":"video","params":["size","negative_prompt"],"description":"LTX-2.3 Fast alias via Leonardo AI.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-motion","name":"Motion 2.0","type":"video","params":["size","negative_prompt"],"description":"Leonardo Motion 2.0 — image-to-video model. Animates a provided reference image. Requires image_url.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-motion-fast","name":"Motion 2.0 Fast","type":"video","params":["size","negative_prompt"],"description":"Leonardo Motion 2.0 Fast — faster image-to-video animation. Requires image_url.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"leo-happy-horse","name":"Happy Horse","type":"video","params":["size","negative_prompt"],"description":"Leonardo Happy Horse — image-to-video model specialized for animal/character animation. Requires image_url.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1024x1024","validValues":["1024x1024","1792x1024","1024x1792","1024x1536","1536x1024"],"min":null,"max":null,"description":"Output image dimensions as 'WIDTHxHEIGHT'. Standard: 1024×1024 (square), 1792×1024 (landscape), 1024×1792 (portrait)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]}],"weavy":[{"id":"weavy-flux-pro","name":"Flux Pro","type":"image","params":["size","image_url"],"description":"FLUX Pro via Weavy — text-to-image, high quality.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-imagen","name":"Imagen","type":"image","params":["size"],"description":"Google Imagen via Weavy — photorealistic generation.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."}]},{"id":"weavy-imagen-4","name":"Imagen 4","type":"image","params":["size"],"description":"Google Imagen 4 via Weavy — latest Google image generation model.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."}]},{"id":"weavy-gpt-image-2","name":"GPT Image 2","type":"image","params":["size"],"description":"GPT Image 2 via Weavy — latest OpenAI image model.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."}]},{"id":"weavy-ideogram-4","name":"Ideogram 4","type":"image","params":["size"],"description":"Ideogram 4 via Weavy — best-in-class text rendering within images.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."}]},{"id":"weavy-gemini-nano","name":"Gemini Nano","type":"image","params":["size"],"description":"Gemini Nano image generation via Weavy.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."}]},{"id":"weavy-nano-banana-2","name":"Nano Banana 2","type":"image","params":["size","image_url"],"description":"Nano Banana 2 (Gemini 3.1 Flash) via Weavy — image generation and editing.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-nano-banana-pro","name":"Nano Banana Pro","type":"image","params":["size","image_url"],"description":"Nano Banana Pro (Gemini 3 Pro) via Weavy — image generation and editing.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-rodin-3d","name":"Rodin 3D","type":"image","params":[],"description":"Rodin 3D generation via Weavy — text-to-3D asset. No size/ratio parameter.","paramDefs":[]},{"id":"weavy-reve","name":"Reve","type":"image","params":["image_url"],"description":"Reve via Weavy — text-to-image and image-to-image.","paramDefs":[{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-higgsfield-image","name":"Higgsfield Image","type":"image","params":["image_url"],"description":"Higgsfield Image via Weavy — cinematic, motion-aware image generation.","paramDefs":[{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-gpt-image-1","name":"GPT Image 1","type":"image","params":["size"],"description":"GPT Image 1 via Weavy — OpenAI GPT Image model.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."}]},{"id":"weavy-imagen-3","name":"Imagen 3","type":"image","params":["size","negative_prompt"],"description":"Google Imagen 3 via Weavy — high-fidelity photorealistic generation. Supports negative prompts.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"weavy-imagen-3-fast","name":"Imagen 3 Fast","type":"image","params":["size","negative_prompt"],"description":"Google Imagen 3 Fast via Weavy — reduced-latency variant.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"weavy-flux-2-pro","name":"Flux 2 Pro","type":"image","params":["image_url"],"description":"FLUX 2 Pro via Weavy — supports img2img via image_url.","paramDefs":[{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-flux-2-flex","name":"Flux 2 Flex","type":"image","params":["size","image_url"],"description":"FLUX 2 Flex via Weavy — flexible img2img and text-to-image.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-flux-2-dev-lora","name":"Flux 2 Dev LoRA","type":"image","params":["size","image_url"],"description":"FLUX 2 Dev with LoRA conditioning via Weavy.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-flux-1-1-ultra","name":"Flux 1.1 Ultra","type":"image","params":["size","image_url"],"description":"FLUX 1.1 Ultra high-resolution via Weavy. Supports img2img conditioning.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-flux-pro-1-1","name":"Flux Pro 1.1","type":"image","params":["size","image_url"],"description":"FLUX Pro 1.1 via Weavy. Supports img2img via image_url.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-flux-fast","name":"Flux Fast","type":"image","params":["size"],"description":"FLUX Fast via Weavy — ultra-fast text-to-image.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."}]},{"id":"weavy-flux-dev-lora","name":"Flux Dev LoRA","type":"image","params":["size","image_url"],"description":"FLUX Dev with LoRA via Weavy. Accepts image_url for conditioning.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-recraft-v3","name":"Recraft V3","type":"image","params":["size"],"description":"Recraft V3 via Weavy — vector/design/illustration style.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."}]},{"id":"weavy-mystic","name":"Mystic","type":"image","params":["size","image_url"],"description":"Mystic via Weavy — artistic style model. Supports img2img.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-ideogram-v3","name":"Ideogram V3","type":"image","params":["size","negative_prompt","image_url"],"description":"Ideogram V3 via Weavy — text rendering and image editing.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-ideogram-v3-character","name":"Ideogram V3 Character","type":"image","params":["size","negative_prompt","image_url"],"description":"Ideogram V3 Character via Weavy — character-focused variant of Ideogram V3.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-stable-diffusion-3-5","name":"Stable Diffusion 3.5","type":"image","params":["size","image_url"],"description":"Stable Diffusion 3.5 via Weavy. Supports img2img via image_url.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-minimax-image-01","name":"Minimax Image 01","type":"image","params":["size"],"description":"MiniMax Image 01 via Weavy.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."}]},{"id":"weavy-bria","name":"Bria","type":"image","params":["size","negative_prompt"],"description":"Bria AI image generation via Weavy — commercial-safe model.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"weavy-dalle-3","name":"Dalle 3","type":"image","params":["size"],"description":"DALL-E 3 via Weavy — OpenAI DALL-E 3 through Weavy's pipeline.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."}]},{"id":"weavy-luma-photon","name":"Luma Photon","type":"image","params":["size","image_url"],"description":"Luma Photon via Weavy — high-quality image generation with style control.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-nvidia-sana","name":"Nvidia Sana","type":"image","params":["size","negative_prompt"],"description":"NVIDIA Sana via Weavy — efficient text-to-image model.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"weavy-nvidia-consistory","name":"Nvidia Consistory","type":"image","params":["size","negative_prompt"],"description":"NVIDIA Consistory via Weavy — consistent character generation across multiple images.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"negative_prompt","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Text describing elements to exclude from the generated image (e.g. 'blurry, low quality, watermark')."}]},{"id":"weavy-sd3-outpaint","name":"SD3 Outpaint","type":"image","params":["image_url"],"description":"Stable Diffusion 3 Outpaint via Weavy — extends image canvas beyond original boundaries. Requires image_url.","paramDefs":[{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-topaz-enhance","name":"Topaz Upscale","type":"image","params":["image_url"],"description":"Topaz AI image upscaling and enhancement via Weavy. Requires image_url — no prompt needed.","paramDefs":[{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-runway","name":"Runway Gen-4.5","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Runway Gen-4.5 via Weavy — latest RunwayML text-to-video and image-to-video. Supports start-frame via image_url.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,8,10],"min":1,"max":30,"description":"Duration in seconds (5, 8, or 10)"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-kling","name":"Kling 3.0","type":"video","params":["size","duration","resolution","aspect_ratio","image_url","end_image_url"],"description":"Kling 3.0 via Weavy — text-to-video and image-to-video. image_url=start frame, end_image_url=end frame.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":null,"min":3,"max":15,"description":"Duration in seconds (3–15)"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."},{"name":"end_image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"End/last frame image URL (optional)"}]},{"id":"weavy-kling-turbo","name":"Kling 3.0 Turbo","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Kling 3.0 Turbo via Weavy — faster Kling 3.0 via fal-ai wildcard node.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":null,"min":5,"max":10,"description":"Duration in seconds"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-kling-custom","name":"Kling Custom","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Kling Custom via Weavy — customizable Kling generation with extended parameter control.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-seedance","name":"Seedance V1.5 Pro","type":"video","params":["size","duration","resolution","aspect_ratio","image_url","end_image_url"],"description":"Seedance V1.5 Pro via Weavy — ByteDance high-quality video. image_url=start frame, end_image_url=end frame.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[4,5,6,7,8,9,10,11,12],"min":1,"max":30,"description":"Duration in seconds (4–12)"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."},{"name":"end_image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"End/last frame image URL (optional)"}]},{"id":"weavy-seedance-fast","name":"Seedance Fast","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Seedance Fast via Weavy — fast, cost-efficient Seedance variant.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-seedance-custom","name":"Seedance Custom","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Seedance Custom via Weavy — Seedance with extended parameter control.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-wan","name":"Wan 2.5","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Wan 2.5 via Weavy — Alibaba open-source text-to-video and image-to-video model.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-wan-2-7","name":"Wan 2.7","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Wan 2.7 via Weavy — latest Wan model with improved quality and motion.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-veo","name":"Veo 3.1","type":"video","params":["size","duration","resolution","aspect_ratio","image_url","end_image_url"],"description":"Veo 3.1 via Weavy — Google DeepMind Veo. image_url=start frame, end_image_url=last frame.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[8],"min":1,"max":30,"description":"Fixed 8 second clips"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."},{"name":"end_image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Last frame image URL (optional)"}]},{"id":"weavy-veo-fast","name":"Veo 3.1 Fast","type":"video","params":["size","duration","resolution","aspect_ratio","image_url","end_image_url"],"description":"Veo 3.1 Fast via Weavy — faster Veo 3.1 tier. image_url=start frame, end_image_url=last frame.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[8],"min":1,"max":30,"description":"Fixed 8 second clips"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."},{"name":"end_image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Last frame image URL (optional)"}]},{"id":"weavy-ltx-2","name":"LTX 2","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"LTX-Video 2 via Weavy — Lightricks fast open-source video. Supports image_url for img2img.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[6,8,10],"min":1,"max":30,"description":"Duration in seconds (6, 8, or 10)"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["480p","720p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-pixverse","name":"Pixverse v4.5","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Pixverse v4.5 via Weavy — creative text-to-video and image-to-video model.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,8],"min":1,"max":30,"description":"Duration: 5 or 8 seconds"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-seedance-2-0","name":"Seedance 2.0","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Seedance 2.0 via Weavy — next-gen ByteDance video with improved motion realism.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-seedance-2-0-reference","name":"Seedance 2.0 Reference","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Seedance 2.0 Reference via Weavy — image-to-video variant using reference frame conditioning.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-kling-3","name":"Kling 3","type":"video","params":["size","duration","resolution","aspect_ratio","image_url","end_image_url"],"description":"Kling 3 (alias) via Weavy — same as Kling 3.0. image_url=start frame, end_image_url=end frame.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":null,"min":3,"max":15,"description":"Duration in seconds (3–15)"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."},{"name":"end_image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"End/last frame image URL (optional)"}]},{"id":"weavy-grok-imagine-video","name":"Grok Imagine Video","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Grok Imagine Video via Weavy — xAI Grok video model. Supports image_url for conditioning.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":null,"min":1,"max":15,"description":"Duration in seconds (1–15)"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-sora-2","name":"Sora 2","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Sora 2 via Weavy — OpenAI Sora cinematic text-to-video with world simulation.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":null,"min":5,"max":20,"description":"Duration in seconds (5–20)"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["480p","720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-wan-2-2","name":"Wan 2.2","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Wan 2.2 via Weavy — previous Wan generation with solid motion quality.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-moonvalley","name":"Moonvalley","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Moonvalley via Weavy — cinematic video model with strong artistic quality.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,8],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-veo-3-1-text-to-image","name":"Veo 3.1 Text to Image","type":"video","params":["size","duration","resolution","aspect_ratio"],"description":"Veo 3.1 Text-to-Video via Weavy — text-only input, no image_url required.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[8],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."}]},{"id":"weavy-veo-3-1-image-to-video","name":"Veo 3.1 Image to Video","type":"video","params":["size","duration","resolution","aspect_ratio","image_url","end_image_url"],"description":"Veo 3.1 Image-to-Video via Weavy — animates reference image. image_url=start frame, end_image_url=last frame.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[8],"min":1,"max":30,"description":"Fixed 8 second clips"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."},{"name":"end_image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Last frame image URL (optional)"}]},{"id":"weavy-veo-3-text-to-image","name":"Veo 3 Text to Image","type":"video","params":["size","duration","resolution","aspect_ratio"],"description":"Veo 3 Text-to-Video via Weavy — previous Veo, text-only input.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[8],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."}]},{"id":"weavy-veo-3-image-to-video","name":"Veo 3 Image to Video","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Veo 3 Image-to-Video via Weavy — animates a reference image. Requires image_url.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[8],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-veo-2","name":"Veo 2","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Veo 2 via Weavy — previous generation Google Veo.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[8],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-seedance-v1-0","name":"Seedance V1.0","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Seedance V1.0 via Weavy — original Seedance model.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-runway-gen-4-turbo","name":"Runway Gen-4 Turbo","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Runway Gen-4 Turbo via Weavy — fast video generation at lower cost.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-runway-gen-4","name":"Runway Gen-4","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Runway Gen-4 via Weavy — previous RunwayML generation.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-runway-gen-3","name":"Runway Gen-3","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Runway Gen-3 Alpha via Weavy — legacy model.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-kling-1-6","name":"Kling 1.6","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Kling 1.6 via Weavy — previous Kling generation.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-kling-o1-first-last-frame","name":"Kling O1 First & Last Frame","type":"video","params":["size","duration","resolution","aspect_ratio","image_url","end_image_url"],"description":"Kling O1 First & Last Frame via Weavy — generates video between two keyframes. Requires image_url for first frame.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"First frame image URL"},{"name":"end_image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Last frame image URL (tail frame)"}]},{"id":"weavy-kling-2-5-first-last-frame","name":"Kling 2.5 First & Last Frame","type":"video","params":["size","duration","resolution","aspect_ratio","image_url","end_image_url"],"description":"Kling 2.5 First & Last Frame via Weavy — interpolates video between first and last frame.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"First frame image URL"},{"name":"end_image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Last frame image URL (tail frame)"}]},{"id":"weavy-kling-2-1-first-last-frame","name":"Kling 2.1 First & Last Frame","type":"video","params":["size","duration","resolution","aspect_ratio","image_url","end_image_url"],"description":"Kling 2.1 First & Last Frame via Weavy — interpolates video between first and last keyframe.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"First frame image URL"},{"name":"end_image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Last frame image URL (tail frame)"}]},{"id":"weavy-luma-ray-2","name":"Luma Ray 2","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Luma Ray 2 via Weavy — Luma AI Dream Machine v2, cinematic quality video.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,9],"min":1,"max":30,"description":"Duration in seconds (5 or 9)"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-luma-ray-2-flash","name":"Luma Ray 2 Flash","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Luma Ray 2 Flash via Weavy — faster, lower-cost tier of Luma Ray 2.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,9],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-minimax-video-director","name":"Minimax Video Director","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"MiniMax Video Director via Weavy — supports camera movement control and director-mode prompting.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[6],"min":1,"max":30,"description":"Fixed 6 second clips"},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-minimax-video-01","name":"Minimax Video 01","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"MiniMax Video-01 (Hailuo) via Weavy — high-quality smooth motion video generation.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[6],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-hunyuan","name":"Hunyuan","type":"video","params":["size","duration","resolution","aspect_ratio"],"description":"Hunyuan Video via Weavy — Tencent open-source video model. Text-to-video only, no image_url.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."}]},{"id":"weavy-skyreels","name":"Skyreels","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Skyreels via Weavy — creative video generation with strong scene composition.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]},{"id":"weavy-wan-video","name":"Wan Video","type":"video","params":["size","duration","resolution","aspect_ratio"],"description":"Wan Video (original) via Weavy — text-to-video only, no image_url.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."}]},{"id":"weavy-higgsfield-video","name":"Higgsfield Video","type":"video","params":["size","duration","resolution","aspect_ratio","image_url"],"description":"Higgsfield Video via Weavy — cinematic motion-aware video generation.","paramDefs":[{"name":"size","type":"string","required":false,"default":"1:1","validValues":["1:1","9:16","16:9","3:4","4:3"],"min":null,"max":null,"description":"Output aspect ratio. Weavy converts this to the correct format per model (FAL image_size, Replicate aspect_ratio, or GPT Image pixel size)."},{"name":"duration","type":"integer","required":false,"default":5,"validValues":[5,10],"min":1,"max":30,"description":"Video duration in seconds. Supported range varies by model (e.g. 5–15s for Kling, fixed 8s for some Veo models)."},{"name":"resolution","type":"string","required":false,"default":null,"validValues":["720p","1080p"],"min":null,"max":null,"description":"Video output resolution. Higher resolutions require more generation time and cost."},{"name":"aspect_ratio","type":"string","required":false,"default":"1:1","validValues":["1:1","16:9","9:16","4:3","3:4","3:2","2:3"],"min":null,"max":null,"description":"Output aspect ratio. Used by providers that accept ratio strings instead of pixel dimensions."},{"name":"image_url","type":"string","required":false,"default":null,"validValues":null,"min":null,"max":null,"description":"Reference image for img2img / conditioning. Accepts an HTTP URL or a base64 Data URI (data:image/png;base64,…). Used as the start frame or style reference."}]}]};
1329
+
1330
+ // Map alias → containerId
1331
+ const CONTAINER_MAP = {
1332
+ openai: { all: 'models-openai' },
1333
+ gemini: { all: 'models-gemini' },
1334
+ xai: { all: 'models-xai' },
1335
+ 'stability-ai': { all: 'models-stability-ai' },
1336
+ 'black-forest-labs': { all: 'models-black-forest-labs' },
1337
+ openrouter: { all: 'models-openrouter' },
1338
+ 'fal-ai': { all: 'models-fal-ai' },
1339
+ 'cloudflare-ai': { all: 'models-cloudflare-ai' },
1340
+ minimax: { all: 'models-minimax' },
1341
+ nanobanana: { all: 'models-nanobanana' },
1342
+ sdwebui: { all: 'models-sdwebui' },
1343
+ comfyui: { all: 'models-comfyui' },
1344
+ huggingface: { all: 'models-huggingface' },
1345
+ recraft: { all: 'models-recraft' },
1346
+ runwayml: { all: 'models-runwayml' },
1347
+ leonardo: { img: 'models-leonardo-img', vid: 'models-leonardo-vid' },
1348
+ weavy: { img: 'models-weavy-img', vid: 'models-weavy-vid' },
1349
+ };
1350
+
1351
+ Object.entries(EMBEDDED_MODELS).forEach(([alias, models]) => {
1352
+ const map = CONTAINER_MAP[alias];
1353
+ if (!map) return;
1354
+ if (map.all) {
1355
+ renderModels(models, map.all);
1356
+ } else {
1357
+ if (map.img) renderModels(models.filter(m => m.type === 'image'), map.img);
1358
+ if (map.vid) renderModels(models.filter(m => m.type === 'video'), map.vid);
1359
+ }
1360
+ });
1361
+ </script>
1362
+ </body>
1363
+ </html>