ARTICLE · 1012269
Breatic AI 开发实录 #023|为了显示一张视频封面,AI 重做了结果落库
Breatic 是面向内容创作者小团队的开源 AI 协作工作区,人和 AI Agent 可以在共享无限画布上用自然语言规划、生成并编辑图片、视频、音频、3D 和文本内容,并实时协作。
这次要解决的具体问题是:视频已经生成成功,用户却可能看到错误封面、错误时长、缺失分辨率,甚至不同界面读到不同结果。用户需要的不是一个“任务成功”标记,而是一份立刻可预览、可比较、可继续加工的资产。理想体验是:同一份媒体只测量一次,文件、封面、尺寸和时长作为同一个结果一起交付。

“生成成功”只完成了一半
模型返回的通常是一个文件地址。可是在创作工作区里,文件还要回答很多问题:它是什么类型?多大?多长?封面是哪一帧?能否在节点里直接播放?多个输出应该怎样排列?
旧链路把这些问题拆开回答。结果先落库,视频封面再由另一项后台工作生成,还有清理任务照顾失败和残留。宽、高、时长又可能在不同交付路径里分别读取。

每一步单独看都合理,组合起来却产生了一个危险事实:同一份媒体有多套“真相”。封面任务可能晚到,时长与实际可 seek 范围不一致,某条路径有分辨率,另一条没有。
AI 最后没有继续修封面任务
它把边界往前挪了一层:结果持久化时读取一次媒体容器,同时得到宽、高、时长,并在需要时生成封面。随后,这些经过测量的事实跟文件一起进入同一份结果。

原来的独立封面 job、cleanup 和 provider 路径因此被删除。不是不要封面,而是不再让封面作为一份迟到的旁路事实。
一个文件,应该只有一份展示事实
这次还修了几处看似零散的界面问题:视频节点名称要给分辨率徽标让出空间;媒体控件必须保持可见和可操作;多文件结果需要按网格展开;视频取封面的时间点必须受真实时长约束,而图片不应该凭空带一个时长。

它们实际上都在验证同一件事:结果落库并不等于资产已经可用。只有当用户看到的名称、封面、尺寸、时长和播放行为来自同一份事实,这个结果才真正进入创作流程。
可以复用的判断
做 AIGC 产品时,可以把完成条件拆成两层:模型是否返回了文件;这个文件是否已经成为可靠资产。第二层至少要有一个唯一测量点、一个统一交付契约,以及所有界面共同读取的元数据。
生成速度从几周缩短到几分钟后,团队真正浪费不起的,是对一份结果反复确认:“这到底是不是正确的那一个?”
公开实现:https://github.com/orime-org/breatic/pull/547
加入 Breatic 社区:https://discord.gg/aZRZzJbKzn
这是我参与定义产品目标、审核 AI 实现过程中的真实记录。
Breatic AI 开发实录 #023