HN 日本語サマリー

← 一覧へ戻る
プログラミング

Cloudflare AI を使用したオープンソースで無料枠対応の Whispr

Open Source, Free Tier Capable Whispr Using Cloudflare AI (github.com)

12 pointsby TreDub7 コメント

要約

VoiceBox は、音声を入力として受け取り、Whisper で文字起こしし、LLM で整形されたテキストを生成するデスクトップアプリケーションです。ホットキーを押して話すだけで、整形されたテキストがクリップボードにコピーされ、入力中のアプリケーションに自動的に貼り付けられます。バックエンドは Cloudflare Worker で動作し、Whisper STT と LLM フォーマッターを利用します。

全文翻訳

VoiceBox 音声からテキストへのツールで、音声をキャプチャし、Whisper 経由で文字起こしし、LLM で出力を整形します。ホットキーを押して話し、離すと、整形されたテキストがクリップボードに配置され、入力していたものに自動的に貼り付けられます。 仕組み PCM チャンク → WebSocket → Cloudflare Worker (Durable Obj) → Whisper STT → LLM Formatter → クリップボード → 自動貼り付け Ctrl+Cmd を長押しすると、フォーカスされているコンテキストがキャプチャされ、録音が開始され、オーバーレイが上部中央に表示されます。 マイクに向かって話します(音声レベルメーターが入力表示)。 Ctrl+Cmd を離すと、オーディオがクラウドにストリーミングされます。 Whisper が文字起こしし、LLM が整形し、結果がクリップボードにコピーされて、元のアプリケーションに自動貼り付けされます。 プロジェクト構造 voicebox/ ├── main.go # Wails エントリーポイント、アプリメニュー ├── app.go # アプリのライフサイクル、ホットキーハンドラー、パイプラインオーケストレーション ├── window_darwin.go # macOS ウィンドウ管理(オーバーレイ、設定、ドッククリック) ├── window_other.go # macOS 以外のビルド用のスタブ ├── internal/ │ ├── audio/ # PCM オーディオキャプチャ (malgo/miniaudio)、RMS レベル │ ├── pipeline/ # WebSocket クライアント、オーディオとフォーカスコンテキストをワーカーにストリーミング │ ├── accessibility/ # macOS AX API: フォーカスされた要素のコンテキストと自動貼り付け (Cmd+V) │ ├── config/ # TOML 設定の読み込みと保存 │ ├── hotkey/ # グローバルホットキー登録 │ ├── stt/ # STT プロバイダーインターフェース (スタブ) │ └── formatter/ # LLM フォーマットプロバイダーインターフェース (スタブ) ├── frontend/ # React + Tailwind オーバーレイ UI (Vite) │ └── src/ │ ├── App.tsx # 設定モードとオーバーレイモード間のルーティング │ ├── components/ │ │ ├── settings-form.tsx # 設定エディター (react-hook-form + zod) │ │ └── title-bar.tsx # フレームレスタイトルバーとドラッグ領域 │ └── hooks/ │ ├── use-voicebox.ts # voicebox:state / voicebox:mode / voicebox:level イベント │ └── use-config.ts # GetConfig / SaveConfig / GetConfigPath バインディング ├── worker/ # Cloudflare Worker (TypeScript) │ ├── src/ │ │ ├── index.ts # ルーター: /ws (WebSocket)、/health │ │ ├── session.ts # Durable Object: オーディオ蓄積 + AI パイプライン │ │ ├── prompt.ts # システムプロンプト + ユーザーメッセージビルダー │ │ ├── wav.ts # PCM から WAV へのラッパー │ │ └── types.ts # 共有型 │ ├── test/ # Vitest テスト │ └── wrangler.jsonc # Worker 設定 ├── go.mod └── voicebox.toml # ユーザー設定 (gitignored) セットアップ前提条件 Go 1.24+ Node.js + pnpm Wails v2 CLI Workers AI アクセス権を持つ Cloudflare アカウント macOS (自動貼り付けにはアクセシビリティ許可が必要) Worker のデプロイ cd worker pnpm install wrangler secret put VOICEBOX_TOKEN # 共有シークレットを設定 pnpm deploy デスクトップクライアントの設定 初回起動時に、VoiceBox は設定ウィンドウを開きます。設定は ~/.config/voicebox/voicebox.toml で手動で作成することもできます。 [provider] mode = "cloud" [cloud] worker_url = "https://voicebox.<your-subdomain>.workers.dev" token = "your-shared-secret" [audio] sample_rate = 16000 channels = 1 chunk_size = 4096 [hotkey] record = "ctrl+cmd" 設定は、~/.config/voicebox/voicebox.toml、バイナリの隣、./voicebox.toml の順に読み込まれます。 macOS アクセシビリティ許可 自動貼り付けには macOS のアクセシビリティアクセスが必要です。初回使用時に macOS が許可を求めるプロンプトを表示するか、システム設定 → プライバシーとセキュリティ → アクセシビリティで手動で付与できます。 ビルドと実行 wails dev # ホットリロード付き開発モード wails build # 本番用バイナリ ウィンドウモード 設定 (700×450、中央揃え): 起動時、ドッククリック時、または録音メニューから開きます。ここで設定を編集します。 オーバーレイ (160×48、上部中央、フローティング): 録音中に表示されます。録音インジケーター、音声レベルメーター、処理中のスピナー、成功時のチェックマークを表示します。 WebSocket プロトコル クライアントは GET /ws?token=<auth-token> に接続します。{