开发说明
面向希望参与妙幕开发或基于源码定制的开发者。
技术栈
- Electron(v30)+ Next.js(nextron):跨平台桌面应用与界面
- TypeScript + Tailwind CSS
- whisper.cpp:内置转写引擎的 C++ 实现(Node addon 形式集成,支持 CUDA / Vulkan / CoreML / Metal)
- sherpa-onnx:FunASR / Qwen3-ASR / FireRedASR / Parakeet 与本地 TTS 的原生运行库
- FFmpeg:音视频处理与字幕烧录
本地开发
环境要求
- Node.js 18+,Yarn
克隆与安装
git clone https://github.com/buxuku/SmartSub.git
cd SmartSub
yarn install
安装钩子会自动下载原生依赖(whisper addon 与 sherpa-onnx 原生库)。如因网络受限下载失败,手动重试:
yarn native:fetch # 拉取 sherpa-onnx 原生库 + whisper addon
启动开发环境
yarn dev
带热重载。开发实例使用独立的用户数据目录(userData-dev),不会污染正式安装的配置。
faster-whisper 引擎(独立仓库)
Python sidecar 源码与构建在 buxuku/smartsub-py-engine,产物发布于其 latest Release,主仓库不包含 python-engine/ 目录。本地调试 faster-whisper 时任选其一:
- 在应用内「引擎」页面直接下载安装(写入
userData/py-engine/current/) - 本地构建 smartsub-py-engine 后,启动前指定:
export PYTHON_ENGINE_CMD="/path/to/smartsub-py-engine/dist/smartsub-engine/smartsub-engine"
yarn dev
构建打包
yarn build # nextron build --no-pack(CI 构建产物)
yarn build:local # 本地完整打包(electron-builder)
构建配置见 electron-builder.yml,产物输出到 dist/。
项目结构
SmartSub/
├── main/ # Electron 主进程
│ ├── background.ts # 主进程入口
│ ├── helpers/ # 任务处理、引擎、下载、配音、合成等模块
│ ├── service/ # 后端服务
│ └── translate/ # 翻译服务实现与适配器
├── renderer/ # 前端(Next.js)
│ ├── components/ # React 组件
│ ├── pages/[locale]/ # 页面路由(i18n)
│ ├── lib/ hooks/ # 前端辅助库与 hooks
├── types/ # 共享类型(含服务商定义 provider.ts)
├── extraResources/ # 构建附带资源(whisper addon 等)
├── scripts/ # 构建与测试脚本
└── docs/ # 本文档站(Docusaurus)
- 新增翻译服务:在
types/provider.ts定义服务商字段,在main/translate/services/实现调用逻辑并注册 - 单元测试:
package.json中有按模块划分的test:*脚本(引擎、合成、翻译解析、配音等),提交前跑相关模块
自行编译 whisper addon(特殊环境)
addon.node 是内置 whisper.cpp 引擎的核心库,项目已提供多平台预编译产物(随 yarn native:fetch 获取)。仅当你的环境无法使用预编译产物时才需要自行编译:
编译步骤
- 克隆 whisper.cpp 仓库
- 安装 cmake 与 cmake-js(Windows 可
choco install cmake;npm i -g cmake-js) - 进入
examples/addon.node执行npm install后回到仓库根目录 - 编译(参数按需调整,如
GGML_CUDA/GGML_VULKAN):
npx cmake-js compile -T addon.node -B Release \
--CDBUILD_SHARED_LIBS=OFF \
--CDWHISPER_STATIC=ON \
--CDGGML_CUDA=ON \
--runtime=electron \
--runtime-version=30.1.0 \
--arch=x64
- 把
build/Release/addon.node.node复制到 SmartSub 的extraResources/addons/并重命名为addon.node
参与贡献
- Fork 仓库,创建特性分支(
feature/xxx) - 遵循现有代码风格(TypeScript 类型完整;提交前 prettier 会经 lint-staged 自动格式化)
- 提交 PR 时说明动机与测试情况;报告 Bug 请附日志、版本与复现步骤
本项目采用 MIT 许可证,提交贡献即同意以相同许可证发布。