feat(image): 以插件声明统一图片参数、尺寸选择与定价合同 (#760)

* feat(image): 图片参数 - 统一插件声明配置与生成合同

* docs(image): 图片参数 - 说明声明合同与验证边界

* fix(plugins): 图片声明 - 保留内联素材支持并同步制品文档

* fix(image): 参数合同 - 对齐审批意图和尺寸预检调用方

* fix(image): 调用链 - 保留公开意图并接通独立分辨率

* fix(image): 图片参数 - 补齐分辨率接线与目录价格投影
This commit is contained in:
huiku
2026-10-13 19:18:21 +08:00
committed by GitHub
parent 88de4ce422
commit 7466119867
104 changed files with 6013 additions and 568 deletions

View File

@@ -47,6 +47,10 @@
请求示例:`{"model":"mj-v8.2","prompt":"生成一张氛围感美女照片","size":"9:16","raw":false,"quality":1,"stylize":100,"chaos":0,"weird":0,"hd":false,"n":1}`。
## 动态图片参数
`contributes.providers[].imageParameters` 是渠道模型、前台模型与生成界面共用的参数合同。`name` 为稳定身份,`type`、`values`、`min/max/step`、`default` 描述输入;`models` 限定适用上游模型,`enabled` 为初始启用状态。只有 `pricing: true` 的启用字段允许作为价格条件;其他参数仍参与生成。渠道可收窄范围,绑定与计价资格由插件拥有。`binding` 映射到统一请求或插件自己的 `providerOptions` 命名空间。
<!-- YINGCE_MANIFEST_CONTRACT_START -->
## Manifest 完整接口定义
@@ -57,7 +61,7 @@
"apiVersion": "yingce.plugin/v2",
"id": "kacang-midjourney",
"name": "卡藏 Midjourney",
"version": "1.0.0",
"version": "1.1.0",
"author": "影绘",
"description": "适配卡藏特惠、V7特惠与稳定/高速生图,按公开模型合同映射请求并查询、保存全部结果。",
"enabled": true,
@@ -97,6 +101,37 @@
"type": "bearer",
"field": "apiKey"
},
"imageParameters": [
{
"name": "size",
"label": "画幅比例",
"type": "string",
"binding": "aspectRatio",
"values": [
"1:1",
"3:2",
"2:3",
"4:3",
"3:4",
"5:4",
"4:5",
"16:9",
"9:16",
"21:9"
],
"default": "16:9"
},
{
"name": "count",
"label": "生成数量",
"type": "integer",
"binding": "imageCount",
"min": 1,
"max": 1,
"step": 1,
"default": 1
}
],
"parameters": [
{
"name": "model",
@@ -386,6 +421,39 @@
"type": "bearer",
"field": "apiKey"
},
"imageParameters": [
{
"name": "size",
"label": "画幅比例",
"type": "string",
"binding": "aspectRatio",
"values": [
"auto",
"1:1",
"3:2",
"2:3",
"4:3",
"3:4",
"5:4",
"4:5",
"16:9",
"9:16",
"21:9",
"9:21"
],
"default": "16:9"
},
{
"name": "count",
"label": "生成数量",
"type": "integer",
"binding": "imageCount",
"min": 1,
"max": 1,
"step": 1,
"default": 1
}
],
"parameters": [
{
"name": "model",
@@ -673,6 +741,265 @@
"type": "bearer",
"field": "apiKey"
},
"imageParameters": [
{
"name": "size",
"label": "画幅比例",
"type": "string",
"binding": "aspectRatio",
"values": [
"auto",
"1:1",
"3:2",
"2:3",
"4:3",
"3:4",
"5:4",
"4:5",
"16:9",
"9:16",
"21:9",
"9:21"
],
"default": "9:16"
},
{
"name": "count",
"label": "生成数量",
"type": "integer",
"binding": "imageCount",
"min": 1,
"max": 1,
"step": 1,
"default": 1
},
{
"name": "raw",
"label": "原始风格",
"type": "boolean",
"binding": "providerOptions.kacang-midjourney.raw",
"default": false
},
{
"name": "mjQuality",
"label": "细节质量",
"type": "number",
"binding": "providerOptions.kacang-midjourney.quality",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
],
"values": [
0.25,
0.5,
1,
2
],
"default": 1,
"pricing": true
},
{
"name": "stylize",
"label": "风格化程度",
"type": "number",
"binding": "providerOptions.kacang-midjourney.stylize",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
],
"min": 0,
"max": 1000,
"default": 100
},
{
"name": "chaos",
"label": "变化程度",
"type": "number",
"binding": "providerOptions.kacang-midjourney.chaos",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
],
"min": 0,
"max": 100,
"default": 0
},
{
"name": "weird",
"label": "奇异程度",
"type": "number",
"binding": "providerOptions.kacang-midjourney.weird",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
],
"min": 0,
"max": 3000,
"default": 0
},
{
"name": "seed",
"label": "随机种子",
"type": "integer",
"binding": "providerOptions.kacang-midjourney.seed",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
]
},
{
"name": "negative_prompt",
"label": "排除内容",
"type": "string",
"binding": "providerOptions.kacang-midjourney.negative_prompt",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
]
},
{
"name": "tile",
"label": "无缝平铺",
"type": "boolean",
"binding": "providerOptions.kacang-midjourney.tile",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
]
},
{
"name": "iw",
"label": "图片权重",
"type": "number",
"binding": "providerOptions.kacang-midjourney.iw",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
],
"min": 0,
"max": 3
},
{
"name": "cref",
"label": "角色参考",
"type": "string",
"binding": "providerOptions.kacang-midjourney.cref",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
]
},
{
"name": "sref",
"label": "风格参考",
"type": "string",
"binding": "providerOptions.kacang-midjourney.sref",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
]
},
{
"name": "dref",
"label": "细节参考",
"type": "string",
"binding": "providerOptions.kacang-midjourney.dref",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
]
},
{
"name": "cw",
"label": "角色权重",
"type": "number",
"binding": "providerOptions.kacang-midjourney.cw",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
],
"min": 0,
"max": 100
},
{
"name": "sw",
"label": "风格权重",
"type": "number",
"binding": "providerOptions.kacang-midjourney.sw",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
],
"min": 0,
"max": 1000
},
{
"name": "dw",
"label": "细节权重",
"type": "number",
"binding": "providerOptions.kacang-midjourney.dw",
"models": [
"mj-v8.2",
"mj-v8.1",
"mj-v6.1",
"mj-v7",
"mj-niji7"
],
"min": 0,
"max": 100
},
{
"name": "hd",
"label": "高清输出",
"type": "boolean",
"binding": "providerOptions.kacang-midjourney.hd",
"models": [
"mj-v8.2",
"mj-v8.1"
],
"default": false,
"pricing": true
}
],
"parameters": [
{
"name": "model",

File diff suppressed because one or more lines are too long