ローカルで動く音声翻訳アプリです。Electronで起動し、PC画面上に翻訳字幕のオーバーレイウィンドウを表示します。
- 入力: マイク音声(多言語)
- 出力: 翻訳字幕(PCオーバーレイ)
- 翻訳方式: OpenAI API(文字起こし + 翻訳)
- 履歴:
data/history.jsonlにローカル保存 - context索引:
data/context.jsonlにローカル保存(複数ファイル蓄積) - context埋め込み索引:
data/context_embeddings.jsonにローカル保存 - glossary:
data/glossary.jsonにローカル保存 - API設定:
data/runtime_config.jsonにローカル保存 - モード:
低遅延/高精度 - 表示改善: 文字起こし断片を文単位にまとめて翻訳(細切れ字幕を抑制)
- 多言語: UIで入力言語/出力言語を選択可能
- フィラー除去: UIからON/OFF可能
- Node.js 18.17+
- OpenAI APIキー(UIまたは
.envで設定)
cp .env.example .env
npm install
npm start起動後に API設定 パネルから API Key / Base URL / モデルを保存できます。
初期値として .env の値を読み込み、UIから保存すると data/runtime_config.json が優先されます。
npm start で以下が同時に起動します。
- ローカルAPIサーバー (
127.0.0.1:3000) - 操作用のメインウィンドウ
- 透明の常時最前面オーバーレイウィンドウ
- メインウィンドウで入力言語/出力言語とモードを選択(低遅延 / 高精度)
開始を押す- マイクで話す
- PCオーバーレイに翻訳字幕が逐次表示される
- 必要なら
PCオーバーレイ表示をOFFにして非表示化 停止で終了
チューニングパネルで、セグメント長・flush条件・ノイズゲート閾値をリアルタイム変更できます。入力言語と出力言語をUIで選択できます。- 例: 日本語 / English / 中文 / 한국어 / Español / Français / Deutsch / Italiano / Português
フィラー除去をONにすると、えー/あの/um などのつなぎ語を翻訳時に抑制します。Context Fileで PDF/PPTX/DOCX/TXT/MD を読み込めます。Context Fileは追加で蓄積され、一覧から有効/無効や個別削除ができます。Context Fileで読み込んだ内容は内容を表示からUI上でページ送り確認できます(有効まとめ表示/個別表示)。Glossaryで用語対訳を追加し、有効/無効・削除ができます(翻訳時に優先反映)。API設定で OpenAI API Key / Base URL / 翻訳モデル / 埋め込みモデル / 音声認識モデルを保存できます。- 翻訳時に直近の字幕履歴を自動参照し、文脈整合性を上げています。
contextを音声認識に利用とcontextを翻訳に利用を個別にON/OFFできます。マイク入力でレベルメーターと状態(待機/入力待機中/音声検出/ノイズ除外)を確認できます。オーバーレイ表示パネルで、文字サイズ・色・背景不透明度・位置・角丸を変更できます。- 設定値はブラウザの
localStorageに保存され、次回起動時に復元されます。
npm start: Electron版を起動npm run start:web: APIサーバーのみ起動(ブラウザ確認用)
POST /api/transcribe- 入力:
{ audioBase64, mimeType, mode, sourceLanguage, useContextForTranscription } - 出力:
{ createdAt, mode, sourceLanguage, usedContext, transcript }
- 入力:
POST /api/translate- 入力:
{ transcript, mode, sourceLanguage, targetLanguage, ignoreFillers, useContextForTranslation } - 出力:
{ createdAt, mode, sourceLanguage, targetLanguage, ignoreFillers, usedContext, transcript, translation }
- 入力:
GET /api/runtime-config- 出力:
{ hasOpenaiApiKey, openaiApiKeyMasked, openaiBaseUrl, openaiTranslationModel, openaiEmbeddingModel, openaiTranscribeLowModel, openaiTranscribeHighModel }
- 出力:
POST /api/runtime-config- 入力:
{ openaiApiKey?, openaiBaseUrl?, openaiTranslationModel?, openaiEmbeddingModel?, openaiTranscribeLowModel?, openaiTranscribeHighModel? } - 出力:
GET /api/runtime-configと同等
- 入力:
GET /api/context- 出力:
{ loaded, totalCount, activeCount, activeIds, items, ... } GET /api/context?view=preview&contextId=__active__&start=0&limit=3200でcontext本文プレビュー取得
- 出力:
POST /api/context- 入力:
{ fileName, mimeType, fileBase64 } - 出力:
GET /api/contextと同等
- 入力:
POST /api/context/active- 入力:
{ activeIds: ["ctx_..."] } - 出力:
GET /api/contextと同等
- 入力:
DELETE /api/context- 出力: 全context削除後のサマリー
DELETE /api/context?contextId=ctx_...- 出力: 指定context削除後のサマリー
GET /api/history?limit=100- 出力:
{ items: [...] }
- 出力:
GET /api/history/export- 出力: 会話ログの
WebVTT (.vtt)ファイル(ダウンロード用)
- 出力: 会話ログの
DELETE /api/history- 出力:
{ items: [] }(履歴全削除)
- 出力:
GET /api/glossary- 出力:
{ totalCount, activeCount, items }
- 出力:
POST /api/glossary- 入力:
{ source, target, notes } - 出力:
GET /api/glossaryと同等
- 入力:
POST /api/glossary/toggle- 入力:
{ id, active } - 出力:
GET /api/glossaryと同等
- 入力:
DELETE /api/glossary?id=gls_...- 出力:
GET /api/glossaryと同等
- 出力:
- APIキーはサーバー側のみで保持され、UIにはマスク済み状態のみ返します。
- オーバーレイウィンドウはクリック透過です。
- macOSでは初回マイク権限の許可が必要です。
npm startはELECTRON_RUN_AS_NODEを自動でunsetして起動します。