千言AI 开发日志:让 ComfyUI 生成任务进入持久化队列

生成任务需要保存下来

图片和视频生成可能持续较长时间。只在界面里保留一次请求状态,遇到窗口关闭、服务重启或网络异常,就难以知道任务有没有完成。千言因此把生成任务放进 SQLite 的持久化队列。

任务保存提示词、生成方式、状态和结果等信息,界面通过任务接口查询进度。用户看到的队列与后台正在执行的工作有共同依据,排查时也可以回看同一条记录。

本地生成按顺序执行

当前生成队列使用单 worker 顺序处理任务。ComfyUI 的本地图片与视频生成会占用显存,队列需要等待真实结果文件出现,才能把一项工作视为完成并继续下一项。

这样组织任务,能让当前正在执行、后续排队和已经完成的工作更容易区分。界面不必把点击后的每条任务都表现为立即运行,等待本身也是一个需要说明的状态。

服务离线时保留等待状态

ComfyUI 没有启动时,任务继续保持 queued,等待环境恢复,而不是把整批任务立即标为失败。重启后的恢复逻辑也会处理此前处于运行中的记录,让队列重新接续。

维护时我会区分两类情况:生成服务暂时不可用,以及某一条任务的输入确实有问题。前者适合等待和提示,后者需要保留明确的失败原因,不能混在一起处理。

画廊生成与发布内容分开流转

画廊任务主要用于产生和挑选素材,完成后可以预览、下载,也可以由用户升级为正式内容。升级以后仍然要经过人工审核,素材生成成功并不等于已经授权发布。

千言还支持远程视频任务,远程参考图需要可访问的公网地址。本地路径与远程 URL 的差别要在创建任务时说明清楚,避免排队很久后才发现服务根本无法读取素材。

项目链接

千言 · 灵感工作室

同项目开发日志