digimata/quill
Ultra-minimalist macOS recording + transcription.
quill – ローカル macOS ミーティングレコーダー & トラック生成ツール
何であるか – マックのメニュー バーに常駐する単一バイナリのSwiftアプリ。1クリックでマイクとコンピュータが再生するすべての音声を記録し、2つのトラックを別々の .caf ファイルとして保存し、オンデバイスの音声認識モデルでスピーカー識別付きのトランスクリプトを生成します。データは一切クラウドに送信されません。
主な機能
- メニュー バーのアイコンからワンクリックで開始/停止。
- 2つのオーディオトラック(マイク + システム)により、クリーンな単一ソース音声で音声認識モデルが動作し、別途スピーカー識別モデルを使わずに自然な 私 vs. 他者 のダイアライゼーションが可能。
- Parakeet TDT 0.6B v2 Core MLモデル(Apple Silicon上で1時間あたり約20秒の計算)を用いた完全ローカルのトランスクリプション。WhisperKitのフォールバックは計画中。
- 自動キューイング:各記録は順番にトランスクリプションされ、未完了のジョブは次回起動時に再開される。
- 出力ディレクトリのカスタマイズ、トランスクリプションの有効/無効、マイクのエコーキャンセリングのオプション、セッション終了後にシェルコマンドを実行するフック(
on_stop)。 - デーモンの起動、記録のルート変更、ヘルスチェック(
quill doctor)、ログイン時起動エージェントのインストール/アンインストールを行うためのシンプルなCLI。
動作方法
- 記録 – macOS Core Audioプロセスタップ(
AudioHardwareCreateProcessTap)を使用してシステム音声をキャプチャし、AVAudioEngineでマイク音声を取得。音声はAACエンコードされたCAFファイルに直接ストリーミングされ、プロセスがクラッシュしても読み取り可能。 - トランスクリプション – 各トラックは FluidAudio Core MLラッパーを介してParakeetモデルに送信される。
meta.jsonのオフセットに従ってタイムシフトされ、1つのタイムスタンプ付き、スピーカータグ付きトランスクリプト(transcript.jsonおよびレンダリングされたtranscript.md)にマージされる。 - キューと永続化 –
meta.jsonが存在してtranscript.jsonが存在しない場合、保留中のジョブとみなされる。ファイルシステム自体がキューとして機能するため、前の記録がトランスクリプション中でも新しい記録を開始可能。
インストールと使用方法
# Swiftバイナリをビルド
cd quill
swift build -c release
sudo cp .build/release/quill /usr/local/bin/quill
# オプション:ログイン時に起動
quill install --launch-at-login
quill(またはLaunchAgent)を実行してメニュー バー デーモンを起動。- フェザー アイコンをクリック → 記録を開始、再度クリック → 停止。
- トランスクリプションは自動で実行され、macOSの通知で完了を知らせます。
- 記録は
~/Recordings/<yyyy.MM.dd-HHmm>/以下に保存され、以下のファイルが含まれます:mic.caf(あなたの声)system.caf(他の参加者 / システム音声)meta.json(タイムスタンプ)transcript.jsonおよびtranscript.md(機械可読および人間可読バージョン)transcribe.log(進行状況 / エラー)
設定(オプション ~/.config/quill/config.json)
{
"recordings_dir": "~/Recordings",
"transcription": {"enabled": true, "engine": "parakeet"},
"on_stop": "my-hook"
}
recordings_dirでデフォルトの場所を上書き。transcription.enabledをfalseに設定すると、音声のキャプチャのみ。mic_voice_processingでAppleのエコーキャンセリングを切り替え(スピーカー経由での記録時に有用)。on_stopはトランスクリプト書き込み後に、セッションフォルダを引数としてシェルコマンドを実行。
制限 / 注意点
- システム音声タップはMacが再生するすべてを記録するため、バックグラウンド音楽や通知が
system.cafトラックに含まれる可能性がある。 - macOS 15+(プロセスタップAPI)が必要。合理的なトランスクリプション速度を得るにはApple Siliconが推奨。
- 現在のモデルは英語のみ対応。Whisperフォールバックが追加されると、他の言語もサポートされる予定。
- 「画面およびシステム音声の記録」の権限が付与されていないと、記録が無音になる。
技術スタック
- Swift(Swift Package Managerによる単一実行可能ファイル)
- Core Audioプロセスタップ:システム音声キャプチャ
- AVAudioEngine および AVAudioFile:マイクキャプチャとAACエンコードストリーミング
- FluidAudio / Parakeet Core MLモデル:オンデバイストランスクリプション
- NSStatusItem:メニュー バーUI
すべての詳細はリポジトリのREADMEから直接取得。
関連
- プロジェクト
- プロジェクト
- Dispatch
- プロジェクト
- プロジェクト