Metadata-Version: 2.4
Name: meeting-rec
Version: 0.1.1
Summary: Local-first meeting recording, speech recognition, diarization, and transcript export service
Author: Meeting Record contributors
Keywords: meeting,recording,speech-to-text,asr,diarization
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Multimedia :: Sound/Audio :: Capture/Recording
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: fastapi>=0.115
Requires-Dist: httpx>=0.27
Requires-Dist: pydantic>=2.8
Requires-Dist: python-dotenv>=1.0
Requires-Dist: python-multipart>=0.0.9
Requires-Dist: numpy>=2.0
Requires-Dist: PyAudioWPatch>=0.2.12.8; platform_system == "Windows"
Requires-Dist: webrtcvad-wheels>=2.0.14
Requires-Dist: sherpa-onnx>=1.12
Requires-Dist: uvicorn>=0.30
Provides-Extra: dev
Requires-Dist: pytest>=8.3; extra == "dev"
Requires-Dist: pytest-asyncio>=0.24; extra == "dev"

# Meeting Record

跨 Linux 和 Windows 的会议录音会后处理服务。当前版本支持导入麦克风与会议回环音频、生成单一 16 kHz `mixed` 文件、创建幂等处理任务、保存审计记录、人工修订及 Markdown/JSON/文本导出。

## 当前边界

- 两个平台都支持导入已有音频；这是默认、稳定的首期工作流。
- 实时录音需要在 `config.toml` 中配置本机可用的麦克风和回环命令及设备名。
- 规范化和混音需要 `ffmpeg` 在 `PATH` 中。
- 腾讯客户端实现请求签名和录音/声纹 API 调用，但需要有效账号、凭据和真实音频完成联调。
- 本地重叠音源分离默认不启用；Phase 0 的 CPU 延迟和 CER 门槛通过前，只标记重叠并要求人工复核。
- 不包含腾讯会议/飞书自动入会、实时字幕或桌面自动化。

## 安装

需要 Python 3.11 或更高版本。

从 PyPI 安装（发布后）：

```powershell
python -m pip install meeting-rec
meeting-rec init
meeting-rec --config config.toml
```

安装后访问 `http://127.0.0.1:8000/`。`config.toml`、ASR/说话人/标点模型、FFmpeg 和 `.env` 属于运行机器配置，不会打进 Python wheel。

发布者构建检查：

```powershell
python -m pip install build twine
python -m build
python -m twine check dist/*
```

上传时建议使用 PyPI API Token：

```powershell
python -m twine upload dist/*
```

不要把 PyPI 密码、Token、`.env` 或 `config.toml` 提交到 Git。

Linux：

```bash
python3 -m venv .venv
.venv/bin/pip install -e '.[dev]'
cp config.example.toml config.toml
.venv/bin/python -m pytest -v
```

Windows PowerShell：

```powershell
py -3.11 -m venv .venv
.venv\Scripts\pip.exe install -e ".[dev]"
Copy-Item config.example.toml config.toml
.venv\Scripts\python.exe -m pytest -v
```

## 启动

Linux：

```bash
MEETING_REC_CONFIG=config.toml .venv/bin/uvicorn meeting_rec.app:create_app --factory
```

Windows PowerShell：

```powershell
$env:MEETING_REC_CONFIG = "config.toml"
.venv\Scripts\uvicorn.exe meeting_rec.app:create_app --factory
```

默认数据目录为 `data/`，SQLite 文件为 `data/meeting-rec.sqlite3`。API 文档位于 `http://127.0.0.1:8000/docs`。

## Web 控制台

启动服务后访问 `http://127.0.0.1:8000/`。控制台提供以下本机工作流：

- 在火山引擎与腾讯云之间选择语音服务，将凭据保存到项目根目录的 `.env`；页面只显示是否已配置，不回显密钥。火山引擎默认使用单个豆包语音 `API Key`，腾讯云使用 `SecretId` 与 `SecretKey`，不要求额外填写 AppId。火山配置保存后可用公开示例音频提交一次新版语音任务，测试成功表示 Key、资源 `volc.seedasr.auc` 和提交接口均可用。
- 创建或选择会议记录，并在新窗口打开 `meeting.tencent.com` 的 HTTPS 会议链接。
- 使用浏览器麦克风录音、试听，或选择已有音频文件上传。
- 服务端使用 FFmpeg 将上传内容转换为 16 kHz 单声道 `mixed.wav`。
- 创建处理任务、查看任务状态、刷新转写内容，并导出 TXT、Markdown 或 JSON。

浏览器录音只能采集麦克风，不能直接捕获腾讯会议的扬声器输出。采集会议双方声音仍需要在 `config.toml` 中配置 Windows 麦克风和回环设备。当前版本的 `/process` 只创建待处理任务，尚未包含自动执行腾讯 ASR 的后台 worker；控制台会将该状态明确显示为“等待处理”。

## 音频工作流

1. `POST /meetings` 创建会议。
2. 使用 `POST /meetings/{id}/recordings/import` 分别导入 `mic` 和 `loopback` 文件。
3. 调用 `meeting_rec.audio.processing` 中的规范化和混音命令生成唯一 `mixed` 录音，再导入为 `mixed`。
4. `POST /meetings/{id}/process` 创建幂等处理任务。
5. `GET /jobs/{job_id}` 查看任务，`GET /meetings/{id}/transcript` 查看记录。
6. `PATCH /transcripts/{id}` 人工修订，`GET /meetings/{id}/export?format=markdown` 导出。

导入请求示例：

```json
{
  "type": "mic",
  "source_path": "/absolute/path/to/mic.wav",
  "recording_start_at": "2026-07-30T09:00:00Z",
  "format": "wav"
}
```

## 实时采集配置

`config.example.toml` 给出 PipeWire 和 Windows DirectShow 命令格式。设备名必须按目标机器修改；没有配置时 API 应返回明确错误，不能假设固定设备名。

Linux 可先使用 `wpctl status` 查看 PipeWire 节点；Windows 可使用以下命令查看 ffmpeg 音频设备：

```powershell
ffmpeg -list_devices true -f dshow -i dummy
```

## 凭据

配置文件只保存环境变量名。控制台将默认厂商写入 `MEETING_REC_ASR_PROVIDER`。火山引擎凭据使用 `VOLCENGINE_API_KEY`，腾讯凭据使用 `TENCENT_SECRET_ID`、`TENCENT_SECRET_KEY`。这些值不写入配置快照、数据库、审计或导出文件。
