Shiyin

skill
Guvenlik Denetimi
Basarisiz
Health Gecti
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Community trust — 13 GitHub stars
Code Basarisiz
  • rm -rf — Recursive force deletion command in scripts/build-app.sh
  • rm -rf — Recursive force deletion command in scripts/ci/import-signing-cert.sh
  • rm -rf — Recursive force deletion command in scripts/dev/make-update-fixtures.sh
  • rm -rf — Recursive force deletion command in scripts/export-signing-cert.sh
  • rm -rf — Recursive force deletion command in scripts/make-dmg.sh
Permissions Gecti
  • Permissions — No dangerous permissions requested

Bu listing icin henuz AI raporu yok.

SUMMARY

macOS meeting notes: live transcript, local transcription (Breeze ASR / whisper.cpp), speaker diarization, AI meeting notes with timestamps

README.md
拾音圖示

繁體中文 | English

拾音 Shiyin

macOS 的會議紀錄 app。錄下會議(現場或線上),錄音中就能看到即時逐字稿;錄完在本機轉錄、分出說話者,再交給 Claude、Codex 或 API 整理成會議紀錄。紀錄裡每一條都附上錄音時間點,點一下就能聽到原話。

  • 錄音、轉錄、說話者辨識都在本機完成,錄音不會上傳
  • 不需要安裝 Python、Homebrew 或 ffmpeg,下載 DMG 就能用
  • 介面有繁體中文和英文(跟著 macOS 的語言),會議可以是中文或英文
  • 需要 Apple Silicon 和 macOS 26

會議紀錄

怎麼用

  1. 錄音或匯入:按工具列的「錄音」(⌘R)。線上會議請把錄音來源選「麥克風+電腦聲音」,對方的聲音也會錄進來。已經有錄音檔的話,拖進視窗就好。
  2. 邊錄邊看、邊記:左邊是即時逐字稿,右邊「我的筆記」每換一行會自動記下錄音時間;重要的地方按「標記重點」(⌘B)。
  3. 停止並轉錄:在本機正式轉錄並分出說話者,點「說話者 1」可以改成人名。
  4. 看會議紀錄:轉錄完自動整理成摘要、決議、待辦、未決問題,每一條都能點時間點跳回錄音。不確定的人名和專有名詞會列在「待確認」,回答後 AI 會依答案修正。
  5. 匯出或分享:會議紀錄存成 Markdown、PDF、Word,逐字稿存成字幕檔,或把整場會議打包成 .shiyin 傳給同事。

功能

  • 錄音

    • 來源可以選「只錄麥克風」「麥克風+電腦聲音(線上會議)」「只錄電腦聲音」。Zoom、Meet、Teams 對方的聲音也錄得到
    • 錄音中顯示即時逐字稿、各來源的音量;可以暫停、標記重點、做筆記
    • 關掉主視窗後錄音照常進行,選單列可以暫停、停止;在其他 app 裡按 ⌃⌥⌘R 也能開始或停止錄音
    • app 當掉或電腦突然關機,下次開啟會自動復原錄音
  • 匯入:音訊和影片(m4a、mp3、wav、aac、flac、caf、aiff、mp4、mov)、逐字稿(srt、vtt、txt)、Markdown 筆記、整場會議封包(.shiyin)。可以拖進視窗、⌘O、拖到 Dock 圖示,或在 Finder 用「打開方式」

  • 本機轉錄:whisper.cpp + Breeze ASR 25,詞彙表會當成提示詞;也可以改用 macOS 內建辨識(不用下載模型、速度快很多,但不參考詞彙表)

  • 會議語言:每場會議可以選中文或英文,轉錄、會議紀錄、匯出的標題都跟著這個語言;預設語言在設定裡改

  • 逐字稿校正:轉錄完,整理工具依詞彙表和上下文找出可能聽錯的字(同音字、專有名詞),標在逐字稿裡,你按「接受」才改,可以還原

  • 詞彙表建議:從參加者、說話者名字、校正過的字、會議標題建議要加進詞彙表的詞

  • 說話者辨識:逐字稿每段標上說話者,每個人一個顏色;可以改名、只看某一位說話者

  • 會議紀錄

    • 範本:一般會議、一對一、訪談、課堂/演講、腦力激盪,也可以自訂
    • 整理工具:Claude Code、Codex CLI、Anthropic API、OpenAI API,或「不整理」只要逐字稿
    • 可以直接編輯;每次修改都留版本,可以復原
  • 匯出與分享

    項目 格式
    會議紀錄 Markdown、PDF、Word;也可以複製成富文字、Markdown、純文字
    逐字稿 txt、Markdown、srt、vtt、Word(可選要不要時間點和說話者)
    錄音 m4a、wav
    整場會議 .shiyin 封包(錄音、逐字稿、說話者、紀錄、筆記、重點),對方雙擊就能匯入

    匯出時也可以直接用 AirDrop、Mail、訊息分享。

  • 管理:資料夾(依專案或客戶分類)、全文搜尋所有會議、垃圾桶(30 天內可還原)

  • 其他:倍速播放(0.75×~2×)、用詞修正(逐字稿和紀錄一起改)、轉錄完自動把錄音壓縮成 m4a、完成或失敗時發通知、app 內更新

逐字稿與說話者

逐字稿截圖的示範錄音取自 AMI Meeting Corpus(ES2004a,CC BY 4.0)。

錄音中

系統需求

項目 需求
晶片 Apple Silicon(M1 以上)
系統 macOS 26 以上
記憶體 8 GB 以上。轉錄加說話者辨識的峰值約 2.7 GB,4 小時的會議約 4.1 GB(M3 Pro 實測)
磁碟空間 模型約 1.7 GB(第一次使用時下載;改用 macOS 內建辨識就不用),加上錄音:m4a 約每小時 10~30 MB
整理工具 擇一:已登入的 Claude Code(claude)、Codex CLI(codex)、Anthropic API key、OpenAI API key。也可以選「不整理」
網路 第一次下載模型、整理會議紀錄時需要;錄音、轉錄、說話者辨識都不需要

安裝

用 DMG 安裝

  1. 取得 Shiyin-<版本>.dmg(這個 repo 的 Releases,或向維護的人拿),打開後把「拾音」拖到旁邊的 Applications(應用程式)。
  2. 拾音沒有經過 Apple 公證,第一次打開會被擋下:到「系統設定 → 隱私權與安全性」按「仍要打開」(只要做一次)。DMG 裡的「安裝說明.pdf」有完整步驟(英文版是「Install Guide.pdf」)。
  3. 第一次打開會出現引導:允許麥克風、下載轉錄模型(約 1.7 GB)、選整理工具。每一步都可以略過,之後在設定裡補做。
  4. 3.1.1 起,拾音會自動檢查這個 repo 的 Releases 有沒有新版,詢問你之後自動更新。

從原始碼建置

需要 Xcode 26(Swift 6.2 以上)。第一次建置會用 Swift Package Manager 下載 GRDB、FluidAudio 和 whisper.cpp 的 XCFramework。

git clone https://github.com/juinwei7/Shiyin.git
cd Shiyin
scripts/make-signing-cert.sh --trust   # 只要做一次:建立並信任自簽憑證(要輸入登入密碼),之後更新 app 時權限不用重新允許
scripts/build-app.sh --install         # 建置 release 版並安裝到 ~/Applications

沒有執行 make-signing-cert.sh --trust 也能建置,會改用 ad-hoc 簽章,只是每次重新建置後系統可能會再問一次權限。

發布新版

用 GitHub Actions(推薦)

  1. 改 Resources/Info.plist 的 CFBundleShortVersionString,commit 並推上去。

  2. 打一個帶說明的 tag 並推上去,說明文字就是這版的更新內容:

    git tag -a v3.1.1 -m "這版改了什麼"
    git push origin v3.1.1
    
  3. .github/workflows/release.yml 會在 macos-26 runner 上建置 DMG,建立 GitHub Release 並上傳 DMG 和 shiyin-update.json。tag 跟版本號不一致時會直接失敗。

也可以在 Actions 頁面手動執行「打包」,只建置、不發布,DMG 放在那次執行的 artifact。

設定(Settings → Secrets and variables → Actions,都是選填):

名稱 種類 用途
SHIYIN_SIGNING_P12、SHIYIN_SIGNING_P12_PASSWORD Secret 自簽憑證。用 scripts/export-signing-cert.sh --to-github <owner/repo> 從自己的電腦設定,CI 簽出來的 app 才會跟你電腦上建的一致;沒有設定就用 ad-hoc 簽章
SHIYIN_UPDATE_URL Variable 寫進 app 的更新網址
SHIYIN_RELEASES_REPO、SHIYIN_RELEASES_TOKEN Variable、Secret 另外發布到一個公開的 repo(程式碼維持私人、又想讓 app 自動更新時用)

在自己的電腦上發布

  1. 改 Resources/Info.plist 的 CFBundleShortVersionString。

  2. 產生 DMG,帶入更新網址和這版的更新內容:

    SHIYIN_UPDATE_URL=https://example.com/shiyin/shiyin-update.json \
    SHIYIN_RELEASE_NOTES="這版改了什麼" scripts/make-dmg.sh
    

    dist/ 裡會有 Shiyin-<版本>.dmg 和 shiyin-update.json(版本、DMG 檔名、SHA-256、更新內容)。

  3. 把這兩個檔案放到更新網址的位置(一定要 https)。已經安裝的拾音會在 24 小時內檢查到新版,詢問使用者後自動下載、驗證並重新開啟。

用 GitHub Releases 發布的話,更新網址可以用 https://github.com/juinwei7/Shiyin/releases/latest/download/shiyin-update.json,每次發布時把兩個檔案都上傳:

gh release create v3.1.1 dist/Shiyin-3.1.1.dmg dist/shiyin-update.json --notes "這版改了什麼"

注意:私人 repo 的 Releases 檔案要登入才能下載,app 內更新會失敗;這種情況請把兩個檔案放在公開的 https 位置(公司內部網站、NAS 等)。

app 會檢查新版的簽章是否跟目前的 app 相符。執行過 make-signing-cert.sh --trust 之後,只有同一張憑證簽的版本才能透過更新安裝。

資料與隱私

項目 位置與去向
錄音、逐字稿、資料庫、模型 ~/Library/Application Support/Shiyin(權限 700,不會被 iCloud 同步)
錄音、轉錄、說話者辨識 完全在本機,不連網
整理、校稿 逐字稿文字、你的筆記、詞彙表、會議基本資料會送到你選的服務(Anthropic 或 OpenAI)。錄音檔不會送出
API key 存在 macOS 鑰匙圈,不寫進檔案或 log
整理工具選「不整理」 完全離線

設定(⌘,)

分頁 內容
整理工具 Claude、Codex、Anthropic API、OpenAI API 或不整理;登入狀態、測試整理工具;API key;模型;轉錄完是否自動整理、是否檢查可能聽錯的字
範本 內建範本和自訂範本、預設範本
詞彙表 人名、系統名、專有名詞的正確寫法,轉錄和整理都會參考;建議加入的詞
錄音 錄音來源、麥克風、預設會議語言、即時逐字稿、說話者辨識、正式轉錄引擎(Breeze 或 macOS 內建)、全域快捷鍵、權限設定
模型與儲存空間 下載、暫停、刪除模型;壓縮錄音;空間用量;刪除第二版留下的舊檔案
進階 更新網址與檢查更新、環境檢查、重新顯示首次使用引導、重建搜尋索引

開發

本專案採用 SDD(規格驅動開發):先寫需求、設計、任務,再寫程式,每項任務都要實際跑過才打勾。

文件 內容
docs/requirements.md 需求與驗收結果
docs/design.md 架構、資料模型、提示詞、介面、決策紀錄
docs/tasks.md 任務、驗證紀錄、變更紀錄
docs/spikes/asr-engines.md 轉錄引擎和說話者辨識的選型實驗
CLAUDE.md 開發與驗證時要注意的事

專案結構

Sources/Shiyin/
├── App/          app 進入點、選單、AppDelegate
├── Capture/      錄音(麥克風、系統聲音)、寫檔、即時逐字稿
├── Transcribe/   解碼、whisper.cpp、macOS 內建辨識、說話者辨識
├── Notes/        整理工具(CLI、API)、提示詞、範本
├── Model/        資料表與會議紀錄的資料結構
├── Store/        資料庫(GRDB)、AppModel
├── IO/           匯出、.shiyin 封包、匯入逐字稿
├── Services/     工作佇列、模型下載、更新、鑰匙圈、全域快捷鍵、通知
├── Views/        SwiftUI 畫面
└── Debug/        DEBUG 版的控制通道(shiyinctl)
Resources/        Info.plist、翻譯表(Localizable.xcstrings)、圖示
scripts/          建置、DMG、自簽憑證、圖示、開發工具
docs/             規格與實驗紀錄

常用指令

scripts/build-app.sh               # release 建置,產出 build/Shiyin.app(實際位置在 ~/Library/Caches/ShiyinBuild)
scripts/build-app.sh --debug       # DEBUG 建置,含驗證用的控制通道
scripts/make-dmg.sh                # release 建置並產生 DMG 和 shiyin-update.json
swift scripts/make-icon.swift Resources/AppIcon.icns   # 重新產生圖示

# DEBUG 版的控制通道:不用操作畫面就能觸發功能、讀取狀態、截圖
swiftc scripts/dev/shiyinctl.swift -o ~/Library/Caches/ShiyinBuild/shiyinctl
~/Library/Caches/ShiyinBuild/shiyinctl state /tmp/state.json
~/Library/Caches/ShiyinBuild/shiyinctl snapshot /tmp/summary.png dark detail

scripts/dev/l10n.py check         # 改過介面文字後:抽出字串、列出缺英文翻譯和沒查表的中文
~/Library/Caches/ShiyinBuild/app/Shiyin.app/Contents/MacOS/Shiyin -AppleLanguages "(en)"   # 用英文介面開啟

/usr/bin/log stream --predicate 'subsystem == "com.weiwei.shiyin"'      # 看 log
sqlite3 ~/Library/Application\ Support/Shiyin/shiyin.sqlite             # 看資料

已知限制

  • 沒有 Apple 開發者帳號,app 沒有公證,第一次打開要手動放行。
  • 錄音中的即時逐字稿用的是系統內建的辨識,不吃詞彙表,英文專有名詞常常不準(例如 Redis 變成 readis)。錄完後的正式轉錄會用詞彙表修正。
  • 轉錄的準確度:在公開的真人中文會議(遠距收音、6 人)上,字錯誤率 Breeze 約 29%、macOS 內建約 25%,以漏掉搶話和語助詞為主;整理出來的會議紀錄仍然正確。筆電或耳機收音的會議應該會好很多,但還沒有用真實的台灣會議驗證過。
  • 說話者辨識:很短、而且大部分時間只有一個人在講的錄音,話少的人可能被併進別人。逐字稿的一段裡如果換人說話,整段只會標一個說話者。
  • Claude 整理通常要 30~70 秒,偶爾會到幾分鐘。
  • 英文會議的轉錄:在公開的英文會議片段(AMI,4 人)上,字錯誤率 Breeze 約 27%、macOS 內建約 26%。
  • 還沒有:中文和英文以外的語言、行事曆整合、iPhone 版。

使用的開源專案與模型

名稱 用途 授權
whisper.cpp 正式轉錄 MIT
Breeze ASR 25(GGML 轉檔) 轉錄模型(繁體中文、中英夾雜) Apache-2.0
FluidAudio 說話者辨識 Apache-2.0
GRDB.swift SQLite 資料庫、全文搜尋 MIT

轉錄模型和說話者辨識模型不放在這個 repo 裡,第一次使用時才下載。app 和 DMG 都附有上面這些套件的完整授權條款:「關於拾音」視窗、DMG 裡的 Third-Party Licenses.txt(scripts/dev/make-third-party-licenses.sh 產生,更新套件後要重跑)。

授權

MIT。使用的開源專案和模型各自依上表的授權條款。

Yorumlar (0)

Sonuc bulunamadi