@neta-art/generation 0.1.22 → 0.1.24

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 (34) hide show
  1. package/README.md +1 -0
  2. package/dist/{builtins-B4Agk9nt.js → builtins-Bn6iOBYm.js} +51 -28
  3. package/dist/builtins-Bn6iOBYm.js.map +1 -0
  4. package/dist/{builtins-8R5iZQ10.d.ts → builtins-D0tS2UtT.d.ts} +6 -2
  5. package/dist/builtins-D0tS2UtT.d.ts.map +1 -0
  6. package/dist/builtins.d.ts +1 -1
  7. package/dist/builtins.js +1 -1
  8. package/dist/cli/index.js +2 -2
  9. package/dist/{export-config-MvqQsM_g.js → export-config-D47KgbO7.js} +304 -138
  10. package/dist/export-config-D47KgbO7.js.map +1 -0
  11. package/dist/index.d.ts +5 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +3 -3
  14. package/models/birefnet-general.yaml +1 -0
  15. package/models/gemini-3.1-flash-image-preview.yaml +1 -0
  16. package/models/gemini-3.1-flash-lite-image.yaml +1 -0
  17. package/models/gpt-image-2.yaml +1 -0
  18. package/models/kling-image-to-video.yaml +1 -0
  19. package/models/kling-multi-image-to-video.yaml +1 -0
  20. package/models/kling-omni-video.yaml +1 -0
  21. package/models/kling-text-to-video.yaml +1 -0
  22. package/models/krea2.yaml +1 -0
  23. package/models/noobxl-i2i-ipa-onediff.yaml +1 -0
  24. package/models/noobxl-t2i-onediff.yaml +1 -0
  25. package/models/qwen-image-edit.yaml +1 -0
  26. package/models/seedance-2-0-fast.yaml +1 -22
  27. package/models/seedance-2-0.yaml +1 -22
  28. package/models/suno_music_chirp_fenix.yaml +1 -0
  29. package/models/video-upscale-native.yaml +25 -0
  30. package/models/z-image-turbo.yaml +1 -0
  31. package/package.json +1 -1
  32. package/dist/builtins-8R5iZQ10.d.ts.map +0 -1
  33. package/dist/builtins-B4Agk9nt.js.map +0 -1
  34. package/dist/export-config-MvqQsM_g.js.map +0 -1
package/README.md CHANGED
@@ -437,6 +437,7 @@ neta-generation models export-all --out ./models
437
437
  schema: neta.generation.model.v1
438
438
  model: gpt-image-2
439
439
  title: GPT Image 2
440
+ category: image
440
441
  adapter:
441
442
  type: openai.images
442
443
  content:
@@ -1,5 +1,10 @@
1
1
  //#region src/types.ts
2
2
  const MODEL_SCHEMA = "neta.generation.model.v1";
3
+ const GENERATION_MODEL_CATEGORIES = [
4
+ "image",
5
+ "video",
6
+ "audio"
7
+ ];
3
8
 
4
9
  //#endregion
5
10
  //#region src/utils.ts
@@ -181,43 +186,17 @@ function seedanceVideoParameters(defaults) {
181
186
  ],
182
187
  description: "Output aspect ratio. Use adaptive to let the model choose."
183
188
  },
184
- fps: {
185
- type: "integer",
186
- optional: true,
187
- default: 30,
188
- min: 1,
189
- max: 60,
190
- description: "Frames per second."
191
- },
192
189
  seed: {
193
190
  type: "integer",
194
191
  optional: true,
195
192
  description: "Random seed for reproducibility."
196
193
  },
197
- generate_audio: {
198
- type: "boolean",
199
- optional: true,
200
- default: true,
201
- description: "Generate synchronized audio."
202
- },
203
- return_last_frame: {
204
- type: "boolean",
205
- optional: true,
206
- default: true,
207
- description: "Return the last frame as an image for chaining video segments."
208
- },
209
194
  camera_fixed: {
210
195
  type: "boolean",
211
196
  optional: true,
212
197
  default: false,
213
198
  description: "Fix camera position when supported."
214
199
  },
215
- watermark: {
216
- type: "boolean",
217
- optional: true,
218
- default: false,
219
- description: "Add AI Generated watermark."
220
- },
221
200
  poll_interval: {
222
201
  type: "integer",
223
202
  optional: true,
@@ -455,6 +434,7 @@ function sunoVersionModel(version) {
455
434
  schema: MODEL_SCHEMA,
456
435
  model: version.model,
457
436
  title: version.title,
437
+ category: "audio",
458
438
  description: "High-quality music generation model for soundtracks and background music. Produces two MP3 tracks and two JPG cover images per request.",
459
439
  adapter: {
460
440
  type: "suno.tasks",
@@ -663,6 +643,7 @@ function geminiImageModel(model, title, description, options = {}) {
663
643
  schema: MODEL_SCHEMA,
664
644
  model,
665
645
  title,
646
+ category: "image",
666
647
  description,
667
648
  adapter: { type: "gemini.generateContent" },
668
649
  content: { input: [{
@@ -853,6 +834,7 @@ const builtinModels = [
853
834
  schema: MODEL_SCHEMA,
854
835
  model: "gpt-image-2",
855
836
  title: "GPT Image 2",
837
+ category: "image",
856
838
  description: "Excels at photorealism, fine detail, text rendering, and sophisticated layouts. It accepts uploaded images as base or reference images and is particularly well suited to realistic imagery, mock website screenshots, infographics, and highly stylized, visually striking illustrations. Strong natural-language understanding and broad world knowledge help it follow complex prompts. Non-photorealistic styles may develop fine-grained texture and lighting artifacts, which can be corrected through prompt refinement or reference images. Low cost, but relatively slow.",
857
839
  adapter: { type: "openai.images" },
858
840
  content: { input: [{
@@ -889,6 +871,7 @@ const builtinModels = [
889
871
  schema: MODEL_SCHEMA,
890
872
  model: "krea2",
891
873
  title: "Krea 2",
874
+ category: "image",
892
875
  description: "Designed for visually refined image generation with broad aesthetic diversity. Strong natural-language understanding helps it follow detailed prompts. Text-only input; reference images are not supported. Relatively fast and low cost.",
893
876
  adapter: { type: "openai.images" },
894
877
  content: { input: [{
@@ -916,6 +899,7 @@ const builtinModels = [
916
899
  schema: MODEL_SCHEMA,
917
900
  model: "z-image-turbo",
918
901
  title: "Z-Image Turbo",
902
+ category: "image",
919
903
  description: "Fast text-to-image model. Z-Image Turbo accepts prompt text only and does not support reference images.",
920
904
  adapter: { type: "openai.images" },
921
905
  content: { input: [{
@@ -943,6 +927,7 @@ const builtinModels = [
943
927
  schema: MODEL_SCHEMA,
944
928
  model: "qwen-image-edit",
945
929
  title: "Qwen Image Edit",
930
+ category: "image",
946
931
  description: "Neta Qwen image editing with one source image URL and an edit instruction.",
947
932
  adapter: { type: "openai.imageEdits" },
948
933
  content: { input: [{
@@ -990,10 +975,40 @@ const builtinModels = [
990
975
  example: "1K"
991
976
  } }),
992
977
  geminiImageModel("gemini-3.1-flash-lite-image", "Gemini 3.1 Flash Lite Image", "Excels at text rendering, UI components and icons, commercial visuals, and image editing. It supports both photorealistic and non-photorealistic styles, producing clean, consistent results while preserving key features from references. Strong natural-language understanding and broad world knowledge help it follow complex prompts. This Lite variant produces fixed 1K output and is optimized for fast generation at a moderate price."),
978
+ {
979
+ schema: MODEL_SCHEMA,
980
+ model: "video-upscale-native",
981
+ title: "Video Upscale",
982
+ category: "video",
983
+ description: "Upscales a video. Recommended input: long edge under 1080 pixels.",
984
+ adapter: { type: "video.upscaleNative" },
985
+ content: { input: [{
986
+ type: "video",
987
+ required: true,
988
+ min: 1,
989
+ max: 1,
990
+ sources: ["url"],
991
+ description: "Public video URL to upscale."
992
+ }] },
993
+ examples: [{
994
+ title: "Upscale video",
995
+ request: {
996
+ model: "video-upscale-native",
997
+ content: [{
998
+ type: "video",
999
+ source: {
1000
+ type: "url",
1001
+ url: "https://example.com/input.mp4"
1002
+ }
1003
+ }]
1004
+ }
1005
+ }]
1006
+ },
993
1007
  {
994
1008
  schema: MODEL_SCHEMA,
995
1009
  model: "kling-text-to-video",
996
1010
  title: "Kling Text To Video",
1011
+ category: "video",
997
1012
  description: "One of the more affordable text-to-video models, well suited to short-form social media content and rapid creative validation.",
998
1013
  adapter: { type: "kling.videoGenerations" },
999
1014
  content: { input: [{
@@ -1029,6 +1044,7 @@ const builtinModels = [
1029
1044
  schema: MODEL_SCHEMA,
1030
1045
  model: "kling-image-to-video",
1031
1046
  title: "Kling Image To Video",
1047
+ category: "video",
1032
1048
  description: "Animates a reference image into a short video. It has the same cost as Kling text-to-video and more permissive content moderation than Seedance.",
1033
1049
  adapter: { type: "kling.videoGenerations" },
1034
1050
  content: { input: [{
@@ -1075,6 +1091,7 @@ const builtinModels = [
1075
1091
  schema: MODEL_SCHEMA,
1076
1092
  model: "kling-omni-video",
1077
1093
  title: "Kling Omni Video",
1094
+ category: "video",
1078
1095
  description: "Kling Omni-Video generation model.",
1079
1096
  adapter: { type: "kling.videoGenerations" },
1080
1097
  content: { input: [{
@@ -1143,6 +1160,7 @@ const builtinModels = [
1143
1160
  schema: MODEL_SCHEMA,
1144
1161
  model: "kling-multi-image-to-video",
1145
1162
  title: "Kling Multi-Image Reference To Video",
1163
+ category: "video",
1146
1164
  description: "Kling multi-image reference video generation model.",
1147
1165
  adapter: { type: "kling.videoGenerations" },
1148
1166
  content: { input: [{
@@ -1199,6 +1217,7 @@ const builtinModels = [
1199
1217
  schema: MODEL_SCHEMA,
1200
1218
  model: "noobxl-t2i-onediff",
1201
1219
  title: "NoobXL T2I OneDiff",
1220
+ category: "image",
1202
1221
  description: "Anime-specialized NoobXL text-to-image model for anime-style illustrations. It works best with English Danbooru tags, which can invoke specific anime characters and illustrator styles. Natural-language understanding is limited. Fast and extremely low cost.",
1203
1222
  allowUnknownParameters: true,
1204
1223
  adapter: { type: "openai.images" },
@@ -1230,6 +1249,7 @@ const builtinModels = [
1230
1249
  schema: MODEL_SCHEMA,
1231
1250
  model: "noobxl-i2i-ipa-onediff",
1232
1251
  title: "NoobXL I2I IPA OneDiff",
1252
+ category: "image",
1233
1253
  description: "Anime-specialized NoobXL image-to-image model that redraws a single uploaded image using it as a style or character reference. It works best with English Danbooru tags, which can invoke specific anime characters and illustrator styles. Natural-language understanding is limited. Fast and extremely low cost.",
1234
1254
  allowUnknownParameters: true,
1235
1255
  adapter: { type: "openai.images" },
@@ -1274,6 +1294,7 @@ const builtinModels = [
1274
1294
  schema: MODEL_SCHEMA,
1275
1295
  model: "birefnet-general",
1276
1296
  title: "BiRefNet General",
1297
+ category: "image",
1277
1298
  description: "Single-image background removal model that produces images with transparent backgrounds. Well suited to image post-processing and creating web assets. Fast and extremely low cost.",
1278
1299
  adapter: { type: "openai.images" },
1279
1300
  content: { input: [{
@@ -1308,6 +1329,7 @@ const builtinModels = [
1308
1329
  schema: MODEL_SCHEMA,
1309
1330
  model: "seedance-2-0",
1310
1331
  title: "Seedance 2.0",
1332
+ category: "video",
1311
1333
  description: "High-quality video generation model that accepts text, image, and video inputs. Supports resolutions from 480p to 2K and is well suited to final deliverables.",
1312
1334
  adapter: { type: "ark.videoGenerations" },
1313
1335
  content: { input: [
@@ -1365,6 +1387,7 @@ const builtinModels = [
1365
1387
  schema: MODEL_SCHEMA,
1366
1388
  model: "seedance-2-0-fast",
1367
1389
  title: "Seedance 2.0 Fast",
1390
+ category: "video",
1368
1391
  description: "Fast video generation model that accepts text, image, and video inputs. Faster and less expensive than seedance-2-0, making it well suited to creative validation and draft iteration.",
1369
1392
  adapter: { type: "ark.videoGenerations" },
1370
1393
  content: { input: [
@@ -1430,5 +1453,5 @@ function listBuiltinGenerationModels() {
1430
1453
  }
1431
1454
 
1432
1455
  //#endregion
1433
- export { compactArray as a, slugifyFileName as c, cloneJson as i, MODEL_SCHEMA as l, getBuiltinGenerationModel as n, compactObject as o, listBuiltinGenerationModels as r, getBlockMeta as s, builtinGenerationModels as t };
1434
- //# sourceMappingURL=builtins-B4Agk9nt.js.map
1456
+ export { compactArray as a, slugifyFileName as c, cloneJson as i, GENERATION_MODEL_CATEGORIES as l, getBuiltinGenerationModel as n, compactObject as o, listBuiltinGenerationModels as r, getBlockMeta as s, builtinGenerationModels as t, MODEL_SCHEMA as u };
1457
+ //# sourceMappingURL=builtins-Bn6iOBYm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins-Bn6iOBYm.js","names":["parameters: GenerationModelDeclaration[\"parameters\"]","input: GenerationModelDeclaration[\"content\"][\"input\"]","parameters: NonNullable<GenerationModelDeclaration[\"parameters\"]>","builtinGenerationModels: GenerationModelDeclaration[]"],"sources":["../src/types.ts","../src/utils.ts","../src/builtins.ts"],"sourcesContent":["export const MODEL_SCHEMA = \"neta.generation.model.v1\" as const;\n\nexport const GENERATION_MODEL_CATEGORIES = [\"image\", \"video\", \"audio\"] as const;\n\nexport type GenerationModelCategory = (typeof GENERATION_MODEL_CATEGORIES)[number];\n\nexport type GenerationSource = { type: \"url\"; url: string } | { type: \"base64\"; mediaType: string; data: string };\n\nexport type GenerationContentBlockMeta = Record<string, unknown>;\n\nexport type GenerationContentBlock =\n | { type: \"text\"; text: string; meta?: GenerationContentBlockMeta }\n | { type: \"image\"; source: GenerationSource; meta?: GenerationContentBlockMeta }\n | { type: \"video\"; source: GenerationSource; meta?: GenerationContentBlockMeta }\n | { type: \"audio\"; source: GenerationSource; meta?: GenerationContentBlockMeta };\n\nexport type GenerationResult = {\n content: GenerationContentBlock[];\n requestId?: string;\n cost?: number;\n};\n\nexport type GenerationContentSpec = {\n type: \"text\" | \"image\" | \"video\" | \"audio\";\n required?: boolean;\n min?: number;\n max?: number;\n sources?: Array<GenerationSource[\"type\"]>;\n roles?: string[];\n roleRequired?: boolean;\n merge?: \"newline\" | \"space\" | \"concat\";\n meta?: Record<string, unknown>;\n description?: string;\n};\n\nexport type GenerationDimensionsSpec = {\n separator?: \"x\" | \"*\";\n min?: number;\n max?: number;\n multipleOf?: number;\n};\n\nexport type GenerationParameterSpec =\n | {\n type: \"string\";\n optional?: boolean;\n default?: string;\n enum?: string[];\n dimensions?: GenerationDimensionsSpec;\n description?: string;\n examples?: string[];\n }\n | {\n type: \"number\";\n optional?: boolean;\n default?: number;\n min?: number;\n max?: number;\n description?: string;\n examples?: number[];\n }\n | {\n type: \"integer\";\n optional?: boolean;\n default?: number;\n min?: number;\n max?: number;\n description?: string;\n examples?: number[];\n }\n | {\n type: \"boolean\";\n optional?: boolean;\n default?: boolean;\n description?: string;\n examples?: boolean[];\n };\n\nexport type GenerationMetaFieldSpec =\n | GenerationParameterSpec\n | { type: \"object\"; optional?: boolean; description?: string };\n\nexport type GenerationMetaTaskVariantSpec = {\n description?: string;\n required?: string[];\n requiredContent?: Array<GenerationContentSpec[\"type\"]>;\n sendTask?: boolean;\n};\n\nexport type GenerationMetaSpec = {\n fields?: Record<string, GenerationMetaFieldSpec>;\n taskField?: string;\n taskVariants?: Record<string, GenerationMetaTaskVariantSpec>;\n};\n\nexport type GenerationModelDeclaration = {\n schema: typeof MODEL_SCHEMA;\n model: string;\n title?: string;\n /** Product catalog class. */\n category?: GenerationModelCategory;\n description?: string;\n /** Hide from default discovery while keeping exact-ID lookup and runtime use available. */\n hidden?: boolean;\n allowUnknownParameters?: boolean;\n adapter: {\n type: string;\n } & Record<string, unknown>;\n content: {\n input: GenerationContentSpec[];\n };\n parameters?: Record<string, GenerationParameterSpec>;\n meta?: GenerationMetaSpec;\n examples?: Array<{\n title?: string;\n request: GenerateRequest;\n }>;\n};\n\nexport type GenerateRequest = {\n model: string;\n content: GenerationContentBlock[];\n parameters?: Record<string, unknown>;\n meta?: Record<string, unknown>;\n /** @deprecated Use meta. */\n metadata?: Record<string, unknown>;\n apiKey?: string;\n baseUrl?: string;\n};\n\nexport type ResolvedGenerationRequest = {\n declaration: GenerationModelDeclaration;\n request: GenerateRequest;\n parameters: Record<string, unknown>;\n meta: Record<string, unknown>;\n};\n\nexport type GenerationSourceResolver = (source: GenerationSource) => Promise<string> | string;\n\nexport type GenerationDebugEvent =\n | {\n type: \"request\";\n url: string;\n method: string;\n headers: Record<string, string>;\n body?: unknown;\n }\n | {\n type: \"response\";\n url: string;\n status: number;\n statusText: string;\n headers: Record<string, string>;\n trace: Record<string, string>;\n elapsedMs: number;\n body?: unknown;\n };\n\nexport type GenerationDebugLogger = (event: GenerationDebugEvent) => void;\n\nexport type GenerationDebugOptions = {\n enabled?: boolean;\n includeSensitive?: boolean;\n includeResponseBody?: boolean;\n logger?: GenerationDebugLogger;\n};\n\nexport type GenerationDebugConfig = GenerationDebugOptions & {\n enabled: boolean;\n includeSensitive: boolean;\n includeResponseBody: boolean;\n logger: GenerationDebugLogger;\n};\n\nexport type GenerationAdapterContext = {\n apiKey: string;\n baseUrl: string;\n fetch: typeof fetch;\n resolveSource: GenerationSourceResolver;\n};\n\nexport type GenerationAdapterInput = ResolvedGenerationRequest & {\n context: GenerationAdapterContext;\n};\n\nexport type GenerationAdapter = ((input: GenerationAdapterInput) => Promise<GenerationContentBlock[]>) & {\n validate?: (input: ResolvedGenerationRequest) => void;\n};\n\nexport type CreateGenerationClientOptions = {\n apiKey?: string;\n baseUrl?: string;\n models?: GenerationModelDeclaration[];\n includeBuiltinModels?: boolean;\n fetch?: typeof fetch;\n sourceResolver?: GenerationSourceResolver;\n adapters?: Record<string, GenerationAdapter>;\n debug?: boolean | GenerationDebugOptions;\n};\n\nexport type GenerationClient = {\n /** Validates the request and sends it to the model adapter. */\n generate(request: GenerateRequest): Promise<GenerationContentBlock[]>;\n /** Resolves model defaults and all available validation rules without requiring an API key or making a network request. */\n validate(request: GenerateRequest): ResolvedGenerationRequest;\n /** Returns cloned, machine-readable declarations for every available model. */\n listModels(): GenerationModelDeclaration[];\n /** Returns a cloned model declaration, including content constraints and request examples, or null when unavailable. */\n getModel(model: string): GenerationModelDeclaration | null;\n /** Serializes one available model declaration for agents and external tools. */\n stringifyModelConfig(model: string, options?: { format?: \"yaml\" | \"json\" }): string;\n /** Writes one available model declaration to a YAML file. */\n exportModelConfig(model: string, filePath: string): Promise<void>;\n /** Writes every available model declaration to a directory as YAML files. */\n exportModelConfigs(directory: string): Promise<void>;\n};\n\nexport type GenerationClientWithResult = GenerationClient & {\n /** Generates content and returns observed request metadata such as requestId and cost when available. */\n generateResult(request: GenerateRequest): Promise<GenerationResult>;\n};\n","import type { GenerationContentBlock } from \"./types.js\";\n\nexport function cloneJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nexport function slugifyFileName(value: string): string {\n return (\n value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"model\"\n );\n}\n\nexport function getBlockMeta(block: GenerationContentBlock): Record<string, unknown> | undefined {\n return \"meta\" in block ? block.meta : undefined;\n}\n\nexport function compactArray<T>(values: T[]): T[] | undefined {\n return values.length > 0 ? values : undefined;\n}\n\nexport function compactObject<T extends Record<string, unknown>>(value: T): T {\n for (const key of Object.keys(value)) if (value[key] === undefined) delete value[key];\n return value;\n}\n","import type { GenerationModelDeclaration } from \"./types.js\";\nimport { MODEL_SCHEMA } from \"./types.js\";\nimport { cloneJson } from \"./utils.js\";\n\nconst imageSizeParameters = {\n size: {\n type: \"string\",\n optional: true,\n default: \"1024x1024\",\n description: \"Output image size.\",\n examples: [\"auto\", \"1024x1024\", \"1536x1024\", \"1024x1536\", \"2048x2048\", \"2048x1152\", \"3840x2160\", \"2160x3840\"],\n },\n quality: {\n type: \"string\",\n optional: true,\n default: \"auto\",\n enum: [\"auto\", \"low\", \"medium\", \"high\"],\n description: \"Image quality.\",\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nconst krea2ImageParameters = {\n size: {\n type: \"string\",\n optional: true,\n default: \"1024x1024\",\n description:\n \"Output image size as WIDTHxHEIGHT. Both dimensions must be between 256 and 1024 and must be multiples of 16.\",\n dimensions: { min: 256, max: 1024, multipleOf: 16 },\n examples: [\"1024x1024\", \"1024x768\", \"768x1024\", \"768x768\", \"512x512\", \"256x256\"],\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nconst zImageTurboParameters = {\n size: {\n type: \"string\",\n optional: true,\n default: \"1024*1024\",\n enum: [\"1024*1024\", \"1536*1024\", \"1024*1536\", \"2048*2048\"],\n description: \"Output image size.\",\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nconst qwenImageEditParameters = {\n size: {\n type: \"string\",\n optional: true,\n default: \"1024x1024\",\n description: \"Output image size.\",\n examples: [\"1024x1024\", \"768x1024\", \"1024x768\"],\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nconst noobxlImageParameters = {\n size: {\n type: \"string\",\n optional: true,\n default: \"1024x1024\",\n enum: [\"1024x1024\", \"896x1152\", \"1152x896\", \"1344x768\", \"768x1344\"],\n description: \"Output image size.\",\n },\n negative_prompt: {\n type: \"string\",\n optional: true,\n description: \"Content to avoid in generated images.\",\n },\n seed: {\n type: \"integer\",\n optional: true,\n min: 0,\n description: \"Random seed for reproducibility.\",\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nconst noobxlImageToImageParameters = {\n ...noobxlImageParameters,\n controlnet_weight: {\n type: \"number\",\n optional: true,\n min: 0,\n max: 2,\n description: \"ControlNet tile weight. The provider default is 0.8.\",\n },\n ipadapter_face_image_ref: {\n type: \"string\",\n optional: true,\n description: \"Optional face reference image URL for IP-Adapter.\",\n },\n ipadapter_face_weight: {\n type: \"number\",\n optional: true,\n min: 0,\n max: 2,\n description: \"IP-Adapter face weight. The provider default is 0.6 when a face reference is supplied.\",\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nfunction seedanceVideoParameters(defaults: { resolution: string; resolutions?: string[]; maxWait: number }) {\n return {\n duration: {\n type: \"integer\",\n optional: true,\n default: 5,\n min: 4,\n max: 15,\n description: \"Video duration in seconds.\",\n },\n resolution: {\n type: \"string\",\n optional: true,\n default: defaults.resolution,\n enum: defaults.resolutions ?? [\"480p\", \"720p\", \"1080p\", \"2K\"],\n description: \"Output video resolution.\",\n },\n ratio: {\n type: \"string\",\n optional: true,\n default: \"16:9\",\n enum: [\"16:9\", \"9:16\", \"1:1\", \"4:3\", \"3:2\", \"2:3\", \"3:4\", \"21:9\", \"adaptive\"],\n description: \"Output aspect ratio. Use adaptive to let the model choose.\",\n },\n seed: { type: \"integer\", optional: true, description: \"Random seed for reproducibility.\" },\n camera_fixed: {\n type: \"boolean\",\n optional: true,\n default: false,\n description: \"Fix camera position when supported.\",\n },\n poll_interval: {\n type: \"integer\",\n optional: true,\n default: 2,\n min: 1,\n max: 30,\n description: \"Seconds between task status checks.\",\n },\n max_wait: {\n type: \"integer\",\n optional: true,\n default: defaults.maxWait,\n min: 30,\n max: 1800,\n description: \"Maximum seconds to wait for task completion.\",\n },\n } satisfies GenerationModelDeclaration[\"parameters\"];\n}\n\nfunction klingVideoParameters(options: {\n maxDuration: number;\n negativePrompt?: boolean;\n seed?: boolean;\n sound?: boolean;\n}) {\n const parameters: GenerationModelDeclaration[\"parameters\"] = {\n duration: {\n type: \"integer\",\n optional: true,\n default: 5,\n min: 5,\n max: options.maxDuration,\n description: \"Video duration in seconds.\",\n },\n aspect_ratio: {\n type: \"string\",\n optional: true,\n default: \"16:9\",\n enum: [\"16:9\", \"9:16\", \"1:1\"],\n description: \"Output aspect ratio.\",\n },\n mode: {\n type: \"string\",\n optional: true,\n default: \"std\",\n enum: [\"std\", \"pro\"],\n description: \"Kling generation mode.\",\n },\n cfg_scale: {\n type: \"number\",\n optional: true,\n default: 0.5,\n min: 0,\n max: 1,\n description: \"Prompt adherence scale.\",\n },\n poll_interval: {\n type: \"integer\",\n optional: true,\n default: 5,\n min: 1,\n max: 30,\n description: \"Seconds between task status checks.\",\n },\n max_wait: {\n type: \"integer\",\n optional: true,\n default: 900,\n min: 30,\n max: 1800,\n description: \"Maximum seconds to wait for task completion.\",\n },\n };\n if (options.negativePrompt) {\n parameters.negative_prompt = {\n type: \"string\",\n optional: true,\n description: \"Negative prompt.\",\n };\n }\n if (options.seed) {\n parameters.seed = {\n type: \"integer\",\n optional: true,\n description: \"Random seed for reproducibility.\",\n };\n }\n if (options.sound) {\n parameters.sound = {\n type: \"string\",\n optional: true,\n enum: [\"on\", \"off\"],\n description: \"Enable or disable generated sound when supported.\",\n };\n }\n return parameters;\n}\n\nconst sunoTaskParameters = {\n poll_interval: {\n type: \"integer\",\n optional: true,\n default: 5,\n min: 1,\n max: 60,\n description: \"Seconds between task status checks.\",\n },\n max_wait: {\n type: \"integer\",\n optional: true,\n default: 600,\n min: 30,\n max: 3600,\n description: \"Maximum seconds to wait for task completion.\",\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nconst sunoCommonMetaFields = {\n title: { type: \"string\", optional: true, description: \"Suno song title.\" },\n tags: { type: \"string\", optional: true, description: \"Comma-separated Suno music style tags.\" },\n gpt_description_prompt: { type: \"string\", optional: true, description: \"Suno inspiration-mode prompt.\" },\n negative_tags: { type: \"string\", optional: true, description: \"Styles to avoid.\" },\n generation_type: { type: \"string\", optional: true, description: \"Suno generation type.\" },\n make_instrumental: { type: \"boolean\", optional: true, default: false, description: \"Generate instrumental music.\" },\n metadata: { type: \"object\", optional: true, description: \"Suno provider metadata payload.\" },\n metadata_params: {\n type: \"object\",\n optional: true,\n description: \"Suno task-specific metadata payload.\",\n },\n} satisfies NonNullable<GenerationModelDeclaration[\"meta\"]>[\"fields\"];\n\nconst sunoTaskVariants = {\n extend: { required: [\"continue_clip_id\"] },\n upload_extend: { required: [\"continue_clip_id\"] },\n infill: { required: [\"continue_clip_id\", \"metadata_params\"] },\n fixed_infill: { required: [\"continue_clip_id\", \"metadata_params\"] },\n infill_intro: { required: [\"continue_clip_id\", \"metadata_params\"] },\n infill_outro: { required: [\"continue_clip_id\", \"metadata_params\"] },\n cover_infill: { required: [\"continue_clip_id\", \"metadata_params\"] },\n cover_extend: { required: [\"continue_clip_id\"] },\n artist_infill: { required: [\"continue_clip_id\", \"metadata_params\"] },\n artist_consistency: { required: [\"persona_id\", \"artist_clip_id\"] },\n cover: { required: [\"task_id\", \"continue_clip_id\"] },\n image_to_song: { requiredContent: [\"image\"], required: [\"metadata_params\"] },\n video_to_song: { requiredContent: [\"video\"], required: [\"metadata_params\"] },\n concat: { required: [\"clip_id\"] },\n sound: { required: [\"metadata_params\"] },\n underpainting: { required: [\"metadata_params\"] },\n overpainting: { required: [\"metadata_params\"] },\n remaster: { required: [\"metadata_params\"] },\n vox: { required: [\"artist_clip_id\"] },\n chop_sample_condition: { required: [\"metadata_params\"] },\n mashup_condition: { required: [\"metadata_params\"] },\n playlist_condition: { required: [\"metadata_params\"] },\n} satisfies NonNullable<GenerationModelDeclaration[\"meta\"]>[\"taskVariants\"];\n\nfunction sunoContentInput(\n options: { text?: \"required\" | \"optional\" | \"none\"; audio?: boolean; image?: boolean; video?: boolean } = {},\n): GenerationModelDeclaration[\"content\"][\"input\"] {\n const input: GenerationModelDeclaration[\"content\"][\"input\"] = [];\n if (options.text !== \"none\") {\n input.push({\n type: \"text\",\n required: options.text === \"required\",\n max: 16,\n merge: \"newline\",\n description:\n \"Prompt text. The adapter maps merged text to the operation's text field when that field is not provided.\",\n });\n }\n if (options.audio) {\n input.push({\n type: \"audio\",\n required: true,\n max: 1,\n sources: [\"url\", \"base64\"],\n description: \"Reference audio.\",\n });\n }\n if (options.image) {\n input.push({\n type: \"image\",\n required: true,\n max: 1,\n sources: [\"url\", \"base64\"],\n description: \"Reference image.\",\n });\n }\n if (options.video) {\n input.push({\n type: \"video\",\n required: true,\n max: 1,\n sources: [\"url\", \"base64\"],\n description: \"Reference video.\",\n });\n }\n return input;\n}\n\nconst sunoVersions = [\n { model: \"suno_music_chirp_fenix\", title: \"Suno Music Chirp Fenix v5.5\", mv: \"chirp-fenix\" },\n] as const;\n\nconst sunoMusicExample = {\n title: \"Music generation\",\n request: {\n model: \"suno_music_chirp_fenix\",\n content: [{ type: \"text\", text: \"uplifting cinematic pop with warm piano and clear chorus\" }],\n meta: {\n title: \"Warm Horizon\",\n tags: \"cinematic pop, warm piano\",\n make_instrumental: false,\n },\n },\n} satisfies NonNullable<GenerationModelDeclaration[\"examples\"]>[number];\n\nfunction sunoVersionModel(version: (typeof sunoVersions)[number]): GenerationModelDeclaration {\n return {\n schema: MODEL_SCHEMA,\n model: version.model,\n title: version.title,\n category: \"audio\",\n description:\n \"High-quality music generation model for soundtracks and background music. Produces two MP3 tracks and two JPG cover images per request.\",\n adapter: { type: \"suno.tasks\", operation: \"music\", payload: { mv: version.mv } },\n content: {\n input: sunoContentInput({ text: \"required\" }),\n },\n parameters: sunoTaskParameters,\n meta: {\n fields: sunoCommonMetaFields,\n },\n ...(version.model === \"suno_music_chirp_fenix\" ? { examples: [sunoMusicExample] } : {}),\n };\n}\n\nfunction sunoTaskModel(options: {\n model: string;\n title: string;\n description: string;\n task: string;\n mv?: string;\n content?: Parameters<typeof sunoContentInput>[0];\n fields?: NonNullable<GenerationModelDeclaration[\"meta\"]>[\"fields\"];\n examples?: GenerationModelDeclaration[\"examples\"];\n}): GenerationModelDeclaration {\n return {\n schema: MODEL_SCHEMA,\n model: options.model,\n title: options.title,\n description: options.description,\n adapter: {\n type: \"suno.tasks\",\n operation: \"music\",\n task: options.task,\n payload: { mv: options.mv ?? \"chirp-v5\" },\n },\n content: {\n input: sunoContentInput(options.content ?? { text: \"optional\" }),\n },\n parameters: sunoTaskParameters,\n meta: {\n fields: {\n ...sunoCommonMetaFields,\n ...options.fields,\n },\n taskVariants: sunoTaskVariants,\n },\n ...(options.examples ? { examples: options.examples } : {}),\n };\n}\n\nconst sunoModels = [\n ...sunoVersions.map(sunoVersionModel),\n {\n schema: MODEL_SCHEMA,\n model: \"suno_style_tags\",\n title: \"Suno Style Tags\",\n description: \"Suno style tag upsampling model.\",\n adapter: { type: \"suno.tasks\", operation: \"upsample_tags\" },\n content: {\n input: sunoContentInput({ text: \"required\" }),\n },\n },\n {\n schema: MODEL_SCHEMA,\n model: \"suno_upload_audio\",\n title: \"Suno Upload Audio\",\n description: \"Suno reference-audio upload model.\",\n adapter: { type: \"suno.tasks\", operation: \"upload_audio\", defaults: { name: \"reference-audio\", timeout: 120 } },\n content: {\n input: sunoContentInput({ text: \"none\", audio: true }),\n },\n parameters: sunoTaskParameters,\n meta: {\n fields: {\n name: { type: \"string\", optional: true, description: \"Upload name.\" },\n timeout: { type: \"integer\", optional: true, description: \"Upload timeout in seconds.\" },\n },\n },\n },\n sunoTaskModel({\n model: \"suno_image_to_song_chirp_v5\",\n title: \"Suno Image to Song Chirp v5.0\",\n description: \"Suno image-to-song task with a fixed chirp-v5 engine.\",\n task: \"image_to_song\",\n content: { text: \"optional\", image: true },\n fields: {\n metadata_params: { type: \"object\", description: \"Image-to-song metadata payload.\" },\n },\n }),\n sunoTaskModel({\n model: \"suno_video_to_song_chirp_v5\",\n title: \"Suno Video to Song Chirp v5.0\",\n description: \"Suno video-to-song task with a fixed chirp-v5 engine.\",\n task: \"video_to_song\",\n content: { text: \"optional\", video: true },\n fields: {\n metadata_params: { type: \"object\", description: \"Video-to-song metadata payload.\" },\n },\n }),\n sunoTaskModel({\n model: \"suno_sound_chirp_v5\",\n title: \"Suno Sound Chirp v5.0\",\n description: \"Suno sound-effect generation task with a fixed chirp-v5 engine.\",\n task: \"sound\",\n content: { text: \"optional\" },\n fields: {\n metadata_params: { type: \"object\", description: \"Sound task metadata payload.\" },\n },\n }),\n sunoTaskModel({\n model: \"suno_cover_chirp_v5\",\n title: \"Suno Cover Chirp v5.0\",\n description: \"Suno cover task with a fixed chirp-v5 engine.\",\n task: \"cover\",\n content: { text: \"optional\" },\n fields: {\n cover_clip_id: { type: \"string\", description: \"Clip id to cover.\" },\n task_id: { type: \"string\", description: \"Source Suno task id used for cover routing.\" },\n continue_clip_id: { type: \"string\", description: \"Source clip id used for cover generation.\" },\n continue_at: { type: \"number\", optional: true, description: \"Source clip continuation position in seconds.\" },\n },\n }),\n sunoTaskModel({\n model: \"suno_infill_chirp_v5\",\n title: \"Suno Infill Chirp v5.0\",\n description: \"Suno local edit task with a fixed chirp-v5 engine.\",\n task: \"infill\",\n content: { text: \"optional\" },\n fields: {\n continue_clip_id: { type: \"string\", description: \"Clip id to edit.\" },\n metadata_params: { type: \"object\", description: \"Infill timing and replacement metadata.\" },\n },\n }),\n sunoTaskModel({\n model: \"suno_vox_chirp_v5\",\n title: \"Suno Vox Chirp v5.0\",\n description: \"Suno hum-to-song task with a fixed chirp-v5 engine.\",\n task: \"vox\",\n content: { text: \"optional\" },\n fields: {\n artist_clip_id: { type: \"string\", description: \"Reference hum or vocal clip id.\" },\n },\n }),\n] satisfies GenerationModelDeclaration[];\n\ntype GeminiImageModelOptions = {\n imageSize?: {\n default: string;\n values: string[];\n example: string;\n };\n};\n\nfunction geminiImageModel(\n model: string,\n title: string,\n description: string,\n options: GeminiImageModelOptions = {},\n): GenerationModelDeclaration {\n const parameters: NonNullable<GenerationModelDeclaration[\"parameters\"]> = {\n aspect_ratio: {\n type: \"string\",\n optional: true,\n default: \"1:1\",\n enum: [\"1:1\", \"16:9\", \"4:3\", \"3:2\", \"3:4\", \"2:3\", \"9:16\", \"5:4\", \"4:5\", \"21:9\", \"1:4\", \"4:1\", \"1:8\", \"8:1\"],\n description: \"Output aspect ratio.\",\n },\n };\n if (options.imageSize) {\n parameters.image_size = {\n type: \"string\",\n optional: true,\n default: options.imageSize.default,\n enum: options.imageSize.values,\n description: \"Output image resolution.\",\n };\n }\n\n return {\n schema: MODEL_SCHEMA,\n model,\n title,\n category: \"image\",\n description,\n adapter: { type: \"gemini.generateContent\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Prompt text.\" },\n {\n type: \"image\",\n required: false,\n max: 14,\n sources: [\"url\", \"base64\"],\n description: \"Optional reference images.\",\n },\n ],\n },\n parameters,\n examples: [\n {\n title: \"Basic image\",\n request: {\n model,\n content: [\n { type: \"text\", text: \"a vibrant infographic explaining photosynthesis with clear readable labels\" },\n ],\n parameters: {\n aspect_ratio: \"16:9\",\n ...(options.imageSize ? { image_size: options.imageSize.example } : {}),\n },\n },\n },\n ],\n };\n}\n\nfunction qwenTtsModel(\n model: string,\n title: string,\n description: string,\n options: { minimumTextCodePoints?: number } = {},\n): GenerationModelDeclaration {\n const text = options.minimumTextCodePoints\n ? \"这是一段长度足够并且表达清晰自然的语音合成测试文本。\"\n : \"这是一次清晰自然的语音合成测试。\";\n return {\n schema: MODEL_SCHEMA,\n model,\n title,\n description,\n adapter: { type: \"openai.audioSpeech\" },\n content: {\n input: [\n {\n type: \"text\",\n required: true,\n min: 1,\n max: 1,\n description: options.minimumTextCodePoints\n ? `Exactly one non-empty text block to speak, with at least ${options.minimumTextCodePoints} Unicode code points.`\n : \"Exactly one non-empty text block to speak.\",\n },\n {\n type: \"audio\",\n required: false,\n max: 1,\n sources: [\"url\"],\n description: \"Clone: one URL; no voice_prompt. Dependency: use prior generated audio.\",\n },\n ],\n },\n meta: {\n fields: {\n voice_prompt: {\n type: \"string\",\n optional: true,\n description: \"Design: custom voice text; no reference audio.\",\n },\n },\n },\n examples: [\n {\n title: \"Voice design\",\n request: {\n model,\n content: [{ type: \"text\", text }],\n meta: { voice_prompt: \"一位沉稳干练的男性播音员声音,吐字清晰有力\" },\n },\n },\n {\n title: \"Voice clone\",\n request: {\n model,\n content: [\n { type: \"text\", text },\n { type: \"audio\", source: { type: \"url\", url: \"https://example.com/reference.mp3\" } },\n ],\n },\n },\n ],\n };\n}\n\nconst audioSpeechModels = [\n qwenTtsModel(\n \"qwen-tts\",\n \"Qwen TTS\",\n \"Modes: voice_prompt design OR one-reference clone. Default: unspecified Qwen design. Text: any length. Conflict: ask user; never combine/reinterpret. Dependency: clone prior generated audio.\",\n ),\n qwenTtsModel(\n \"qwen-audio-3.0-tts-plus\",\n \"Qwen Audio 3.0 TTS Plus\",\n \"Modes: voice_prompt design OR one-reference clone. Text: >=15 Unicode code points. Conflict: ask user; never combine/reinterpret. Dependency: clone prior generated audio.\",\n { minimumTextCodePoints: 15 },\n ),\n qwenTtsModel(\n \"qwen-audio-3.0-tts-flash\",\n \"Qwen Audio 3.0 TTS Flash\",\n \"Modes: voice_prompt design OR one-reference clone. Text: >=15 Unicode code points. Conflict: ask user; never combine/reinterpret. Dependency: clone prior generated audio.\",\n { minimumTextCodePoints: 15 },\n ),\n {\n schema: MODEL_SCHEMA,\n model: \"higgs-tts\",\n title: \"Higgs TTS\",\n description:\n \"Modes: built-in; one-reference high-fidelity clone; weighted 2-16-reference blend. Default: delegated generic voice (natural/suitable). Blend: all references, full text, one request. Conflict: clone + redesign; ask user, do not reinterpret. Dependency: clone prior generated audio.\",\n adapter: { type: \"openai.audioSpeech\" },\n content: {\n input: [\n {\n type: \"text\",\n required: true,\n min: 1,\n max: 1,\n description: \"Exactly one non-empty text block to speak.\",\n },\n {\n type: \"audio\",\n required: false,\n max: 16,\n sources: [\"url\"],\n description:\n \"Reference: one may omit weight; 2-16 require positive finite weights. Dependency: use prior generated audio.\",\n },\n ],\n },\n examples: [\n {\n title: \"Default voice\",\n request: {\n model: \"higgs-tts\",\n content: [{ type: \"text\", text: \"使用默认音色朗读这段文本。\" }],\n },\n },\n {\n title: \"Single reference\",\n request: {\n model: \"higgs-tts\",\n content: [\n { type: \"text\", text: \"使用单条参考音频朗读这段文本。\" },\n { type: \"audio\", source: { type: \"url\", url: \"https://example.com/reference.mp3\" } },\n ],\n },\n },\n {\n title: \"Weighted single reference\",\n request: {\n model: \"higgs-tts\",\n content: [\n { type: \"text\", text: \"使用带权重的单条参考音频朗读这段文本。\" },\n {\n type: \"audio\",\n source: { type: \"url\", url: \"https://example.com/reference.mp3\" },\n meta: { weight: 1 },\n },\n ],\n },\n },\n {\n title: \"Multiple references\",\n request: {\n model: \"higgs-tts\",\n content: [\n { type: \"text\", text: \"使用多参考融合音色朗读这段文本。\" },\n {\n type: \"audio\",\n source: { type: \"url\", url: \"https://example.com/reference-a.mp3\" },\n meta: { weight: 0.5 },\n },\n {\n type: \"audio\",\n source: { type: \"url\", url: \"https://example.com/reference-b.mp3\" },\n meta: { weight: 0.5 },\n },\n ],\n },\n },\n ],\n },\n] satisfies GenerationModelDeclaration[];\n\nconst builtinModels = [\n ...audioSpeechModels,\n {\n schema: MODEL_SCHEMA,\n model: \"gpt-image-2\",\n title: \"GPT Image 2\",\n category: \"image\",\n description:\n \"Excels at photorealism, fine detail, text rendering, and sophisticated layouts. It accepts uploaded images as base or reference images and is particularly well suited to realistic imagery, mock website screenshots, infographics, and highly stylized, visually striking illustrations. Strong natural-language understanding and broad world knowledge help it follow complex prompts. Non-photorealistic styles may develop fine-grained texture and lighting artifacts, which can be corrected through prompt refinement or reference images. Low cost, but relatively slow.\",\n adapter: { type: \"openai.images\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Prompt text.\" },\n {\n type: \"image\",\n required: false,\n max: 16,\n sources: [\"url\", \"base64\"],\n description: \"Optional reference images.\",\n },\n ],\n },\n parameters: imageSizeParameters,\n examples: [\n {\n title: \"Basic image\",\n request: {\n model: \"gpt-image-2\",\n content: [{ type: \"text\", text: \"a cyberpunk cat in neon rain\" }],\n parameters: { size: \"1024x1024\", quality: \"auto\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"krea2\",\n title: \"Krea 2\",\n category: \"image\",\n description:\n \"Designed for visually refined image generation with broad aesthetic diversity. Strong natural-language understanding helps it follow detailed prompts. Text-only input; reference images are not supported. Relatively fast and low cost.\",\n adapter: { type: \"openai.images\" },\n content: {\n input: [{ type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Prompt text.\" }],\n },\n parameters: krea2ImageParameters,\n examples: [\n {\n title: \"Text-to-image\",\n request: {\n model: \"krea2\",\n content: [{ type: \"text\", text: \"an elegant editorial portrait with sculptural lighting\" }],\n parameters: { size: \"1024x1024\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"z-image-turbo\",\n title: \"Z-Image Turbo\",\n category: \"image\",\n description:\n \"Fast text-to-image model. Z-Image Turbo accepts prompt text only and does not support reference images.\",\n adapter: { type: \"openai.images\" },\n content: {\n input: [{ type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Prompt text.\" }],\n },\n parameters: zImageTurboParameters,\n examples: [\n {\n title: \"Text to image\",\n request: {\n model: \"z-image-turbo\",\n content: [\n { type: \"text\", text: \"a clean product-style image of a small red toy robot standing on a white desk\" },\n ],\n parameters: { size: \"1024*1024\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"qwen-image-edit\",\n title: \"Qwen Image Edit\",\n category: \"image\",\n description: \"Neta Qwen image editing with one source image URL and an edit instruction.\",\n adapter: { type: \"openai.imageEdits\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Edit instruction.\" },\n {\n type: \"image\",\n required: true,\n min: 1,\n max: 1,\n sources: [\"url\"],\n description: \"Source image URL to edit.\",\n },\n ],\n },\n parameters: qwenImageEditParameters,\n examples: [\n {\n title: \"Edit image\",\n request: {\n model: \"qwen-image-edit\",\n content: [\n { type: \"text\", text: \"change the background to a clean white studio backdrop\" },\n { type: \"image\", source: { type: \"url\", url: \"https://example.com/input.png\" } },\n ],\n parameters: { size: \"1024x1024\" },\n },\n },\n ],\n },\n geminiImageModel(\n \"gemini-3.1-flash-image-preview\",\n \"Gemini 3.1 Flash Image Preview\",\n \"Excels at text rendering, UI components and icons, commercial visuals, and image editing. It handles both photorealistic and non-photorealistic styles reliably, producing clean, consistent images while preserving key features from references. Strong natural-language understanding and broad world knowledge help it follow complex prompts. Its images are generally less expressive than those from gpt-image-2, and its style-transfer capabilities are weaker. Moderate speed, but relatively expensive.\",\n { imageSize: { default: \"2K\", values: [\"512\", \"1K\", \"2K\", \"4K\"], example: \"1K\" } },\n ),\n geminiImageModel(\n \"gemini-3.1-flash-lite-image\",\n \"Gemini 3.1 Flash Lite Image\",\n \"Excels at text rendering, UI components and icons, commercial visuals, and image editing. It supports both photorealistic and non-photorealistic styles, producing clean, consistent results while preserving key features from references. Strong natural-language understanding and broad world knowledge help it follow complex prompts. This Lite variant produces fixed 1K output and is optimized for fast generation at a moderate price.\",\n ),\n {\n schema: MODEL_SCHEMA,\n model: \"video-upscale-native\",\n title: \"Video Upscale\",\n category: \"video\",\n description: \"Upscales a video. Recommended input: long edge under 1080 pixels.\",\n adapter: { type: \"video.upscaleNative\" },\n content: {\n input: [\n {\n type: \"video\",\n required: true,\n min: 1,\n max: 1,\n sources: [\"url\"],\n description: \"Public video URL to upscale.\",\n },\n ],\n },\n examples: [\n {\n title: \"Upscale video\",\n request: {\n model: \"video-upscale-native\",\n content: [{ type: \"video\", source: { type: \"url\", url: \"https://example.com/input.mp4\" } }],\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"kling-text-to-video\",\n title: \"Kling Text To Video\",\n category: \"video\",\n description:\n \"One of the more affordable text-to-video models, well suited to short-form social media content and rapid creative validation.\",\n adapter: { type: \"kling.videoGenerations\" },\n content: {\n input: [{ type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Video prompt.\" }],\n },\n parameters: klingVideoParameters({ maxDuration: 10, negativePrompt: true, seed: true }),\n examples: [\n {\n title: \"Text to video\",\n request: {\n model: \"kling-text-to-video\",\n content: [{ type: \"text\", text: \"a small paper boat floating on calm water, cinematic motion\" }],\n parameters: { duration: 5, aspect_ratio: \"16:9\", mode: \"std\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"kling-image-to-video\",\n title: \"Kling Image To Video\",\n category: \"video\",\n description:\n \"Animates a reference image into a short video. It has the same cost as Kling text-to-video and more permissive content moderation than Seedance.\",\n adapter: { type: \"kling.videoGenerations\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Video prompt.\" },\n {\n type: \"image\",\n required: false,\n max: 2,\n sources: [\"url\", \"base64\"],\n description:\n \"First frame and optional tail frame image input. Provider-native image input may be passed in meta.\",\n },\n ],\n },\n parameters: klingVideoParameters({ maxDuration: 10, negativePrompt: true, seed: true }),\n examples: [\n {\n title: \"Image to video\",\n request: {\n model: \"kling-image-to-video\",\n content: [\n { type: \"text\", text: \"gently turn toward the camera with soft natural motion\" },\n { type: \"image\", source: { type: \"url\", url: \"https://example.com/input.png\" } },\n ],\n parameters: { duration: 5, aspect_ratio: \"16:9\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"kling-omni-video\",\n title: \"Kling Omni Video\",\n category: \"video\",\n description: \"Kling Omni-Video generation model.\",\n adapter: { type: \"kling.videoGenerations\" },\n content: {\n input: [\n {\n type: \"text\",\n required: false,\n max: 16,\n merge: \"newline\",\n description: \"Optional video prompt. Use Kling Omni placeholders such as <<<image_1>>> with image_list.\",\n },\n {\n type: \"image\",\n required: false,\n max: 2,\n sources: [\"url\", \"base64\"],\n description: \"Optional simple image input. Provider-native Omni media arrays belong in request meta.\",\n },\n ],\n },\n parameters: klingVideoParameters({ maxDuration: 15, sound: true }),\n meta: {\n fields: {\n multi_shot: {\n type: \"boolean\",\n optional: true,\n description: \"Enable Kling Omni multi-shot mode.\",\n },\n shot_type: {\n type: \"string\",\n optional: true,\n description: \"Kling Omni shot type.\",\n },\n },\n },\n examples: [\n {\n title: \"Omni text to video\",\n request: {\n model: \"kling-omni-video\",\n content: [{ type: \"text\", text: \"a small paper boat floating on calm water, cinematic motion\" }],\n parameters: { duration: 5, aspect_ratio: \"16:9\", mode: \"std\" },\n },\n },\n {\n title: \"Omni image to video\",\n request: {\n model: \"kling-omni-video\",\n content: [{ type: \"text\", text: \"<<<image_1>>> gently turns toward the camera with soft natural motion\" }],\n parameters: { duration: 5, aspect_ratio: \"16:9\" },\n meta: {\n image_list: [{ image_url: \"https://example.com/input.png\", type: \"first_frame\" }],\n },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"kling-multi-image-to-video\",\n title: \"Kling Multi-Image Reference To Video\",\n category: \"video\",\n description: \"Kling multi-image reference video generation model.\",\n adapter: { type: \"kling.videoGenerations\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Video prompt.\" },\n {\n type: \"image\",\n required: false,\n max: 4,\n sources: [\"url\", \"base64\"],\n description: \"Reference image inputs. Provider-native image_list input may be passed in meta.\",\n },\n ],\n },\n parameters: klingVideoParameters({ maxDuration: 10, negativePrompt: true, seed: true }),\n examples: [\n {\n title: \"Multi-image reference to video\",\n request: {\n model: \"kling-multi-image-to-video\",\n content: [\n { type: \"text\", text: \"combine the references into one cinematic shot\" },\n { type: \"image\", source: { type: \"url\", url: \"https://example.com/reference-1.png\" } },\n { type: \"image\", source: { type: \"url\", url: \"https://example.com/reference-2.png\" } },\n ],\n parameters: { duration: 5, aspect_ratio: \"16:9\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"noobxl-t2i-onediff\",\n title: \"NoobXL T2I OneDiff\",\n category: \"image\",\n description:\n \"Anime-specialized NoobXL text-to-image model for anime-style illustrations. It works best with English Danbooru tags, which can invoke specific anime characters and illustrator styles. Natural-language understanding is limited. Fast and extremely low cost.\",\n allowUnknownParameters: true,\n adapter: { type: \"openai.images\" },\n content: {\n input: [{ type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Prompt text.\" }],\n },\n parameters: noobxlImageParameters,\n examples: [\n {\n title: \"Text to image\",\n request: {\n model: \"noobxl-t2i-onediff\",\n content: [{ type: \"text\", text: \"anime key visual, luminous city at night, crisp linework\" }],\n parameters: { size: \"1024x1024\", negative_prompt: \"low quality, blurry\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"noobxl-i2i-ipa-onediff\",\n title: \"NoobXL I2I IPA OneDiff\",\n category: \"image\",\n description:\n \"Anime-specialized NoobXL image-to-image model that redraws a single uploaded image using it as a style or character reference. It works best with English Danbooru tags, which can invoke specific anime characters and illustrator styles. Natural-language understanding is limited. Fast and extremely low cost.\",\n allowUnknownParameters: true,\n adapter: { type: \"openai.images\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Prompt text.\" },\n {\n type: \"image\",\n required: true,\n min: 1,\n max: 1,\n sources: [\"url\", \"base64\"],\n description: \"Single source image.\",\n },\n ],\n },\n parameters: noobxlImageToImageParameters,\n examples: [\n {\n title: \"Image to image\",\n request: {\n model: \"noobxl-i2i-ipa-onediff\",\n content: [\n { type: \"text\", text: \"keep the character identity, redraw as a polished anime illustration\" },\n { type: \"image\", source: { type: \"url\", url: \"https://example.com/reference.png\" } },\n ],\n parameters: { size: \"1024x1024\", controlnet_weight: 0.8 },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"birefnet-general\",\n title: \"BiRefNet General\",\n category: \"image\",\n description:\n \"Single-image background removal model that produces images with transparent backgrounds. Well suited to image post-processing and creating web assets. Fast and extremely low cost.\",\n adapter: { type: \"openai.images\" },\n content: {\n input: [\n {\n type: \"text\",\n required: false,\n max: 16,\n merge: \"newline\",\n description: \"Optional workflow prompt. Accepted for compatibility but ignored by the model.\",\n },\n {\n type: \"image\",\n required: true,\n min: 1,\n max: 1,\n sources: [\"url\", \"base64\"],\n description: \"Single source image.\",\n },\n ],\n },\n examples: [\n {\n title: \"Remove background\",\n request: {\n model: \"birefnet-general\",\n content: [{ type: \"image\", source: { type: \"url\", url: \"https://example.com/portrait.png\" } }],\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"seedance-2-0\",\n title: \"Seedance 2.0\",\n category: \"video\",\n description:\n \"High-quality video generation model that accepts text, image, and video inputs. Supports resolutions from 480p to 2K and is well suited to final deliverables.\",\n adapter: { type: \"ark.videoGenerations\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Video prompt.\" },\n {\n type: \"image\",\n required: false,\n max: 9,\n sources: [\"url\"],\n roles: [\"first_frame\", \"last_frame\", \"reference_image\"],\n description: \"Optional public URL image input. Use meta.role as first_frame, last_frame, or reference_image.\",\n },\n {\n type: \"video\",\n required: false,\n max: 1,\n sources: [\"url\"],\n roles: [\"reference_video\"],\n roleRequired: true,\n description: \"Optional public URL reference video input. Use meta.role as reference_video.\",\n },\n ],\n },\n parameters: seedanceVideoParameters({ resolution: \"1080p\", maxWait: 900 }),\n examples: [\n {\n title: \"Text to video\",\n request: {\n model: \"seedance-2-0\",\n content: [\n {\n type: \"text\",\n text: \"a cat playing piano in a cozy jazz club, cinematic lighting, smooth camera movement\",\n },\n ],\n parameters: { duration: 5, resolution: \"1080p\", ratio: \"16:9\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"seedance-2-0-fast\",\n title: \"Seedance 2.0 Fast\",\n category: \"video\",\n description:\n \"Fast video generation model that accepts text, image, and video inputs. Faster and less expensive than seedance-2-0, making it well suited to creative validation and draft iteration.\",\n adapter: { type: \"ark.videoGenerations\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Video prompt.\" },\n {\n type: \"image\",\n required: false,\n max: 9,\n sources: [\"url\"],\n roles: [\"first_frame\", \"last_frame\", \"reference_image\"],\n description: \"Optional public URL image input. Use meta.role as first_frame, last_frame, or reference_image.\",\n },\n {\n type: \"video\",\n required: false,\n max: 1,\n sources: [\"url\"],\n roles: [\"reference_video\"],\n roleRequired: true,\n description: \"Optional public URL reference video input. Use meta.role as reference_video.\",\n },\n ],\n },\n parameters: seedanceVideoParameters({ resolution: \"720p\", resolutions: [\"480p\", \"720p\"], maxWait: 600 }),\n examples: [\n {\n title: \"Text to video\",\n request: {\n model: \"seedance-2-0-fast\",\n content: [\n {\n type: \"text\",\n text: \"a cat playing piano in a cozy jazz club, cinematic lighting, smooth camera movement\",\n },\n ],\n parameters: { duration: 5, resolution: \"720p\", ratio: \"16:9\" },\n },\n },\n ],\n },\n ...sunoModels,\n] satisfies GenerationModelDeclaration[];\n\nexport const builtinGenerationModels: GenerationModelDeclaration[] = cloneJson(builtinModels);\n\nexport function getBuiltinGenerationModel(model: string): GenerationModelDeclaration | null {\n return cloneJson(builtinModels.find((declaration) => declaration.model === model) ?? null);\n}\n\nexport function listBuiltinGenerationModels(): GenerationModelDeclaration[] {\n return cloneJson(builtinModels);\n}\n"],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  //#region src/types.d.ts
2
2
  declare const MODEL_SCHEMA: "neta.generation.model.v1";
3
+ declare const GENERATION_MODEL_CATEGORIES: readonly ["image", "video", "audio"];
4
+ type GenerationModelCategory = (typeof GENERATION_MODEL_CATEGORIES)[number];
3
5
  type GenerationSource = {
4
6
  type: "url";
5
7
  url: string;
@@ -100,6 +102,8 @@ type GenerationModelDeclaration = {
100
102
  schema: typeof MODEL_SCHEMA;
101
103
  model: string;
102
104
  title?: string;
105
+ /** Product catalog class. */
106
+ category?: GenerationModelCategory;
103
107
  description?: string;
104
108
  /** Hide from default discovery while keeping exact-ID lookup and runtime use available. */
105
109
  hidden?: boolean;
@@ -213,5 +217,5 @@ declare const builtinGenerationModels: GenerationModelDeclaration[];
213
217
  declare function getBuiltinGenerationModel(model: string): GenerationModelDeclaration | null;
214
218
  declare function listBuiltinGenerationModels(): GenerationModelDeclaration[];
215
219
  //#endregion
216
- export { GenerationParameterSpec as C, MODEL_SCHEMA as D, GenerationSourceResolver as E, ResolvedGenerationRequest as O, GenerationModelDeclaration as S, GenerationSource as T, GenerationDebugOptions as _, GenerateRequest as a, GenerationMetaSpec as b, GenerationAdapterInput as c, GenerationContentBlock as d, GenerationContentBlockMeta as f, GenerationDebugLogger as g, GenerationDebugEvent as h, CreateGenerationClientOptions as i, GenerationClient as l, GenerationDebugConfig as m, getBuiltinGenerationModel as n, GenerationAdapter as o, GenerationContentSpec as p, listBuiltinGenerationModels as r, GenerationAdapterContext as s, builtinGenerationModels as t, GenerationClientWithResult as u, GenerationDimensionsSpec as v, GenerationResult as w, GenerationMetaTaskVariantSpec as x, GenerationMetaFieldSpec as y };
217
- //# sourceMappingURL=builtins-8R5iZQ10.d.ts.map
220
+ export { ResolvedGenerationRequest as A, GenerationModelCategory as C, GenerationSource as D, GenerationResult as E, GenerationSourceResolver as O, GenerationMetaTaskVariantSpec as S, GenerationParameterSpec as T, GenerationDebugLogger as _, GENERATION_MODEL_CATEGORIES as a, GenerationMetaFieldSpec as b, GenerationAdapterContext as c, GenerationClientWithResult as d, GenerationContentBlock as f, GenerationDebugEvent as g, GenerationDebugConfig as h, CreateGenerationClientOptions as i, MODEL_SCHEMA as k, GenerationAdapterInput as l, GenerationContentSpec as m, getBuiltinGenerationModel as n, GenerateRequest as o, GenerationContentBlockMeta as p, listBuiltinGenerationModels as r, GenerationAdapter as s, builtinGenerationModels as t, GenerationClient as u, GenerationDebugOptions as v, GenerationModelDeclaration as w, GenerationMetaSpec as x, GenerationDimensionsSpec as y };
221
+ //# sourceMappingURL=builtins-D0tS2UtT.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins-D0tS2UtT.d.ts","names":[],"sources":["../src/types.ts","../src/builtins.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { n as getBuiltinGenerationModel, r as listBuiltinGenerationModels, t as builtinGenerationModels } from "./builtins-8R5iZQ10.js";
1
+ import { n as getBuiltinGenerationModel, r as listBuiltinGenerationModels, t as builtinGenerationModels } from "./builtins-D0tS2UtT.js";
2
2
  export { builtinGenerationModels, getBuiltinGenerationModel, listBuiltinGenerationModels };
package/dist/builtins.js CHANGED
@@ -1,3 +1,3 @@
1
- import { n as getBuiltinGenerationModel, r as listBuiltinGenerationModels, t as builtinGenerationModels } from "./builtins-B4Agk9nt.js";
1
+ import { n as getBuiltinGenerationModel, r as listBuiltinGenerationModels, t as builtinGenerationModels } from "./builtins-Bn6iOBYm.js";
2
2
 
3
3
  export { builtinGenerationModels, getBuiltinGenerationModel, listBuiltinGenerationModels };
package/dist/cli/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { r as listBuiltinGenerationModels } from "../builtins-B4Agk9nt.js";
3
- import { h as stringifyGenerationModelDeclaration, i as createGenerationClient, n as exportBuiltinModelConfigs, t as exportBuiltinModelConfig } from "../export-config-MvqQsM_g.js";
2
+ import { r as listBuiltinGenerationModels } from "../builtins-Bn6iOBYm.js";
3
+ import { h as stringifyGenerationModelDeclaration, i as createGenerationClient, n as exportBuiltinModelConfigs, t as exportBuiltinModelConfig } from "../export-config-D47KgbO7.js";
4
4
  import { mkdir, writeFile } from "node:fs/promises";
5
5
  import { dirname, join } from "node:path";
6
6