Skip to content

NextWeb4/deepseek-translation-studio

Repository files navigation

DeepSeek Translation Studio

中文名:深度翻译工作台。

这是一个 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 安装包均包含该署名信息。

图文简介 / Illustrated Overview

中文

DeepSeek Translation Studio 主界面

DeepSeek Translation Studio 面向 Windows 桌面翻译和字幕处理场景。主程序默认使用 DeepSeek Web,可切换 API / Web,引入 Prompt 模板、SRT 自动续译、网页可见文本捕获、停止后整理、历史记录和 TXT/Markdown/SRT 导出。

DeepSeek Conversation Capture 剥离版

DeepSeek Conversation Capture 是剥离版独立软件,只保留日常提示词发送、DeepSeek Web 可见回答捕获、截断后自动继续生成、TXT/Markdown 导出和 Web 账号切换。它不显示 API、SRT 或字幕补译入口,数据目录也与主程序隔离。

English

DeepSeek Translation Studio main window

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 standalone window

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.

Quick Start

For first-time Web mode usage, sign in to DeepSeek manually when the browser window opens.

  1. 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
  1. Install the Playwright Chromium browser used by DeepSeek Web mode.
python -m playwright install chromium
  1. Start the full translation studio or the standalone conversation capture app.
python main.py
python conversation_main.py
  1. 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%\DeepSeekConversationCapture instead.

  2. For API mode, configure the API key, base URL, and model in the UI, or set DEEPSEEK_API_KEY, DEEPSEEK_API_BASE, and DEEPSEEK_MODEL before starting python 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.txt

Playwright 初始化命令

python -m playwright install chromium

也可以运行项目脚本:

python scripts\install_playwright.py

启动命令

python 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,推送 mainv0.1.0,创建或更新 Release,并上传上述四个安装包资产。脚本只在运行时临时读取 GITHUB_TOKENGH_TOKEN、Git Credential Manager 或 Codex GitHub 集成 helper,不会把 token 写入仓库、remote 或日志。

Prompt 模板编辑

主窗口左侧包含“模板内容”编辑框。选择模板后可以直接修改内容,点击“保存模板”写入 SQLite。

模板内容必须包含:

{{TEXT}}

最终 Prompt 预览会使用当前编辑框内容实时生成,因此修改模板时可以立即看到拼接效果。

API 模式配置

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 是否可用。该测试不会发起聊天补全请求,不消耗翻译额度。

Web 模式使用方式

  1. 启动应用。
  2. 默认已选择 DeepSeek Web;如曾切换到 API,可改回 Web。
  3. 选择任务类型。翻译或 SRT 字幕使用“翻译 / SRT 自动”,日常对话提示词使用“通用对话捕获”。
  4. 输入原文或提示词,选择模板,填写前缀或后缀。
  5. 点击“开始翻译”或“开始捕获”。
  6. 首次使用时,浏览器会打开 DeepSeek 网页;请手动登录。
  7. 登录态会保存在 %LOCALAPPDATA%\DeepSeekTranslationStudio\browser_profile
  8. 后续任务会复用登录态。

需要更换 DeepSeek 账号时,点击工具栏“切换 Web 账号”。程序会把当前 browser_profile 移到 browser_profile_backups 作为备份,并创建新的空配置;下一次 Web 翻译会打开未登录的 DeepSeek 页面,请手动登录目标账号。正在翻译时不能切换账号,避免移动正在使用的浏览器配置。

Web 模式不依赖剪贴板作为核心存储方式。页面已显示文本会进入内存缓存,然后写入 SQLite 版本表,最终选择最长有效文本写入历史表。

通用对话捕获模式复用同一套 Playwright 可见文本捕获链路,但不启用 SRT 专用清理、补译和完成判定。即使输入内容看起来像 SRT,也会按普通对话结果保存网页上已显示的回答。该模式右侧显示“捕获结果”和内容长度,TXT/Markdown 导出可用,SRT 导出隐藏。

剥离版通用对话捕获器

DeepSeek Conversation Capture 使用 conversation_main.pysrc/ui/conversation_window.py。它复用 TranslationServiceDeepSeekWebEngineCaptureServiceHistoryService 和默认 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.py

portable 剥离包内的 Start Portable.bat 会设置 DCC_APP_DATA_DIR=%~dp0data,因此它的登录态、SQLite 和日志不会与主翻译工作台混用。

如果用户手动关闭浏览器,当前任务会按“已取消”处理,不会再显示 Playwright 的底层控件查找错误;关闭前已捕获到的有效译文仍会保存在历史记录中。

Web 模式只会在模型输出安静、页面不再显示“停止生成”后检测以下继续生成按钮:

  • 继续生成
  • 继续
  • Continue
  • Continue generating

默认最多自动点击 5 次,截断后检测延迟 800ms。可以在左侧设置里关闭“自动继续生成”、调整最大继续次数和截断后检测延迟。实际点击成功后会写入 before_continue_click 版本,随后继续写入 after_continue_clickmutation_capturesnapshot_capture 版本;如果点击超时或降级点击失败,不会增加自动继续次数。达到最大次数后会停止自动点击并提示用户手动检查。

如果页面提示“服务器繁忙,请稍后再试,或使用快速模式”并显示“继续生成”,程序会进入服务器繁忙重试状态:默认约 180 秒后只点击“继续生成”,之后按同样间隔重试,直到页面恢复输出或用户停止任务。该状态不会点击“快速模式”,也不会关闭深度思考/专家模式;服务器繁忙重试不受普通最大继续次数限制。

任务运行时可以点击主工具栏“停止”。Web 模式会尝试点击网页上的“停止生成 / 停止回答”控件,然后把当前已捕获内容交给服务层整理;如果原文是 SRT,右侧结果区会显示清理和合并后的 SRT partial,并以 warning 状态保存,方便继续检查缺失片段。任务运行中关闭主窗口时,程序会先请求停止并忽略本次关闭,避免直接销毁仍在运行的线程和浏览器上下文。

如果原文是 SRT,程序会用源字幕编号和时间轴持续计算覆盖进度。当前捕获内容已经覆盖全部源字幕且没有内部缺口时,会自动结束网页捕获、清理 DeepSeek 页脚文本并合并为最终 SRT;右侧状态显示有效字幕条数而不是字符长度。

Web 模式遇到 DeepSeek 的拒答或异常提示时,不会把“你好,这个问题我暂时无法回答...”写入结果区,也不会新开浏览器窗口重跑整份源字幕。程序会先保留当前对话,继续用剩余 SRT 片段续译,并保持右侧只显示已合并的 SRT;如果当前对话达到续译上限后复核仍缺失,才会新开页面只补译缺失片段。

流式捕获 SRT 时,程序会丢弃下一条字幕尚未生成完整的半截编号/时间轴碎片,避免出现把 300: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.sqlite3
  • browser_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 / 许可证

中文:当前未发现 LICENSE 文件。

English: No LICENSE file was detected.

About

Windows Python/PySide6 translation studio for DeepSeek Web/API workflows, SRT continuation, capture, and packaging.

Topics

Resources

Security policy

Stars

29 stars

Watchers

2 watching

Forks

Packages

 
 
 

Contributors