Round 2 product feedback

这轮反馈已经按真实测试收口。

5 条反馈里,有 2 条是 Mai 这边能直接改的:缺音色时怎么提醒、默认画中画大小。 另外 2 条需要 Tobatsu runner 支持:只重试最后阶段、稀疏字幕降级。现在这两条也已经在 test 环境跑通。 音频问题已经用 v29/v13 证明关闭,不再改。

2Mai 已改
2Tobatsu 已实测
1确认不再改
2/2新增 E2E 通过
Decision rule

判断方法很简单

先问这条反馈归谁管。能由 Mai 控制的,就改 skill 或 builder。要下游 runner 才能做到的,等下游发布后再用 test 真跑。

收到反馈

先看用户真实问题,不按旧报告硬套。

Mai 能直接控制?

能:改引导、默认值、提交参数。

下游才能做到?

列为 Tobatsu 新能力,不说已经修好。

Five feedback items

逐条结论

反馈 判断 这轮动作 状态
缺音色时口径不清 Mai skill 该说清楚。 提醒用户在输入框左下角选音色;需要时给推荐。不转试听流程。 已改
数字人原片成功,最终成片失败 最后阶段重试需要 runner 支持。 Mai 只负责安全传 `resume_from=final` 和 4 个复用 file_id;Tobatsu rev30 已跑通。 已实测
音频校验导致成片失败 旧版本 guard 误判。v29/v13 已验证。 不再动 `audio_mix`。保留口播 + 原声的证据已经成立。 已关闭
SRT 太稀,做不了词级特效字幕 字幕 burn 在 Tobatsu 下游。 句级 SRT 不再硬失败;rev18 降级成普通句级字幕。 已实测
默认 PIP 偏小 默认值可微调,不改默认布局。 右上圆形保留,默认大小从 `0.24` 调到 `0.26`。 已改
Mai changes

代码里实际改了什么

skill 文案

缺音色时不乱带路

没给 `voice_id` 时,提醒用户在左下角选音色,或让我们给推荐。不会自动跑试听。

builder 默认值

画中画稍微放大

默认 `overlay_size` 从 `0.24` 到 `0.26`。如果用户自己传尺寸,仍按用户的来。

skill 口径

失败时不从头吓人

如果主播图、口播、数字人已经好了,只告诉用户重试最后合成。能力本身等 Tobatsu 补。

skills-bundles/global/voiceover-digital-human-combo/SKILL.md tools-backend/tools/tobatsu-gateway/request-builders.ts tools-backend/tests/tobatsu-gateway-request-builders.test.ts docs/mai-combo-skill-goal.md
Tobatsu E2E

两条下游能力已经跑过 test

这里不靠口径。

Mai 先把提交参数放好,Tobatsu 再发布 runner/workflow。最后用 tool-test 真提交任务。 两条都成功,并且都有 workspace 证据。

E2E 通过

只重试最终阶段

复用主播图、数字人、口播音频和 SRT;只重跑 PIP、字幕、音频校验、Scribe 和回调。

E2E 通过

字幕降级

2 条 cue 的稀疏 SRT 没再失败;最终视频 metadata 里是 `plain_sentence`。

不动

音频混合

v29/v13 已证明最终成片里同时有口播和源视频声音。本轮不再碰。

Evidence

验证和依据

Mai 这边只动小范围。没有改 `generate_image` 入参,也没有再改音频混合规则。

Mai commits: 4eca70e 缺音色提醒 + 默认 PIP 0.26 6b1c4c6 gated resume_from=final 参数 tests: tools-backend targeted: 20/20 passed tools-backend full: 38/38 passed test skill import: byte-identical

下游两条用真实 test 任务验过。不是只看字段。

Final-stage retry: gwr_f131825c → succeeded workflow v30 / runner v14 resume-final-reuse.json present skipped: elevenlabs_tts, fal/omnihuman providers: rendi, elevenlabs/scribe_v2 CC proof: 4 reused files are byte-identical Sparse SRT fallback: gwr_6cbce712 → succeeded subtitle_fallback=sentence_level subtitle_effect_mode=plain_sentence subtitle_fallback_reason=sparse_srt CC proof: 2-cue SRT degraded, no hard fail

一个容易误判的点

最终阶段重试里,Mai 会把复用 URL 再导入一次,所以 artifact 表里会出现新的 file_id。 这不是重新生成。判断复用要看 callback 的原始 URL、`reused=true`,以及 Tobatsu 的 `skipped_provider_stages`。

还有一个后续小优化

同一个 canvas 里连续重试时,复用产物会再次入画布,所以会看到重复的主播图、数字人原片、 口播音频和字幕。它不影响本轮正确性,也不会重复花 TTS/OmniHuman 的钱;后面可以做去重或来源标记。