《二周目的放课后》A/B 双结局先行成片已上线立即播放 →

Pi StoryLab

先看两种故事结局
再看 Agent 如何保证生产可靠

两条 60 秒 A/B 成片置顶播放;下方分别展示 25 秒 Agent 技术证据、四类局部审核案例,以及 38 个单动作镜头的 v5 终版生产架构。

查看 Agent 技术证据
结构化契约

分镜先通过 Shot Contract 与 Prompt Linter,再进入付费生成

动态 DAG

失败按错误码返回对应节点,不重跑整条工作流

双重审核

CPU 指标与 VLM 语义审核共同决定镜头是否通过

失败记忆

Reflection 检索历史失败经验,只修正当前镜头

成本路由

生成、审核、复用和返工都有可追溯的成本与延迟

《二周目的放课后》A/B 双结局成片

两条 60 秒成片共享前 51 秒,只在结尾表达不同选择;含调色、字幕、配音、音乐与场景音。

已审 720P 资产先行合成版
A
继续成为标准答案60 秒 · 720P · 完整声画

悠真再次完成所有正确答案,人生结构没有改变。

B
选择无人夸奖的答案60 秒 · 720P · 完整声画

悠真允许不完美,并第一次保留自己的选择。

当前可播放版共享 51 秒 · 26 个已审 720P 动态资产 · A/B 各 3 个结尾生产位

当前可播放版基于 v4 已审核资产;不冒充尚未生成完毕的 v5 38 镜头终版。

共享主线只生成一次,A/B 只生产各自结尾

8 段 · 38 个单动作镜头
SHARED MAINLINE27 个镜头

00:00–00:47 · A/B 复用 100%

BRANCH A5 个镜头

继续成为标准答案

BRANCH B6 个镜头

选择无人夸奖的答案

  1. 01反常钩子
  2. 02上一次的人生
  3. 03时光瓶与穿越
  4. 04摆烂失败
  5. 05新评分表
  6. 06未央看穿
  7. 07A · 标准答案
  8. 08B · 自主选择
12重点镜头 · 原生 720P
26普通镜头 · 480P → 720P
FFmpeg叠化、穿越与场景切换
声音连续性

场景音、声音桥与动作匹配

  • 列车
  • 蝉鸣
  • 走廊
  • 快门
  • 舞台
  • J-cut / L-cut
  • 声音桥
  • 动作匹配
独立特效后期

视频模型只负责干净底片

  1. 生成干净底片
  2. 预留空白区域
  3. 记录 ROI 与蒙版
  4. 生成透明特效层
  5. FFmpeg 合成

时光瓶通知 · 相机屏幕 · 玻璃倒影 · 监控墙 均在视频审核通过后合成。

25 秒看完预测、审核、Reflection 与局部返工

主片只使用 8 个 v2 原生 720P 入选镜头,并把 Agent 节点、错误码、路由与复用指标直接叠加到证据画面。

v2 原生 720P 闭环已交付
25 秒 Agent 技术闭环主片25 秒 · 1280×720 · 8/8 镜头入选

本轮关键决策

失败码EXTRA_PERSON
Reflectionclean_first_frame_then_retry_same_shot
  • 保留 7 个已通过镜头
  • 只重写 AL04_GRIP_GUITAR
  • 重生成后重新进入 CPU + VLM 双审核
动态 DAG失败沿返回边回到对应节点已经通过的资产保持不变;局部修正后重新进入双审核。
  1. Story Agent因果与目标
  2. Shot Contract结构化交接
  3. Prompt Linter生成前拦截
  4. Cost Router三候选路由
  5. Generate24 × 720P
  6. CPU + VLM14 通过
  7. Reflection失败记忆
  8. Local Retry只返工 1/8
  9. Compose25 秒交付
  • prompt_lintershot_contractACTION_OVERLOAD → 重写当前 Contract
  • dual_reviewreflectionEXTRA_PERSON / MOTION_MISSING → 读取失败记忆
  • reflectionlocal_retry新 Motion Profile → 只返工当前镜头
  • local_retrydual_review重生成结果 → 再次双审核
  1. 1
    Story Agent锁定目标与因果
  2. 2
    Shot Contract8 个单动作镜头
  3. 3
    Prompt Linter拦截 3 类生成前风险
  4. 4
    Cost Router24 个原生 720P 候选
  5. 5
    CPU + VLM14 个候选通过
  6. 6
    Reflection失败码命中局部路由
  7. 7
    Local Retry只返工失败镜头
  8. 8
    Compose25 秒主片交付
24原生 720P 候选
14语义审核通过
58.3%候选通过率
8 / 8最终入选镜头
1 / 8局部返工
42.8 min候选中位延迟
未落盘生成成本记录
100%Trace 完整率

指标范围:24 个 v2 原生 720P 候选;CPU 与 VLM 双审核;8 个镜头逐镜头人工确认后合成。

失败码必须绑定视频证据、测量值与返工路由

生成前风险与生成后失败分开呈现;自动标签只用于审核路由,不冒充人工训练真值。

4 / 4 已公开
01
EXTRA_PERSON生成后审核

人物数量与 Shot Contract 不一致

CPU 指标未报错,VLM 在语义层发现人物数量和起始状态不符合 Contract;只替换当前镜头。

SHOT CONTRACT单主体、固定机位、左手只完成一次握琴动作
首轮 · balanced拒绝 · EXTRA_PERSON
局部返工 · identity_plus通过 · 进入合成
生成前阻断EXTRA_PERSON危险机位不进入付费生成
  • CPU: pass
  • VLM: EXTRA_PERSON
  • 复用 7 / 8 镜头
REFLECTION ROUTEclean_first_frame_then_retry_same_shot
02
MOTION_MISSING生成后审核

画面稳定,但指定动作没有发生

balanced 候选重复帧率偏高且试卷未移动;Reflection 切换 motion_plus 后,动作完成并保持结束姿态。

SHOT CONTRACT双手将试卷拉近两厘米,然后停止并保持
首轮 · balanced拒绝 · MOTION_MISSING
局部返工 · motion_plus通过 · 进入合成
生成前阻断MOTION_MISSING危险机位不进入付费生成
  • 首轮重复帧率 95%
  • VLM: MOTION_MISSING
  • motion_plus: accepted
REFLECTION ROUTEmotion_plus_same_shot
03
SUBJECT_SCALE_JUMP生成前 + 生成后

固定机位先约束尺度,再用测量验证

Prompt Linter 在付费生成前阻断会引发尺度跳变的机位变化;通过候选继续接受 CPU 主体面积测量。

SHOT CONTRACT锁定机位与构图;主体面积变化不超过 30%
生成前阻断SUBJECT_SCALE_JUMP危险机位不进入付费生成
  • 生成前:SUBJECT_SCALE_JUMP blocked
  • 生成后:主体面积变化 12.1%
  • 阈值:≤ 30%
REFLECTION ROUTElock_camera_reduce_motion
04
ACTION_OVERLOAD生成前审核

六个动作不进入一次付费生成

关试卷、推合同、拿吉他、起身、转身、离场被判定为动作过载;Reflection 只重写当前 Contract。

SHOT CONTRACT每个镜头一个可见动作、一个机位、一个结束状态
01 拉近试卷
02 推开合同
03 握住吉他
  • 原 Contract:6 个动作
  • 安全改写:3 个单动作镜头
  • 付费生成前阻断
REFLECTION ROUTEsplit_into_three_single_action_shots

镜头完成即持久化,中断后只恢复真正缺失的结果

并行工具结果在完成时写入恢复点,公开事件仍保持源码顺序。GPU Worker 断线或任务重启时,不会重复计算已经完成的镜头。

恢复契约3 项已验证
结果及时落盘tool_execution_end 后立即保存完成结果
完成
顺序兼容上下文按 toolCall 源码顺序恢复
完成
局部恢复只为真正缺失的调用生成错误或重试任务
完成