中文名:深度翻译工作台。
这是一个 Windows 桌面翻译工具 MVP,当前实现 PySide6 主窗口、Prompt 分层拼接、SQLite 历史记录、DeepSeek API / Web 引擎、Playwright persistent context、网页可见文本捕获、TXT/Markdown/SRT 导出、exe/MSI/portable 打包和基础日志。
仓库同时提供一个剥离版独立软件:DeepSeek Conversation Capture(深度对话捕获器)。它只保留日常提示词发送、DeepSeek Web 可见回答捕获、截断后自动继续生成、TXT/Markdown 导出和 Web 账号切换,不显示 API、SRT 或字幕补译入口。
署名信息:HaoXiang Huang,邮箱 didadida1688@gmail.com,个人网址 https://nextweb4.github.io/。主窗口、exe 版本信息、portable 包和 MSI 安装包均包含该署名信息。
DeepSeek Translation Studio 面向 Windows 桌面翻译和字幕处理场景。主程序默认使用 DeepSeek Web,可切换 API / Web,引入 Prompt 模板、SRT 自动续译、网页可见文本捕获、停止后整理、历史记录和 TXT/Markdown/SRT 导出。
DeepSeek Conversation Capture 是剥离版独立软件,只保留日常提示词发送、DeepSeek Web 可见回答捕获、截断后自动继续生成、TXT/Markdown 导出和 Web 账号切换。它不显示 API、SRT 或字幕补译入口,数据目录也与主程序隔离。
DeepSeek Translation Studio is a Windows desktop tool for translation and subtitle workflows. The main app defaults to DeepSeek Web, supports API / Web modes, Prompt templates, automatic SRT continuation, visible web-text capture, stop-and-cleanup handling, history, and TXT/Markdown/SRT export.
DeepSeek Conversation Capture is the standalone stripped edition for everyday DeepSeek Web conversations. It keeps prompt sending, visible answer capture, automatic continuation after truncation, TXT/Markdown export, and Web account switching, while removing API, SRT, and subtitle completion controls. Its runtime data is isolated from the main app.
For first-time Web mode usage, sign in to DeepSeek manually when the browser window opens.
- Install Python 3.12 or newer, create a virtual environment, and install the project dependencies.
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -r requirements.txt- Install the Playwright Chromium browser used by DeepSeek Web mode.
python -m playwright install chromium- Start the full translation studio or the standalone conversation capture app.
python main.py
python conversation_main.py-
For Web mode, sign in manually when the DeepSeek page opens the first time. The main app stores its browser profile under
%LOCALAPPDATA%\DeepSeekTranslationStudio\browser_profile; the standalone capture app uses%LOCALAPPDATA%\DeepSeekConversationCaptureinstead. -
For API mode, configure the API key, base URL, and model in the UI, or set
DEEPSEEK_API_KEY,DEEPSEEK_API_BASE, andDEEPSEEK_MODELbefore startingpython main.py.
- PySide6 主窗口
- 原文输入框
- Prompt 模板选择框
- Prompt 模板内容编辑与保存
- 固定前缀输入框
- 固定后缀输入框
- 最终 Prompt 预览
- 翻译结果显示框
- 引擎选择:默认 Web,可切换 API / Web
- 任务类型选择:翻译 / SRT 自动、通用对话捕获
- API 模式界面填写 API Key、Base URL、模型名
- API 模式提供“获取模型”和“测试 API”按钮,使用 OpenAI-compatible
/models端点 - 切换到 Web 模式时隐藏 API 设置,避免误填和界面干扰
- 默认使用“专家模式翻译”模板
- 通用对话捕获模式会自动选择“通用对话捕获”模板
- SQLite 初始化
prompt_templates表history表web_capture_versions表- DeepSeek API 引擎骨架
- DeepSeek Web 引擎骨架
- Playwright persistent context
- Web 模式 MutationObserver 捕获页面已显示文本
- Web 模式在输出截断后自动检测并点击“继续生成”
- Web 通用对话捕获模式会发送用户输入的日常提示词,并实时捕获网页已显示的回答内容
- Web 模式提供“停止”按钮,可停止网页继续输出并整理当前已捕获结果
- Web 模式提供“切换 Web 账号”按钮,可备份当前浏览器登录态并创建新的登录配置
- Web 模式 SRT 捕获达到源字幕总条数后会自动结束捕获并合并,不需要手动停止
- SRT 任务右侧状态显示当前有效字幕条数,例如
3947/3947 - 用户关闭浏览器时任务会标记为取消,并保留关闭前已捕获译文
- 每次捕获到新文本写入
web_capture_versions web_capture_versions.event_type记录 mutation、snapshot、继续生成、异常、最终选择事件history.continue_click_count只记录实际点击成功的自动继续生成次数- 翻译结束后将最长有效文本写入
history - TXT、Markdown 和 SRT 导出
- 基础日志系统
- 专业深色工作台界面、应用图标和可点击署名链接
- PyInstaller Windows 可执行文件打包
- WiX Toolset MSI 安装包
- portable 绿化 zip,包含本地
data启动脚本 - 独立剥离版
DeepSeek Conversation Capture,使用单独入口、单独数据目录和单独发布包
- OCR
- PDF 翻译
- DOCX 批量翻译
- 翻译记忆库
- 多模型 Provider
- 复杂主题系统
- 插件系统
cd D:\Codex\DPSK\deepseek_translation_studio
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -r requirements.txtpython -m playwright install chromium也可以运行项目脚本:
python scripts\install_playwright.pypython main.py启动剥离版通用对话捕获器:
python conversation_main.py构建 Windows 可执行文件:
python scripts\build_exe.py构建剥离版通用对话捕获器:
python scripts\build_conversation_exe.py构建完成后直接双击打开:
D:\Codex\DPSK\deepseek_translation_studio\dist\DeepSeek Translation Studio\DeepSeek Translation Studio.exe
D:\Codex\DPSK\deepseek_translation_studio\dist\DeepSeek Conversation Capture\DeepSeek Conversation Capture.exe
该 exe 不需要通过 python main.py 启动。请保留整个 dist\DeepSeek Translation Studio\ 文件夹,不要只单独复制 exe,因为 Web 模式需要同目录下 _internal\playwright\...\.local-browsers\ 中的 Chromium 浏览器文件。
完整发布构建还会生成:
dist\packages\DeepSeek Translation Studio-0.1.0.msi
dist\packages\DeepSeek Translation Studio-0.1.0-portable.zip
dist\packages\DeepSeek Conversation Capture-0.1.0.msi
dist\packages\DeepSeek Conversation Capture-0.1.0-portable.zip
portable 绿化包内的 Start Portable.bat 会把 DST_APP_DATA_DIR 指向同目录 data\,便于把登录态、SQLite 和日志留在 portable 文件夹中。MSI 安装包使用 WiX Toolset 生成,安装包属性包含作者、邮箱和个人网址。
发布到 GitHub:
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\publish_github_release.ps1该脚本会创建或复用 https://github.com/NextWeb4/deepseek-translation-studio,推送 main 和 v0.1.0,创建或更新 Release,并上传上述四个安装包资产。脚本只在运行时临时读取 GITHUB_TOKEN、GH_TOKEN、Git Credential Manager 或 Codex GitHub 集成 helper,不会把 token 写入仓库、remote 或日志。
主窗口左侧包含“模板内容”编辑框。选择模板后可以直接修改内容,点击“保存模板”写入 SQLite。
模板内容必须包含:
{{TEXT}}
最终 Prompt 预览会使用当前编辑框内容实时生成,因此修改模板时可以立即看到拼接效果。
API 模式优先读取主窗口左侧的 API 设置:
- API Key
- API Base URL
- API 模型
也可以用环境变量提供默认值:
$env:DEEPSEEK_API_KEY="你的 DeepSeek API Key"
$env:DEEPSEEK_API_BASE="https://api.deepseek.com"
$env:DEEPSEEK_MODEL="deepseek-chat"
python main.py如果界面和环境变量都没有配置 API Key,API 模式会给出错误提示并将任务状态写入历史表。API Key 不会写入历史表或日志。
点击“获取模型”会请求 {API Base URL}/models 并把返回的模型 ID 写入模型下拉框;点击“测试 API”会用同一端点验证 API Key 和 Base URL 是否可用。该测试不会发起聊天补全请求,不消耗翻译额度。
- 启动应用。
- 默认已选择
DeepSeek Web;如曾切换到 API,可改回 Web。 - 选择任务类型。翻译或 SRT 字幕使用“翻译 / SRT 自动”,日常对话提示词使用“通用对话捕获”。
- 输入原文或提示词,选择模板,填写前缀或后缀。
- 点击“开始翻译”或“开始捕获”。
- 首次使用时,浏览器会打开 DeepSeek 网页;请手动登录。
- 登录态会保存在
%LOCALAPPDATA%\DeepSeekTranslationStudio\browser_profile。 - 后续任务会复用登录态。
需要更换 DeepSeek 账号时,点击工具栏“切换 Web 账号”。程序会把当前 browser_profile 移到 browser_profile_backups 作为备份,并创建新的空配置;下一次 Web 翻译会打开未登录的 DeepSeek 页面,请手动登录目标账号。正在翻译时不能切换账号,避免移动正在使用的浏览器配置。
Web 模式不依赖剪贴板作为核心存储方式。页面已显示文本会进入内存缓存,然后写入 SQLite 版本表,最终选择最长有效文本写入历史表。
通用对话捕获模式复用同一套 Playwright 可见文本捕获链路,但不启用 SRT 专用清理、补译和完成判定。即使输入内容看起来像 SRT,也会按普通对话结果保存网页上已显示的回答。该模式右侧显示“捕获结果”和内容长度,TXT/Markdown 导出可用,SRT 导出隐藏。
DeepSeek Conversation Capture 使用 conversation_main.py 和 src/ui/conversation_window.py。它复用 TranslationService、DeepSeekWebEngine、CaptureService、HistoryService 和默认 Prompt 模板,但请求固定为:
engine = web
task_mode = general_capture
剥离版不会创建 API 配置区、任务类型下拉框、SRT 导出按钮或 SRT 补译入口。它的默认数据目录是:
%LOCALAPPDATA%\DeepSeekConversationCapture
可通过环境变量覆盖:
$env:DCC_APP_DATA_DIR="D:\Codex\DPSK\.conversation-runtime"
python conversation_main.pyportable 剥离包内的 Start Portable.bat 会设置 DCC_APP_DATA_DIR=%~dp0data,因此它的登录态、SQLite 和日志不会与主翻译工作台混用。
如果用户手动关闭浏览器,当前任务会按“已取消”处理,不会再显示 Playwright 的底层控件查找错误;关闭前已捕获到的有效译文仍会保存在历史记录中。
Web 模式只会在模型输出安静、页面不再显示“停止生成”后检测以下继续生成按钮:
继续生成继续ContinueContinue generating
默认最多自动点击 5 次,截断后检测延迟 800ms。可以在左侧设置里关闭“自动继续生成”、调整最大继续次数和截断后检测延迟。实际点击成功后会写入 before_continue_click 版本,随后继续写入 after_continue_click、mutation_capture 或 snapshot_capture 版本;如果点击超时或降级点击失败,不会增加自动继续次数。达到最大次数后会停止自动点击并提示用户手动检查。
如果页面提示“服务器繁忙,请稍后再试,或使用快速模式”并显示“继续生成”,程序会进入服务器繁忙重试状态:默认约 180 秒后只点击“继续生成”,之后按同样间隔重试,直到页面恢复输出或用户停止任务。该状态不会点击“快速模式”,也不会关闭深度思考/专家模式;服务器繁忙重试不受普通最大继续次数限制。
任务运行时可以点击主工具栏“停止”。Web 模式会尝试点击网页上的“停止生成 / 停止回答”控件,然后把当前已捕获内容交给服务层整理;如果原文是 SRT,右侧结果区会显示清理和合并后的 SRT partial,并以 warning 状态保存,方便继续检查缺失片段。任务运行中关闭主窗口时,程序会先请求停止并忽略本次关闭,避免直接销毁仍在运行的线程和浏览器上下文。
如果原文是 SRT,程序会用源字幕编号和时间轴持续计算覆盖进度。当前捕获内容已经覆盖全部源字幕且没有内部缺口时,会自动结束网页捕获、清理 DeepSeek 页脚文本并合并为最终 SRT;右侧状态显示有效字幕条数而不是字符长度。
Web 模式遇到 DeepSeek 的拒答或异常提示时,不会把“你好,这个问题我暂时无法回答...”写入结果区,也不会新开浏览器窗口重跑整份源字幕。程序会先保留当前对话,继续用剩余 SRT 片段续译,并保持右侧只显示已合并的 SRT;如果当前对话达到续译上限后复核仍缺失,才会新开页面只补译缺失片段。
流式捕获 SRT 时,程序会丢弃下一条字幕尚未生成完整的半截编号/时间轴碎片,避免出现把 3、00:00 拼进上一条字幕正文的格式错误。同一条字幕被多次捕获时,最终合并优先采用较新的完整捕获。右侧结果区会自动滚动到最新捕获末尾;点击“停止”后仍只保留整理后的 SRT,不会显示 DeepSeek 的思考或需求分析文本。捕获性能也做了轻量优化:每轮 Playwright 轮询只做一次可见文本收集,页面 DOM 中存在 SRT 片段时优先按 DOM 顺序合并这些 SRT-like 节点,捕获版本的 best/error 状态在当前任务内缓存,避免高频写入 SQLite 后反复全量扫描。
清理 DeepSeek 思考/需求分析文本时,程序会先识别 SRT 结构位置;如果“这里要”“用户要求”等词出现在字幕正文行内,会按正常译文保留,不会截断后续字幕。
同一网页对话里如果存在多段回答,程序会跳过两段 SRT 之间的“已思考”“开始输出”等说明文字,继续提取后续 SRT;这些说明文字不会进入右侧结果、历史记录或导出。
如果续译补充连续返回多条非可保留的源字幕原文复制,程序不会把这些原文当成有效译文计入覆盖进度,也不会写入右侧结果、历史记录或 SRT 导出。DeepSeek 在截断后延迟显示“继续生成”按钮时,程序会在输出安静后保留短暂检查窗口,避免第一次没找到按钮就直接结束任务。
对于短中文数字、名字、标点或符号类字幕,模型输出与源文本完全相同时,程序会把它视为“无需改写的译文”并插入合并结果,避免 五/四/三/二/一、♪、... 这类补译已经出现在浏览器里但覆盖数不前进。连续两条及以上的非可保留源文复制仍会被判定为无效补译,不会冒充译文。
源文复制保护和 SRT 合并使用同一条身份规则:优先按编号+时间轴匹配,编号不一致时再按时间轴匹配。因此模型即使改错编号,只要时间轴对应且正文仍是非可保留源文复制,也不会被计入有效覆盖。
自动续译需要第二次及后续发送 Prompt 时,程序会先把当前页面已显示译文记录为本轮捕获基线;发送后只有出现区别于旧译文的新页面输出,才会进入本轮稳定判断和 SRT 合并,避免旧译文稳定导致任务立刻收尾并关闭浏览器。
如果已经翻译到较靠后的字幕,但早期有个别内部缺口,续译会优先从尾部第一条缺失字幕继续,不会因为早期缺口回退重译整段;等尾部完成后,才会只补列出的内部缺失字幕。
如果当前 DeepSeek 对话里的自动续译已经达到上限,程序会先用最新合并结果重新计算实际覆盖条数。确认仍缺失后,会打开新的 DeepSeek 页面/对话,只发送缺失字幕片段继续补译,并把新结果合并回同一条历史记录。最终仍不完整时,warning 会显示复核后的真实覆盖进度,例如 3026/3208。
SRT Web 任务会保留 DeepSeek 的“深度思考”质量设置。若捕获到没有任何 SRT 块的思考文本、需求分析或处理说明,右侧结果区不会显示这些内容,字幕进度也不会误算;程序会在当前对话重新发送更严格的 SRT 输出要求。
Markdown 导出会根据 Prompt 内部反引号长度自动选择更长的代码围栏,因此 Prompt 中包含 ``` 代码块时不会截断导出文档。
默认数据目录:
%LOCALAPPDATA%\DeepSeekTranslationStudio
包含:
studio.sqlite3browser_profile/logs/studio.log
可通过环境变量覆盖:
$env:DST_APP_DATA_DIR="D:\Codex\DPSK\.runtime"pytest| 方案 | 来源 | 许可证 | 核心能力 | 优点 | 缺点 | 维护状态 | 与当前项目的契合度 | 可能冲突点 | 是否采用 | 采用方式 |
|---|---|---|---|---|---|---|---|---|---|---|
| 复用现有 Playwright | PyPI / 官方文档 | Apache-2.0 | Chromium/WebKit/Firefox 自动化、可见 DOM 捕获、persistent context | 已在项目中使用;已处理登录态、截断继续、打包 Chromium、可见文本限制 | 需维护 DeepSeek DOM 选择器 | 活跃;官方文档明确支持通用浏览器自动化 | 最高 | 无新增依赖;仍需应对 DeepSeek DOM 变化 | 采用 | 扩展任务模式和服务分支,继续复用现有 Web 引擎 |
| Selenium | PyPI / selenium.dev | Apache-2.0 | WebDriver 浏览器自动化 | 成熟、生态大 | 与现有 Playwright 重复;需新增驱动/等待/打包路径 | 活跃 | 低 | 双自动化栈增加维护和打包风险 | 不采用 | 不引入 |
| browser-use | GitHub | MIT | 面向 AI agent 的浏览器操作抽象 | 自然语言浏览器任务能力强 | 超出“发送 Prompt 并捕获可见回答”;可能引入额外 LLM/云/代理行为 | 活跃 | 低 | 复杂度、联网边界和可解释性风险 | 不采用 | 仅借鉴“任务模式”概念 |
| Stagehand | GitHub / Browserbase | MIT | 自然语言 + 代码浏览器 agent SDK | 对复杂网页操作更弹性 | 主要是 agent 层,不是本项目所需的确定性捕获;可能引入 Browserbase/LLM 工作流 | 活跃 | 低 | 运行方式、联网边界、打包复杂度冲突 | 不采用 | 不引入 |
采用原因:当前问题本质是应用任务边界过窄,而不是缺少浏览器自动化能力。
直接复用:Playwright persistent context、Prompt 写入、MutationObserver/快照捕获、截断后“继续生成”点击、历史版本保存。
只借鉴设计:外部 agent 方案的“任务类型”入口。
不采用:新的浏览器自动化库、LLM browser agent、云浏览器服务。
现有代码保留:src/engines/deepseek_web.py 的底层浏览器控制和捕获逻辑。
现有代码替换:无大范围替换,仅在请求模型、服务编排和 UI 增加通用模式分支。
联网变化:无新增运行期联网行为,仍只访问用户配置的 DeepSeek Web/API。
回滚方式:删除任务类型字段和 UI 入口后,默认翻译/SRT 自动模式仍可按原流程工作。
| 方案 | 来源 | 许可证 | 用途 | 是否采用 | 风险与回滚 |
|---|---|---|---|---|---|
| PyInstaller | PyPI | GPLv2-or-later with special exception | 将 PySide6 应用打包为 Windows exe | 采用 | 打包体积明显增加;如打包异常,回滚到 python main.py 启动 |
| WiX Toolset 3.14 | GitHub / wixtoolset.org | Microsoft Reciprocal License | 生成 Windows MSI 安装包 | 采用,仅构建期下载到 .build_tools |
MSI 对路径长度敏感;发布包只打包 chromium-* 主浏览器以避免 headless shell 长路径 |
| zipfile 标准库 | Python 标准库 | Python Software Foundation License | 生成 portable 绿化 zip | 采用 | 不提供安装/卸载入口;通过 Start Portable.bat 将数据留在 portable data 目录 |
采用原因:满足“不需要脚本就能打开的软件”、MSI 安装包、portable 绿化包和剥离版独立分发需求。
替代内容:替代手动执行 python main.py 的启动方式,不替代开发和测试命令。
使用范围:仅用于 Windows MVP 打包和发布;scripts/build_exe.py 构建主翻译工作台,scripts/build_conversation_exe.py 构建剥离版通用对话捕获器。
关键配置:scripts/build_exe.py 中的 --windowed、--icon、--version-file、--add-data、--hidden-import playwright.async_api;并将本机 %LOCALAPPDATA%\ms-playwright 下的 chromium-*、ffmpeg-*、winldd-* 复制到打包产物的 .local-browsers。
联网变化:无新增运行期联网行为;Playwright 初始化命令会下载 Chromium;首次构建 MSI 时脚本会下载 WiX Toolset 3.14 binaries 到 .build_tools。
许可证风险:PyInstaller 许可证带 special exception;WiX Toolset 为 Microsoft Reciprocal License;PySide6 仍需按 LGPL/GPL/商业许可评估分发方式。
中文:当前未发现 LICENSE 文件。
English: No LICENSE file was detected.

