個人開発として kotoma というツールを作りました。マイクやシステム音声をリアルタイムに文字起こしし、英語と日本語に並べてターミナルに表示する TUI です。すべてローカルで完結します。
作った理由
所属先の公用語が英語で、会議や議論をその場で完璧に聞き取れないという課題が自分の中にありました。話の流れを追いきれず、後から「いま何と言ったか」を確認したくなる場面が多くあります。リアルタイムで文字に起こし、さらに日本語に並べて見られれば、聞き取れなかった部分を取りこぼさずに済みます。
クラウドの文字起こしサービスは便利ですが、会議の音声を外部に送りたくない場面もあります。ローカルで完結して、ターミナルから気軽に起動できるものが欲しくて作りました。
できること
- マイク入力(と任意でシステム音声)をリアルタイムに文字起こし
- 英語 ↔ 日本語を二列に並べて表示。話者が実際に使った言語側に
▶が付き、反対の列には翻訳が出ます - セッションをタイムスタンプ付きの Markdown テーブルとして保存
┌ kotoma · REC · lang=en · model=ggml-small.bin · tr=ready ┐
├─ English ───────────────────┬─ 日本語 ──────────────────────┤
│ [10:31:03] ▶ Hello, how are │ [10:31:03] こんにちは、お元気 │
│ you? │ ですか? │
│ [10:31:10] I'm fine. │ [10:31:10] ▶ 元気です。 │
└─────────────────────────────┴────────────────────────────────┘
技術構成
すべて Rust で書いています。
- 音声認識:
cpalでキャプチャ →webrtc-vadで発話区間を検出 →whisper.cpp(Metal)をwhisper-rs経由で実行 - 翻訳(任意): Qwen2.5 を
llama-serverのサブプロセスとして起動し、HTTP で問い合わせ - UI:
ratatuiによる二列表示 - 出力: タイムスタンプ付きの Markdown テーブル
Apple Silicon なら Metal で動くので、16GB の M シリーズ Mac でも standard ティアが快適に動きます。翻訳の [translator] セクションを外せば、文字起こしだけの軽量な構成にもできます。
試してみる
クローン不要、ワンライナーで入ります。
curl -fsSL https://raw.githubusercontent.com/shohei81/kotoma/main/install.sh | bash -s -- standard
インストーラがビルド・モデルのダウンロード・設定ファイルの用意までやってくれます。あとは出力先を渡して起動するだけです。
kotoma notes.md
ソースは github.com/shohei81/kotoma にあります(MIT ライセンス)。キーバインドやシステム音声のミックス、モデルティアの詳細は README にまとめてあります。