Files
ttstd-infinite-canvas/docs/design/image-video-workbench-solution.md

247 lines
27 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 生图与视频方案
## 1. 目标与范围
为普通用户提供两个独立入口:
- **生图**:面向文生图、图生图和工具化的图像编辑任务。
- **视频**:面向文生视频、图生视频,以及模型支持的视频/音频参考输入。
后台提供“工作台工具管理”,维护生图和视频工具目录、分类、预设提示词、图标/封面、使用说明及示例媒体;“功能开放”增加两个独立开关,由管理员控制对应用户入口和后端写入能力。
这不是新的模型协议实现。模型选择、能力判断、任务排队、计费、取消、媒体落库、资源访问与任务恢复均复用现有生成链路。工具目录负责组织场景、注入经过校验的预设内容和展示指南,不直接保存供应商密钥或任意上游请求配置。
## 2. 调研结论
### 外部页面
已访问:
- https://maolong.da-ai.cc/toolbox/image-generation
- https://maolong.da-ai.cc/toolbox/video-generation
页面可正常返回,但当前无登录会话的页面抓取只得到产品导航、页面标题和路由入口,生成区由前端/登录态驱动的内容没有暴露。因此可确认该产品将 AI 图片、AI 视频作为独立一级工作区;不能据此断言其具体参数布局、任务列表或交互细节。后续如需逐项视觉对标,应在可登录浏览器会话中再做实页观察。
### 仓库现状
- 路由由 `web/src/router.tsx` 管理;普通用户导航在 `workspace-sidebar-nav.tsx` 组合,并从用户会话读取 `FeatureAvailability`。
- 已有 `/tasks` 创作历史,可显示图片/视频任务、状态、预览和详情;任务详情数据包含输入、输出、开始/完成时间及账单摘要。
- `web/src/services/api/generation-task.ts` 的 `runBackendGenerationTask` / `submitBackendGenerationTask` 负责把前端配置、模型能力和参考媒体转换为统一任务请求。页面不应直接请求供应商。
- 后端 `CreateTask` 会重新解析模型/渠道/路由、能力、用户配额与账单;`POST /api/tasks` 是标准模型任务入口。媒体必须先保存为资源,再以资源引用提交,不能在任务 JSON 中长期持有 data URL。
- 当前 `FeatureAvailability` 使用系统设置持久化,管理员更新有审计;前端 `RequireFeature` 只适合路由层,开放状态不能仅靠隐藏导航实现。任务写接口需在后端创建工作台任务时做强校验。
- 后台已有系统设置、管理页面、素材上传和提示词版本管理模式,可作为工具管理 UI 的相邻实现参考;但创作工具预设与现有面向系统提示策略的模板语义不同,不建议强行共用同一数据实体。
## 3. 信息架构与页面布局
### 导航和路由
- 一级入口名称固定为“生图”“视频”,建议路径分别为 `/toolbox/image`、`/toolbox/video`。
- 两个入口分别绑定 `imageWorkbenchEnabled`、`videoWorkbenchEnabled`。未开放时侧栏不显示;直接访问路由显示统一的“暂未开放”状态并返回创作台。
- 工具、分类和预设使用可分享的 URL 查询参数:`tool=<toolId>`、`preset=<presetId>`。切换工具时更新 URL,刷新和复制链接可恢复上下文;草稿提示词和本地临时文件不写 URL。
- 任务历史可以直接作为右侧面板内的历史记录查看,不新增重复的全屏历史入口。现有 `/tasks` 保持全局创作历史职责。
### 桌面布局
在可用内容宽度足够时使用三列工作台,按用户给定比例作为基线而非固定像素:左侧约 40%,中间约 30%,右侧约 30%。三列之间用细边界和间距分区,避免卡片套卡片。建议主区最小可用宽度约 1200px;列宽使用 `minmax()` 并为右栏任务行预留稳定宽度。
**左侧:工具与生成输入**
1. 顶部工具选择器显示当前工具图标、名称、副标题、下拉入口及“新建/切换工具”操作。
2. 打开选择器后使用用户提供的参考图方向:标题/搜索/分类标签/工具卡片网格。卡片包括图标或缩略图、名称、简短用途和选中状态;分类可搜索,键盘可浏览及选中。没有搜索结果时提供清除搜索入口。
3. 选中工具后,工具配置表单按工具支持项显示模型、生成参数、提示词、参考图/视频/音频。未被模型能力支持的项隐藏或解释为不可用,不能显示无效控件。
4. 工具预设以可发现的弹窗/Popover 选择,点选后把模板内容填入提示词草稿;如果模板定义了参数默认值,只填充未被用户手动修改的字段。不能静默覆盖用户输入。
5. 提示词支持字数提示、清空、必要的优化入口和生成前校验。参考媒体支持预览、删除、排序、模型数量/类型限制、上传进度和失败重试。界面明确区分“已保存资源”与“尚在上传”。
6. 生成按钮显示当前模型/配置下可获得的预估积分;报价不可用时不猜测价格,提交后按服务端结果显示实际账单。
**中间:生成结果与工具说明**
上下两区各约占中间栏可视高度的一半:
- 上区是当前选中任务结果。未提交显示空态;排队/生成中显示带进度语义的骨架和低强度流动高光;成功后显示图片画廊或视频播放器;失败显示原因、重试/查看任务操作。动效尊重 `prefers-reduced-motion`,不影响页面滚动或结果尺寸。
- 多结果图片以稳定网格/轮播浏览,图片保持原比例并可放大、下载、保存到资产。视频结果显示封面、时长、播放控件和下载/保存操作。
- 下区展示当前工具的说明、适用模型/模式、参数指南、注意事项和示例图/视频。说明来自后台受控 Markdown/结构化内容;禁止直接渲染未经清理的 HTML。
- 没有工具或说明加载失败时分别显示选择工具提示/可重试错误,不用空白区占位。
**右侧:运行中任务与历史**
- 上半区为正在排队/执行的工作台任务,按最近更新排序,显示缩略图、工具/模型、提示词截断、进度/阶段、已耗时及取消入口(仅在后端允许时)。状态来自后端任务服务,离开页面后仍可恢复。
- 下半区为历史生成记录,支持图片/视频过滤、时间倒序及增量分页。条目显示缩略图、成功/失败/取消状态、工具名、模型、创建时间。
- 点击一条历史打开详情弹窗:左侧显示图片/视频结果,右侧显示完整提示词、工具与模型、生成配置、参考素材、耗时、积分账单和状态/错误。详情以任务记录为准;不可访问或过期的媒体显示明确状态,不暴露上游 URL 或内部错误字段。
- 右侧两区各自滚动,桌面下不跟随左侧参数表单滚动;内容区边界清晰,列表项使用紧凑行,不以重复的大型装饰卡片占据空间。
### 响应式退化
- ≥1440px:采用完整三栏,按 40/30/30 比例动态分配。
- 1024–1439px:左侧输入区与中间结果区并列,右侧任务/历史收为可切换抽屉或窄栏,默认展示输入和结果。
- <1024px:单列工作区,顶部以“生成 / 结果 / 任务”Tab 或分段控件切换;生成表单不能被常驻任务栏挤压。弹窗变为全屏或底部抽屉。
- 不允许在窄屏强行保持三栏导致横向滚动。拖放上传在触屏场景提供等价文件选择操作。
## 4. 用户核心流程
1. 用户从导航进入图片或视频;前端确认功能开放状态。
2. 用户通过工具选择弹窗选定场景工具,页面加载该工具可用预设和说明。
3. 用户选择当前会话模型;前端根据模型目录能力显示对应参数和参考媒体类型,不支持的组合及时阻止提交。
4. 用户选用预设提示词并修改,上传参考媒体到资源服务,检查报价/配额提示后提交。
5. 前端调用现有统一任务服务创建任务;任务 ID 纳入页面状态。右栏立即出现任务,中间显示处理中状态。
6. 订阅/轮询任务状态。成功后中间展示结果并更新右栏历史;失败、取消、过期或结果回存失败均提供相应恢复路径。
7. 用户点击历史条目,在详情弹窗检查结果、参数、耗时和服务端账单。
重试必须创建新的尝试并保留原任务关联,不在客户端伪造任务状态;取消以服务端返回为准。刷新页面后根据后端任务重新构建运行中任务列表。
## 5. 功能模块边界
### 前端
- 新增两个工作台路由页面和共享工作台框架,工具选择器、配置表单、结果区、任务/历史区作为页面私有组件起步;只有图片与视频确实共享交互合同后,再抽成跨页面组件。
- 模型参数和媒体能力统一由已有模型 capability/profile 数据驱动,避免工具配置复制一份参数协议。
- 页面负责协调选择、表单草稿和展示;API service 负责工具目录读写、上传引用和任务调用;纯映射/校验留在 `lib`。
- 用户端工具目录响应不包含后台草稿、隐藏工具、内部存储地址或管理员审计内容。
### 后端工具管理
建议在管理后台新增“工作台工具”运营入口,包含工具列表、预览、创建/编辑、排序、上线/下线、版本历史;左右分区按“生图工具 / 视频工具”筛选。
工具清单建议字段:
- `id`:稳定 ID,不以展示名称作为外键。
- `kind`:`image` 或 `video`。
- `categoryId`、`name`、`subtitle`、`description`。
- `iconResourceId` / `coverResourceId`:引用平台资源,不保存任意 URL。
- `sortOrder`、`enabled`、`createdAt`、`updatedAt`、`updatedBy`、`version`。
- `supportedModes` / `capabilityRequirements`:受限的能力声明,表达文生图、图生图、图生视频、首尾帧、音频参考等 UI 需求;不能用于指定协议 URL。
- 可选展示指南/示例媒体资源引用。
预设提示词建议独立实体,以便版本和启用状态独立维护:`id`、`toolId`、`name`、`summary`、`promptTemplate`、受限的 `defaultParameters`、`sortOrder`、`enabled`、审计字段。模板变量使用显式白名单和 schema 校验,不支持服务端代码执行或任意插值函数。删除被任务历史引用的工具/预设时采用下线/软删除,历史记录仍显示任务创建时保存的工具快照名称。
分类是导航元数据,可以做独立表或受校验的配置项;首版建议分类资源和排序统一由后台管理,内置系统分类 ID 保持稳定。工具预设中的默认参数仅可填入普通生成参数,不能覆盖用户模型凭证、渠道、资源归属、计费值、任务类型或服务端路由字段。
### 图片/视频资源
图标、工具封面和示例媒体走现有资源上传/访问能力,后台只保存资源 ID。按资源归属检查管理员上传、引用和删除;被工具引用的媒体不可直接物理删除。用户生成结果使用现有任务结果及资源访问接口,避免复制二进制到新表。
## 6. 功能开放与权限/安全
### 开放控制
- 在 `FeatureAvailability` 增加 `imageWorkbenchEnabled` 与 `videoWorkbenchEnabled`,并沿用 `/admin/settings/features` 的管理员即时变更和审计约定。
- 公共登录后会话或 `/features` 返回两个字段;旧配置缺字段按明确的安全默认值补齐。建议新能力初始关闭,避免代码部署后用户入口意外曝光;该默认值需与上线策略一并确认。
- 前端侧栏和路由读取该字段,用户直接打开关闭的页面时显示未开放状态。
- 后端对工作台目录的普通用户读取、任务创建入口分别检查对应开关。至少对 `POST /tasks` 增加按任务 `metadata.source`/规范化模式识别工作台来源并校验,但不可只信客户端传入的 `source`;必须同时由后端根据任务媒体模式和工作台专属入口/签名字段建立可验证边界。
- 更推荐新增受开关保护的工作台任务创建 API,由服务端注入 `workbenchKind`、工具 ID 和预设 ID,再调用现有 `CreateTask` admission 服务;不要依赖通用 `/tasks` 的自由客户端 metadata 来区分是否属于工作台。内部 Agent、画布及短剧流程继续使用原任务入口,不因关闭新工作台而误停。
- 关闭开关只阻止新目录访问和新任务创建,不应丢失或隐藏用户已有历史任务、资源、账单及正在执行任务。是否阻止关闭后访问工作台历史需保持与现有任务中心政策一致。
### 数据与执行安全
- 工具/预设管理接口必须管理员授权;用户查询只返回启用版本。更新、下线和排序均审计操作人、前后值或版本号。
- 所有查询和写入按当前用户、资源归属及任务归属检查;任何详情 API 不允许跨用户读取。
- 请求体只提交资源 ID、表单参数和提示词,不含第三方 API Key、Cookie、远端媒体 URL或 inline data URL。参考素材先进入资源服务,再由服务端转为受控 Provider 输入。
- 后端基于所选模型能力重新校验图像/视频/音频参考数量、类型、尺寸、时长、比例、分辨率和工具要求;前端校验仅改善反馈。
- 计费、配额、并发限制及积分预占/退款由现有任务与账单服务负责。管理工具表不保存积分价格,详情账单直接取服务端任务/订单摘要。
- 提示词作为用户输入按现有安全策略处理,不执行模板内容;说明 Markdown 输出需经过白名单渲染和链接协议过滤。
## 7. API 草案
以现有 `/api` 风格为准,路径最终以 OpenAPI 更新为准:
**用户端**
- `GET /api/workbench/tools?kind=image|video`:返回启用工具、分类、启用预设、资源预览引用与说明。
- `GET /api/workbench/tools/:toolId`:返回单个工具的公开详情。
- `POST /api/workbench/tasks`:携带 `toolId`、`presetId?`、`kind`、用户提示词、模型选择意图、生成参数及资源 ID;服务端加载工具/预设快照、校验开关/模型能力后转入标准任务 admission 与账单流程。
- `GET /api/workbench/tasks?kind=&activeOnly=&cursor=`:可选的工作台筛选任务查询;若现有 `/tasks` 查询可通过可信的服务端元数据过滤并且分页性能合格,则可以复用而不增加重复 API。
- 历史详情优先复用 `GET /api/tasks/:id` 及资源访问 API,保证同一归属校验。
**管理端**
- `GET /api/admin/workbench/tools?kind=`
- `POST /api/admin/workbench/tools`
- `PATCH /api/admin/workbench/tools/:id`
- `POST /api/admin/workbench/tools/:id/publish` / `unpublish`
- `POST /api/admin/workbench/tools/:id/presets`
- `PATCH /api/admin/workbench/presets/:id`
- `POST /api/admin/workbench/presets/:id/activate` / `unpublish`
- 资源继续走现有上传/资源访问接口。
管理端写接口应采用明确 DTO 和字段白名单,不能直接反序列化到数据库实体;启用或发布动作校验必填内容、资源引用、模板 schema 和分类归属。
## 8. 数据存储和迁移建议
- 建议新增 `workbench_tools`、`workbench_tool_presets` 两张表;工具与预设使用稳定 ID、状态和排序字段,工具删除采用软删除或下线。预设可支持版本表,首版如要缩小范围可采用更新时新增版本记录、始终只有一个 active 版本。
- 若说明与示例内容较小且必须随工具原子发布,可放工具 JSON 文档字段;资源本身仍只保存资源 ID。不要把图片二进制或短期 CDN 签名地址写入数据库。
- 任务创建时在受控任务元数据中记录工具 ID、工具名称/版本、预设 ID/版本、工作台类型和展示所需配置快照,保证工具下线、重命名后历史详情仍可解释。快照不能覆盖 `Task.InputJSON` 中现有凭证保护/敏感信息规则。
- 数据表变更需更新 `docs/content/docs/backend/backend-database.mdx`。API 变化同步 OpenAPI 与 HTTP API 专题文档。
## 9. 后台管理交互
工具列表优先,顶部提供“生图 / 视频”过滤、搜索、状态筛选和新建入口。行内展示图标、名称、分类、预设数量、状态、排序和更新时间;常用的预览/编辑/上下线操作直接可见,删除作为谨慎操作并在有引用时禁用或提示下线代替。
工具编辑采用全屏抽屉或较宽编辑台,分为:基础信息、图标/封面、能力需求与 UI 字段、使用说明/示例、预设提示词。右侧或预览模式展示用户端工具卡与说明区预览。预设编辑器提供模板文本、变量白名单、默认参数 JSON schema 表单化编辑、启用状态及版本说明。发布前校验名称、分类、图像资源、提示词长度、默认参数和说明内容;保存成功后用户端目录按版本更新。
“功能开放”增加两项开关,并明确影响:关闭后隐藏入口并禁止新工作台任务;已有任务记录保留。工具本身的上线状态与全局功能开放是两层状态,用户端有效状态为两者皆开放。
## 10. 一次性交付范围
本功能按完整闭环一次性交付,不拆成先做生图、后补视频或先上工具目录、后补后台的阶段。交付范围同时包含用户端两个工作台、后台工具管理、功能开放控制、后端目录/任务接口、数据迁移、权限审计、文档和验收。
上线前必须同时具备可配置的生图与视频工具、预设、说明和示例素材;两个用户入口及对应服务端开关;模型能力驱动的参数表单;资源上传;异步任务恢复;任务取消/重试;结果预览;右侧运行中任务与历史;详情中的提示词、配置、耗时和实际积分;完整管理端编辑/预览/上下线能力。若任何一个闭环部分未完成,不视为该功能已交付。
建议以一个完整功能分支和统一发布窗口落地;数据迁移保持向前兼容,首次发布默认关闭两个新入口,完成线上工具配置和冒烟后由管理员开启。可以在开发过程中按模块并行实现,但这只是工程组织方式,不改变“一次完整交付”的产品验收边界。
## 11. UI 交互与视觉设计
### 工具选择弹窗(参考图 1)
- 当前工具以一行紧凑的图标/缩略图、名称、副说明和下拉箭头呈现;右侧“新建”是清晰命令按钮。点击整行或箭头打开工具选择弹窗,弹窗从当前工作台上下文打开并保留滚动位置。
- 弹窗顶部使用“你想创作什么?”作为标题,旁边一行短说明;右侧提供“清除选择”。下方是“推荐 / 人物 / 商品 / 场景 / 增强”等后台可配置分类标签,分类行末尾放搜索输入框。小屏时搜索移到分类下方,不能挤压标签。
- 工具以两列图文卡片展示,每张卡片固定最小高度并采用左侧方形缩略图、右侧名称和最多两行简介。选中卡片使用清晰的深色边缘与右上角勾选标记,不选中仅用柔和表面差异和轻微悬停抬升表达;状态不能只靠颜色区分。
- 点卡片立即选中并关闭弹窗,切换工具前若提示词或参考素材有未提交修改,不清空内容:同类别工具保留输入草稿;不兼容字段保留在草稿中但暂不提交,回切工具时恢复。只有用户明确选择“新建/清空”才重置。
- 弹窗支持搜索工具名、简介和分类;搜索与分类可组合。点击清除选择后回到工具未选状态,但不清除生成草稿。Escape 关闭且焦点返回触发按钮;方向键和 Tab 可遍历卡片,Enter/Space 选择。弹窗内滚动,不滚动背景页面。
- “更多技能持续上线中”作为可选的目录尾部说明,不伪装成禁用工具卡;后台没有配置更多项时不显示。
### 生成输入页(参考图 2)
- 顶部保留工具摘要与“新建”命令。生图页面中央以宽阔、低干扰的提示词编辑区为主,而不是把输入项切成许多小卡片:左上显示已添加参考图数量与上限,右上放上传/排列视图/展开等图标按钮;中间提供上传占位缩略图和提示词编辑区;底部显示字符数与语音输入入口(若当前产品语音能力可复用)。
- 参考素材槽采用轻量缩略图,未上传时展示线稿占位与“添加图片/视频/音频”入口;上传后可排序、替换、删除和放大预览。每个素材显式显示上传状态、类型和失败重试,不以头像或素材缩略图暗示上传成功。
- 提示词区域内提供预设入口,选择预设后把文本插入光标处或替换空草稿;若草稿已有内容,弹出轻量选项“替换 / 追加 / 返回”,不直接覆盖。模板变量由用户填写或保留可读占位符,未完成必填变量时生成按钮禁用并定位到变量。
- 提示词下方把“模型”和“生成设置”做成并排的紧凑摘要选择器。点击模型项打开模型选择层,搜索、来源/能力标签与不可用原因可查;点击生成设置打开按当前模型能力生成的参数面板。图片示例中的“自适应 · 1K 高 · PNG”是设置摘要,不应在不同模型下固定显示这些选项。
- 视频沿用同一输入骨架,但根据能力将素材槽扩展为首帧、尾帧、角色/场景参考、视频参考和音频参考,并把时长、画幅、分辨率、音频等配置放在生成设置层。首尾帧与普通参考媒体使用不同槽位和类型标记。
- 底部主按钮横向填满输入列,按钮主文案明确媒体类型(“立即生成图片”/“立即生成视频”),旁边显示“预估 X 积分”或“预计 -- 积分”。正在上传、必填校验失败、模型不可用、配额不足时明确说明阻塞原因;提交后按钮显示排队/生成状态,但允许用户继续编辑下一条草稿(除非当前模型/流程限制同一输入)。
- 长提示词时输入区自然扩展或内部滚动,底部模型/设置选择器和生成按钮保持可见;键盘快捷提交需避开 IME composition,Enter 不应意外发送多行提示词。
### 视觉语言与 Aceternity 使用
- 以参考截图的浅色中性表面和柔和边界为基准,减少连续硬描边:大区块通过相邻表面、留白、浅层阴影和标题层级区分;仅选中、键盘焦点、分隔和危险状态使用更明确的边界。避免每个字段都包装成卡片,也避免卡片套卡片。
- 保持三栏工作台本身克制、适合长时间创作;颜色来自现有语义 token,不大面积铺单一紫蓝渐变或装饰光斑。工具封面、生成结果和真实示例承担主要视觉色彩。
- 可复用 Aceternity `SpotlightSurface` 作为工具选择卡片/结果区域的轻量悬停光照,使用低对比 spotlight 并尊重减少动态偏好;`HoverBorderGradient` 仅用于主要生成按钮或确有焦点引导价值的单一主操作,不用于所有卡片边框;`CometCard` 可用于工具封面卡的轻微悬停视差,但只在指针设备开启,触屏和减少动态时静态呈现。生成中骨架的流动高光优先采用本地 CSS 动画和语义状态,不为此叠加重型背景组件。
- 不在工作区主背景使用 `BackgroundBeams`、Meteors 或无语义粒子;生成面板不能因装饰动效影响媒体可辨识度、对比度、可读性和性能。所有动效支持 `prefers-reduced-motion`,键盘焦点始终清晰。
- Aceternity 组件以现有仓库组件实现为准,先核对组件包体积、SSR/懒加载和 reduced-motion 行为;缺少必要行为时优先扩展已有包装,不为视觉效果新增重复动画库。
## 12. 验收标准
- 两个开放开关分别控制各自导航、用户目录和后端新建任务;关闭其中一项不影响另一项,也不影响画布、短剧或 Agent 的既有生成。
- 管理员可创建、修改、排序、发布和下线两类工具及预设;未启用内容对普通用户不可见,历史快照仍可读。
- 工具卡片包含名称、说明、图标/封面、分类、搜索和明确选中状态;键盘操作可完成搜索、选择和关闭弹窗。
- 图片与视频参数根据真实模型能力展示;服务端拒绝不匹配参数、越权资源和已下线工具请求。
- 任务创建后中间区立即呈现占位,右栏任务可持续更新;刷新后仍能看到运行任务。任务结束后可展示媒体、状态和真实账单;所有失败路径有可恢复反馈。
- 任务详情展示服务端记录的提示词、参数、工具/预设版本、模型、耗时和积分;媒体访问始终经过资源授权机制。
- 不把密钥、Cookie、inline media data、内部上游地址或短期签名地址写入工具目录、任务快照、URL 或日志。
- 三栏在宽屏无重叠;中等宽度和移动端退化为有序单列/标签切换,无页面级横向溢出;减少动态效果时骨架动画关闭或静态化。
## 13. 待决策项
1. 新增功能开关的默认值是否初始关闭,建议默认关闭,待首批工具和权限路径完整后由管理员开放。
2. 模型来源范围:首版只允许后台配置的系统/逻辑模型,还是也允许用户自己的模型配置。当前任务链路已能承接多种模型来源,但开放范围会影响报价、配置校验、用户体验和支持成本。
3. 用户提交提示词是否允许为空(例如纯参考图编辑),按具体模型能力决定,建议由 operation/profile 声明而不是工作台写死。
4. 预设提示词是否需要版本历史与灰度发布;建议保留版本号/历史快照,首版可不做复杂灰度。
5. 右侧历史是否只筛选“工作台任务”,以及 `/tasks` 是否仍作为全局任务历史。建议两者并存,工作台只展示由工作台创建的任务。
6. 用户提供参考图展示了 6 个工具卡和“更多技能持续上线中”,实际首发的工具目录、图标与示例媒体需产品侧提供或由运营配置。
## 14. 参考与代码依据
- 外部参考:https://maolong.da-ai.cc/toolbox/image-generation、https://maolong.da-ai.cc/toolbox/video-generation。当前抓取只确认独立图片/视频入口,主体 UI 未能读取。
- 用户提供的工具选择截图:工具选择弹窗、分类/搜索、图文卡片与选中反馈作为直接视觉参考。
- 路由与导航:`web/src/router.tsx`、`web/src/components/layout/workspace-sidebar-nav.tsx`、`web/src/stores/use-user-store.ts`。
- 功能开放:`backend/internal/platform/feature_availability.go`、`backend/internal/handler/feature_availability.go`、`web/src/pages/admin/components/feature-availability-panel.tsx`。
- 生成与任务:`web/src/services/api/generation-task.ts`、`web/src/services/api/task-center.ts`、`backend/internal/handler/routes.go`、`backend/internal/app/task_creation.go`、`backend/internal/model/models_task.go`。
- 管理端参考:`web/src/pages/admin/storyboard-prompts/storyboard-prompts-page.tsx` 及现有资源上传/访问服务。