跳转至

Electron 工作流

Electron 工作流

工作流在多个输入上运行一个已保存的管线。画布位于 #/workflows;Calls 视图接收画布交付的 Call 草稿,位于 #/calls,并有一个返回画布的按钮。工作流是由连接相连的步骤组成的画布;它所运行的项目列表来自输入步骤——要么是脚本(每个 --- 分隔符对应一个,或导入的文件),要么是上传的音频片段。每次运行最多 50 个项目,每个脚本最多 20,000 个字符,每个片段最多 64 MiB。草稿、工作流库、复制和删除都保存在浏览器存储中;生成的音频和上传的媒体被单独保存,并在引用它们的最后一个工作流被移除时释放。

左侧列表保存你的工作流;New 会新建一个空白工作流,New from template 会打开一个选择器,按 Narration、Audio 和 Calls 分组。工作流名称在页眉中就地编辑,旁边有 Saved 指示器以及 Run、Duplicate 和 Delete 操作。步骤从画布边缘的工具栏添加:点击步骤即可添加(如果所选步骤有空闲输出,则连接在其后),或将其拖到画布上。工具栏可通过 Tab 键到达,并用方向键移动。选中某个步骤——通过单击,或在聚焦的步骤上按 Enter——会在右侧打开其设置。缺少必需设置(脚本、音频片段、声音、语言或条件短语)的步骤会显示 Needs setup,并且 Run 保持不可用,旁边会显示原因,直到所有步骤都设置好。

可执行步骤包括输入(Start 或 Audio)、Speak、Convert、Transcribe、Translate、Normalize、Condition 和 End。Agent 和 Call 仍然只是本地草稿:它们可以放在画布上,但包含它们的工作流不会运行。在任何内容执行之前,步骤都会经过契约检查——文本可送往翻译或语音,音频可送往转写或转换,生成的语音可送往规范化——因此不兼容的草稿会在运行前被拒绝,而不是在运行中途才被拒绝。

Condition 会将每个项目路由到两条分支之一。它将到达的文本与你输入的短语进行比较,使用 Contains、Is exactly、Starts with 或 Ends with;两侧的大写字母和周围空白都会被忽略,因此草稿在每台机器上都会走同一条分支。yes 分支在匹配时运行,否则走 no 分支。两个连接点都必须连接,只有 Condition 可以分叉,并且放置在音频而非文本到达位置的 Condition 会被拒绝。分支可以重新汇合,但在共享步骤处汇合的路径必须携带相同类型的值——一个分支进行语音而另一个分支直接传递文本的情况会被拒绝,因为共享步骤会根据具体项目接收到不同类型的值。

每个项目都独立地遍历图,因此单次运行可以合法地将一个片段送入 yes 分支,将下一个片段送入 no 分支,并为每个片段使用不同的声音。Condition 会被重新评估,而不是记录结果:它们所测试的文本本身会被设置检查点,因此恢复被中断的运行时会重新读取相同的值,并走同一条分支。

执行是串行的,这样可以避免模型加载竞争,并且每个已完成的步骤都是一个持久化检查点。停止运行会保留已完成的工作;再次启动会从最后一个检查点恢复,而不是重新生成;失败的项目会停止运行以进行显式重试,而不是被跳过。已保存的进度与可执行设置绑定——声音、语言、速度、规范化目标、条件短语以及连接本身——因此移动分支会使已完成的运行失效,而在画布上移动节点或重命名步骤则不会。

已完成的项目会显示自己的播放控件和显式保存选项;文本输出通过系统原生保存对话框保存为 .txt,音频保存为 .wav。不会自动下载任何内容。

从 Condition 直接通向 End 的分支会将传入的文本保留为可导出的结果。Condition 步骤只有一个短语编辑器;通用的 Instructions 字段在这些步骤中被隐藏。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 om/VoiceStudio