本机优先的会议录音转写工具 · 默认数据不外传 · 上传多人分离 + 实时字幕 + 声纹匹配
这是面向单台受信任机器的本地单机工具,适合本地试用和迭代;当前不面向公网部署、多租户、合规存档或自动身份判定。
把"一段会议录音"变成"带说话人归属、可校正、可导出"的结构化纪要,音频和转写永远不出本机。飞书/讯飞/在线 ASR 都要把音频传上云——本项目不上传音频。LLM 纪要可选本机 Ollama,公网 LLM 只在你显式允许时发送转写文本(永不发音频、永不发声纹)。
两条路径合一,覆盖会议从现场到会后的全程:
- 📤 上传录音(会后高质量处理):解码 → ASR → 可选 pyannote 多人分离 → 声纹匹配已登记人物 → 入库 → 校正/纪要/导出。
- ⚡ 实时字幕(会议进行中):浏览器录音 → VAD 切段 → ASR → 声纹识别已登记人物 → 边说边出,落段入库。
- 🖥️ 本地优先:默认全本机推理,下载模型后可在无网环境运行(LLM 关闭时)。
- 👥 多人说话人分离:上传会议模式用 pyannote community-1 切出匿名说话人 turn。
- 🧬 声纹匹配:把匿名
Spk_01按严格阈值匹配到已登记人物,可随时人工纠正,不是身份认证。声样支持上传文件或浏览器在线录音注册。 - 📝 可校正纪要:双击改文稿、批量重指说话人、合并/拆分说话人、生成/编辑摘要(LLM 或本地 TextRank 兜底)。
- 📤 多格式导出:Markdown / SRT / VTT / JSON。
- 🔧 可切换引擎:ASR(Qwen3-ASR / SenseVoice / Paraformer)、声纹(CamPlus / ERes2Net / Wespeaker)运行时可切。
- 上传录音做会后高质量处理(多人分离 / 纪要 / 导出);实时模式做会议进行中的近实时字幕。
- "说话人分离"只产生匿名标签;声纹匹配可按严格规则自动显示已登记人物,但不构成身份认证,且可随时纠正。
- 未配置 pyannote 时,会议仍可完成转写,但保持匿名并明确提示分离不可用。
- 默认数据保存在本机且不启用 LLM。首次启动下载模型时会联网。
- macOS MPS 偶发死锁,加载超时(默认 90s)会自动回退 CPU;服务为单进程(
WORKERS=1),请勿调高。 - 不建议直接暴露到公网,也不承诺满足医疗、法律等受监管行业要求。
关于项目名:实时与上传是同一会议的两个入口,均为一等功能。多人说话人分离(diarization)在上传模式完成;实时模式靠声纹识别已登记说话人,不做多人分离。
| 实时字幕 | 会议库 |
![]() |
![]() |
| 人员声样(含在线录音) | 引擎与设置 |
![]() |
![]() |
上传录音(会后)
- 上传录音并选择"快速转写"或"会议模式"。
- 后台任务完成解码、转写和可选的说话人分离。
- 在会议详情中检查自动匹配、确认中置信度建议,并校正文稿。
- 生成或编辑纪要,随后导出所需格式。
实时字幕(会中)
- 浏览器授权麦克风并开始录音。
- VAD 自动切段、ASR 实时转写、声纹识别已登记说话人,边说边出。
- 结束录音后落段入库,与上传会议进入同一套校正/纪要/导出流程。
要求 Python 3.10–3.12、Node.js 20+ 和 FFmpeg。CI 在 Ubuntu 验证 Python 3.10–3.12,并在 macOS、Windows 验证 Python 3.12。首次启动会下载约 1.8GB 模型,视网速可能需要数十分钟;下载完成后 LLM 关闭时可永久断网运行。
git clone https://github.com/lgy1027/matrix-live-diarizer.git
cd matrix-live-diarizer
python -m venv .venv
# Windows: .venv\Scripts\activate
# macOS/Linux: source .venv/bin/activate
pip install -r requirements.txt
cd web && npm ci && npm run build && cd ..
python main.py浏览器打开 http://127.0.0.1:8000。默认只监听本机回环地址。默认账户 admin/admin,首次登录强制改密。
项目接口仍在迭代,请勿将其作为会议资料的唯一副本或长期归档系统。
Docker CPU 版:
docker compose up --buildCUDA 用户建议使用本地 Python 环境并按 PyTorch 官方说明安装对应版本(Docker 镜像仅含 CPU)。多架构镜像需发布者自行 docker buildx build --platform linux/amd64,linux/arm64 并验证目标架构,项目不提供预构建镜像承诺。
复制 .env.example 为 .env。多数本机单机场景无需修改,常用项如下:
HOST=127.0.0.1
ASR_DEVICE=auto
ASR_ENGINE=qwen3
SPEAKER_ENGINE=campplus
HF_TOKEN=
LLM_ENABLED=falseASR_ENGINE 可选 qwen3 / sensevoice / paraformer / paraformer_streaming;SPEAKER_ENGINE 可选 campplus / eres2net / wespeaker。其余项见 .env.example。启用 LLM(摘要/行动项/纪要)见 LLM 配置指南。
何时需要 HF_TOKEN(其余情况留空即可):
- ✅ 要用上传会议的多人说话人分离(pyannote community-1,gated 模型)→ 需填,且需在 HF 页面接受条款。
- ✅ 要启用字级时间戳(Qwen3-ForcedAligner)→ 建议填以避开 HF 限流。
- ❌ 只用实时字幕 / 快速转写 / 本机声纹匹配 → 不需要。
只有明确部署到局域网时才使用 HOST=0.0.0.0 和 DEPLOYMENT_MODE=lan,并同时设置强随机 JWT_SECRET、可信 ALLOWED_ORIGINS。跨机器访问还需要 HTTPS(见下文「跨机器访问」)。
默认 HOST=127.0.0.1 只监听本机——本机用 http://127.0.0.1:8000 即可,麦克风和上传都正常。
要从别的机器访问(上传录音、在线录音都要麦克风),浏览器要求 HTTPS:http://IP 非 localhost 下 getUserMedia 会被禁用。项目支持让服务直接跑 HTTPS 自签证书。请先确保系统已安装 OpenSSL,随后使用项目的跨平台 Python 脚本生成包含本机 IPv4 地址的证书。
macOS / Linux:
python3 scripts/gen_self_cert.py
ENABLE_HTTPS=1 HOST=0.0.0.0 \
DEPLOYMENT_MODE=lan ALLOWED_ORIGINS=https://<本机IP>:8000 \
python main.pyWindows PowerShell:
python .\scripts\gen_self_cert.py
$env:ENABLE_HTTPS = "1"
$env:HOST = "0.0.0.0"
$env:DEPLOYMENT_MODE = "lan"
$env:ALLOWED_ORIGINS = "https://<本机IP>:8000"
python main.pymacOS / Linux 也可以继续使用兼容入口 bash scripts/gen_self_cert.sh。
浏览器访问 https://<本机IP>:8000,首次提示"不安全"点"高级 → 继续前往"即可。
- 会议音频:
data/media/(上传录音原文件,按会议 id 命名) - 人物声样音频:
data/media/voices/<person_id>/ - 转写、人物、声纹向量、设置和 LLM API Key:
data/matrix.db - 模型缓存:默认在项目根
models/(可由MODELS_DIR配置) - 可选公网 LLM:仅在用户显式允许时发送转写文本
这些数据默认不加密,请使用操作系统磁盘加密并保护本机账户。删除会议或人物会删除应用管理的对应音频文件;删除整个 data/ 前应先停止服务。
python -m pytest tests/ -q --ignore=tests/test_smoke_boot.pycd web
npm run check:i18n
npm run typecheck
npm run build
npm audit --omit=dev --audit-level=high真实模型冒烟测试会下载并加载大模型,因此常规 CI 默认不运行:MATRIX_TEST_REAL_DEPENDENCIES=1 pytest tests/test_smoke_boot.py -v。PowerShell 请先执行 $env:MATRIX_TEST_REAL_DEPENDENCIES="1"。
欢迎通过 Pull Request 贡献代码,流程与约定见 CONTRIBUTING.md。
- 缺陷或功能建议请提 GitHub Issue。
- 安全漏洞请按 SECURITY.md 的指引私下报告,不要在 Issue 中附带录音、转写或凭据。
项目代码采用 MIT License。模型权重和部分数据集拥有各自的许可证与使用条款,不随 MIT 自动授权;部署前请阅读 模型说明 并核对上游条款。




