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。

動作方法

  1. 記録 – macOS Core Audioプロセスタップ(AudioHardwareCreateProcessTap)を使用してシステム音声をキャプチャし、AVAudioEngineでマイク音声を取得。音声はAACエンコードされたCAFファイルに直接ストリーミングされ、プロセスがクラッシュしても読み取り可能。
  2. トランスクリプション – 各トラックは FluidAudio Core MLラッパーを介してParakeetモデルに送信される。meta.jsonのオフセットに従ってタイムシフトされ、1つのタイムスタンプ付き、スピーカータグ付きトランスクリプト(transcript.json およびレンダリングされた transcript.md)にマージされる。
  3. キューと永続化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.enabledfalse に設定すると、音声のキャプチャのみ。
  • 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
  • プロジェクト
  • プロジェクト