@henjicc/ai-sdk 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (694) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +580 -577
  3. package/dist/capabilities/speech-recognition/bailian/module.js +12 -13
  4. package/dist/capabilities/speech-recognition/bailian/parse.js +9 -2
  5. package/dist/capabilities/speech-recognition/bailian/presets.d.ts +9 -1
  6. package/dist/capabilities/speech-recognition/bailian/presets.js +7 -2
  7. package/dist/capabilities/speech-recognition/bailian/realtime/presets.d.ts +2 -1
  8. package/dist/capabilities/speech-recognition/bailian/realtime/presets.js +2 -0
  9. package/dist/capabilities/speech-recognition/bailian/upload.js +11 -58
  10. package/dist/capabilities/speech-recognition/index.d.ts +5 -0
  11. package/dist/capabilities/speech-recognition/siliconflow/presets.d.ts +2 -3
  12. package/dist/capabilities/speech-recognition/siliconflow/presets.js +0 -2
  13. package/dist/capabilities/translation/bailian/types.d.ts +3 -0
  14. package/dist/capabilities/translation/bailian/types.js +6 -4
  15. package/dist/catalog/apimart/flux-3-image.model.d.ts +3 -0
  16. package/dist/catalog/apimart/flux-3-image.model.js +62 -0
  17. package/dist/catalog/apimart/flux-3-video.model.d.ts +3 -0
  18. package/dist/catalog/apimart/flux-3-video.model.js +120 -0
  19. package/dist/catalog/apimart/gemini-omni-1.2-flash.model.d.ts +3 -0
  20. package/dist/catalog/apimart/gemini-omni-1.2-flash.model.js +175 -0
  21. package/dist/catalog/apimart/gemini-omni-flash.model.js +27 -23
  22. package/dist/catalog/apimart/gpt-image-2.5.model.js +1 -1
  23. package/dist/catalog/apimart/gpt-image-2.6.model.d.ts +3 -0
  24. package/dist/catalog/apimart/gpt-image-2.6.model.js +103 -0
  25. package/dist/catalog/apimart/gpt-image-2.model.js +1 -1
  26. package/dist/catalog/apimart/grok-imagine-2.0.model.js +1 -1
  27. package/dist/catalog/apimart/grok-imagine-video-1.5.model.d.ts +3 -0
  28. package/dist/catalog/apimart/grok-imagine-video-1.5.model.js +85 -0
  29. package/dist/catalog/apimart/happyhorse-1.1.model.d.ts +3 -0
  30. package/dist/catalog/apimart/happyhorse-1.1.model.js +78 -0
  31. package/dist/catalog/apimart/kling-3.0-omni.model.js +12 -2
  32. package/dist/catalog/apimart/kling-3.0-turbo.model.js +5 -2
  33. package/dist/catalog/apimart/kling-3.0.model.js +1 -1
  34. package/dist/catalog/apimart/kling-4.0.model.d.ts +3 -0
  35. package/dist/catalog/apimart/kling-4.0.model.js +149 -0
  36. package/dist/catalog/apimart/midjourney-video.model.js +31 -32
  37. package/dist/catalog/apimart/midjourney.model.js +11 -1
  38. package/dist/catalog/apimart/minimax-h3-max.model.d.ts +3 -0
  39. package/dist/catalog/apimart/minimax-h3-max.model.js +101 -0
  40. package/dist/catalog/apimart/minimax-h3.model.js +8 -3
  41. package/dist/catalog/apimart/nano-banana-2-lite.model.js +1 -1
  42. package/dist/catalog/apimart/nano-banana-2.1.model.d.ts +2 -0
  43. package/dist/catalog/apimart/nano-banana-2.1.model.js +49 -0
  44. package/dist/catalog/apimart/nano-banana-2.model.js +1 -1
  45. package/dist/catalog/apimart/nano-banana-pro.model.js +1 -1
  46. package/dist/catalog/apimart/qwen-image-3.0.model.js +1 -1
  47. package/dist/catalog/apimart/seedance-2.0-fast.model.js +1 -1
  48. package/dist/catalog/apimart/seedance-2.0-mini.model.js +4 -4
  49. package/dist/catalog/apimart/seedance-2.0.model.js +1 -1
  50. package/dist/catalog/apimart/seedance-2.5.model.js +27 -5
  51. package/dist/catalog/apimart/seedream-5.0-flash.model.d.ts +3 -0
  52. package/dist/catalog/apimart/seedream-5.0-flash.model.js +52 -0
  53. package/dist/catalog/apimart/seedream-5.0-lite.model.js +4 -4
  54. package/dist/catalog/apimart/seedream-5.0-pro.model.js +1 -1
  55. package/dist/catalog/apimart/veo-3.1.model.d.ts +3 -0
  56. package/dist/catalog/apimart/veo-3.1.model.js +132 -0
  57. package/dist/catalog/apimart/wan-2.7-image.model.d.ts +3 -0
  58. package/dist/catalog/apimart/wan-2.7-image.model.js +80 -0
  59. package/dist/catalog/apimart/wan-3.0.model.d.ts +3 -0
  60. package/dist/catalog/apimart/wan-3.0.model.js +101 -0
  61. package/dist/catalog/apimart/z-image-turbo.model.js +1 -1
  62. package/dist/catalog/audio/tts-common.d.ts +2 -1
  63. package/dist/catalog/audio/tts-common.js +5 -1
  64. package/dist/catalog/bailian/cosyvoice-v3.5.model.js +1 -1
  65. package/dist/catalog/bailian/minimax-h3.model.d.ts +3 -0
  66. package/dist/catalog/bailian/minimax-h3.model.js +95 -0
  67. package/dist/catalog/bailian/minimax-speech-2.8.model.js +1 -1
  68. package/dist/catalog/bailian/qwen-audio-3.1-tts-flash.model.js +14 -3
  69. package/dist/catalog/bailian/qwen-audio-3.1-tts-plus.model.d.ts +2 -0
  70. package/dist/catalog/bailian/qwen-audio-3.1-tts-plus.model.js +44 -0
  71. package/dist/catalog/bailian/qwen-image-3.0.model.js +1 -1
  72. package/dist/catalog/bailian/wan-3.0.model.d.ts +3 -0
  73. package/dist/catalog/bailian/wan-3.0.model.js +104 -0
  74. package/dist/catalog/bailian/z-image-turbo.model.js +1 -1
  75. package/dist/catalog/consumer-contract.d.ts +16 -1
  76. package/dist/catalog/consumer-contract.js +31 -0
  77. package/dist/catalog/continuation.d.ts +20 -0
  78. package/dist/catalog/continuation.js +41 -0
  79. package/dist/catalog/fal/bria-creative-upscale.model.js +1 -1
  80. package/dist/catalog/fal/eleven-v3-tts.model.js +1 -1
  81. package/dist/catalog/fal/eleven-v4-tts.model.d.ts +2 -0
  82. package/dist/catalog/fal/eleven-v4-tts.model.js +38 -0
  83. package/dist/catalog/fal/flux-3-video.model.d.ts +2 -0
  84. package/dist/catalog/fal/flux-3-video.model.js +187 -0
  85. package/dist/catalog/fal/flux-3.model.d.ts +2 -0
  86. package/dist/catalog/fal/flux-3.model.js +69 -0
  87. package/dist/catalog/fal/gemini-omni-1.2-flash.model.d.ts +2 -0
  88. package/dist/catalog/fal/gemini-omni-1.2-flash.model.js +129 -0
  89. package/dist/catalog/fal/gemini-omni-flash.model.js +1 -1
  90. package/dist/catalog/fal/gpt-image-2.5.model.js +1 -1
  91. package/dist/catalog/fal/gpt-image-2.6.model.d.ts +2 -0
  92. package/dist/catalog/fal/gpt-image-2.6.model.js +97 -0
  93. package/dist/catalog/fal/gpt-image-2.model.js +1 -1
  94. package/dist/catalog/fal/grok-imagine-2.0.model.js +1 -1
  95. package/dist/catalog/fal/grok-imagine-video-1.5.model.d.ts +2 -0
  96. package/dist/catalog/fal/grok-imagine-video-1.5.model.js +121 -0
  97. package/dist/catalog/fal/hailuo-02.model.js +8 -4
  98. package/dist/catalog/fal/hailuo-2.3.model.js +1 -1
  99. package/dist/catalog/fal/ic-light-v2.model.js +1 -1
  100. package/dist/catalog/fal/ideogram-upscale.model.js +1 -1
  101. package/dist/catalog/fal/kling-3.0-omni.model.js +1 -1
  102. package/dist/catalog/fal/kling-3.0-turbo.model.js +5 -2
  103. package/dist/catalog/fal/kling-3.0.model.js +4 -1
  104. package/dist/catalog/fal/kling-4.0-flash.model.d.ts +2 -0
  105. package/dist/catalog/fal/kling-4.0-flash.model.js +132 -0
  106. package/dist/catalog/fal/kling-4.0.model.d.ts +2 -0
  107. package/dist/catalog/fal/kling-4.0.model.js +169 -0
  108. package/dist/catalog/fal/kling-image-o1.model.js +1 -1
  109. package/dist/catalog/fal/kling-video-o1.model.js +18 -7
  110. package/dist/catalog/fal/kling-video-v2.6-pro.model.js +3 -2
  111. package/dist/catalog/fal/ltx-2.3.model.d.ts +2 -0
  112. package/dist/catalog/fal/ltx-2.3.model.js +223 -0
  113. package/dist/catalog/fal/ltx-2.model.js +2 -1
  114. package/dist/catalog/fal/minimax-h3-max.model.d.ts +2 -0
  115. package/dist/catalog/fal/minimax-h3-max.model.js +132 -0
  116. package/dist/catalog/fal/minimax-h3.model.js +3 -4
  117. package/dist/catalog/fal/minimax-speech-2.8.model.js +1 -1
  118. package/dist/catalog/fal/nano-banana-2.1.model.d.ts +2 -0
  119. package/dist/catalog/fal/nano-banana-2.1.model.js +68 -0
  120. package/dist/catalog/fal/nano-banana-2.model.js +1 -1
  121. package/dist/catalog/fal/nano-banana-pro.model.js +1 -1
  122. package/dist/catalog/fal/nano-banana.model.js +1 -1
  123. package/dist/catalog/fal/pixverse-v5.5.model.js +9 -4
  124. package/dist/catalog/fal/qwen-image-3.0.model.js +2 -2
  125. package/dist/catalog/fal/qwen3-tts-1.7b.model.js +4 -3
  126. package/dist/catalog/fal/seedance-2.0-fast.model.js +1 -1
  127. package/dist/catalog/fal/seedance-2.0-mini.model.js +1 -1
  128. package/dist/catalog/fal/seedance-2.0.model.js +1 -1
  129. package/dist/catalog/fal/seedance-2.5.model.js +5 -2
  130. package/dist/catalog/fal/seedance.model.js +3 -2
  131. package/dist/catalog/fal/seedream-5.0-lite.model.js +1 -1
  132. package/dist/catalog/fal/seedream-5.0-pro.model.js +1 -1
  133. package/dist/catalog/fal/seedream-v4.5.model.js +1 -1
  134. package/dist/catalog/fal/seedream-v4.model.js +1 -1
  135. package/dist/catalog/fal/seedvr2-image-upscale.model.js +1 -1
  136. package/dist/catalog/fal/topaz-image-upscale.model.js +1 -1
  137. package/dist/catalog/fal/topaz-transparent-upscale.model.js +1 -1
  138. package/dist/catalog/fal/utils/klingV4.d.ts +17 -0
  139. package/dist/catalog/fal/utils/klingV4.js +33 -0
  140. package/dist/catalog/fal/veo-3.1.model.js +5 -2
  141. package/dist/catalog/fal/vidu-q2.model.js +20 -8
  142. package/dist/catalog/fal/wan-2.5-preview.model.js +4 -1
  143. package/dist/catalog/fal/wan-3.0.model.d.ts +2 -0
  144. package/dist/catalog/fal/wan-3.0.model.js +135 -0
  145. package/dist/catalog/fal/z-image-turbo.model.js +10 -9
  146. package/dist/catalog/grsai/gpt-image-2.5.model.js +13 -31
  147. package/dist/catalog/grsai/gpt-image-2.6.model.d.ts +2 -0
  148. package/dist/catalog/grsai/gpt-image-2.6.model.js +37 -0
  149. package/dist/catalog/grsai/gpt-image-2.model.js +5 -2
  150. package/dist/catalog/grsai/nano-banana-2-lite.model.js +1 -1
  151. package/dist/catalog/grsai/nano-banana-2.1.model.d.ts +2 -0
  152. package/dist/catalog/grsai/nano-banana-2.1.model.js +29 -0
  153. package/dist/catalog/grsai/nano-banana-2.model.js +1 -1
  154. package/dist/catalog/grsai/nano-banana-pro.model.js +1 -1
  155. package/dist/catalog/grsai/wan-3.0.model.d.ts +2 -0
  156. package/dist/catalog/grsai/wan-3.0.model.js +78 -0
  157. package/dist/catalog/index.d.ts +1 -0
  158. package/dist/catalog/index.js +205 -124
  159. package/dist/catalog/kie/eleven-v3-dialogue.model.js +1 -1
  160. package/dist/catalog/kie/flux-3-klein.model.d.ts +2 -0
  161. package/dist/catalog/kie/flux-3-klein.model.js +58 -0
  162. package/dist/catalog/kie/gemini-3.1-flash-tts.model.js +7 -4
  163. package/dist/catalog/kie/gemini-3.8-flash-lite-tts.model.d.ts +2 -0
  164. package/dist/catalog/kie/gemini-3.8-flash-lite-tts.model.js +11 -0
  165. package/dist/catalog/kie/gemini-3.8-flash-tts.model.d.ts +2 -0
  166. package/dist/catalog/kie/gemini-3.8-flash-tts.model.js +11 -0
  167. package/dist/catalog/kie/gemini-omni-video.model.js +3 -4
  168. package/dist/catalog/kie/gemini38Tts.d.ts +3 -0
  169. package/dist/catalog/kie/gemini38Tts.js +40 -0
  170. package/dist/catalog/kie/gpt-image-2.5.model.js +1 -1
  171. package/dist/catalog/kie/gpt-image-2.6.model.d.ts +2 -0
  172. package/dist/catalog/kie/gpt-image-2.6.model.js +87 -0
  173. package/dist/catalog/kie/gpt-image-2.model.js +8 -12
  174. package/dist/catalog/kie/grok-imagine-2.0.model.js +1 -1
  175. package/dist/catalog/kie/grok-imagine-video-1.5.model.d.ts +2 -0
  176. package/dist/catalog/kie/grok-imagine-video-1.5.model.js +52 -0
  177. package/dist/catalog/kie/grok-imagine-video.model.js +7 -3
  178. package/dist/catalog/kie/grok-imagine.model.js +4 -2
  179. package/dist/catalog/kie/hailuo-02.model.js +6 -4
  180. package/dist/catalog/kie/hailuo-2-3.model.js +1 -1
  181. package/dist/catalog/kie/happyhorse-1.1.model.js +5 -2
  182. package/dist/catalog/kie/kling-3.0-omni.model.js +51 -23
  183. package/dist/catalog/kie/kling-3.0-turbo.model.js +1 -1
  184. package/dist/catalog/kie/kling-3.0.model.js +1 -8
  185. package/dist/catalog/kie/kling-4.0-flash.model.d.ts +2 -0
  186. package/dist/catalog/kie/kling-4.0-flash.model.js +16 -0
  187. package/dist/catalog/kie/kling-4.0.model.d.ts +2 -0
  188. package/dist/catalog/kie/kling-4.0.model.js +17 -0
  189. package/dist/catalog/kie/kling-v2-6.model.js +1 -1
  190. package/dist/catalog/kie/kling40.d.ts +21 -0
  191. package/dist/catalog/kie/kling40.js +129 -0
  192. package/dist/catalog/kie/minimax-h3.model.js +16 -21
  193. package/dist/catalog/kie/nano-banana-2-lite.model.js +1 -1
  194. package/dist/catalog/kie/nano-banana-2.1.model.d.ts +2 -0
  195. package/dist/catalog/kie/nano-banana-2.1.model.js +34 -0
  196. package/dist/catalog/kie/nano-banana-2.model.js +2 -2
  197. package/dist/catalog/kie/nano-banana-pro.model.js +1 -1
  198. package/dist/catalog/kie/qwen-image-3.0.model.js +2 -10
  199. package/dist/catalog/kie/seedance-1.5-pro.model.js +2 -1
  200. package/dist/catalog/kie/seedance-2.0-fast.model.js +5 -1
  201. package/dist/catalog/kie/seedance-2.0-mini.model.js +5 -1
  202. package/dist/catalog/kie/seedance-2.0.model.js +5 -1
  203. package/dist/catalog/kie/seedance-2.5.model.js +10 -20
  204. package/dist/catalog/kie/seedance-v1.model.js +8 -4
  205. package/dist/catalog/kie/seedream-4.0.model.js +1 -1
  206. package/dist/catalog/kie/seedream-4.5.model.js +1 -1
  207. package/dist/catalog/kie/seedream-5.0-lite.model.js +1 -1
  208. package/dist/catalog/kie/seedream-5.0-pro.model.js +1 -1
  209. package/dist/catalog/kie/wan-3.0-prime.model.d.ts +2 -0
  210. package/dist/catalog/kie/wan-3.0-prime.model.js +15 -0
  211. package/dist/catalog/kie/wan-3.0.model.d.ts +2 -0
  212. package/dist/catalog/kie/wan-3.0.model.js +15 -0
  213. package/dist/catalog/kie/wan30.d.ts +10 -0
  214. package/dist/catalog/kie/wan30.js +78 -0
  215. package/dist/catalog/kie/z-image.model.js +1 -1
  216. package/dist/catalog/modelscope/flux-1-krea-dev.model.js +4 -2
  217. package/dist/catalog/modelscope/majicmix-realistic.model.js +3 -2
  218. package/dist/catalog/modelscope/modelscope-custom.model.js +3 -2
  219. package/dist/catalog/modelscope/qwen-image-2512.model.d.ts +5 -0
  220. package/dist/catalog/modelscope/{qwen-image.model.js → qwen-image-2512.model.js} +11 -8
  221. package/dist/catalog/modelscope/qwen-image-edit-2511.model.d.ts +5 -0
  222. package/dist/catalog/modelscope/{qwen-image-edit-2509.model.js → qwen-image-edit-2511.model.js} +9 -7
  223. package/dist/catalog/modelscope/sdxl-14-ckpt.model.js +3 -2
  224. package/dist/catalog/modelscope/utils.js +2 -2
  225. package/dist/catalog/modelscope/z-image-turbo.model.js +3 -2
  226. package/dist/catalog/ppio/kling-3.0.model.js +4 -1
  227. package/dist/catalog/ppio/minimax-speech.model.js +2 -1
  228. package/dist/catalog/shared/mediaPresence.d.ts +8 -1
  229. package/dist/catalog/shared/mediaPresence.js +21 -1
  230. package/dist/catalog/shared/nanoBanana21.d.ts +11 -0
  231. package/dist/catalog/shared/nanoBanana21.js +30 -0
  232. package/dist/catalog/shared/shotList.d.ts +31 -0
  233. package/dist/catalog/shared/shotList.js +48 -0
  234. package/dist/catalog/shared/subjectElements.d.ts +36 -0
  235. package/dist/catalog/shared/subjectElements.js +93 -0
  236. package/dist/catalog/siliconflow/moss-ttsd-0.5.model.js +1 -1
  237. package/dist/catalog/validate.js +14 -1
  238. package/dist/catalog/volcengine/seedance-2.0-fast.model.d.ts +2 -0
  239. package/dist/catalog/volcengine/seedance-2.0-fast.model.js +11 -0
  240. package/dist/catalog/volcengine/seedance-2.0-mini.model.d.ts +2 -0
  241. package/dist/catalog/volcengine/seedance-2.0-mini.model.js +11 -0
  242. package/dist/catalog/volcengine/seedance-2.0.model.d.ts +2 -0
  243. package/dist/catalog/volcengine/seedance-2.0.model.js +11 -0
  244. package/dist/catalog/volcengine/seedance-2.5.model.d.ts +2 -0
  245. package/dist/catalog/volcengine/seedance-2.5.model.js +11 -0
  246. package/dist/catalog/volcengine/seedance.d.ts +17 -0
  247. package/dist/catalog/volcengine/seedance.js +192 -0
  248. package/dist/catalog/volcengine/seedream-5.0-lite.model.js +2 -1
  249. package/dist/catalog/volcengine/seedream-5.0.js +1 -1
  250. package/dist/catalog/volcengine-speech/seed-icl-2.0.model.js +2 -2
  251. package/dist/catalog/volcengine-speech/seed-tts-2.0.model.js +2 -2
  252. package/dist/discovery/index.js +13 -6
  253. package/dist/index.d.ts +3 -0
  254. package/dist/index.js +2 -0
  255. package/dist/llm/bigmodel/preset.js +2 -1
  256. package/dist/llm/bigmodel/profiles.js +0 -6
  257. package/dist/llm/chat.d.ts +8 -0
  258. package/dist/llm/chat.js +18 -2
  259. package/dist/llm/chatTypes.d.ts +6 -0
  260. package/dist/llm/defaults.d.ts +2 -2
  261. package/dist/llm/defaults.js +3 -3
  262. package/dist/llm/groq/preset.js +18 -2
  263. package/dist/llm/modelCatalog.d.ts +9 -2
  264. package/dist/llm/modelCatalog.js +17 -4
  265. package/dist/llm/modelCatalogEntries.d.ts +2 -0
  266. package/dist/llm/modelCatalogEntries.js +197 -42
  267. package/dist/llm/providerPresets.d.ts +3 -0
  268. package/dist/llm/providerPresets.js +145 -32
  269. package/dist/llm/providerReasoningRequest.js +28 -11
  270. package/dist/llm/siliconflow/index.js +1 -1
  271. package/dist/llm/siliconflow/preset.js +30 -0
  272. package/dist/llm/types.d.ts +6 -0
  273. package/dist/packs/models/{ppio/wan-2.5-preview.d.ts → apimart/flux-3-image.d.ts} +1 -1
  274. package/dist/packs/models/apimart/flux-3-image.js +7 -0
  275. package/dist/packs/models/apimart/flux-3-video.d.ts +6 -0
  276. package/dist/packs/models/apimart/flux-3-video.js +7 -0
  277. package/dist/packs/models/apimart/gemini-omni-1.2-flash.d.ts +6 -0
  278. package/dist/packs/models/apimart/gemini-omni-1.2-flash.js +7 -0
  279. package/dist/packs/models/{modelscope/qwen-image.d.ts → apimart/gpt-image-2.6.d.ts} +1 -1
  280. package/dist/packs/models/apimart/gpt-image-2.6.js +7 -0
  281. package/dist/packs/models/apimart/grok-imagine-video-1.5.d.ts +6 -0
  282. package/dist/packs/models/apimart/grok-imagine-video-1.5.js +7 -0
  283. package/dist/packs/models/apimart/happyhorse-1.1.d.ts +6 -0
  284. package/dist/packs/models/apimart/happyhorse-1.1.js +7 -0
  285. package/dist/packs/models/apimart/kling-4.0.d.ts +6 -0
  286. package/dist/packs/models/apimart/kling-4.0.js +7 -0
  287. package/dist/packs/models/apimart/minimax-h3-max.d.ts +6 -0
  288. package/dist/packs/models/apimart/minimax-h3-max.js +7 -0
  289. package/dist/packs/models/{ppio/minimax-hailuo-2.3.d.ts → apimart/nano-banana-2.1.d.ts} +1 -1
  290. package/dist/packs/models/{ppio/minimax-hailuo-2.3.js → apimart/nano-banana-2.1.js} +4 -4
  291. package/dist/packs/models/apimart/seedream-5.0-flash.d.ts +6 -0
  292. package/dist/packs/models/apimart/seedream-5.0-flash.js +7 -0
  293. package/dist/packs/models/apimart/veo-3.1.d.ts +6 -0
  294. package/dist/packs/models/apimart/veo-3.1.js +7 -0
  295. package/dist/packs/models/apimart/wan-2.7-image.d.ts +6 -0
  296. package/dist/packs/models/apimart/wan-2.7-image.js +7 -0
  297. package/dist/packs/models/apimart/wan-3.0.d.ts +6 -0
  298. package/dist/packs/models/apimart/wan-3.0.js +7 -0
  299. package/dist/packs/models/bailian/cosyvoice-v3.5.js +1 -1
  300. package/dist/packs/models/bailian/minimax-h3.d.ts +6 -0
  301. package/dist/packs/models/bailian/minimax-h3.js +7 -0
  302. package/dist/packs/models/bailian/minimax-speech-2.8.js +1 -1
  303. package/dist/packs/models/bailian/qwen-audio-3.1-tts-flash.js +1 -1
  304. package/dist/packs/models/bailian/qwen-audio-3.1-tts-plus.d.ts +6 -0
  305. package/dist/packs/models/bailian/qwen-audio-3.1-tts-plus.js +7 -0
  306. package/dist/packs/models/bailian/qwen-image-3.0.js +1 -1
  307. package/dist/packs/models/bailian/wan-3.0.d.ts +6 -0
  308. package/dist/packs/models/bailian/wan-3.0.js +7 -0
  309. package/dist/packs/models/bailian/z-image-turbo.js +1 -1
  310. package/dist/packs/models/fal/eleven-v4-tts.d.ts +6 -0
  311. package/dist/packs/models/{ppio/wan-2.5-preview.js → fal/eleven-v4-tts.js} +4 -4
  312. package/dist/packs/models/fal/flux-3-video.d.ts +6 -0
  313. package/dist/packs/models/fal/flux-3-video.js +7 -0
  314. package/dist/packs/models/{ppio/wan-2.6.d.ts → fal/flux-3.d.ts} +1 -1
  315. package/dist/packs/models/{ppio/wan-2.6.js → fal/flux-3.js} +4 -4
  316. package/dist/packs/models/fal/gemini-omni-1.2-flash.d.ts +6 -0
  317. package/dist/packs/models/fal/gemini-omni-1.2-flash.js +7 -0
  318. package/dist/packs/models/fal/gpt-image-2.6.d.ts +6 -0
  319. package/dist/packs/models/fal/gpt-image-2.6.js +7 -0
  320. package/dist/packs/models/fal/grok-imagine-video-1.5.d.ts +6 -0
  321. package/dist/packs/models/fal/grok-imagine-video-1.5.js +7 -0
  322. package/dist/packs/models/fal/kling-4.0-flash.d.ts +6 -0
  323. package/dist/packs/models/fal/kling-4.0-flash.js +7 -0
  324. package/dist/packs/models/fal/kling-4.0.d.ts +6 -0
  325. package/dist/packs/models/{ppio/wan-2.7.js → fal/kling-4.0.js} +4 -4
  326. package/dist/packs/models/{ppio/wan-2.7.d.ts → fal/ltx-2.3.d.ts} +1 -1
  327. package/dist/packs/models/fal/ltx-2.3.js +7 -0
  328. package/dist/packs/models/fal/minimax-h3-max.d.ts +6 -0
  329. package/dist/packs/models/fal/minimax-h3-max.js +7 -0
  330. package/dist/packs/models/fal/nano-banana-2.1.d.ts +6 -0
  331. package/dist/packs/models/fal/nano-banana-2.1.js +7 -0
  332. package/dist/packs/models/fal/wan-3.0.d.ts +6 -0
  333. package/dist/packs/models/fal/wan-3.0.js +7 -0
  334. package/dist/packs/models/grsai/gpt-image-2.6.d.ts +6 -0
  335. package/dist/packs/models/grsai/gpt-image-2.6.js +7 -0
  336. package/dist/packs/models/grsai/nano-banana-2.1.d.ts +6 -0
  337. package/dist/packs/models/grsai/nano-banana-2.1.js +7 -0
  338. package/dist/packs/models/grsai/wan-3.0.d.ts +6 -0
  339. package/dist/packs/models/grsai/wan-3.0.js +7 -0
  340. package/dist/packs/models/kie/flux-3-klein.d.ts +6 -0
  341. package/dist/packs/models/kie/flux-3-klein.js +7 -0
  342. package/dist/packs/models/kie/gemini-3.8-flash-lite-tts.d.ts +6 -0
  343. package/dist/packs/models/kie/gemini-3.8-flash-lite-tts.js +7 -0
  344. package/dist/packs/models/kie/{eleven-turbo-2.5-tts.d.ts → gemini-3.8-flash-tts.d.ts} +1 -1
  345. package/dist/packs/models/kie/{eleven-turbo-2.5-tts.js → gemini-3.8-flash-tts.js} +1 -1
  346. package/dist/packs/models/kie/gpt-image-2.6.d.ts +6 -0
  347. package/dist/packs/models/kie/gpt-image-2.6.js +7 -0
  348. package/dist/packs/models/kie/grok-imagine-video-1.5.d.ts +6 -0
  349. package/dist/packs/models/kie/grok-imagine-video-1.5.js +7 -0
  350. package/dist/packs/models/kie/kling-4.0-flash.d.ts +6 -0
  351. package/dist/packs/models/kie/kling-4.0-flash.js +7 -0
  352. package/dist/packs/models/kie/kling-4.0.d.ts +6 -0
  353. package/dist/packs/models/kie/kling-4.0.js +7 -0
  354. package/dist/packs/models/kie/nano-banana-2.1.d.ts +6 -0
  355. package/dist/packs/models/kie/nano-banana-2.1.js +7 -0
  356. package/dist/packs/models/kie/wan-3.0-prime.d.ts +6 -0
  357. package/dist/packs/models/kie/wan-3.0-prime.js +7 -0
  358. package/dist/packs/models/kie/wan-3.0.d.ts +6 -0
  359. package/dist/packs/models/kie/wan-3.0.js +7 -0
  360. package/dist/packs/models/modelscope/flux-1-krea-dev.js +1 -1
  361. package/dist/packs/models/modelscope/majicmix-realistic.js +1 -1
  362. package/dist/packs/models/modelscope/modelscope-custom.js +1 -1
  363. package/dist/packs/models/modelscope/qwen-image-2512.d.ts +6 -0
  364. package/dist/packs/models/modelscope/{qwen-image.js → qwen-image-2512.js} +2 -2
  365. package/dist/packs/models/modelscope/{qwen-image-edit-2509.d.ts → qwen-image-edit-2511.d.ts} +1 -1
  366. package/dist/packs/models/modelscope/{qwen-image-edit-2509.js → qwen-image-edit-2511.js} +2 -2
  367. package/dist/packs/models/modelscope/sdxl-14-ckpt.js +1 -1
  368. package/dist/packs/models/modelscope/z-image-turbo.js +1 -1
  369. package/dist/packs/models/volcengine/seedance-2.0-fast.d.ts +6 -0
  370. package/dist/packs/models/volcengine/seedance-2.0-fast.js +7 -0
  371. package/dist/packs/models/volcengine/seedance-2.0-mini.d.ts +6 -0
  372. package/dist/packs/models/volcengine/seedance-2.0-mini.js +7 -0
  373. package/dist/packs/models/volcengine/seedance-2.0.d.ts +6 -0
  374. package/dist/packs/models/volcengine/seedance-2.0.js +7 -0
  375. package/dist/packs/models/volcengine/seedance-2.5.d.ts +6 -0
  376. package/dist/packs/models/volcengine/seedance-2.5.js +7 -0
  377. package/dist/packs/models/volcengine/seedream-5.0-flash.js +1 -1
  378. package/dist/packs/models/volcengine/seedream-5.0-lite.js +1 -1
  379. package/dist/packs/models/volcengine/seedream-5.0-pro.js +1 -1
  380. package/dist/packs/provider-adapters/bailian.js +1 -1
  381. package/dist/packs/provider-adapters/modelscope.js +1 -1
  382. package/dist/packs/provider-adapters/volcengine.js +1 -1
  383. package/dist/packs/provider-packs/apimart.d.ts +1 -1
  384. package/dist/packs/provider-packs/apimart.js +35 -22
  385. package/dist/packs/provider-packs/bailian.d.ts +1 -1
  386. package/dist/packs/provider-packs/bailian.js +8 -5
  387. package/dist/packs/provider-packs/fal.d.ts +1 -1
  388. package/dist/packs/provider-packs/fal.js +52 -40
  389. package/dist/packs/provider-packs/grsai.d.ts +1 -1
  390. package/dist/packs/provider-packs/grsai.js +8 -5
  391. package/dist/packs/provider-packs/kie.d.ts +1 -1
  392. package/dist/packs/provider-packs/kie.js +41 -32
  393. package/dist/packs/provider-packs/modelscope.js +2 -2
  394. package/dist/packs/provider-packs/ppio.d.ts +1 -1
  395. package/dist/packs/provider-packs/ppio.js +2 -6
  396. package/dist/packs/provider-packs/volcengine.d.ts +1 -1
  397. package/dist/packs/provider-packs/volcengine.js +8 -4
  398. package/dist/pricing/index.d.ts +1 -0
  399. package/dist/pricing/index.js +1 -0
  400. package/dist/pricing/mediaContext.d.ts +6 -1
  401. package/dist/pricing/mediaContext.js +12 -5
  402. package/dist/pricing/tokenPricing.d.ts +36 -0
  403. package/dist/pricing/tokenPricing.js +26 -0
  404. package/dist/providers/bailian.d.ts +1 -1
  405. package/dist/providers/bailian.js +71 -4
  406. package/dist/providers/fal.js +11 -1
  407. package/dist/providers/helpers.d.ts +1 -1
  408. package/dist/providers/helpers.js +17 -5
  409. package/dist/providers/kie.js +16 -5
  410. package/dist/providers/metadata.js +2 -2
  411. package/dist/providers/openai-speech.d.ts +6 -0
  412. package/dist/providers/openai-speech.js +31 -0
  413. package/dist/providers/providerAccessErrors.d.ts +3 -0
  414. package/dist/providers/providerAccessErrors.js +73 -0
  415. package/dist/providers/siliconflow.js +2 -27
  416. package/dist/providers/volcengine-speech.js +22 -5
  417. package/dist/providers/volcengine-voice-clone.js +13 -4
  418. package/dist/providers/volcengine.d.ts +1 -1
  419. package/dist/providers/volcengine.js +89 -11
  420. package/dist/runtime/retry.js +3 -0
  421. package/dist/tool-packs/fal-erase/models/bria-eraser.model.js +1 -1
  422. package/dist/tool-packs/fal-erase/models/finegrain-eraser.model.js +1 -1
  423. package/dist/tool-packs/fal-erase/models/flux-pro-erase.model.js +1 -1
  424. package/dist/tool-packs/fal-image-utilities/models/control-light.model.js +1 -1
  425. package/dist/tool-packs/fal-image-utilities/models/outpaint.model.js +1 -1
  426. package/dist/tool-packs/fal-image-utilities/models/photo-restoration.model.js +1 -1
  427. package/dist/tool-packs/fal-image-utilities/models/pixelcut-background-removal.model.js +1 -1
  428. package/dist/tool-packs/fal-image-utilities/models/product-photography.model.js +1 -1
  429. package/dist/tool-packs/fal-image-utilities/models/relighting.model.js +1 -1
  430. package/dist/tool-packs/fal-multi-angle/models/flux-2-multiple-angles.model.js +1 -1
  431. package/dist/tool-packs/fal-multi-angle/models/perspective-change.model.js +1 -1
  432. package/dist/tool-packs/fal-multi-angle/models/qwen-image-edit-2511-multiple-angles.model.js +1 -1
  433. package/dist/types/model.d.ts +68 -12
  434. package/dist/types/model.js +3 -0
  435. package/dist/types/modelTags.d.ts +142 -0
  436. package/dist/types/modelTags.js +44 -0
  437. package/dist/types/speechTimings.d.ts +15 -0
  438. package/dist/types/speechTimings.js +1 -0
  439. package/dist/upload/apimart-upload.d.ts +1 -1
  440. package/dist/upload/apimart-upload.js +37 -15
  441. package/dist/upload/bailian-oss-upload.d.ts +32 -0
  442. package/dist/upload/bailian-oss-upload.js +74 -0
  443. package/dist/upload/{fal-legacy.js → fal-host-fetch.js} +2 -2
  444. package/dist/upload/fal-transport.d.ts +6 -0
  445. package/dist/upload/fal-transport.js +2 -1
  446. package/dist/upload/index.d.ts +2 -2
  447. package/dist/upload/index.js +4 -7
  448. package/dist/upload/kie-upload.d.ts +1 -1
  449. package/dist/upload/kie-upload.js +34 -12
  450. package/dist/upload/media-fields.js +7 -2
  451. package/dist/upload/preprocess-core.d.ts +2 -0
  452. package/dist/upload/preprocess-core.js +2 -0
  453. package/dist/upload/preprocess.d.ts +1 -1
  454. package/dist/upload/preprocess.js +12 -3
  455. package/dist/upload/provider-preprocessors/apimart.d.ts +1 -1
  456. package/dist/upload/provider-preprocessors/apimart.js +13 -5
  457. package/dist/upload/provider-preprocessors/bailian.d.ts +8 -0
  458. package/dist/upload/provider-preprocessors/bailian.js +45 -0
  459. package/dist/upload/provider-preprocessors/kie.d.ts +1 -1
  460. package/dist/upload/provider-preprocessors/kie.js +26 -9
  461. package/dist/upload/provider-preprocessors/ppio.d.ts +1 -2
  462. package/dist/upload/provider-preprocessors/ppio.js +2 -29
  463. package/dist/upload/provider-preprocessors/public-host.d.ts +5 -0
  464. package/dist/upload/provider-preprocessors/public-host.js +7 -0
  465. package/dist/upload/provider-preprocessors/volcengine.d.ts +5 -0
  466. package/dist/upload/provider-preprocessors/volcengine.js +10 -0
  467. package/dist/upload/public-host-upload.d.ts +7 -0
  468. package/dist/upload/public-host-upload.js +55 -0
  469. package/dist/upload/upload-response.js +12 -7
  470. package/docs/README.md +26 -26
  471. package/docs/consumers.md +156 -148
  472. package/docs/llm-adaptation/README.md +180 -166
  473. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/DeepSeek.md +108 -104
  474. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/Kimi.md +94 -76
  475. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/MiniMax.md +89 -84
  476. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//345/260/217/347/261/263MiMo.md +126 -126
  477. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//346/231/272/350/260/261GLM.md +238 -234
  478. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//347/201/253/345/261/261/345/274/225/346/223/216.md +131 -87
  479. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274Qwen.md +112 -84
  480. package/docs/llm-adaptation//346/226/207/346/241/243/351/207/207/351/233/206/346/211/213/345/206/214.md +88 -88
  481. package/docs/model-adaptation/Bria-Eraser/Bria-Eraser_Fal.md +32 -32
  482. package/docs/model-adaptation/Bria-/345/210/233/346/204/217/346/224/276/345/244/247/Bria-/345/210/233/346/204/217/346/224/276/345/244/247_Fal.md +31 -31
  483. package/docs/model-adaptation/ControlLight/ControlLight_Fal.md +85 -85
  484. package/docs/model-adaptation/Eleven-v4/Eleven-v4_Fal.md +49 -0
  485. package/docs/model-adaptation/FLUX-2-/345/244/232/350/247/222/345/272/246/FLUX-2-/345/244/232/350/247/222/345/272/246_Fal.md +107 -107
  486. package/docs/model-adaptation/FLUX-3/FLUX-3_APIMart.md +65 -0
  487. package/docs/model-adaptation/FLUX-3/FLUX-3_Fal.md +48 -0
  488. package/docs/model-adaptation/FLUX-3-Klein/FLUX-3-Klein_KIE.md +38 -0
  489. package/docs/model-adaptation/FLUX-3-Video/FLUX-3-Video_APIMart.md +84 -0
  490. package/docs/model-adaptation/FLUX-3-Video/FLUX-3-Video_Fal.md +80 -0
  491. package/docs/model-adaptation/Finegrain-Eraser/Finegrain-Eraser_Fal.md +31 -31
  492. package/docs/model-adaptation/Flux-Pro-Erase/Flux-Pro-Erase_Fal.md +34 -34
  493. package/docs/model-adaptation/Fun-ASR/Fun-ASR_/347/231/276/347/202/274.md +47 -47
  494. package/docs/model-adaptation/Fun-ASR-Flash-2026-06-15/Fun-ASR-Flash-2026-06-15_/347/231/276/347/202/274.md +45 -45
  495. package/docs/model-adaptation/Fun-ASR-Realtime/Fun-ASR-Realtime_/347/231/276/347/202/274.md +57 -57
  496. package/docs/model-adaptation/Fun-ASR-Realtime-2026-02-28/Fun-ASR-Realtime-2026-02-28_/347/231/276/347/202/274.md +39 -39
  497. package/docs/model-adaptation/GLM-5.3-Flash/GLM-5.3-Flash_/346/231/272/350/260/261.md +217 -213
  498. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_APIMart.md +173 -173
  499. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_Fal.md +94 -94
  500. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_Grsai.md +138 -137
  501. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_KIE.md +97 -93
  502. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_APIMart.md +66 -66
  503. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Fal.md +55 -55
  504. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Grsai.md +59 -53
  505. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_KIE.md +55 -55
  506. package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_APIMart.md +101 -0
  507. package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_Fal.md +55 -0
  508. package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_Grsai.md +32 -0
  509. package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_KIE.md +51 -0
  510. package/docs/model-adaptation/GPT-OSS-20B/GPT-OSS-20B_Groq.md +62 -62
  511. package/docs/model-adaptation/Gemini-3.8-Flash-Lite-TTS/Gemini-3.8-Flash-Lite-TTS_KIE.md +22 -0
  512. package/docs/model-adaptation/Gemini-3.8-Flash-TTS/Gemini-3.8-Flash-TTS_KIE.md +38 -0
  513. package/docs/model-adaptation/Gemini-Omni-1.2-Flash/Gemini-Omni-1.2-Flash_APIMart.md +79 -0
  514. package/docs/model-adaptation/Gemini-Omni-1.2-Flash/Gemini-Omni-1.2-Flash_Fal.md +60 -0
  515. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_APIMart.md +131 -125
  516. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_Fal.md +84 -84
  517. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_KIE.md +132 -130
  518. package/docs/model-adaptation/Grok-Imagine/Grok-Imagine_KIE.md +38 -36
  519. package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_APIMart.md +250 -250
  520. package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_Fal.md +84 -84
  521. package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_KIE.md +105 -105
  522. package/docs/model-adaptation/Grok-Imagine-Video-1.5/Grok-Imagine-Video-1.5_APIMart.md +68 -0
  523. package/docs/model-adaptation/Grok-Imagine-Video-1.5/Grok-Imagine-Video-1.5_Fal.md +47 -0
  524. package/docs/model-adaptation/Grok-Imagine-Video-1.5/Grok-Imagine-Video-1.5_KIE.md +37 -0
  525. package/docs/model-adaptation/Hailuo-02/Hailuo-02_Fal.md +95 -93
  526. package/docs/model-adaptation/Hailuo-02/Hailuo-02_KIE.md +58 -56
  527. package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_Fal.md +88 -88
  528. package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_KIE.md +51 -51
  529. package/docs/model-adaptation/HappyHorse-1.1/HappyHorse-1.1_APIMart.md +66 -0
  530. package/docs/model-adaptation/HappyHorse-1.1/HappyHorse-1.1_KIE.md +31 -27
  531. package/docs/model-adaptation/IC-Light-v2/IC-Light-v2_Fal.md +99 -99
  532. package/docs/model-adaptation/Ideogram-/345/233/276/347/211/207/346/224/276/345/244/247/Ideogram-/345/233/276/347/211/207/346/224/276/345/244/247_Fal.md +41 -41
  533. package/docs/model-adaptation/Image-Apps-v2-/345/225/206/345/223/201/346/221/204/345/275/261/Image-Apps-v2-/345/225/206/345/223/201/346/221/204/345/275/261_Fal.md +72 -72
  534. package/docs/model-adaptation/Image-Apps-v2-/346/211/251/345/233/276/Image-Apps-v2-/346/211/251/345/233/276_Fal.md +93 -93
  535. package/docs/model-adaptation/Image-Apps-v2-/347/205/247/347/211/207/344/277/256/345/244/215/Image-Apps-v2-/347/205/247/347/211/207/344/277/256/345/244/215_Fal.md +86 -86
  536. package/docs/model-adaptation/Image-Apps-v2-/351/207/215/346/211/223/345/205/211/Image-Apps-v2-/351/207/215/346/211/223/345/205/211_Fal.md +84 -84
  537. package/docs/model-adaptation/Kling-3.0/Kling-3.0_APIMart.md +112 -112
  538. package/docs/model-adaptation/Kling-3.0/Kling-3.0_Fal.md +91 -89
  539. package/docs/model-adaptation/Kling-3.0/Kling-3.0_KIE.md +106 -106
  540. package/docs/model-adaptation/Kling-3.0/Kling-3.0_/346/264/276/346/254/247/344/272/221.md +120 -119
  541. package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_APIMart.md +130 -125
  542. package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_Fal.md +107 -107
  543. package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_KIE.md +148 -143
  544. package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_APIMart.md +88 -85
  545. package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_Fal.md +86 -83
  546. package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_KIE.md +84 -84
  547. package/docs/model-adaptation/Kling-4.0/Kling-4.0_APIMart.md +76 -0
  548. package/docs/model-adaptation/Kling-4.0/Kling-4.0_Fal.md +115 -0
  549. package/docs/model-adaptation/Kling-4.0/Kling-4.0_KIE.md +61 -0
  550. package/docs/model-adaptation/Kling-4.0-Flash/Kling-4.0-Flash_Fal.md +55 -0
  551. package/docs/model-adaptation/Kling-4.0-Flash/Kling-4.0-Flash_KIE.md +33 -0
  552. package/docs/model-adaptation/LTX-2.3/LTX-2.3_Fal.md +121 -0
  553. package/docs/model-adaptation/Midjourney/Midjourney_APIMart.md +402 -396
  554. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_APIMart.md +237 -234
  555. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_Fal.md +112 -108
  556. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_KIE.md +118 -111
  557. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_/347/231/276/347/202/274.md +65 -0
  558. package/docs/model-adaptation/MiniMax-H3-Max/MiniMax-H3-Max_APIMart.md +78 -0
  559. package/docs/model-adaptation/MiniMax-H3-Max/MiniMax-H3-Max_Fal.md +62 -0
  560. package/docs/model-adaptation/MiniMax-Speech/MiniMax-Speech_/346/264/276/346/254/247/344/272/221.md +170 -170
  561. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_APIMart.md +89 -89
  562. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_Fal.md +99 -99
  563. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_Grsai.md +82 -82
  564. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_KIE.md +72 -70
  565. package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_APIMart.md +79 -79
  566. package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_Grsai.md +65 -65
  567. package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_KIE.md +64 -64
  568. package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_APIMart.md +35 -0
  569. package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_Fal.md +37 -0
  570. package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_Grsai.md +35 -0
  571. package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_KIE.md +36 -0
  572. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_APIMart.md +83 -83
  573. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_Fal.md +89 -89
  574. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_Grsai.md +82 -82
  575. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_KIE.md +64 -64
  576. package/docs/model-adaptation/Pixelcut-/350/203/214/346/231/257/347/247/273/351/231/244/Pixelcut-/350/203/214/346/231/257/347/247/273/351/231/244_Fal.md +79 -79
  577. package/docs/model-adaptation/Qwen-Audio-3.1-TTS-Plus/Qwen-Audio-3.1-TTS-Plus_/347/231/276/347/202/274.md +59 -0
  578. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_APIMart.md +117 -117
  579. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_Fal.md +85 -84
  580. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_KIE.md +103 -103
  581. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_/347/231/276/347/202/274.md +138 -138
  582. package/docs/model-adaptation/Qwen-Image-Edit-2511-/345/244/232/350/247/222/345/272/246/Qwen-Image-Edit-2511-/345/244/232/350/247/222/345/272/246_Fal.md +57 -57
  583. package/docs/model-adaptation/Qwen-MT-Flash/Qwen-MT-Flash_/347/231/276/347/202/274.md +68 -68
  584. package/docs/model-adaptation/Qwen-MT-Lite/Qwen-MT-Lite_/347/231/276/347/202/274.md +40 -40
  585. package/docs/model-adaptation/Qwen-MT-Plus/Qwen-MT-Plus_/347/231/276/347/202/274.md +40 -40
  586. package/docs/model-adaptation/Qwen3-ASR-Flash/Qwen3-ASR-Flash_/347/231/276/347/202/274.md +44 -44
  587. package/docs/model-adaptation/Qwen3-ASR-Flash-2026-02-10/Qwen3-ASR-Flash-2026-02-10_/347/231/276/347/202/274.md +37 -37
  588. package/docs/model-adaptation/Qwen3-ASR-Flash-Filetrans/Qwen3-ASR-Flash-Filetrans_/347/231/276/347/202/274.md +45 -45
  589. package/docs/model-adaptation/Qwen3-ASR-Flash-Realtime/Qwen3-ASR-Flash-Realtime_/347/231/276/347/202/274.md +58 -58
  590. package/docs/model-adaptation/Qwen3-ASR-Flash-Realtime-2026-02-10/Qwen3-ASR-Flash-Realtime-2026-02-10_/347/231/276/347/202/274.md +37 -37
  591. package/docs/model-adaptation/README.md +379 -338
  592. package/docs/model-adaptation/Seed-ICL-2.0/Seed-ICL-2.0_/347/201/253/345/261/261/345/274/225/346/223/216.md +65 -65
  593. package/docs/model-adaptation/SeedASR-2.0-File/SeedASR-2.0-File_/347/201/253/345/261/261/345/274/225/346/223/216.md +115 -115
  594. package/docs/model-adaptation/SeedASR-2.0-Realtime/SeedASR-2.0-Realtime_/347/201/253/345/261/261/345/274/225/346/223/216.md +147 -147
  595. package/docs/model-adaptation/SeedVR2-/345/233/276/347/211/207/346/224/276/345/244/247/SeedVR2-/345/233/276/347/211/207/346/224/276/345/244/247_Fal.md +45 -45
  596. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_APIMart.md +121 -121
  597. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_Fal.md +97 -97
  598. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_KIE.md +87 -86
  599. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_/347/201/253/345/261/261/345/274/225/346/223/216.md +101 -0
  600. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_APIMart.md +89 -89
  601. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_Fal.md +95 -95
  602. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_KIE.md +79 -78
  603. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_/347/201/253/345/261/261/345/274/225/346/223/216.md +98 -0
  604. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_APIMart.md +93 -89
  605. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_Fal.md +96 -96
  606. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_KIE.md +79 -78
  607. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_/347/201/253/345/261/261/345/274/225/346/223/216.md +98 -0
  608. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_APIMart.md +217 -212
  609. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_Fal.md +98 -94
  610. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_KIE.md +94 -89
  611. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_/347/201/253/345/261/261/345/274/225/346/223/216.md +102 -0
  612. package/docs/model-adaptation/Seedream-5.0-Flash/Seedream-5.0-Flash_APIMart.md +64 -0
  613. package/docs/model-adaptation/Seedream-5.0-Flash/Seedream-5.0-Flash_/347/201/253/345/261/261/345/274/225/346/223/216.md +18 -18
  614. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_APIMart.md +113 -106
  615. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_Fal.md +91 -91
  616. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_KIE.md +89 -89
  617. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_/347/201/253/345/261/261/345/274/225/346/223/216.md +110 -108
  618. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_APIMart.md +194 -194
  619. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_Fal.md +100 -100
  620. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_KIE.md +141 -141
  621. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_/347/201/253/345/261/261/345/274/225/346/223/216.md +137 -137
  622. package/docs/model-adaptation/SenseVoiceSmall/SenseVoiceSmall_/347/241/205/345/237/272/346/265/201/345/212/250.md +73 -73
  623. package/docs/model-adaptation/TTS-/345/244/232/344/276/233/345/272/224/345/225/206-2026-09.md +115 -69
  624. package/docs/model-adaptation/TTS-/346/227/266/351/227/264/346/210/263-2026-10.md +36 -0
  625. package/docs/model-adaptation/Topaz-/345/233/276/347/211/207/346/224/276/345/244/247/Topaz-/345/233/276/347/211/207/346/224/276/345/244/247_Fal.md +87 -87
  626. package/docs/model-adaptation/Topaz-/351/200/217/346/230/216/345/233/276/346/224/276/345/244/247/Topaz-/351/200/217/346/230/216/345/233/276/346/224/276/345/244/247_Fal.md +34 -34
  627. package/docs/model-adaptation/Veo-3.1/Veo-3.1_APIMart.md +90 -0
  628. package/docs/model-adaptation/Wan-2.7-Image/Wan-2.7-Image_APIMart.md +81 -0
  629. package/docs/model-adaptation/Wan-3.0/Wan-3.0_APIMart.md +74 -0
  630. package/docs/model-adaptation/Wan-3.0/Wan-3.0_Fal.md +60 -0
  631. package/docs/model-adaptation/Wan-3.0/Wan-3.0_Grsai.md +35 -0
  632. package/docs/model-adaptation/Wan-3.0/Wan-3.0_KIE.md +38 -0
  633. package/docs/model-adaptation/Wan-3.0/Wan-3.0_/347/231/276/347/202/274.md +96 -0
  634. package/docs/model-adaptation/Wan-3.0-Prime/Wan-3.0-Prime_KIE.md +20 -0
  635. package/docs/model-adaptation/Whisper-Large-v3/Whisper-Large-v3_Groq.md +80 -80
  636. package/docs/model-adaptation/Whisper-Large-v3-Turbo/Whisper-Large-v3-Turbo_Groq.md +79 -79
  637. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_APIMart.md +88 -88
  638. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_Fal.md +103 -95
  639. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_KIE.md +71 -71
  640. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_/347/231/276/347/202/274.md +122 -122
  641. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_/351/255/224/346/220/255.md +99 -97
  642. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/APIMart.md +240 -240
  643. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Fal.md +190 -172
  644. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Groq.md +136 -121
  645. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Grsai.md +217 -217
  646. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/KIE.md +159 -131
  647. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//345/200/231/351/200/211/344/276/233/345/272/224/345/225/206/350/260/203/347/240/224-/345/233/276/347/211/207/345/267/245/345/205/267.md +151 -151
  648. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//345/277/253/351/200/237/351/200/202/351/205/215/344/276/233/345/272/224/345/225/206.md +65 -65
  649. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//346/264/276/346/254/247/344/272/221.md +170 -147
  650. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/201/253/345/261/261/345/274/225/346/223/216.md +191 -183
  651. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274.md +339 -288
  652. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/241/205/345/237/272/346/265/201/345/212/250.md +180 -153
  653. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//351/255/224/346/220/255.md +205 -207
  654. package/docs/model-adaptation//346/226/207/346/241/243/351/207/207/351/233/206/346/211/213/345/206/214.md +339 -339
  655. package/docs/model-adaptation//351/200/217/350/247/206/345/217/230/346/215/242//351/200/217/350/247/206/345/217/230/346/215/242_Fal.md +59 -59
  656. package/docs//346/216/245/345/205/245/346/214/207/345/215/227/Electron.md +77 -77
  657. package/docs//346/216/245/345/205/245/346/214/207/345/215/227/Tauri.md +81 -81
  658. package/docs//346/216/245/345/205/245/346/214/207/345/215/227/UXP.md +169 -169
  659. package/docs//346/216/245/345/205/245/346/214/207/345/215/227//344/276/233/345/272/224/345/225/206/345/237/237/345/220/215.md +83 -83
  660. package/docs//346/216/245/345/205/245/346/214/207/345/215/227//351/224/231/350/257/257/345/244/204/347/220/206.md +72 -72
  661. package/examples/form-renderer/README.md +17 -17
  662. package/examples/form-renderer/cli.ts +32 -32
  663. package/examples/form-renderer/index.ts +144 -144
  664. package/examples/form-renderer/package.json +16 -16
  665. package/examples/form-renderer/tsconfig.json +14 -14
  666. package/examples/llm-chat/README.md +38 -38
  667. package/examples/llm-chat/index.ts +100 -100
  668. package/examples/llm-chat/package.json +19 -19
  669. package/examples/llm-chat/tsconfig.json +14 -14
  670. package/examples/minimal-node/README.md +31 -31
  671. package/examples/minimal-node/index.ts +138 -138
  672. package/examples/minimal-node/package.json +17 -17
  673. package/examples/minimal-node/tsconfig.json +14 -14
  674. package/package.json +259 -258
  675. package/dist/catalog/grsai/gptImage25Sizes.d.ts +0 -1
  676. package/dist/catalog/grsai/gptImage25Sizes.js +0 -76
  677. package/dist/catalog/kie/eleven-turbo-2.5-tts.model.d.ts +0 -2
  678. package/dist/catalog/kie/eleven-turbo-2.5-tts.model.js +0 -29
  679. package/dist/catalog/modelscope/qwen-image-edit-2509.model.d.ts +0 -5
  680. package/dist/catalog/modelscope/qwen-image.model.d.ts +0 -5
  681. package/dist/catalog/ppio/minimax-hailuo-2.3.model.d.ts +0 -7
  682. package/dist/catalog/ppio/minimax-hailuo-2.3.model.js +0 -114
  683. package/dist/catalog/ppio/wan-2.5-preview.model.d.ts +0 -7
  684. package/dist/catalog/ppio/wan-2.5-preview.model.js +0 -198
  685. package/dist/catalog/ppio/wan-2.6.model.d.ts +0 -7
  686. package/dist/catalog/ppio/wan-2.6.model.js +0 -206
  687. package/dist/catalog/ppio/wan-2.7.model.d.ts +0 -2
  688. package/dist/catalog/ppio/wan-2.7.model.js +0 -373
  689. package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_/346/264/276/346/254/247/344/272/221.md +0 -70
  690. package/docs/model-adaptation/TeleSpeechASR/TeleSpeechASR_/347/241/205/345/237/272/346/265/201/345/212/250.md +0 -76
  691. package/docs/model-adaptation/Wan-2.5-Preview/Wan-2.5-Preview_/346/264/276/346/254/247/344/272/221.md +0 -82
  692. package/docs/model-adaptation/Wan-2.6/Wan-2.6_/346/264/276/346/254/247/344/272/221.md +0 -84
  693. package/docs/model-adaptation/Wan-2.7/Wan-2.7_/346/264/276/346/254/247/344/272/221.md +0 -122
  694. /package/dist/upload/{fal-legacy.d.ts → fal-host-fetch.d.ts} +0 -0
@@ -1,9 +1,10 @@
1
1
  import { defineModel } from "../defineModel.js";
2
+ import { hasUploadedImage } from "../shared/mediaPresence.js";
2
3
  export const falSeedance25Model = defineModel({
3
4
  meta: {
4
5
  id: 'fal-ai-seedance-2.5', canonicalModelId: 'seedance-2.5', seriesId: 'seedance', seriesRank: 2.5,
5
6
  provider: 'fal', type: 'video',
6
- tags: ['text-to-video', 'image-to-video', 'start-end-frame', 'reference-mode', 'mixed-upload-mode', 'supports-audio-generation', 'multi-mode-switch', 'provider-fal'],
7
+ tags: ['text-to-video', 'image-to-video', 'start-end-frame', 'reference-mode'],
7
8
  aliases: ['seedance-2-5-fal'], polling: { interval: 3000, maxAttempts: 420, expectedAttempts: 100 }
8
9
  },
9
10
  inputLimits: {
@@ -22,6 +23,8 @@ export const falSeedance25Model = defineModel({
22
23
  {
23
24
  id: 'falSeedance25AspectRatio', type: 'dropdown', order: 2,
24
25
  default: 'smart',
26
+ // 图生视频端点的比例只能跟随首帧(官方 aspect_ratio 只收 auto),有首帧图时不让选。
27
+ visible: { condition: (params) => params.falSeedance25Mode === 'reference-to-video' || !hasUploadedImage(params) },
25
28
  options: [
26
29
  { value: 'smart' },
27
30
  ...['21:9', '16:9', '4:3', '1:1', '3:4', '9:16'].map((value) => ({ value }))
@@ -91,7 +94,7 @@ export const falSeedance25Model = defineModel({
91
94
  duration: params.falSeedance25AutoDuration === true
92
95
  ? 'auto'
93
96
  : String(Math.min(30, Math.max(4, Math.round(Number(params.falSeedance25Duration || 5))))),
94
- aspect_ratio: raw === 'smart' && (images.length + videos.length) > 0 ? 'auto' : ratio,
97
+ aspect_ratio: (params.falSeedance25Mode !== 'reference-to-video' && images.length > 0) || (raw === 'smart' && (images.length + videos.length) > 0) ? 'auto' : ratio,
95
98
  generate_audio: params.falSeedance25GenerateAudio !== false,
96
99
  bitrate_mode: params.falSeedance25Bitrate === 'high' ? 'high' : 'standard'
97
100
  };
@@ -5,7 +5,7 @@ export const seedanceModel = defineModel({
5
5
  canonicalModelId: 'seedance-v1',
6
6
  provider: 'fal',
7
7
  type: 'video',
8
- tags: ['video', 'text-to-video', 'image-to-video'],
8
+ tags: ['text-to-video', 'image-to-video', 'start-end-frame'],
9
9
  aliases: ['fal-ai-bytedance-seedance', 'bytedance-seedance-v1']
10
10
  },
11
11
  inputLimits: {
@@ -138,7 +138,8 @@ export const seedanceModel = defineModel({
138
138
  resolution,
139
139
  camera_fixed: cameraFixed
140
140
  };
141
- if (aspectRatio && aspectRatio !== 'smart') {
141
+ // “自动”只有图生视频端点认,文生视频不发,按平台默认比例。
142
+ if (aspectRatio && aspectRatio !== 'smart' && (aspectRatio !== 'auto' || mode === 'image-to-video')) {
142
143
  requestData.aspect_ratio = aspectRatio;
143
144
  }
144
145
  if (mode === 'image-to-video' && images.length > 0) {
@@ -5,7 +5,7 @@ export const falSeedream50LiteModel = defineModel({
5
5
  meta: {
6
6
  id: 'fal-ai-seedream-5.0-lite', canonicalModelId: 'seedream-5.0-lite', seriesId: 'seedream', seriesRank: 5,
7
7
  provider: 'fal', type: 'image',
8
- tags: ['text-to-image', 'image-to-image', 'supports-image-editing', 'supports-multi-image', 'supports-4k', 'provider-fal'],
8
+ tags: ['text-to-image', 'image-to-image'],
9
9
  aliases: ['seedream-5-lite-fal'], polling: { interval: 3000, maxAttempts: 180, expectedAttempts: 35 }
10
10
  },
11
11
  inputLimits: { images: { max: 10 }, videos: { max: 0 } },
@@ -6,7 +6,7 @@ export const falSeedream50ProModel = defineModel({
6
6
  meta: {
7
7
  id: 'fal-ai-seedream-5.0-pro', canonicalModelId: 'seedream-5.0-pro', seriesId: 'seedream', seriesRank: 5.1,
8
8
  provider: 'fal', type: 'image',
9
- tags: ['text-to-image', 'image-to-image', 'supports-image-editing', 'supports-multi-image', 'provider-fal'],
9
+ tags: ['text-to-image', 'image-to-image'],
10
10
  aliases: ['seedream-5-pro-fal'], polling: { interval: 3000, maxAttempts: 180, expectedAttempts: 35 }
11
11
  },
12
12
  inputLimits: { images: { max: 10 }, videos: { max: 0 } },
@@ -37,7 +37,7 @@ export const seedreamV45Model = defineModel({
37
37
  seriesRank: 4.5,
38
38
  provider: 'fal',
39
39
  type: 'image',
40
- tags: ['image', 'text-to-image', 'image-to-image', 'supports-image-editing', 'supports-multi-image', 'max-images-10']
40
+ tags: ['text-to-image', 'image-to-image']
41
41
  },
42
42
  inputLimits: {
43
43
  images: { max: 10 },
@@ -36,7 +36,7 @@ export const seedreamV4Model = defineModel({
36
36
  seriesRank: 4.0,
37
37
  provider: 'fal',
38
38
  type: 'image',
39
- tags: ['image', 'text-to-image', 'image-to-image', 'supports-image-editing', 'supports-multi-image', 'max-images-10']
39
+ tags: ['text-to-image', 'image-to-image']
40
40
  },
41
41
  inputLimits: {
42
42
  images: { max: 10 },
@@ -11,7 +11,7 @@ export const falSeedvr2ImageUpscaleModel = defineModel({
11
11
  canonicalModelId: 'seedvr2-image-upscale',
12
12
  provider: 'fal',
13
13
  type: 'image',
14
- tags: ['image-to-image', 'upscaling', 'provider-fal'],
14
+ tags: ['upscaling'],
15
15
  polling: { interval: 3000, maxAttempts: 200, expectedAttempts: 45 },
16
16
  },
17
17
  acceptsPrompt: false,
@@ -42,7 +42,7 @@ export const falTopazImageUpscaleModel = defineModel({
42
42
  canonicalModelId: 'topaz-image-upscale',
43
43
  provider: 'fal',
44
44
  type: 'image',
45
- tags: ['image-to-image', 'upscaling', 'provider-fal'],
45
+ tags: ['upscaling'],
46
46
  polling: { interval: 3000, maxAttempts: 200, expectedAttempts: 45 },
47
47
  },
48
48
  acceptsPrompt: false,
@@ -6,7 +6,7 @@ export const falTopazTransparentUpscaleModel = defineModel({
6
6
  canonicalModelId: 'topaz-transparent-upscale',
7
7
  provider: 'fal',
8
8
  type: 'image',
9
- tags: ['image-to-image', 'upscaling', 'alpha-preserving', 'provider-fal'],
9
+ tags: ['upscaling', 'transparent-background'],
10
10
  polling: { interval: 3000, maxAttempts: 200, expectedAttempts: 45 },
11
11
  },
12
12
  acceptsPrompt: false,
@@ -0,0 +1,17 @@
1
+ /** Fal 上 Kling 4.0 与 4.0 Flash 共用的取值与计费时长换算。 */
2
+ import type { JsonObject } from '../../../types/runtime.js';
3
+ import type { ShotListLimits } from '../../shared/shotList.js';
4
+ export declare const KLING_V4_MODES: readonly ["text-image-to-video", "reference-to-video", "video-edit"];
5
+ export declare const KLING_V4_RATIOS: readonly ["16:9", "9:16", "1:1", "21:9"];
6
+ /** 单镜 1–30 秒、提示词 ≤512 字符;总和沿用不分镜时的时长范围。 */
7
+ export declare const KLING_V4_SHOT_LIMITS: ShotListLimits;
8
+ export declare function klingV4Mode(value: unknown): (typeof KLING_V4_MODES)[number];
9
+ export declare function klingV4Duration(value: unknown, max: number): number;
10
+ export declare function klingV4Prompt(params: JsonObject): string;
11
+ /** 智能比例:参考素材交给平台自适应,纯文生视频按首图比例无从参考,回退 16:9。 */
12
+ export declare function klingV4Ratio(value: unknown, adaptive: 'auto' | undefined): string | undefined;
13
+ /** 视频编辑输出默认跟随源视频长度;源视频时长未知时按 5 秒估算。 */
14
+ export declare function klingV4EditSeconds(params: JsonObject): {
15
+ source: number;
16
+ input: number;
17
+ };
@@ -0,0 +1,33 @@
1
+ /** Fal 上 Kling 4.0 与 4.0 Flash 共用的取值与计费时长换算。 */
2
+ import { resolveUploadedVideoDurationSeconds } from '../../shared/mediaPresence.js';
3
+ export const KLING_V4_MODES = ['text-image-to-video', 'reference-to-video', 'video-edit'];
4
+ export const KLING_V4_RATIOS = ['16:9', '9:16', '1:1', '21:9'];
5
+ /** 单镜 1–30 秒、提示词 ≤512 字符;总和沿用不分镜时的时长范围。 */
6
+ export const KLING_V4_SHOT_LIMITS = { maxPromptLength: 512, minShotSeconds: 1, maxShotSeconds: 30, minTotalSeconds: 3, maxTotalSeconds: 30 };
7
+ export function klingV4Mode(value) {
8
+ return KLING_V4_MODES.includes(value)
9
+ ? value
10
+ : 'text-image-to-video';
11
+ }
12
+ export function klingV4Duration(value, max) {
13
+ const number = Math.round(Number(value));
14
+ return Number.isFinite(number) ? Math.min(max, Math.max(3, number)) : 5;
15
+ }
16
+ export function klingV4Prompt(params) {
17
+ return typeof params.prompt === 'string' ? params.prompt.trim() : '';
18
+ }
19
+ /** 智能比例:参考素材交给平台自适应,纯文生视频按首图比例无从参考,回退 16:9。 */
20
+ export function klingV4Ratio(value, adaptive) {
21
+ const raw = String(value || 'smart');
22
+ if (KLING_V4_RATIOS.includes(raw))
23
+ return raw;
24
+ return adaptive;
25
+ }
26
+ /** 视频编辑输出默认跟随源视频长度;源视频时长未知时按 5 秒估算。 */
27
+ export function klingV4EditSeconds(params) {
28
+ const durations = Array.isArray(params.__videoDurationSeconds) ? params.__videoDurationSeconds : [];
29
+ const first = typeof durations[0] === 'number' && durations[0] > 0
30
+ ? durations[0]
31
+ : (typeof params.__firstVideoDurationSeconds === 'number' && params.__firstVideoDurationSeconds > 0 ? params.__firstVideoDurationSeconds : 5);
32
+ return { source: first, input: resolveUploadedVideoDurationSeconds(params, 5) };
33
+ }
@@ -5,7 +5,8 @@ export const veo31Model = defineModel({
5
5
  canonicalModelId: 'veo-3.1',
6
6
  provider: 'fal',
7
7
  type: 'video',
8
- tags: ['video', 'text-to-video', 'image-to-video']
8
+ deprecated: 'Fal 于 2026-11-17 下线 Veo 3.1,且未提供 Veo 4',
9
+ tags: ['text-to-video', 'image-to-video', 'start-end-frame', 'reference-mode']
9
10
  },
10
11
  inputLimits: {
11
12
  images: { max: 7 },
@@ -98,6 +99,8 @@ export const veo31Model = defineModel({
98
99
  id: 'falVeo31FastMode',
99
100
  order: 7,
100
101
  type: 'switch',
102
+ // 参考生视频只有标准端点,没有快速版。
103
+ visible: { condition: 'falVeo31Mode !== "reference-to-video"' },
101
104
  default: false
102
105
  },
103
106
  {
@@ -183,7 +186,7 @@ export const veo31Model = defineModel({
183
186
  currency: '$',
184
187
  calculator: (params) => {
185
188
  const duration = Number(params.falVeo31VideoDuration) || 8;
186
- const fastMode = params.falVeo31FastMode === true;
189
+ const fastMode = params.falVeo31FastMode === true && params.falVeo31Mode !== 'reference-to-video';
187
190
  const generateAudio = params.falVeo31GenerateAudio !== false;
188
191
  const rate = fastMode
189
192
  ? (generateAudio ? 0.15 : 0.1)
@@ -7,19 +7,20 @@ export const viduQ2Model = defineModel({
7
7
  seriesRank: 2,
8
8
  provider: 'fal',
9
9
  type: 'video',
10
- tags: ['video', 'text-to-video', 'image-to-video']
10
+ tags: ['text-to-video', 'image-to-video', 'reference-mode', 'video-extension']
11
11
  },
12
12
  inputLimits: {
13
13
  images: { max: 0 },
14
14
  videos: { max: 0 },
15
15
  rules: [
16
16
  {
17
+ // 图生视频与参考生视频端点官方必填图片:没图时自动切回文生视频。
17
18
  when: 'viduQ2Mode === "image-to-video"',
18
- images: { max: 1 }
19
+ images: { min: 1, max: 1 }
19
20
  },
20
21
  {
21
22
  when: 'viduQ2Mode === "reference-to-video"',
22
- images: { max: 7 }
23
+ images: { min: 1, max: 7 }
23
24
  },
24
25
  {
25
26
  when: 'viduQ2Mode === "video-extension"',
@@ -111,7 +112,11 @@ export const viduQ2Model = defineModel({
111
112
  id: 'viduQ2Bgm',
112
113
  order: 6,
113
114
  type: 'switch',
114
- default: false
115
+ default: false,
116
+ // 续写端点没有背景音乐。
117
+ visible: {
118
+ condition: 'viduQ2Mode !== "video-extension"'
119
+ }
115
120
  },
116
121
  {
117
122
  id: 'viduQ2FastMode',
@@ -155,11 +160,14 @@ export const viduQ2Model = defineModel({
155
160
  const duration = params.falViduQ2VideoDuration || 4;
156
161
  const aspectRatio = params.viduQ2AspectRatio;
157
162
  const resolution = params.viduQ2Resolution || '720p';
158
- const movementAmplitude = params.viduQ2MovementAmplitude || 'auto';
163
+ // 界面档位是低 / 中 / 高,官方取值是 small / medium / large。
164
+ const rawAmplitude = String(params.viduQ2MovementAmplitude || 'auto');
165
+ const movementAmplitude = rawAmplitude === 'low' ? 'small' : rawAmplitude === 'high' ? 'large' : rawAmplitude;
159
166
  const bgm = params.viduQ2Bgm === true;
160
167
  const videoInput = typeof params.video === 'string' ? params.video : videos[0];
161
168
  const requestData = { prompt };
162
- requestData.duration = duration;
169
+ // 续写端点只收 2–7 秒,旧状态或其他使用方传 8 秒时按 7 秒发。
170
+ requestData.duration = mode === 'video-extension' ? Math.min(7, Number(duration)) : duration;
163
171
  if (mode === 'text-to-video' || mode === 'reference-to-video') {
164
172
  if (aspectRatio && aspectRatio !== 'smart' && aspectRatio !== 'auto') {
165
173
  requestData.aspect_ratio = aspectRatio;
@@ -175,7 +183,9 @@ export const viduQ2Model = defineModel({
175
183
  if (mode !== 'video-extension') {
176
184
  requestData.movement_amplitude = movementAmplitude;
177
185
  }
178
- requestData.bgm = bgm;
186
+ // 续写端点没有背景音乐字段。
187
+ if (mode !== 'video-extension')
188
+ requestData.bgm = bgm;
179
189
  if (images.length > 0) {
180
190
  if (mode === 'reference-to-video') {
181
191
  requestData.reference_image_urls = images.slice(0, 7);
@@ -194,7 +204,9 @@ export const viduQ2Model = defineModel({
194
204
  currency: '$',
195
205
  calculator: (params) => {
196
206
  const mode = params.viduQ2Mode || 'text-to-video';
197
- const duration = Number(params.falViduQ2VideoDuration) || 4;
207
+ const chosen = Number(params.falViduQ2VideoDuration) || 4;
208
+ // 续写端点只收 2–7 秒,构建时按 7 秒发,计价跟着一致。
209
+ const duration = mode === 'video-extension' ? Math.min(7, chosen) : chosen;
198
210
  const resolution = params.viduQ2Resolution === '1080p' ? '1080p' : '720p';
199
211
  if (mode === 'video-extension') {
200
212
  return resolution === '1080p' ? 0.28 + 0.075 * duration : 0.075 * duration;
@@ -1,4 +1,5 @@
1
1
  import { defineModel } from "../defineModel.js";
2
+ import { hasUploadedImage } from '../shared/mediaPresence.js';
2
3
  export const wan25PreviewModel = defineModel({
3
4
  meta: {
4
5
  id: 'fal-ai-wan-25-preview',
@@ -7,7 +8,7 @@ export const wan25PreviewModel = defineModel({
7
8
  seriesRank: 2.5,
8
9
  provider: 'fal',
9
10
  type: 'video',
10
- tags: ['video', 'text-to-video', 'image-to-video'],
11
+ tags: ['text-to-video', 'image-to-video'],
11
12
  aliases: ['fal-ai-wan-2.5-preview', 'wan-25-preview']
12
13
  },
13
14
  inputLimits: {
@@ -29,6 +30,8 @@ export const wan25PreviewModel = defineModel({
29
30
  id: 'falWan25AspectRatio',
30
31
  order: 2,
31
32
  type: 'dropdown',
33
+ // 图生视频的比例跟随首帧,不发送。
34
+ visible: { condition: (params) => !hasUploadedImage(params) },
32
35
  default: '16:9',
33
36
  options: [
34
37
  { value: '16:9' },
@@ -0,0 +1,2 @@
1
+ export declare const falWan30Model: import("../../index.js").ModelRuntimeDefinition;
2
+ export default falWan30Model;
@@ -0,0 +1,135 @@
1
+ import { defineModel } from "../defineModel.js";
2
+ import { hasUploadedImage, resolveUploadedImageSources, resolveUploadedVideoDurationSeconds, resolveUploadedVideoSources } from "../shared/mediaPresence.js";
3
+ // 价格与字段来源:docs/model-adaptation/Wan-3.0/Wan-3.0_Fal.md(Fal 模型页与 OpenAPI,2026-11-07 读取)
4
+ const RATES = {
5
+ standard: { '480p': 0.05, '720p': 0.10, '1080p': 0.20 },
6
+ prime: { '480p': 0.068, '720p': 0.14, '1080p': 0.28 }
7
+ };
8
+ const RATIOS = ['16:9', '4:3', '1:1', '3:4', '9:16'];
9
+ function isReference(params) {
10
+ return params.falWan30Mode === 'reference-to-video';
11
+ }
12
+ function audioSources(params) {
13
+ for (const candidate of [params.uploadedAudioFilePaths, params.audios, params.uploadedAudios]) {
14
+ if (!Array.isArray(candidate))
15
+ continue;
16
+ const sources = candidate.flatMap((item) => typeof item === 'string' && item.trim() ? [item.trim()] : []);
17
+ if (sources.length > 0)
18
+ return sources;
19
+ }
20
+ return [];
21
+ }
22
+ function duration(params) {
23
+ const value = Math.round(Number(params.falWan30Duration));
24
+ return Number.isFinite(value) ? Math.min(30, Math.max(2, value)) : 5;
25
+ }
26
+ export const falWan30Model = defineModel({
27
+ meta: {
28
+ id: 'fal-ai-wan-3.0', canonicalModelId: 'wan-3.0', seriesId: 'wan', seriesRank: 3,
29
+ provider: 'fal', type: 'video',
30
+ tags: ['text-to-video', 'image-to-video', 'start-end-frame', 'reference-mode'],
31
+ polling: { interval: 3000, maxAttempts: 400, expectedAttempts: 90 }
32
+ },
33
+ inputLimits: {
34
+ images: { max: 2 }, videos: { max: 0 }, audios: { max: 0 },
35
+ rules: [{ when: 'falWan30Mode === "reference-to-video"', images: { max: 10 }, videos: { max: 5 }, audios: { max: 5 } }]
36
+ },
37
+ params: [
38
+ {
39
+ id: 'falWan30Version', type: 'dropdown', order: 1,
40
+ default: 'standard',
41
+ options: [{ value: 'standard' }, { value: 'prime' }]
42
+ },
43
+ {
44
+ id: 'falWan30Mode', type: 'dropdown', order: 2,
45
+ default: 'text-image-to-video',
46
+ options: [{ value: 'text-image-to-video' }, { value: 'reference-to-video' }]
47
+ },
48
+ {
49
+ id: 'falWan30AspectRatio', type: 'dropdown', order: 3,
50
+ default: 'smart',
51
+ options: [{ value: 'smart' }, ...RATIOS.map((value) => ({ value }))]
52
+ },
53
+ {
54
+ id: 'falWan30Resolution', type: 'dropdown', order: 4,
55
+ default: '1080p',
56
+ options: [{ value: '480p' }, { value: '720p' }, { value: '1080p' }]
57
+ },
58
+ {
59
+ id: 'falWan30Duration', type: 'number', order: 5,
60
+ default: 5, min: 2, max: 30, step: 1
61
+ },
62
+ {
63
+ id: 'falWan30GenerateAudio', type: 'switch', order: 6,
64
+ default: true
65
+ },
66
+ {
67
+ id: 'falWan30PromptExpansion', type: 'switch', order: 7,
68
+ default: true
69
+ },
70
+ {
71
+ id: 'falWan30Thinking', type: 'switch', order: 8,
72
+ default: false
73
+ }
74
+ ],
75
+ endpoints: {
76
+ selector: async (params) => {
77
+ const family = params.falWan30Version === 'prime' ? 'alibaba/wan-3.0-prime' : 'alibaba/wan-3.0';
78
+ if (isReference(params))
79
+ return `${family}/reference-to-video`;
80
+ return hasUploadedImage(params) ? `${family}/image-to-video` : `${family}/text-to-video`;
81
+ }
82
+ },
83
+ request: {
84
+ builder: (params) => {
85
+ const prompt = typeof params.prompt === 'string' ? params.prompt.trim().slice(0, 20000) : '';
86
+ const images = resolveUploadedImageSources(params);
87
+ const raw = String(params.falWan30AspectRatio || 'smart');
88
+ const body = {
89
+ resolution: ['480p', '720p'].includes(String(params.falWan30Resolution)) ? String(params.falWan30Resolution) : '1080p',
90
+ aspect_ratio: RATIOS.includes(raw) ? raw : 'adaptive',
91
+ duration: duration(params),
92
+ audio: params.falWan30GenerateAudio !== false,
93
+ enable_prompt_expansion: params.falWan30PromptExpansion !== false,
94
+ enable_thinking: params.falWan30Thinking === true
95
+ };
96
+ if (prompt)
97
+ body.prompt = prompt;
98
+ if (isReference(params)) {
99
+ const videos = resolveUploadedVideoSources(params);
100
+ const audios = audioSources(params);
101
+ if (images.length + videos.length + audios.length === 0)
102
+ throw new Error('Wan 3.0 参考生视频至少需要 1 个参考图片、视频或音频');
103
+ if (images.length > 0)
104
+ body.reference_image_urls = images.slice(0, 10);
105
+ if (videos.length > 0)
106
+ body.reference_video_urls = videos.slice(0, 5);
107
+ if (audios.length > 0)
108
+ body.reference_audio_urls = audios.slice(0, 5);
109
+ return body;
110
+ }
111
+ if (images.length > 0) {
112
+ body.start_image_url = images[0];
113
+ if (images.length > 1)
114
+ body.end_image_url = images[1];
115
+ return body;
116
+ }
117
+ if (!prompt)
118
+ throw new Error('Wan 3.0 文生视频需要填写提示词');
119
+ return body;
120
+ }
121
+ },
122
+ pricing: {
123
+ currency: '$',
124
+ calculator: (params) => {
125
+ const rates = params.falWan30Version === 'prime' ? RATES.prime : RATES.standard;
126
+ const rate = rates[String(params.falWan30Resolution)] ?? rates['1080p'];
127
+ // 参考视频的输入时长与输出时长一起计费。
128
+ // 读不到素材时长时按输出时长估,不按 0 秒低估;平台规定参考视频合计不超过 15 秒。
129
+ const inputVideo = isReference(params) ? Math.min(15, resolveUploadedVideoDurationSeconds(params, duration(params))) : 0;
130
+ return rate * (duration(params) + inputVideo);
131
+ },
132
+ description: '标准版 480p/720p/1080p $0.05/$0.10/$0.20 每秒,Prime $0.068/$0.14/$0.28 每秒;参考视频的输入时长另计'
133
+ }
134
+ });
135
+ export default falWan30Model;
@@ -1,11 +1,12 @@
1
1
  import { defineModel } from "../defineModel.js";
2
2
  import { falOneMegapixelSize } from './imageSizing.js';
3
+ import { hasUploadedImage } from '../shared/mediaPresence.js';
3
4
  const Z_IMAGE_RATIOS = ['1:1', '4:3', '3:4', '16:9', '9:16'];
4
5
  export const zImageTurboModel = defineModel({
5
6
  meta: {
6
7
  id: 'fal-ai-z-image-turbo', canonicalModelId: 'z-image-turbo', seriesId: 'z-image', seriesRank: 1,
7
8
  provider: 'fal', type: 'image',
8
- tags: ['text-to-image', 'image-to-image', 'supports-image-editing', 'supports-prompt-expansion', 'turbo-mode', 'provider-fal'],
9
+ tags: ['text-to-image', 'image-to-image'],
9
10
  aliases: ['z-image-turbo-fal'], polling: { interval: 3000, maxAttempts: 160, expectedAttempts: 30 }
10
11
  },
11
12
  inputLimits: { images: { max: 1 }, videos: { max: 0 } },
@@ -17,6 +18,9 @@ export const zImageTurboModel = defineModel({
17
18
  },
18
19
  {
19
20
  id: 'falZImageTurboResolution', type: 'dropdown', order: 2,
21
+ // 选 1MP 时尺寸固定为一百万像素;带图且比例为智能时尺寸跟随原图(auto):两种情况都不看分辨率。
22
+ visible: { condition: (params) => params.falZImageTurboImageSize !== '1MP'
23
+ && !(hasUploadedImage(params) && String(params.falZImageTurboAspectRatio || 'smart') === 'smart') },
20
24
  default: '1K',
21
25
  options: ['1K', '2K'].map((value) => ({ value }))
22
26
  },
@@ -48,12 +52,9 @@ export const zImageTurboModel = defineModel({
48
52
  },
49
53
  {
50
54
  id: 'falZImageTurboStrength', type: 'number', order: 8,
51
- default: 0.6, min: 0, max: 1, step: 0.05,
52
- visible: { condition: (params) => {
53
- const uploaded = Array.isArray(params.uploadedFilePaths) ? params.uploadedFilePaths : [];
54
- const images = uploaded.length > 0 ? uploaded : (Array.isArray(params.images) ? params.images : []);
55
- return images.length > 0;
56
- } }
55
+ // 官方取值大于 0、不超过 1。旧工程存的 0 由展示层联动在提交前改为 0.05。
56
+ default: 0.6, min: 0.05, max: 1, step: 0.05,
57
+ visible: { condition: (params) => hasUploadedImage(params) }
57
58
  }
58
59
  ],
59
60
  endpoints: {
@@ -101,7 +102,7 @@ export const zImageTurboModel = defineModel({
101
102
  };
102
103
  if (images.length > 0) {
103
104
  body.image_url = images[0];
104
- body.strength = Math.min(1, Math.max(0, Number(params.falZImageTurboStrength ?? 0.6)));
105
+ body.strength = Math.min(1, Math.max(0.05, Number(params.falZImageTurboStrength ?? 0.6)));
105
106
  }
106
107
  return body;
107
108
  }
@@ -115,7 +116,7 @@ export const zImageTurboModel = defineModel({
115
116
  const longSide = params.falZImageTurboResolution === '2K' ? 2048 : 1024;
116
117
  const width = ratio >= 1 ? longSide : longSide * ratio;
117
118
  const height = ratio >= 1 ? longSide / ratio : longSide;
118
- const megapixels = width * height / 1000000;
119
+ const megapixels = params.falZImageTurboImageSize === '1MP' ? 1 : width * height / 1000000;
119
120
  const count = Math.min(4, Math.max(1, Math.round(Number(params.falZImageTurboNumImages || 1))));
120
121
  return count * megapixels * 0.005 + (params.falZImageTurboPromptExpansion === true ? 0.0025 : 0);
121
122
  },
@@ -1,54 +1,36 @@
1
1
  import { defineModel } from '../defineModel.js';
2
- import { GPT25_RATIOS, GPT25_RESOLUTIONS, gpt25Choice, gpt25Images, gpt25Options, gpt25Prompt, gpt25Ratio } from '../shared/gptImage25.js';
3
- import { GRSAI_GPT25_SIZES } from './gptImage25Sizes.js';
2
+ import { GPT25_RATIOS, gpt25Choice, gpt25Options, gpt25Prompt, gpt25Ratio } from '../shared/gptImage25.js';
3
+ import { resolveUploadedImageSources } from '../shared/mediaPresence.js';
4
4
  const regularRatios = GPT25_RATIOS.filter(r => r !== '1:3' && r !== '3:1');
5
5
  export const grsaiGptImage25Model = defineModel({
6
6
  meta: {
7
7
  id: 'grsai-gpt-image-2.5', canonicalModelId: 'gpt-image-2.5', seriesId: 'gpt-image', seriesRank: 2.5,
8
8
  provider: 'grsai', type: 'image',
9
- tags: ['text-to-image', 'image-to-image', 'supports-image-editing', 'supports-multi-image', 'supports-4k', 'provider-grsai'],
9
+ tags: ['text-to-image', 'image-to-image'],
10
10
  polling: { interval: 3000, maxAttempts: 200 },
11
11
  },
12
- // 应用本地上限;Grsai官方未声明参考图数量上限。
13
- inputLimits: { images: { max: 16 }, videos: { max: 0 } },
12
+ // Grsai官方未声明参考图数量上限,不附加本地产品上限。
13
+ inputLimits: { images: {}, videos: { max: 0 } },
14
14
  params: [
15
- { id: 'gpt25Variant', type: 'dropdown', order: 1, default: 'standard', options: gpt25Options(['standard', 'flare', 'sunburst']) },
16
- { id: 'gpt25AspectRatio', type: 'dropdown', order: 2, default: 'smart', options: gpt25Options(['smart', ...GPT25_RATIOS]) },
17
- { id: 'gpt25Resolution', type: 'dropdown', order: 3, default: '1K', options: gpt25Options(GPT25_RESOLUTIONS), visible: { condition: p => p.gpt25Variant !== 'standard' } },
18
- { id: 'gpt25Quality', type: 'dropdown', order: 4, default: 'medium', options: gpt25Options(['low', 'medium', 'high', 'xhigh', 'max']), visible: { condition: p => p.gpt25Variant !== 'standard' } },
19
- { id: 'gpt25Transparent', type: 'switch', order: 5, default: false, visible: { condition: p => p.gpt25Variant !== 'standard' } },
15
+ { id: 'gpt25Variant', type: 'dropdown', order: 1, default: 'standard', options: gpt25Options(['standard']) },
16
+ { id: 'gpt25AspectRatio', type: 'dropdown', order: 2, default: 'smart', options: gpt25Options(['smart', ...regularRatios]) },
20
17
  ],
21
18
  endpoints: '/v1/api/generate',
22
19
  request: { builder: params => {
23
- const variant = gpt25Choice(params.gpt25Variant, ['standard', 'flare', 'sunburst'], 'standard');
24
- const standard = variant === 'standard';
25
- const resolution = standard ? '1K' : gpt25Choice(params.gpt25Resolution, GPT25_RESOLUTIONS, '1K');
26
- const candidates = standard || resolution === '2K' ? regularRatios : GPT25_RATIOS;
27
- const ratio = gpt25Ratio(params, params.gpt25AspectRatio, candidates);
28
- const size = standard ? ratio : GRSAI_GPT25_SIZES[ratio]?.[resolution];
29
- if (!size)
30
- throw new Error('该比例与分辨率组合尚无官方像素规格');
20
+ gpt25Choice(params.gpt25Variant, ['standard'], 'standard');
31
21
  const body = {
32
- model: standard ? 'gpt-image-2.5' : `gpt-image-2.5-${variant}`,
33
- prompt: gpt25Prompt(params),
34
- aspectRatio: size,
22
+ model: 'gpt-image-2.5', prompt: gpt25Prompt(params),
23
+ aspectRatio: gpt25Ratio(params, params.gpt25AspectRatio, regularRatios),
35
24
  };
36
- if (!standard) {
37
- body.quality = gpt25Choice(params.gpt25Quality, variant === 'sunburst' ? ['low', 'medium', 'high', 'xhigh', 'max'] : ['low', 'medium', 'high'], 'medium');
38
- if (params.gpt25Transparent !== undefined && typeof params.gpt25Transparent !== 'boolean')
39
- throw new Error('透明背景参数必须为布尔值');
40
- if (params.gpt25Transparent === true)
41
- body.background = 'transparent';
42
- }
43
- const images = gpt25Images(params);
25
+ const images = resolveUploadedImageSources(params);
44
26
  if (images.length)
45
27
  body.images = images;
46
28
  return body;
47
29
  } },
48
30
  pricing: {
49
31
  currency: '¥',
50
- calculator: params => ({ standard: 0.06, flare: 0.2, sunburst: 0.24 }[gpt25Choice(params.gpt25Variant, ['standard', 'flare', 'sunburst'], 'standard')] ?? 0.06),
51
- description: '每次600/2000/2400积分;基础充值档标准¥0.06、Flare¥0.20、Sunburst¥0.24;高额充值档低至¥0.03/0.10/0.12',
32
+ calculator: () => 0.06,
33
+ description: '标准渠道每次600积分;基础充值档¥0.06,高额充值档低至¥0.03',
52
34
  },
53
35
  });
54
36
  export default grsaiGptImage25Model;
@@ -0,0 +1,2 @@
1
+ export declare const grsaiGptImage26Model: import("../../index.js").ModelRuntimeDefinition;
2
+ export default grsaiGptImage26Model;
@@ -0,0 +1,37 @@
1
+ import { defineModel } from '../defineModel.js';
2
+ import { GPT25_RATIOS, gpt25Options, gpt25Ratio } from '../shared/gptImage25.js';
3
+ import { resolveUploadedImageSources } from '../shared/mediaPresence.js';
4
+ // 标准渠道只有 1K,比例格式与 GPT Image 2 同表(不含 1:3、3:1)。
5
+ const ratios = GPT25_RATIOS.filter(r => r !== '1:3' && r !== '3:1');
6
+ export const grsaiGptImage26Model = defineModel({
7
+ meta: {
8
+ id: 'grsai-gpt-image-2.6', canonicalModelId: 'gpt-image-2.6', seriesId: 'gpt-image', seriesRank: 2.6,
9
+ provider: 'grsai', type: 'image',
10
+ tags: ['text-to-image', 'image-to-image'],
11
+ polling: { interval: 3000, maxAttempts: 200 },
12
+ },
13
+ // Grsai官方未声明参考图数量上限,不附加本地产品上限。
14
+ inputLimits: { images: {}, videos: { max: 0 } },
15
+ params: [
16
+ { id: 'grsaiGpt26AspectRatio', type: 'dropdown', order: 1, default: 'smart', options: gpt25Options(['smart', ...ratios]) },
17
+ ],
18
+ endpoints: '/v1/api/generate',
19
+ request: { builder: params => {
20
+ if (typeof params.prompt !== 'string' || !params.prompt.trim())
21
+ throw new Error('请输入 GPT Image 2.6 提示词');
22
+ const body = {
23
+ model: 'gpt-image-2.6', prompt: params.prompt,
24
+ aspectRatio: gpt25Ratio(params, params.grsaiGpt26AspectRatio, ratios),
25
+ };
26
+ const images = resolveUploadedImageSources(params);
27
+ if (images.length)
28
+ body.images = images;
29
+ return body;
30
+ } },
31
+ pricing: {
32
+ currency: '¥',
33
+ calculator: () => 0.06,
34
+ description: '标准渠道每次600积分;基础充值档¥0.06,高额充值档低至¥0.03',
35
+ },
36
+ });
37
+ export default grsaiGptImage26Model;
@@ -14,7 +14,7 @@ export const grsaiGptImage2Model = defineModel({
14
14
  seriesRank: 1,
15
15
  provider: 'grsai',
16
16
  type: 'image',
17
- tags: ['text-to-image', 'image-to-image', 'supports-image-editing', 'supports-multi-image', 'supports-4k', 'provider-grsai'],
17
+ tags: ['text-to-image', 'image-to-image'],
18
18
  aliases: ['gpt-image-2-grsai'],
19
19
  polling: { interval: 3000, maxAttempts: 200, expectedAttempts: 40 }
20
20
  },
@@ -63,10 +63,13 @@ export const grsaiGptImage2Model = defineModel({
63
63
  const raw = String(params.grsaiGptImage2AspectRatio || 'smart');
64
64
  let ratio = candidateSet.includes(raw) ? raw : '1:1';
65
65
  if (raw === 'smart' || raw === 'auto' || !candidateSet.includes(raw)) {
66
+ // 智能比例贴近素材;渠道不支持的具体比例(标准渠道的 1:3 / 3:1)贴近用户选的比例本身。
67
+ const [rawWidth, rawHeight] = raw.split(':').map(Number);
68
+ const target = rawWidth > 0 && rawHeight > 0 ? rawWidth / rawHeight : hint;
66
69
  let bestDiff = Number.POSITIVE_INFINITY;
67
70
  for (const candidate of candidateSet) {
68
71
  const pair = candidate.split(':').map(Number);
69
- const diff = Math.abs(pair[0] / pair[1] - hint);
72
+ const diff = Math.abs(pair[0] / pair[1] - target);
70
73
  if (diff < bestDiff) {
71
74
  bestDiff = diff;
72
75
  ratio = candidate;