Scripts and Review zh CN - on22s/Side-Story GitHub Wiki
脚本与审校
**Script(脚本)**选项卡将原始文章转换为带标注的脚本。每个条目都包含说话人、要朗读的文字和演绎指示。开始长时间音频渲染前,请先检查文本和角色分配。
若想了解应用的最简使用流程,请参阅第一本有声书。连接与手动传输方式的说明见 LLM 设置。
上传并准备一本书
- 使用 Select Book/Novel (Text, Markdown, or EPUB)(选择书籍/小说:文本、Markdown 或 EPUB)。选中文件后就会开始上传。请等待状态消息出现后再生成。
- 要使用先前上传的原文,请选择 Or reuse an existing upload(或复用已有上传文件),无需再上传一份副本。
- 仅当故事由某个角色以第一人称叙述时,才设置 First-person narrator (optional)(第一人称叙述者,可选)。输入该角色的准确姓名;应用要求这个姓名在预处理后的原文中至少出现三次。如果检查未通过,请检查姓名和原文,不要为了通过检查而在故事中额外插入姓名。
- 决定是否保留 Strip known translator front matter(移除已知的译者前置说明)。此选项会在向 LLM 发送文本前,移除能够识别的译者注释及其他非故事正文的模板内容。请保留原文副本,并检查你希望保留的内容。
- 可选用 Build cast list(构建角色表)。它会请 LLM 识别全书中有台词的角色,包括为未命名的说话人提供描述性名称。**Edit cast list(编辑角色表)**可用于检查和修正这些参考信息。构建角色表会增加一次 LLM 请求,并不能保证归属判断正确。
- 使用通过 API 连接的 LLM 时,可先用 Test this book with the LLM(使用 LLM 测试本书),检查所选原文与已配置模型能否正常配合,再进行完整生成。使用手动复制粘贴流程时,请通过正常的 **Generate Annotated Script(生成标注脚本)**生成一小段摘录,并按其请求操作来测试。
测试、角色表请求、生成和审校都涉及同样的隐私选择:发送私人或未发表的稿件前,请检查当前选用的 LLM 提供商。
生成标注脚本
点击 Generate Annotated Script(生成标注脚本)。当前的生成流程将以下三项工作分开处理:
- 将原文拆分为旁白和口述片段。
- 为口述条目确定说话人。
- 在台词之外单独添加演绎指示。
原文中写出的发声词仍属于文本本身。不要以为一条情绪指示就能替代文本中本应保留的笑声、喘息声或其他词语。
Preserve source words(保留原文词语)(本选项卡上的复选框)会在标注和审校中按顺序保留所有原文词语。词语被改动的脚本不会发布,被改动的文本块也不会渲染。数字和符号仍可能在之后的语音准备中展开。默认关闭,详见原文保留策略(英文)。
Setup → Prompt Settings (Advanced) 中还有两项相关设置:
- Step 1: model output format(第 1 步:模型输出格式):Full text(默认)或 Compact labels(实验性)。后者发送编号句子,只要求模型返回每句的标签;回答不可用的文本块会退回全文方式。仅影响无法由引号确定的文本块。
- Step 3: extra text around each request(第 3 步:每个请求周围的额外文本):为演绎指示请求添加只读的上下文,单侧 0–1,000,000 字符,默认 0。Step 3 不再重复发送同一请求中已有的行。实测 4,000 字符时质量没有可测量的提升,除测试外请保持 0;超过 20,000 字符需要已知的模型上下文长度。
使用 **Generation Logs(生成日志)**查看进度和错误。日志面板也提供单本及批量生成、审校的日志下载。在手动传输模式下,应用会等待每次答复;请使用 Show the prompt(显示提示词),复制请求,将答复粘贴到 Model reply(模型回复),再选择 Submit reply(提交回复)。LLM 的答复仍然必须通过应用的校验。
生成结束后,请在 **Editor(编辑器)**中检查脚本,尤其留意章节边界、与旁白混杂的对话、未命名说话人、特殊标点,以及可能指代多个人的名字。
选择说话人判断提示词
Setup 中的 Attribution prompt 决定第 2 步如何询问模型每句话是谁说的。默认是 michel2_full。michel2_spoken 只询问对话行,旁白由代码填入,因此模型不会把说话人放到“某某说”那一行上。在 Qwen3-14B(不加适配器)上,它在三本书的金标数据上达到 70.1%(michel2_full 为 63.6%),第 2 步耗时约为三分之一(测量(英文))。其他模型尚未测量;使用归属适配器时,请保持它训练时所用的提示词。把鼠标停在每个设置旁的 ⓘ 上,可以看到它的作用,以及有测量依据时的推荐值。
暂停、取消、恢复或重新开始
这些控件各有用途:
- **Pause / Resume(暂停/恢复)**用于暂停和继续受支持的运行中工作进程。Windows 不支持暂停。
- **Cancel(取消)**会发出停止请求。请等待任务状态确认已经停止;点击按钮或连接断开都不代表取消已完成。
- **Generate Annotated Script(生成标注脚本)**会在存在可用检查点时,继续所选书籍已保存的生成进度。在 Windows 上,可先取消,再点击生成,以恢复到有检查点的生成任务。
- 当应用存在可恢复的失败生成任务时,会出现 Resume failed run(恢复失败的运行)。
- **Start over(重新开始)**会丢弃该文本已保存的生成进度,并从第一个文本块开始。请有意选择此操作,不要将它作为应对提供商临时错误的首选办法。
- **Save snapshot(保存快照)**会将正在生成的任务中已完成的部分保存到 Saved Scripts(已保存脚本),而不会停止任务。应用会报告保存了多少内容。若要加载快照并进行编辑,请先取消任务并等待它停止。
恢复时请保持原文和相关设置不变。如果应用因原文或状态发生变化而拒绝恢复,请阅读拒绝原因,不要尝试将旧检查点强行套用到另一本书上。
生成需要协助时
**Script generation needs your help(脚本生成需要你的协助)**面板会显示失败的段落和可用的恢复操作:
- **Retry this chunk(重试此块)**可在你处理原因后,从已保存的位置重试。
- **Copy prompt(复制提示词)**可用于向另一个模型获取答复。只粘贴所要求的 JSON,并使用 Validate & apply segmentation(校验并应用分段)。面板会说明所需格式;在说话人归属阶段,它要求的是说话人分配,而不是分段后的正文。
- **Narrate as-is(按原样旁白朗读)**是分段失败时的备用方案。它会放弃预期的说话人分段,因此请检查生成后的对应部分。
- **Mark speakers UNKNOWN(将说话人标记为 UNKNOWN)**是归属判断的备用方案。在依赖角色分配之前,请先解决这些说话人标签。
不要仅为了让回复通过校验而删除原文中的词语。如果提供商不可用,或反复截断答复,请参阅 LLM 设置和故障排查。
选择合适的审校方式
**Review Script (Optional)(审校脚本,可选)**会再次调用 LLM,检查说话人分配、旁白与对话的边界,以及演绎指示。文本保真检查仍会启用,但结果依然需要人工检查。如果审校开始时 GPU 显存已满,审校会立即停止并给出提示,而不是反复重试;释放显存(例如卸载占用显存的模型)后再开始。
**Contextual Review (+/- N)(上下文审校,前后 N 条)**会向模型提供相邻条目,帮助处理有歧义的段落。其 **Context Window(上下文窗口)**可设置为两侧各 1–12 个条目,初始值为 4。此字段不会改变普通的 Review Script 审校。
审校前:
- 检查 Merge duplicate character names(合并重复角色名)。此选项初始为启用状态,可将全名、昵称或描述等标签统一为同一个角色。如果需要保留这些区别,请将它关闭。
- 如果姓名需要结合上下文解释,请先使用 Find Nicknames(查找昵称),再使用 Edit aliases(编辑别名)。在审校应用映射前,检查建议的对应关系。Script 中的别名用于指导名称规范化;Voices 中的 **Alias of(别名指向)**则只是共享声音配置。
- 如果希望与先前的脚本比较,请先用不同的名称保存一份副本。
对于文本未变化且已完成审校的脚本,应用可能会跳过审校。只有确实想再次运行时,才勾选 Review again even if nothing changed since the completed review(即使自上次完成审校后没有变化,也再次审校)。如果审校中途停止,请阅读出现的恢复面板。
演绎警告
当演绎处理阶段用尽重试次数、改用通用指示时,Editor 可能会显示 Needs delivery review(需要检查演绎指示)。该警告保留了文本和说话人,同时指出哪些演绎指示需要留意。请手动编辑这些指示,或在提供该操作时使用 Retry delivery only(仅重试演绎指示)。完成后,请检查更新后的警告,并为已修改的行重新生成音频。
仅标签审校(可选)
在配置中把 prompts.review_labels_only 设为 true,或运行 review_script.py --labels-only,审校就只返回每一行的说话人和语气说明。它不会重写正文,因此一个逗号的变化或说话标记的移动,不会再让审校丢掉整批的说话人修正。它不能拆分或合并行;普通审校仍然可以(详情(英文))。
检查原文保真度
在 **Editor(编辑器)**中,使用 **Text integrity(文本完整性)**查看遗漏、新增和改变的词语,并通过链接跳转到受影响的条目。此检查会将已保存的 Editor 文本与当前可用的原文进行比较,并在有记录时计入生成前的预处理。
重要限制:
- **Saved text matches source(已保存文本与原文一致)**只是文本比对结果。它不检查发音、说话人身份,也不检查渲染音频中实际说出的内容。
- 加载已保存脚本的 JSON 后,可能会出现 Source comparison unavailable(无法进行原文比对),因为该 JSON 并非最初的正文输入。
- 检查失败或无法检查,不等于匹配。请保留原书以便人工比较。
- 如果你有意修改了措辞,请在确认合并前检查这些差异。
在 **Saved Scripts(已保存脚本)**下,**Audit(审计)**会检查已保存的脚本,并报告阻塞性问题和需要人工检查的项目。审计未发现问题也不等于通过试听,更不能保证角色分配正确。
保存和加载,同时避免丢失当前工作
在 **Saved Scripts(已保存脚本)**下,输入名称并选择 Save Current(保存当前脚本)。保存项包含当前的标注脚本,以及已有的声音配置。voices 标记表示保存项带有声音配置。
要保留独立版本,请使用新名称。使用已有名称保存会替换对应的已保存脚本;单本书的 Save Current 控件不提供下文批量处理中的同名冲突选项。
**Load(加载)**会在替换当前脚本和文本块之前询问确认。它还会清除当前有声书导出结果和生成恢复状态。存在不兼容的运行中任务时,应用会拒绝加载。
**Saved Scripts 并不是完整的已渲染项目归档。**仅在 Editor 中进行的文本、说话人、演绎指示、插入/删除行和停顿修改,都保存在当前活动的文本块状态中。Save Current 不包含这些文本块状态及其音频。切换书籍前,请备份应用数据并下载完成的输出。详见更新与备份。
垃圾桶按钮会删除已保存的脚本。界面会警告此操作无法撤销;如果将来可能需要,请保留独立备份。
生成或审校多本书
启用 Generate multiple books(生成多本书),然后选择文件和/或已有上传内容。请检查队列和阅读顺序,包括每本书可选的第一人称叙述者。在 **When a saved script already exists(已存在已保存脚本时)**下,选择:
- Skip it (safest)(跳过,最安全):保留已有脚本不变。
- Create a new version(创建新版本):同时保留两个版本。
- Back up and replace it(备份并替换):保留备份后替换已保存的结果。
还可以启用 Build a cast list for each book first(先为每本书构建角色表)。开始前请查看批量任务的预检查。成功的书籍会直接保存到库中;请检查队列中每本书的结果,不要把其中一本完成视为整批任务完成。
批量审校时,启用 Review saved books(审校已保存的书籍),并按阅读顺序选择已保存脚本。每个结果都会原位保存。开启重复名称合并时,应用会在所选书籍之间协调名称。**Discover nicknames first(先发现昵称)**初始为启用状态;**Two-pass (forward + backward)(双向两遍处理:正向 + 反向)**还会利用后续内容,再次审校前面的书籍。批量任务的 **Context Window(上下文窗口)**初始为 0,表示普通审校;设置为 1–12 则启用上下文审校。
来源
已对照发布的 main 提交 8c7a33cb310ab9264594a09ca27e48271585094f 核验:Script 控件、生成与恢复界面、保存与加载行为,以及原文比对。