10 — OBS 字幕叠加

源码目录:src/vocal10n/obs/

目的

提供一个可由 OBS Studio Browser Source 加载的 HTML 页面,用于渲染 Vocal10n 实时字幕。源语言和目标语言均可显示,并支持独立样式。

服务器

server.py 会在 obs.host:obs.port(默认 127.0.0.1:5124)启动轻量 HTTP 服务,提供:

  • GET /:字幕页面(overlay.html)。
  • WebSocket / SSE 推送端点:当 SystemState 文本属性更新时,推送当前 source/target 文本。

服务由 OBS tab 开关控制,独立于文件输出功能。

布局规则

  • 当 source 与 target 同时开启时:source 在上、target 在下。
  • 仅开启一种语言时:垂直居中显示。
  • 每一行可按 obs.* 配置独立设置字体、字号、颜色、描边与阴影。

样式控制

OBS 页可配置:

  • 各语言字体族(系统字体,或通过 URL 加载 Google Fonts)。
  • 各语言字号。
  • 描边宽度与颜色(-webkit-text-stroke)。
  • 阴影偏移/模糊/透明度(text-shadow)。
  • 实时预览:每次修改都会重渲染,无需来回切 OBS 调样式。

这些能力在 Phase 7(c79f52c27f7da7)完成定型。

独立字幕时序

即使只跑 STT 不跑 TTS,叠加层也保持 partial/confirmed 逻辑:先显示实时文本,confirmed 到达后覆盖修正文案。该时序在 27f7da7 中加强,确保未合成音频场景下也一致。