Files
Genarrative/docs/【编辑器】宣发素材工具演示入口设计-2026-06-17.md
T
kdletters 071faa482c 统一 Rust 与 TypeScript 格式化门禁
纳入 AGC Cargo workspace 的统一 rustfmt 检查与格式化入口

完成项目 TypeScript/Prettier 与 Rust 全量格式化

修复 Pingora expected executable 门禁的空白敏感误报

同步开发运维文档与 AGC skill pack 格式化忽略规则
2026-09-01 16:28:34 +08:00

6.6 KiB
Raw Blame History

宣发素材工具入口设计

目标

在 Web 图片画布编辑器底部工具栏新增 宣发素材 分组入口,用于生成游戏发布物料。点击具体工作流后,不打开说明弹窗,而是在画布内创建一个可拖拽的宣发素材生成卡片;卡片包含游戏名、游戏分类、一句话描述游戏三个输入框、参考图控件、尺寸信息和生成按钮。点击生成后走图片画布现有生图 BFF,三个宣发工作流固定使用 gpt-image-2 计费并自动扣泥点,生成成功后把成品图片放回画布。

Prompt 输入摘要与 Prompt 约束只作为内部生成契约维护,不在 UI 中默认暴露;真实生图请求会把结构化游戏输入和对应工作流约束合并为内部 Prompt。

三个工作流的输入框默认提示统一为:游戏名 马戏团午夜惊魂,游戏分类 非对称对抗,一句话描述游戏 神奇数字马戏团里,帕姆尼失控了,找到钥匙,开门逃离马戏团,千万别被抓住了。提示只作为占位文案,用户未填写时不进入生图 Prompt。

入口

  • 页面:/editor/canvas
  • 位置:底部 AI 画布工具栏
  • 工具:宣发素材,位于底部工具栏 生成UI设计图 按钮右侧。
  • 交互:点击工具后弹出独立浮层菜单,菜单项包括 游戏首图详情五图运营海报;点击菜单项后在画布中心创建对应工作流的生成占位卡片,卡片可拖拽,设置面板锚定在占位卡片下方。
  • 设置面板:三个工作流统一对齐生成角色面板结构,顶部为参考图横向槽,主体为游戏名、游戏分类、一句话描述游戏输入区,底部复用生成类面板的禁用态模型胶囊与生成按钮;模型固定显示 gpt-image-2,不提供 nanobanana2 入口,生成按钮内显示 gpt-image-2 对应泥点。
  • 标题:画布占位卡片左上角使用英文功能名,例如 Home Image GeneratorDetail Gallery GeneratorPromo Poster Generator,与其它生成卡片保持一致。

三条独立工作流

  1. publication-cover-image

    • 名称:游戏首图
    • 输出:单张主视觉
    • 尺寸:720 x 540
    • 适用:推荐流、作品卡和首屏传播位
  2. publication-detail-gallery

    • 名称:详情五图
    • 输出:单张详情图;需要五图时由用户连续生成五次,保持同一参考摘要和输入信息
    • 尺寸:720 x 12809:16 竖版
    • 适用:作品详情、应用介绍和运营分发图组
  3. publication-promo-poster

    • 名称:运营海报
    • 输出:单张活动海报
    • 尺寸:1280 x 72016: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:99:162k 等比例 / 档位别名才走 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