071faa482c
纳入 AGC Cargo workspace 的统一 rustfmt 检查与格式化入口 完成项目 TypeScript/Prettier 与 Rust 全量格式化 修复 Pingora expected executable 门禁的空白敏感误报 同步开发运维文档与 AGC skill pack 格式化忽略规则
6.6 KiB
6.6 KiB
宣发素材工具入口设计
目标
在 Web 图片画布编辑器底部工具栏新增 宣发素材 分组入口,用于生成游戏发布物料。点击具体工作流后,不打开说明弹窗,而是在画布内创建一个可拖拽的宣发素材生成卡片;卡片包含游戏名、游戏分类、一句话描述游戏三个输入框、参考图控件、尺寸信息和生成按钮。点击生成后走图片画布现有生图 BFF,三个宣发工作流固定使用 gpt-image-2 计费并自动扣泥点,生成成功后把成品图片放回画布。
Prompt 输入摘要与 Prompt 约束只作为内部生成契约维护,不在 UI 中默认暴露;真实生图请求会把结构化游戏输入和对应工作流约束合并为内部 Prompt。
三个工作流的输入框默认提示统一为:游戏名 马戏团午夜惊魂,游戏分类 非对称对抗,一句话描述游戏 神奇数字马戏团里,帕姆尼失控了,找到钥匙,开门逃离马戏团,千万别被抓住了。提示只作为占位文案,用户未填写时不进入生图 Prompt。
入口
- 页面:
/editor/canvas - 位置:底部 AI 画布工具栏
- 工具:
宣发素材,位于底部工具栏生成UI设计图按钮右侧。 - 交互:点击工具后弹出独立浮层菜单,菜单项包括
游戏首图、详情五图、运营海报;点击菜单项后在画布中心创建对应工作流的生成占位卡片,卡片可拖拽,设置面板锚定在占位卡片下方。 - 设置面板:三个工作流统一对齐生成角色面板结构,顶部为参考图横向槽,主体为游戏名、游戏分类、一句话描述游戏输入区,底部复用生成类面板的禁用态模型胶囊与生成按钮;模型固定显示
gpt-image-2,不提供nanobanana2入口,生成按钮内显示gpt-image-2对应泥点。 - 标题:画布占位卡片左上角使用英文功能名,例如
Home Image Generator、Detail Gallery Generator、Promo Poster Generator,与其它生成卡片保持一致。
三条独立工作流
-
publication-cover-image- 名称:游戏首图
- 输出:单张主视觉
- 尺寸:
720 x 540 - 适用:推荐流、作品卡和首屏传播位
-
publication-detail-gallery- 名称:详情五图
- 输出:单张详情图;需要五图时由用户连续生成五次,保持同一参考摘要和输入信息
- 尺寸:
720 x 1280,9:16竖版 - 适用:作品详情、应用介绍和运营分发图组
-
publication-promo-poster- 名称:运营海报
- 输出:单张活动海报
- 尺寸:
1280 x 720,16:9横版 - 版式:右下角保留白色二维码留白方块,并在方块内部上方加入黑色小字提示“此处换上你的游戏二维码”
- 适用:社群、活动、渠道投放和运营节日位
职责边界
本功能边界只负责图片编辑器里的宣发素材生成:
- 可以维护:工作流框架、Prompt 约束、参考图解析约束、图片后处理验收约束。
- 已落地:画布内生成占位卡片、游戏名 / 游戏分类 / 一句话描述游戏结构化输入、参考图上传 / 从画布选择、尺寸标识、真实生图、固定
gpt-image-2计费、成品回画布。 - 详情五图:当前 UI 只有一个生成卡片,一次生成 1 张
720 x 1280竖版详情图,单次按gpt-image-2计费;需要五图时连续生成并复用同一游戏输入和参考图。 - 不在 UI 暴露:Prompt 输入摘要、Prompt 约束预览、内部提示词拼接过程。
- 暂不实现:作品发布状态、审核、分享渠道、远程 Genarrative 接口、作品架或广场能力。
- 不修改:SpacetimeDB schema、前端发布页、作品发布系统。
生成与计费
- 前端生成请求统一通过
/api/editor/images/generations。 - 宣发素材请求携带
kind: publication-material,前端提交和后端 handler 都固定归一为gpt-image-2;即使旧前端或外部请求传入nanobanana2,后端也按gpt-image-2生成和计费,但价格仍来自运行时模型定价配置,不写死数值。 publication-detail-gallery不再携带candidateCount: 5;后端仍兼容多候选请求,但当前宣发素材入口不主动批量生成。- 尺寸请求和成品交付规格必须使用明确像素值:游戏首图
720x540、详情图720x1280、运营海报1280x720。这些值是画布图层与成品的业务规格;由于三种规格并非都满足gpt-image-2的上游尺寸约束,VectorEngine 适配层会在发送前等比归一到合法请求尺寸(最大边3840、两边为16的倍数、长短边比不超过3:1、总像素655360..8294400),不能将上游归一后的尺寸当作宣发成品规格。只有16:9、9:16、2k等比例 / 档位别名才走 provider 预设映射。 - 参考图在提交
/api/editor/images/generations前必须先落稳定引用:本地图先上传 OSS 并确认 asset object,提交时使用objectKey、项目资源 ID 或素材 ID;禁止把 Data URL / Blob URL 写入生成请求或外部生成队列载荷。浏览器内可对临时图做压缩等处理,但压缩结果也必须上传后再提交。 - 扣费通过现有钱包资产操作封装执行;上游生成失败或未返回图片时按现有补偿逻辑退款。
- 生成成功后,成品作为图片画布生成图层加入画布,并保留游戏输入和参考图摘要供图层信息使用。
代码位置
- 工具入口:
src/components/image-editor/ImageCanvasBottomToolbarView.tsx - 菜单和生成卡片挂载:
src/components/image-editor/ImageCanvasGenerationComposerView.tsx - 工作流状态:
src/components/image-editor/useImageCanvasGenerationWorkflow.ts - 工作流内容模型:
src/components/image-editor/ImageCanvasPublicationMaterialsModel.ts - 画布内生成卡片设置面板:
src/components/image-editor/ImageCanvasPublicationMaterialsDemoPanelView.tsx
验证命令
npm run test -- src/components/image-editor/ImageCanvasBottomToolbarView.test.tsx src/components/image-editor/useImageCanvasGenerationSurface.test.tsx src/components/image-editor/ImageCanvasGenerationSubmissionModel.test.ts src/components/image-editor/useImageCanvasGenerationSubmissionWorkflow.test.tsx src/services/image-editor/editorProjectClient.test.ts
cargo test -p platform-image vector_engine --manifest-path server-rs/Cargo.toml
cargo test -p api-server editor_image_generation_accepts_reference_body_above_default_limit --manifest-path server-rs/Cargo.toml
cargo check -p api-server --manifest-path server-rs/Cargo.toml
npm run check:encoding