内容
# 简单会议记录工具
> **Fork 说明。** 这是 Romuald Członkowski 的个人 fork 版本,原始项目地址为
> [czlonkowski/simple-meeting-scribe](https://github.com/czlonkowski/simple-meeting-scribe),
> 在 MIT License 下使用(未修改 — 见 [LICENSE](LICENSE))。原始应用的所有功劳归属于他。
> **本 fork 版本新增/修改的内容:** 乌克兰语支持(取代波兰语);一键总结导出到 Telegram / Obsidian / 邮箱;持久的语音注册,可自动标记已知发言者;`search_transcripts` MCP 工具;可选的 Gemini Live API 直播字幕;日历集成,用于基于与会者的发言者名称;仅菜单栏操作;以及各种录音/稳定性修复。
一款适用于 macOS 的个人会议转录工具。我为自己制作了这个工具。由于其他人要求,我将其源码公开出来 —— **不是** 因为我要发布一个产品。
没有网站,没有安装程序,没有支持,没有路线图。如果某些功能坏了,你需要自己修复。如果您想要某个功能,您可以自己添加。本项目采用 MIT 许可;您可以 fork 它,精简它,重新塑造它 —— 它属于您。
---
## 功能
- 检测 Google Meet / Zoom / Teams / Whereby 等会议在 Arc, Safari, 或 Chrome 中打开时,提供开始录音的选项。
- 同时录制麦克风和系统音频作为两个独立的音轨(以便转录时可以区分 "您" 和 "远程")。
- 使用 [WhisperKit](https://github.com/argmaxinc/WhisperKit) (Whisper Large v3 / v3 Turbo, CoreML / ANE)转录两个音轨。
- 使用 [FluidAudio](https://github.com/FluidInference/FluidAudio) (Pyannote on CoreML)对远程音轨进行说话人识别,以便多个远程发言者可以获得不同的标签。
- 将 `.md` 和 `.json` 转录文件保存到 `~/Documents/MeetingTranscripts/`。
- 可选的设备端 LLM 总结 + 任务项 + 自动标题,通过 [MLX](https://github.com/ml-explore/mlx-swift-lm) 实现 —— Bielik 适用于波兰语,Qwen3.5 适用于英语。
- 将任何 `.mp4` / `.m4a` / `.mov` / `.wav` / `.mp3` 文件拖放到窗口中,转录现有的录音。
## 新增功能
在原始版本的基础上,本 fork 版本新增了:
- **乌克兰语支持** —— 取代波兰语。默认情况下,转录使用 Whisper large-v3 进行乌克兰语(英语使用 turbo);每个术语的词汇表 + 词语替换过程可以清理 Whisper 无法推断的领域专业术语。
- **总结导出** —— 将生成的总结直接发送到 **Telegram** 聊天室(Bot API),**Obsidian** 知识库(作为一个带日期的 Markdown 笔记),或 **电子邮件** 草稿。在设置中配置目的地;除非您选择加入,否则不会发送任何内容。
- **语音注册** —— 记住一个发言者的语音(例如 "Andrii"),未来的会议会自动标记相同的语音,而不是 "远程 1/2"。使用 FluidAudio 的 256 维说话者嵌入 + 余弦匹配,全部在设备端进行。
- **转录搜索** —— 一个 `search_transcripts` MCP 工具,用于对所有存储的转录进行全文搜索,以便 MCP 客户端(例如 Claude Code)可以回答 "我们关于 X 达成了什么共识?" 跨所有会议。
- **实时字幕** —— 通过 Gemini Live API 可选地在屏幕上显示字幕。默认情况下关闭;否则应用程序保持完全本地。
- **日历集成** —— 从实时日历事件中提取与会者姓名作为候选发言者姓名。
- **仅菜单栏操作** ,以及录音/稳定性修复(系统音频抽取恢复,中断录音的安全恢复,arm64 构建修复)。
## 不具备的功能
- 无云服务。无遥测。无账户。除了第一次运行下载 Whisper / 说话人识别 / LLM 权重之外,无网络调用。
- 无自动更新。无应用商店。无 notarized 二进制文件(请自行构建)。
- 无测试。无 CI。无文档 API。无向后兼容性承诺。
- 仅支持英语 + 波兰语(我需要的两种语言),不支持其他语言。
所有操作都在您的机器上进行。如果网络关闭,已经下载的模型将继续工作。
## 要求
- Apple Silicon Mac(M1 或更新;M3+ 强烈推荐用于 11B 波兰语模型)。
- macOS 26 Tahoe。UI 使用 Liquid Glass,`@Observable` 等 macOS 26 API。旧版 macOS 将无法构建。
- Xcode 16+ 和 Xcode Metal Toolchain(Xcode 将在首次构建时提示,或您可以使用 `xcodebuild -downloadComponent MetalToolchain` 预安装)。
- [xcodegen](https://github.com/yonaskolb/XcodeGen) —— `brew install xcodegen`。
- 如果您想缓存所有可选模型,则需要约 15 GB 的可用磁盘空间。
- 推荐 32 GB RAM 用于较大的 LLM(Qwen3.5-9B,Bielik-11B)。16 GB RAM 适用于 Qwen3.5-4B 和较小的 Bielik 变体。
## 从源码构建
```bash
git clone https://github.com/czlonkowski/simple-meeting-scribe
cd simple-meeting-scribe
xcodegen generate
xcodebuild -project MeetingTranscriber.xcodeproj \
-scheme MeetingTranscriber \
-configuration Debug \
-destination 'platform=macOS' \
-skipMacroValidation \
build
```
从 `~/Library/Developer/Xcode/DerivedData/.../Debug/MeetingTranscriber.app` 运行应用程序,或使用 `sudo cp -R …` 将其复制到 `/Applications`。
## … 或让 AI 编程代理为您安装
如果您已经使用 [Claude Code](https://claude.com/claude-code),Codex 或类似的编程代理,请将此提示粘贴到其中,让它完成工作。您仍然需要批准 Xcode / Homebrew / sudo 提示。
> ```
> 请在 Mac 上安装 Simple Meeting Scribe。它是一个 SwiftUI 应用,位于 https://github.com/czlonkowski/simple-meeting-scribe。执行以下操作:
>
> 1. 验证先决条件:Apple Silicon,macOS 26 或更新,Xcode 16+ 已安装。如果 Xcode 命令行工具未安装,请运行 `xcode-select --install` 并等待其完成。
> 2. 如果缺少,请安装 xcodegen:`brew install xcodegen`(如果没有,请使用官方脚本安装 Homebrew)。
> 3. 预下载 Metal Toolchain 以避免构建延迟:`xcodebuild -downloadComponent MetalToolchain`
> 4. 将仓库克隆到 ~/Developer(如果需要,请创建目录),然后 `cd` 进入:
> `git clone https://github.com/czlonkowski/simple-meeting-scribe ~/Developer/simple-meeting-scribe && cd ~/Developer/simple-meeting-scribe`
> 5. 生成 Xcode 项目:`xcodegen generate`
> 6. 构建 Release:
> `xcodebuild -project MeetingTranscriber.xcodeproj -scheme MeetingTranscriber -configuration Release -destination 'platform=macOS' -skipMacroValidation -derivedDataPath build build`
> 7. 安装到 /Applications(这需要 sudo — 如果您无法运行,请让我运行):
> `sudo rm -rf /Applications/MeetingTranscriber.app && sudo cp -R build/Build/Products/Release/MeetingTranscriber.app /Applications/ && sudo /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/MeetingTranscriber.app`
> 8. 从 /Applications 打开应用一次,以便 macOS 可以注册它,然后告诉我:
> - 授予麦克风 + 屏幕录制权限时弹出提示,
> - 在第一次会议检测时批准 Arc / Safari / Chrome 的自动化访问权限,
> - 打开设置 → 总结 → 模型库并下载模型,然后再进行第一次总结(Qwen3.5-4B 8-bit 适用于英语,Bielik-11B v3 适用于波兰语,是默认模型)。
>
> 如果任何步骤失败,请停止并显示确切的错误 — 不要掩盖它。如果某个步骤需要 sudo,请在我允许的情况下仅运行一次。
> ```
> **为什么使用 `-skipMacroValidation`?** MLX Swift LM 提供了编译器插件宏(`#hubDownloader`,`#huggingFaceTokenizerLoader`)。Xcode 在第一次使用时会提示信任它们。CLI 标志跳过此提示。在 Xcode GUI 中,请在第一次构建时点击 "Trust & Enable"。
由于应用程序是临时签名的,因此 macOS 会将每个安装路径视为一个单独的 TCC 身份。如果您将 `.app` 从 DerivedData 移动到 `/Applications`,您将被要求重新授予麦克风 + 屏幕录制 + 自动化(用于浏览器 AppleScript)权限。这是 macOS 的行为,而不是我的。
## 首次运行
1. 启动。Dock 图标由 `scripts/generate_app_icon.swift` 生成 — 随时使用 `swift scripts/generate_app_icon.swift` 重新生成。
2. 录制一次;macOS 将弹出 **麦克风** 和 **屏幕录制** 的提示。请批准两者。
3. 在 Arc/Safari/Chrome 中打开会议网址。macOS 将为每个浏览器弹出一个 **自动化** 提示。
4. 设置 → **总结** → 模型库 → 选择模型,点击下载。模型位于 `~/Documents/huggingface/models/`。
## 磁盘上的文件
- `~/Documents/MeetingTranscripts/` — 转录文件(`.md` + `.json`)。
- `~/Documents/MeetingTranscripts/recordings/` — 每个会话的配套 `.voice.wav` 和 `.system.wav` 文件。
- `~/Documents/huggingface/models/` — 下载的 LLM 权重。
- Whisper 模型位于 WhisperKit 自己的缓存中(首次下载时在应用内显示进度)。
删除侧边栏中的转录文件(右键 → 删除)会删除该会话的所有上述文件。
## 仓库布局
```
MeetingTranscriber/
├── App/ # SwiftUI @main + AppState + 菜单栏额外
├── Capture/ # AudioRecorder, SystemAudioCapture (SCStream), MeetingDetector
├── Transcribe/ # WhisperEngine, DiarizationEngine, TranscriptionPipeline
├── Summarize/ # MLX 包装器,每种语言的提示,模型枚举
├── Storage/ # TranscriptStore, DictionaryStore, SummaryStore
├── UI/ # SwiftUI 视图
└── Resources/ # Info.plist, 权利声明,meeting-patterns.json
```
`project.yml` 驱动一切 — 编辑 YAML,运行 `xcodegen generate`,永远不要手动触摸 `.xcodeproj`。
## 贡献
我不接受拉取请求。如果您想添加某些功能,请 fork 它。问题欢迎作为讨论的地方,但我不承诺会回应。
## 许可证
MIT — 见 [LICENSE](LICENSE)。
连接信息
猜你喜欢
暂无推荐服务器