无限画布无限画布

待测试

当前版本已实现但仍需人工验证的变更项

待测试

  • 画布生成配置节点的“生成配置/组装提示词”改为在节点下方打开独立输入浮层;浮层支持输入 @ 从已连接图片、文本、视频、音频中选择引用,引用会以图片缩略图或文本标记展示,图片引用可放大预览;生成时再按当前引用解析为实际素材编号,不再提供或读取输入排序。
  • 图片节点悬浮工具栏新增“局部编辑”入口,打开后可在图片上用画笔/擦除工具绘制遮罩区域、填写局部修改要求,并通过图片编辑接口携带同尺寸 PNG mask 生成新图片节点;结果节点会放在原图右侧并自动连线,原图保持不变。
  • 图片节点悬浮工具栏新增“反推提示词”入口;点击后会在原图右侧创建包含反推预设提示词的文本节点,并继续创建一个已切到“文本”模式的生成配置节点,图片节点和文本节点都会自动连到该配置节点,配置节点会预填包含原图和文本节点引用的组装提示词并自动打开,用户可自行点击配置节点开始生成。
  • 图片节点悬浮工具栏新增“复制提示词”、“放大”和“超分”入口,并在末尾增加 ... 更多按钮;点击“复制提示词”会复制生成该图片的提示词,图片没有提示词时会提示暂无可复制内容;点击 ... 后打开 Ant Design 风格的“自定义工具栏”弹窗,可在图片节点占位上预览悬浮工具栏,信息、删除、存素材、下载、编辑和图片工具都在同一个快捷工具列表中勾选配置,并可切换是否显示按钮文字,保存后写入本地配置;... 配置入口固定显示,预览工具栏下方提供常驻横向滚动控制条。“放大”可在弹窗中选择 1K/2K/4K 目标像素和高清插值、双线性、最近邻算法,按原图比例生成新图片节点,已达到的目标像素会禁用并提示无需放大,最高不超过 4K;“超分”当前只打开暂未实现弹窗。
  • Canvas 资源节点会按当前生成上下文显示 图片1视频1音频1文本1 角标;文本节点内容框和节点底部 prompt 面板输入 @ 时应弹出已连接资源选择器,点击缩略图或文字可插入纯文本编号,并以蓝色 token 视觉高亮。
  • 文本节点连接到生成配置节点时,@ 候选和实际生成输入应读取该生成配置节点的上游参考资源;生成配置输入统计区域应可拖动整个配置节点,预览按钮和设置控件仍保持可点击。
  • 配置弹窗改为“配置与用户偏好”并放大为可滚动弹窗;本地直连支持配置生图、视频、文本、音频四类可选模型列表和默认模型,新建画布生图和配置节点会读取“画布默认生图张数”,需要验证远程渠道和本地直连模型列表都能正确显示。
  • 画布音频节点底部生成面板改为音频提示词、音频模型下拉和 OpenAI Speech 参数设置,支持 voiceresponse_formatspeedinstructions 并通过 /audio/speech 生成音频节点;需要验证本地直连和云端渠道的生成、重试、下载和刷新恢复。
  • 画布左上角菜单和右上角状态栏新增“文档”入口,会使用 NEXT_PUBLIC_DOC_URL 配置的地址并在新标签打开文档站;需要验证登录和未登录状态下顶部入口都可见。
  • 文档站搜索改为中英文混合 tokenizer,中文正文、标题和短语会按中文词、单字、二元和三元片段建立索引;需要验证 /api/search 和搜索弹窗能命中文档中的中文关键词。
  • 文档站改为 Next.js standalone server 输出,新增 docs/Dockerfiledocs/docker-compose.ymldocs/docker-compose.local.yml 独立运行入口;需要验证文档页、搜索接口和 LLM 文本接口在文档站容器中可访问。
  • 画布连线支持右键打开删除菜单;拖拽连线到目标卡片内部、连接点附近或卡片边缘外扩范围内会自动吸附并连接,拖到已有但不可连接的节点附近不会再误弹创建节点菜单。
  • 外部软件可通过 URL 查询参数 baseUrl/baseurlapiKey/apikey 跳转到前端;读取后会从地址栏移除这些参数,后台允许自定义渠道时会自动切到自定义渠道、填入配置并打开配置弹窗,未允许时会打开配置弹窗并提示无法导入。
  • 生图工作台和画布生图会把参考图按当前顺序显示为 图片1图片2 等编号,并在图生图请求的实际提示词中注入编号说明;需要验证 /image 参考图排序、画布配置节点输入顺序和画布助手参考图编号一致。
  • GPT Image 生图请求会在前端把 9:1616:9 等比例转换成合法 WIDTHxHEIGHT 尺寸,并在非法尺寸时直接显示中文错误,避免上游返回 invalid_value Invalid size
  • Docker 部署时,DATABASE_DSN=data/infinite-canvas.db 会在存在 /app/data 挂载目录时自动归一到 /app/data/infinite-canvas.db,需要验证后台模型配置不会再因为工作目录变为 /app/web 而读到空库。
  • Seedance 参考视频被火山判定包含真人或隐私信息时,前端错误摘要会提示改用不含真人的视频、官方允许的模型产物或已授权的 asset:// 素材;参考素材上传目录改为跟随 SQLite 数据目录,并补充公开素材的 HEAD 访问。
  • Seedance 参考素材失败原因排查:后端会把火山上游错误摘要返回给前端;/video 和画布视频生成会按 图片1/视频1/音频1 自动编号参考素材,并在实际请求提示词中注入编号说明;参考视频会在请求前校验大小、时长、宽高、宽高比和像素总量。
  • 画布项目导出改为下载 .zip 压缩包,包内包含 projects.json 和当前画布引用到的本地图片、视频文件,避免只导出 JSON 时丢失媒体内容。
  • 画布库支持多选后一键导出多个画布项目,导出的压缩包可一次恢复多个项目。
  • 画布项目导入改为读取新版 .zip 压缩包,会先按 projects.json 中的文件映射恢复图片、视频到本地存储,再插入画布项目,导入成功后仍停留在画布库。
  • 修复删除画布图片节点或清空画布后撤销时,节点信息恢复但本地图片数据已被清理导致图片丢失的问题。
  • “我的素材”类型筛选区右侧新增文本样式的导出素材和导入素材入口,可将全部素材导出为包含 assets.json 与图片、视频文件的压缩包,并从压缩包恢复素材。
  • 未登录状态下,画布右上角不再显示用户头像菜单、用户名称、算力点余额和退出登录入口,改为显示登录入口;快捷键入口仍可直接打开。
  • 生图工作台的图片参数区复用画布里的紧凑版图像设置面板,尺寸、质量、生成张数的交互保持一致;工作台仍保留独立的模型选择。
  • 生图工作台新增生成记录配置持久化:每次生成会保存提示词、参考图、模型、质量、尺寸和张数,结果图写入本地图片存储后记录只保存 storageKey;点击历史记录会回填本次生成配置并预览结果。
  • 生图工作台生成记录会过滤空缩略图地址,避免历史记录卡片渲染 src="" 图片。
  • 图像设置面板新增默认开启的“16倍数对齐”尺寸 toggle;开启时手动输入宽高并失焦、回车或点击浮层外关闭后,会把非 16 倍数的宽高向上补齐。
  • 视频设置抽成画布和视频创作台共用的紧凑面板,清晰度、尺寸、秒数按固定网格选择并支持手动输入;尺寸选择 auto 时请求不传 size
  • 修复画布和生图工作台选择图片尺寸后,请求图片生成/编辑接口未携带 size 参数的问题;auto 不传,其余比例或像素尺寸会随请求发送。
  • 修复生图工作台和画布生图请求中 quality 参数可能传入上游不支持值导致 400 的问题;请求前会归一化质量枚举,auto 或异常值不再发送给上游。
  • 管理后台新增/编辑渠道时,渠道可用模型支持通过弹窗按“新获取、已有”分组选择,并可在弹窗内手动增加模型或拉取模型列表后再写回表单。
  • 管理后台编辑渠道时,API Key 留空不再触发必填校验,表示沿用已保存的密钥;新增渠道仍要求填写 API Key。
  • 管理后台公开配置里的系统可用模型候选项改为由已启用渠道中选择的模型合并去重生成,最终开放哪些模型仍由公开配置里手动勾选。
  • 视频生成请求参数对齐 grok-imagine-video 接口:使用 resolution_namepreset=normalinput_reference[],支持清晰度、尺寸、秒数快捷选择和手动输入,并支持最多 7 张参考图。
  • 画布视频设置浮层改为挂载到页面根层级并使用自建浮层交互,避免被节点悬浮工具栏遮挡或点击面板内容时关闭。
  • 画布生成配置节点的生图参数改为复用图像设置浮层,支持在同一个入口里调整质量、尺寸和生成张数。
  • 视频清晰度输入框改为只输入数字,提交请求时再拼接 p 单位。
  • 视频生成前端会识别后端 { code, msg } 错误响应,创建失败不再继续轮询 undefined
  • 新增 /video 视频创作台页面,参考生图工作台布局,支持提示词、参考图、视频参数、生成结果、保存素材、下载和本地生成记录;清晰度和秒数均支持常用值选择与手动输入,生成记录只保存媒体 storageKey 并可回填本次提示词、参考图和参数。
  • 视频创作台生成前会把模型、尺寸、秒数、清晰度归一化为视频接口支持的参数,并展示后端返回的错误信息,避免页面侧残留的生图参数影响视频请求。
  • 火山方舟 Agent Plan / Seedance 2.0 视频生成需要在真实账号下验证:/contents/generations/tasks 创建任务、轮询状态、content.video_url 回填画布,以及 401/403/429/超时错误提示。
  • 管理后台保存私有渠道后,需要验证所有已启用渠道里的模型会自动出现在公开 availableModels,并且 defaultVideoModeldefaultImageModeldefaultTextModel 在为空或失效时会自动修复,前台不再显示旧的 grok 默认值。
  • /video 和画布视频设置已按 Seedance 2.0 增加分辨率、比例、4-15 秒/智能时长、生成声音和水印参数;需要在真实浏览器里验证参数回填、生成记录和画布节点配置都能保持一致。
  • /video 支持最多 9 张参考图、3 个参考视频、3 个参考音频;需要验证格式、大小、音频时长提示和生成请求中的 reference_imagereference_videoreference_audio 组装。
  • 画布新增音频节点,支持上传、拖入、播放、移动、缩放、删除,并可作为上游参考音频参与 Seedance 视频生成;需要验证刷新后本地音频 URL 能恢复。
  • PUBLIC_BASE_URL 已配置公网域名时,需要验证本地上传参考视频和参考音频能被火山拉取;未配置或配置为内网地址时,需要验证前端能给出明确提示。
  • Seedance 返回远程视频 URL 但浏览器无法下载为 Blob 时,需要验证视频节点刷新后仍保留远程 URL,并确认上游 URL 有效期限制。

Phase 1 + Phase 2(素材管理后端)待测试

  • 管理后台「系统设置 → 私有配置」可正确保存和读取上游素材管理 Base URL,保存后素材接口即时生效。
  • 管理后台「用户管理」可为已有用户配置上游 API Key,保存后该用户调用素材接口会携带对应 Key。
  • 管理后台编辑用户时,清空「上游 API Key」输入框并保存,数据库中该字段应被清空为空字符串(而非保留旧值)。
  • 素材组创建接口 /api/v1/asset-groups 在合法参数下能成功创建并返回素材组信息(含上游 upstream_id)。
  • 素材创建接口 /api/v1/assets 在指定合法素材组和类型(Image/Video/Audio)时能成功创建(含上游 upstream_id)。
  • 无权访问其他用户的素材组时,接口返回明确错误信息(无权访问该素材组素材组不存在)。
  • 分页参数 pageSize 超过 500 时会被截断为 500,不会一次性拉取超大数据集。
  • 删除素材组接口 /api/v1/asset-groups/:id 会级联删除组内素材,并返回上游删除成功/失败数量统计。
  • 素材组详情、更新、删除,素材详情、更新、删除等 6 个带路径 ID 的接口,在 Gin 路由下能正确解析 ID,不再返回"无效ID"。
  • 当上游素材已不存在(404)时,级联删除应忽略该错误并继续清理本地数据;上游返回 500 时记录错误但不中断,仍继续清理本地数据并删除素材组,返回统计信息告知用户上游删除结果。
  • 素材创建时若上游成功但本地保存失败(如唯一约束冲突),应触发上游补偿删除,避免产生孤儿数据。
  • 素材详情、更新、删除操作应使用上游返回的 upstream_id 调用上游接口,而非本地自增 id
  • 未配置上游服务地址或 API Key 时,接口返回明确错误(未配置上游服务地址 / 未配置上游 API Key)。

Phase 3(素材库前端)待测试

  • /assets 页面出现"本地素材"和"云端素材组"两个 Tab,默认显示本地素材,Tab 切换流畅。
  • 本地素材 Tab 功能与改造前完全一致(搜索、筛选、分页、增删改、导入导出)。
  • 云端素材组 Tab 左侧显示素材组列表,选中项高亮;无素材组时显示 Empty 状态。
  • "新建素材组"弹窗可正确创建素材组,名称 64 字符、描述 300 字符限制生效,创建成功后列表自动刷新
  • 素材组列表每项右侧有删除图标,点击弹出确认弹窗,提示"素材组内的所有素材将被一并删除,此操作不可撤销"。
  • 确认删除后调用后端接口,成功后列表自动刷新;若删除的是当前选中组,右侧素材网格自动清空或切换到其他组。
  • 选中素材组后右侧显示素材卡片网格,卡片显示预览图(vendorUrl 可用时)或类型图标,以及名称、类型标签、状态标签。
  • "上传素材"弹窗可正确提交素材 URL、类型和名称,提交后卡片状态显示"处理中"。
  • 上传成功后自动轮询状态:每 3 秒刷新,状态变为"可用"或"失败"后停止,2 分钟后无论状态如何都停止轮询。
  • 点击素材卡片打开详情 Drawer,显示本地 ID、字节 assetId、原始 URL、所属组;可点击"复制 assetId"写入剪贴板;可删除素材并刷新列表。
  • 未配置上游 API Key 的用户在云端素材组 Tab 看到"未配置云端素材 API Key"提示。
  • 已配置 API Key 但未配置上游服务地址的用户在云端素材组 Tab 看到"未配置上游服务地址"提示(此前只会静默显示空列表)。
  • 已登录用户调用素材组/素材接口时正确携带 token,不再报"未登录或权限不足"。
  • 登录/获取用户信息时,AuthUser 响应包含 hasUpstreamApiKey 布尔字段;前端 useUserStore 能正确读取该字段。
  • 未配置上游 API Key 的用户进入云端素材组 Tab 时,前端直接通过 hasUpstreamApiKey 前置判断显示提示,不再先发起 API 请求再回退。
  • 素材上传表单验证失败时(如 URL 为空),页面不再抛出 unhandled rejection,验证提示正常显示。
  • 素材管理相关组件(新建素材组、上传素材、素材详情 Drawer)使用 App.useApp() 动态 message 实例,浏览器控制台不再出现 [antd: message] Static function can not consume context like dynamic theme Warning。
  • (#47) 素材详情 Drawer 在深色主题下信息区域可读:预览区、类型/状态标签、信息区域(本地ID、字节ID、URL、所属组)和错误信息均使用 Tailwind dark: 变体适配,无硬编码浅色背景导致的不可读问题。
  • (#53) 素材上传等待体验优化:上游 HTTP 超时 30s → 15s;后端超时错误文案改为"上游处理中,素材可能已创建,请稍后刷新查看状态";前端 loading 提示显示"预计 10-30 秒";超时场景下自动关闭 Modal 并刷新列表,其他错误保持 error 提示。
  • (#54) 素材上传表单增加 URL 格式校验:必须以 http/https 开头、长度 ≤2048、不支持 base64 内联数据;非法 URL 在点击上传前即被表单拦截,不会发送到后端。
  • (#59) 素材上传增加 URL 扩展名与素材类型匹配校验:图片 URL 只能选 Image 类型、视频 URL 只能选 Video 类型、音频 URL 只能选 Audio 类型;无扩展名的 URL(如某些 CDN 链接)允许通过;前后端均做校验,单文件上传和批量上传均生效。
  • (#60) 素材生命周期严格区分:素材列表(素材管理界面)只显示 Active(状态 = 1)的素材;Pending/Processing/Failed/UploadFailed 状态的素材不再出现在素材列表中。AssetID 在创建本地记录时为空字符串,等上游创建成功后填入上游返回的真实 assetId;避免临时 UUID 暴露给用户。
  • (#61) 任务管理器从后端 DB 恢复:打开任务管理器时自动调用 /api/v1/assets/tasks 获取当前用户所有非 Active 素材,刷新页面后任务不会消失。
  • (#62) 批量上传 Step 1 必须先选择素材组才能上传 Excel 并进入 Step 2,未选择分组时给出提示。
  • (#55) 上游返回 HTTP 429 限流时给出明确提示:后端识别 429 并返回"今日素材库调用次数已达上限(10000次),请明日再试";其他上游错误(400/404/500)保持不变。
  • (#56) 素材选择器支持 Video/Audio 类型:移除 Image 硬编码过滤,有 vendorUrl 的 Active 素材(图片/视频/音频)均可展示;预览区根据类型显示不同图标;Empty 提示改为"该组暂无可用素材"。
  • (#57) 素材上传流程重构:后端 Create 改为"先保存本地 Pending 记录 + 异步 goroutine 调上游",用户提交后 1 秒内即可看到"待上传"卡片;异步上传成功变为"处理中",失败变为"上传失败"并显示具体错误;UploadFailed 卡片支持"重试上传";Delete 改为上游删除失败不阻止本地删除;新增 POST /api/v1/assets/:id/retry 重试接口。
  • (#58) 素材详情 Drawer 状态显示完整:处理全部 5 种状态(Active/Failed/UploadFailed/Pending/Processing),UploadFailed 和 Pending 不再错误显示为"处理中";复制 assetId 按钮增加空值保护(disabled + 点击提示);UploadFailed 状态下 Drawer 内显示"重试上传"按钮。
  • (#50) 视频创作台参数设置 Drawer 废弃 height 属性替换为 style={{ height: "82vh" }},消除 [antd: Drawer] height is deprecated Console Warning。
  • (#51) EnsureDefaultAdmin() 在已有空密码 admin 时自动用 ADMIN_PASSWORD 补全密码;无 admin 时仍创建新账户;密码非空时保持原行为不做修改。

Phase 4(视频生成素材选择器)待测试

  • 视频生成页面参考图区域出现"从素材库选择"按钮,点击打开素材选择 Modal。
  • 未配置上游 API Key 的用户打开素材选择 Modal 时,看到"未配置云端素材 API Key"友好提示,而不是空下拉框。
  • Modal 标题为"从素材库选择",下拉选择素材组后展示组内 Active 状态素材。
  • 素材选择器仅展示 Image 类型素材,Video/Audio 类型不应出现在选择列表中。
  • 点击素材卡片后关闭 Modal,该素材出现在参考图列表中。
  • 参考图列表中的云端素材显示预览图(vendorUrl 可用时)或类型图标,点击 × 可移除。
  • 生成视频请求时,云端素材以 asset://assetId 格式传入 Seedance / 火山接口。
  • 非 Seedance 模型下,若选中素材缺少 vendorUrl,前端应在生成前给出明确报错,不发送请求。
  • OpenAI 视频接口下,vendorUrl 可用的云端素材可正常作为参考图上传。
  • 素材选择 Modal 中,vendorUrl 为空的素材卡片不会出现在列表中,避免选中后生成时报"当前模型不支持素材库引用(缺少预览 URL)"。

#95 素材管理 UI 修复与功能补齐

  • 卡片/列表复选框 + 批量操作:卡片视图 hover/选中时显示 checkbox,列表视图新增 checkbox 列和全选;选中后顶部出现批量操作工具栏,支持批量删除和批量移动到分组。
  • 文件大小显示:卡片视图(类型标签旁)、列表视图(大小列)、素材详情 Modal(独立信息行)三处均通过异步 HEAD 请求获取 Content-Length 并缓存显示。
  • 任务管理器增强:任务表格新增缩略图(类型图标)、速度、耗时列;UploadTask store 扩展 startedAt/completedAt/speed/openPanel 字段;processing 状态支持「同步」按钮,done 状态支持「查看」按钮(新标签打开 URL)。
  • 批量上传步骤3:上传完成后显示「打开任务管理器」按钮,点击直接展开底部任务抽屉。
  • 单文件上传提示文案:上传表单底部新增素材规格说明(图片/视频/音频的大小、格式、URL 要求)。
  • 分组拖拽排序:管理分组 Drawer 实现 HTML5 DnD,拖拽时显示蓝色指示线,排序结果保存到 localStorage,分组 pills 按保存顺序渲染。
  • 移动到分组:后端 UpdateTobAssetTobAssetService.Update 扩展支持 groupId 更新;前端批量操作工具栏提供分组 Select 下拉,实现批量移动。
  • 分组标签直接编辑:分组 pill 支持双击进入内联编辑,失焦或回车保存,调用 updateAssetGroup
  • 深色模式切换按钮:素材管理页面顶部工具栏新增主题切换按钮,使用 useThemeStore 并同步更新 document.documentElement

视频生成相关修复(#71~#76)

  • #71 NewAPI 转发豆包视频 404 — resolveAIProxyPathBuildModelChannelURL 已区分 Ark 直连与 NewAPI 路径前缀。
  • #72 Seedance 2.0 参考生视频缺少 scene=reference — 当满足 ≥3 张纯图片参考或存在视频/音频参考时,payload 自动追加 scene: "reference"
  • #73 新增本地视频生成配置指南(椋鸟文档风格)— 见 docs/content/docs/canvas/video-generation-guide.mdx
  • #74 Video 预览被容器截断 — 已改为 object-fit: contain(已于先前提交修复)。
  • #75 buildApiUrl 空值/协议校验 — 已在 use-config-store.ts 中补充格式检查。
  • #76 视频生成配置缺少素材管理 API 域名检测 — assertVideoConfig 已增加 starlingdroid.com 域名校验。

管理后台用户管理修复

  • 修复:管理员编辑用户时修改密码不生效 — 根因是 service.SaveUser 返回前会清空 Password 字段,而 AdminSaveUser 在更新 upstreamApiKey 时二次调用了 repository.SaveUser,把空密码覆盖回数据库。修复后第二次保存前会先重新读取数据库中的密码 hash 恢复。需要验证:编辑用户时输入新密码并保存,该用户能用新密码正常登录;同时 upstreamApiKey 的更新仍正常工作。

On this page