## 问题与影响 实际使用中,通过工具栏新增图片并填写提示词后,页面显示保存失败,画布查询持续返回422。尚未提交生成任务,一个无效生成草稿就导致整个工程无法获取画布投影。 触发组合是:已选图片配置使用 `volcengine` 协议(实测 `doubao-seedream-5.0-flash`),适配器公开 `imageOutputs=[{aspectRatio:"auto",size:"2K"}]`,而新增节点保存了 `aspectRatio:"1:1",size:"2K"`。这是当前适配器契约,不代表远端模型本身只能生成某种画幅。 ## 复现步骤 1. 配置并选用上述图片模型,新建工程。 2. 从画布工具栏添加图片节点,输入非空提示词,保持默认比例与尺寸,等待自动保存;无需点击生成。 3. 检查 `GET /api/creation/projects/{projectId}/canvas` 和项目保存提示。 4. 将该草稿通过正式 `generationSpec.update` 改为 `parameters.aspectRatio=null, size="2K"`,再查询画布。 ## 预期与实际 - 预期:新增节点默认参数来自已选模型能力;无效草稿应局部提示、允许修改,并禁用不合法的生成操作,其他节点和工程查询保持可用。 - 实际:无效草稿持久化成功,`/canvas` 返回422:`{"detail":"当前图片适配器不支持所选比例或尺寸,请重新选择。","code":"invalid_input"}`。真实界面随刷新重复失败。 - 正式更新比例为自动后,`/canvas` 恢复200。 ## 定位与证据 核对版本:`5581f19f4375950e3286678366ac0b13ad2b9cc1`。已完成真实浏览器复现,并用独立临时工程补充 API 复现;后者使用本地占位模型地址,没有请求外部服务、没有生成任务,也未改动真实工程或全局配置。 隔离 API 结果: | 操作 | 结果 | | --- | --- | | 空工程查询画布 | 200 | | 正式批次创建上述图片草稿和节点 | receipt `applied` | | 读取项目快照 | 200,`jobs=[]` | | 查询画布 | 422,错误见上 | | 正式更新 `aspectRatio=null` | receipt `applied` | | 再查询画布 | 200 | 已确认调用链: - [`generationDefaults`](https://github.com/ThinkFlowLab/OpenDirector/blob/5581f19f4375950e3286678366ac0b13ad2b9cc1/src/canvas/generationCatalog.ts#L138-L151) 为图片固定使用 `1:1/2K`;[`snapshotModel`](https://github.com/ThinkFlowLab/OpenDirector/blob/5581f19f4375950e3286678366ac0b13ad2b9cc1/src/canvas/CanvasWorkspace.tsx#L1644-L1659) 选择实际模型后,[`applyModelResolution`](https://github.com/ThinkFlowLab/OpenDirector/blob/5581f19f4375950e3286678366ac0b13ad2b9cc1/src/canvas/modelResolution.ts#L78-L88) 只替换模型身份,未协调输出参数。 - [`image_outputs / resolve_image_output`](https://github.com/ThinkFlowLab/OpenDirector/blob/5581f19f4375950e3286678366ac0b13ad2b9cc1/packages/core/src/opendirector/domain/image_output.py#L10-L39) 声明当前协议为 `auto/2K`,不匹配时抛出 `ProjectError(status=422)`。 - [`node_capabilities`](https://github.com/ThinkFlowLab/OpenDirector/blob/5581f19f4375950e3286678366ac0b13ad2b9cc1/packages/core/src/opendirector/domain/creation/canvas.py#L230-L244) 调用 `validate_generation` 时只捕获 `ValueError`;`ProjectError` 不属于该异常类型,因此向外传播,终止整个 [画布投影查询](https://github.com/ThinkFlowLab/OpenDirector/blob/5581f19f4375950e3286678366ac0b13ad2b9cc1/packages/core/src/opendirector/application/creation_canvas.py#L655-L733)。 这与已关闭的 #69 不同:本问题不需要复制、跨项目或已有图片文件。关联真实视频创作验收 #19。 ## 验收标准 - [ ] 新增图片节点使用已选模型支持的默认比例与尺寸,自动保存和重开后保持一致。 - [ ] 已存在的无效参数草稿不使整个 `/canvas` 查询失败;用户仍能查看其他节点并修改该草稿,节点明确说明不可生成的原因。 - [ ] 修正为合法参数后,能力状态及时恢复;自动比例在契约中正确表示为 `null`。 - [ ] 生成提交仍由后端严格校验,不通过放宽适配器输出契约或静默改写用户明确选择来绕过错误。 - [ ] 覆盖其他图片协议、空提示词及无效草稿的代表性回归;查询本身不创建任务、不产生模型费用。
Activity
[test] browser: new image nodes use the adapter's outputs (#102)