项目概览

CutFlow 是一套面向本地服务商和商家账号的 AI 短视频交付平台。它解决的不是「偶尔生成一条看起来不错的视频」,而是更难的经营问题:怎样围绕同一个账号,持续、稳定、可核算地生产内容,并让每轮结果回流到下一轮。

我作为联合创始人负责产品定义、AI 视频生产流水线、B 端交付与商业化。项目曾稳定服务 2 个商家账号,月营业额约 1.5 万元,先通过真实付费验证了「账号定位 → 脚本 → 成片 → 发布 → 复盘」这条链路的价值,再把人工交付经验沉淀为系统。

Case-first:让系统记住一个账号,而不是只记住一次任务

传统 AI 视频工具通常从一段 prompt 开始,生成结束后上下文也随之消失。CutFlow 把 Case 作为长期产品边界:

  • 账号定位、品牌禁区、目标受众和内容策略进入 Case 上下文。
  • 脚本、素材、音色、Prompt 版本和供应商配置都绑定到明确的生产事实。
  • 每次成片、发布与效果数据回流到评分卡和复盘流程。
  • 下一轮创作读取的是被验证过的账号经验,而不是重新从空白 prompt 猜测。

因此,CutFlow 更像一个内容操作系统,而不是一次性生成器。

三条视频生产流水线

创建视频时,用户面对的不是三个只在节点数量上不同的技术模板,而是三种不同的生产方式:用规则剪已有素材、让 Agent 在已有素材中做选择,或者让视频模型直接生成整条广告。

链路画面从哪里来谁做核心决策更适合什么任务
规则剪辑主链Case 素材库中的数字人和 B-roll检索结果与固定规则稳定、批量、可复现的日常内容生产
Agent 智能剪辑链同一套 Case 素材库媒体选择 Agent + 独立 BGM Agent需要理解脚本语义和具体剪辑要求的内容
Seedance 信息流支链视频模型原生生成,可附参考图片或视频Seedance 生成模型快速制作 15 秒原生信息流广告

无论选择哪一条链,系统都会创建独立的 WorkflowRun,记录节点状态、供应商调用、成本和最终产物。三条链共用 Case、ProviderGateway、对象存储、导出和运行报告,但只执行自己真正需要的生产步骤。

1. 用规则稳定出片:数字人主链

digital_human_v2 是 CutFlow 的基础生产链,共 19 个节点。它解决的是一个很实际的问题:商家已经有数字人口播素材、门店和产品 B-roll、音色、字体与配乐,系统怎样把这些资产持续组合成结构稳定、可以批量交付的视频。

一条任务进入后,链路会依次完成:

  1. 确认生产条件: 校验脚本、音色、字幕、B-roll 和口型配置,并加载当前 Case 的品牌信息、素材和历史使用记录;
  2. 把脚本变成可剪辑的时间轴: 生成旁白,对齐每句话的真实起止时间,再根据语句边界编译出可以安全切镜的数字人窗口和 B-roll 窗口;
  3. 为每个窗口找素材: 根据当句话的内容、素材标注和检索结果建立候选集,同时排除时长不够、时间冲突或近期使用过多的素材;
  4. 按照规则完成指派: 在每个窗口的合法候选中,综合匹配分、可用时长、素材唯一性和重复使用惩罚选择数字人或 B-roll。这里不让模型临时改时间点,也不允许同一素材无约束地反复出现;
  5. 合成数字人和画面: 生成数字人轨道并完成 LipSync,把数字人和 B-roll 装入已经校验过的帧级时间线,再交给 FFmpeg 渲染;
  6. 完成包装与交付: 按固定规则生成字幕带,根据脚本匹配可用 BGM 片段,完成混音和文件质检,最后输出成片、封面、发布文案、发布包与运行报告。

这里的“确定性”并不是说整条链完全不用模型。创意意图和检索 query 仍然可以由模型辅助生成,但最终用哪个素材、放在哪个合法窗口、字幕怎样排、视频怎样渲染,都要经过明确规则和数据契约。因此它更适合固定栏目、矩阵账号和日常批量出片:效果未必每次都追求最大的创意变化,但生产结果更稳定,失败也更容易定位和恢复。

主链还支持两种画面模式:insert 保留数字人口播为主画面,只在重点语句插入 B-roll;full_coverage 则让 B-roll 覆盖整段旁白,并直接跳过数字人轨道和 LipSync。后者是同一条生产链中的“纯 B-roll 画外音”模式,不需要再维护第四套模板。

2. 让模型理解剪辑要求:Agent 智能剪辑链

digital_human_editing_agent_v220 个节点。它并不是让 Agent 从零生成视频,也不是把整条时间线交给大模型自由发挥;它与主链使用相同的脚本、配音、旁白时间戳、素材库、时间窗口、LipSync、字幕、渲染和导出能力,只替换了其中最需要语义判断的两个环节。

第一个环节是画面选择。用户可以额外输入“尽量使用穿搭相近的人像”“讲到施工时多展示细节”等剪辑要求。媒体选择 Agent 会同时看到脚本、逐句时间、已经编译好的镜头窗口,以及每个窗口允许使用的人像和 B-roll 候选;候选中包含场景描述、关键词、可用时长和检索排名。Agent 的工作只是回答“这个窗口选哪个候选、为什么”,不能新增素材、创造不存在的时间点,也不能修改字幕或配乐。

Agent 输出之后,系统还会逐项检查:人像窗口是否全部覆盖、素材长度是否足够、选择是否来自该窗口的合法候选、B-roll 是否重叠、是否超过插入数量,以及素材和场景是否被重复使用。不符合约束的结果必须先修复或停止生产,不能直接流入渲染。

第二个环节是配乐选择。独立的 BGM Agent 只从已经完成标注、能够真实裁切的音乐片段中选择一个 bgm_id,并说明选择理由;它不能碰画面,也不能决定字幕。固定字幕带会先由确定性节点生成,随后才把选中的 BGM 与字幕混入成片。把媒体、BGM 和字幕拆开,是为了避免一个“大而全”的 Agent 同时修改太多生产事实。

这条链更适合内容语义复杂、素材候选很多,或者客户对画面风格有明确自然语言要求的任务。它比规则主链更能理解“这一句话应该配什么画面”,但会增加模型调用、等待时间和输出校验成本;最终成片仍然回到与主链相同的时间线验证、渲染、质检和发布流程。

3. 直接生成整条广告:Seedance 信息流支链

seedance_t2v_v1 是一条独立的 5 节点短链。它服务的不是“用库存素材剪一条数字人视频”,而是快速生成一条原生信息流广告。当前规格固定为 15 秒、3:4、720p,既可以只输入口播脚本,也可以从 Case 的 AI 素材中附带人物、门头、产品或环境图片 / 视频作为参考。

系统会把脚本组织成“人物出镜口播 + 中段 B-roll 穿插 + 结尾回到人物”的信息流结构,并要求 Seedance 同时生成画面、自然口播和口型。因为声音与画面已经由视频模型一次生成,这条链不会再执行数字人主链中的 TTS、ASR、素材检索、LipSync、时间线装配、本地字幕和 BGM 混音。

生成完成后,平台直接把视频登记为成片,从视频中抽取一帧作为封面,并生成发布包和运行报告。它不产生数字人链路所需的时间线与样式计划,也不额外生成 AI 封面;供应商生成失败时不会自动重试,避免重复扣费后又得到一条内容不同的视频。

Seedance 支链适合快速验证广告创意,或者在本地素材不足时先做一版原生生成短片。它的优势是链路短、对素材准备要求低;边界也很明确:当前输出规格固定,平台没有逐镜头编辑这条生成结果,因此它不能替代需要稳定数字人形象、精确字幕包装和可控素材复用的两条数字人链。

三条链最终形成的是分层关系:规则主链负责稳定交付,Agent 链负责在稳定框架里增加语义判断,Seedance 支链负责原生生成和快速试错。

多模型能力如何被产品化

流水线需要 LLM、VLM、TTS、ASR、对口型、文生图和文生视频等多种外部能力。CutFlow 没有把这些 SDK 分散写进业务节点,而是通过 ProviderGateway 按能力路由:

  • 节点只声明需要哪种能力,不直接绑定某一家模型。
  • Provider Profile、Secret Store 和 Prompt Registry 分别管理供应商、密钥与提示词版本。
  • 未配置真实 provider 时显式失败;只有本地 demo 或测试可以明确打开 sandbox fallback。
  • 每次调用记录 token、耗时、预估 / 实际成本、模型与 Prompt 版本,便于追责和替换。
  • 幂等键与 typed artifact 让重试能够复用已经完成的外部调用和媒体产物。

这套抽象的目的不是追求「接更多模型」,而是让供应商替换、价格变化和单点故障不再直接污染业务流程。

为重复交付设计的运营能力

CutFlow 把成本和成品率当作一等产品对象,而不是上线后再补日志:

  • 11 项单片成本指标覆盖成片、质检通过、发布、重试、浪费和按 provider / model / prompt 归因。
  • 11 项成品率漏斗追踪从任务进入、各阶段完成,到质检、人工确认和发布的转化。
  • 预算阈值、余额监控、熔断和告警在调用前后参与决策。
  • 内容哈希、节点输入和 artifact manifest 共同决定哪些结果可以安全复用。
  • 素材 ledger 会降低近期反复使用素材的权重,减少连续视频里的画面重复。
  • 降级、返工和人工审批都写入审计事件,不允许静默吞掉失败。

工程架构

  • FastAPI + OpenAPI 是 API 与 React 控制台的契约事实源。
  • Temporal 承载长流程、重试、取消、恢复和多 worker 编排;API 只负责准入与控制。
  • PostgreSQL / SQLAlchemy 保存业务事实,对象存储保存媒体与中间产物。
  • Redis 只用于多副本下的限流、实时事件 fanout 和协调,不被当作业务真源。
  • FFmpeg / FFprobe 负责转码、裁切、对齐、时间线渲染、字幕与 BGM 混合及输出验证。
  • ProviderGateway + Prompt Registry 管理多模型调用和提示词生命周期。
  • OceanEngine / XLSX connector 将外部效果数据带回复盘链路。

我的工作

我负责 CutFlow 从商业问题、产品模型、系统架构到工程落地的完整 0→1 建设,而不只是其中某个 AI 节点或工作流。当前仓库中的 React 控制台、FastAPI API、Temporal Workflow 与 Worker、数据和对象存储、模型供应商接入、媒体处理、运营观测及测试体系,均由我使用 Claude Code、Codex 和 Cursor 作为开发工具搭建并持续演进;产品边界、技术选型、节点职责、验收标准和最终交付质量由我判断并负责。

整个平台的构建

  • 把线下交付抽象为产品系统: 从本地商家的获客目标、内容节奏、素材条件和交付报价出发,定义以 Case 为长期账号边界的产品模型,并设计脚本、素材、成片、发布结果与复盘数据之间的关系,让一次性交付能够积累为下一轮生产可复用的上下文。
  • 搭建端到端工程架构: 完成前端工作台、API 契约、Temporal 编排、数据库模型、对象存储、Redis 协调、ProviderGateway、Prompt 与 Secret 治理、FFmpeg 媒体内核等模块,使需求录入、生产执行、异常恢复、成片导出和效果回流处在同一个可审计系统中。
  • 划清 Agent 与确定性系统的边界: 将创意理解、素材选择等开放判断交给模型,将时间轴、字幕、渲染、文件校验、状态迁移和成本记录保留为确定性节点;所有模型结果都必须经过结构化契约和下游校验,不能直接成为不可追溯的生产结果。
  • 为长期运行设计可靠性: 统一节点输入输出与 typed artifacts,建立幂等、重试、取消、恢复、复用和显式降级机制;同时记录供应商调用、节点耗时、成本、成品率和发布结果,使一次 WorkflowRun 可以被定位、解释和复盘。
  • 建立研发与交付闭环: 从需求与契约、实现和迁移,到自动化测试、构建、代码审查和真实链路验收,都在同一仓库中维护,保证平台功能不是停留在演示页面,而是能够被反复执行和持续迭代。

三套 Workflow Template 的链路设计

  • digital_human_v2(19 个节点)——确定性数字人主链: 我将整条链路拆为请求校验与 Case 加载、创意意图与 TTS、素材包与旁白边界规划、时间窗查询与素材召回、确定性剪辑决策、时间轴校验、数字人口型合成、渲染、字幕与 BGM 混合、导出和运行报告。核心取舍是让模型参与语义理解,但让镜头边界、轨道装配、字幕合成和输出验证保持确定性;全 B-roll 配音片通过同一模板的 full_coverage 模式实现,而不是复制出第四套流程。
  • digital_human_editing_agent_v2(20 个节点)——Agent 剪辑链: 在复用主链公共前后段的基础上,我把素材编排替换为独立的 MediaSelectionAgentPlanning,并增加 BgmAgentPlanning,将画面选择与音乐选择拆成边界清晰的两类 Agent 决策。Agent 只在给定候选、时间窗和结构化输出契约内工作,之后仍进入统一的时间轴验证、数字人合成、字幕、渲染、导出与报告节点,确保引入自主决策后仍然可控、可测、可回放。
  • seedance_t2v_v1(5 个节点)——短链文本生成视频: 我将它设计为 ValidateRequest → LoadCaseContext → SeedanceGenerateVideo → ExportSeedanceVideo → FinalizeRunReport 的专用短链,不强行套用数字人生产所需的素材检索、口型与本地字幕节点;同时继续复用平台的 Case、WorkflowRun、Provider、Artifact、导出和报告基础设施,使新的生成能力可以低成本接入而不形成孤立系统。

三套模板共用同一套状态机、产物契约、供应商治理和运行报告,但只保留各自真正需要的节点。通过这种设计,我既避免为追求“统一”而制造冗余,也避免每增加一种视频形态就复制一套难以维护的生产系统。

AI 协作式研发

整个 CutFlow 仓库由我借助 Claude Code、Codex 和 Cursor 完成。我把它们作为工程协作工具,用于理解代码库、实现功能、补充测试、重构、审查和排查问题;我自己负责提出问题、定义产品与技术契约、拆分工作流边界、判断实现是否符合真实业务,并对最终运行结果负责。由此形成了“需求与验收标准 → 架构和节点契约 → 代码与测试 → 审查与真实链路验证 → 复盘迭代”的完整研发闭环。