{"slug": "show-hn-koime-a-byok-voice-input-keyboard-for-android", "title": "Show HN: KoIME – A BYOK voice-input keyboard for Android", "summary": "KoIME, a Bring-Your-Own-Key voice-input keyboard for Android, has been released as an open-source project on GitHub. The app sends audio directly to OpenAI's transcription API using the user's own API key, with no intermediate servers or third-party access, and is designed for users who want full control over their data and costs.", "body_md": "**日本語** | [English](/sakai-sktech/koime/blob/main/README.en.md)\n\n音声入力特化のカスタム Android IME。マイクボタンを押して話し、停止すると 音声バッファを STT（音声認識）API に送り、結果のテキストを現在の入力欄に挿入する。 Typeless 系の「バッファ方式」ボイスキーボードの自作実装。\n\n```\n[マイクをタップ] → 録音中（もう一度タップで停止）\n      → m4a バッファを STT API へ送信 → 転写テキストを入力欄に commitText\n```\n\n- どのアプリでも使える（システムキーボードとして動作）\n- 多言語対応（Whisper 系モデルの言語ヒントを設定可能）\n- 挿入位置の調整と取り消し: ◀▶ カーソルキー（長押しリピート）と、\n直前の転写だけを安全に取り消す\n**UNDO**キー - UI 表記は意図的に\n**中学英語のみ**（TAP 🎤 & SPEAK / UNDO / SPACE …）。 端末の言語設定によらず全員が同じ表記を見る。理由と全文字列の対訳は[docs/LOCALIZATION.md](/sakai-sktech/koime/blob/main/docs/LOCALIZATION.md)（DD-014） - STT はプロバイダ抽象化層（\n`SttEngine`\n\n）— 現在は OpenAI transcription API 実装\n\n**BYOK（Bring Your Own Key）**: API キーは利用者が自分で取得し、自分の端末に 入力する。アプリには同梱しない。作者のサーバーも存在しない。利用料金は OpenAI からあなたに直接請求される — コストの把握も、上限の設定も、キーの失効も、 全部あなたの手の中にある。中間に誰もいないから、不透明なマージンもクォータもない。**音声の経路**: 録音はマイクボタンを押した間だけ。音声はあなた自身のキーで OpenAI へ**直接**送信され、転写後に端末から削除される。作者を含む第三者は 経由しない。あなたの声の行き先を決めるのは、あなたのプロバイダ選択だけ。**「API キーの取得」というハードルはわざと残している**。キーとは何かを理解し、 取得・課金管理・失効まで自分でできる人が対象（理由は[docs/DESIGN-DECISIONS.md](/sakai-sktech/koime/blob/main/docs/DESIGN-DECISIONS.md)の DD-010）。**自分のカスタムアプリが数分で組める時代に、主権を手放す理由がない**。 今どきの AI に手伝わせれば、このベースをフォークして自分専用の音声入力に 書き換えるのは数分の仕事だ。便利さと引き換えにデータと鍵を誰かに預ける必然は、 もうない。データも主権も自分で握っておけ — KoIME はそのための、動くベースである。**IME は構造上、すべての入力を読める位置にいる**。これがどういうことかと言うと、 あなたの行動（キー入力）をすべて盗むことも出来るということだ。ただの Android アプリではない — この認識を持つことが大事。だからこそ、ソースを読めて 自分でビルドできることが、キーボードアプリの唯一まともな信頼根拠だと考えている。**盲目的に信じるな。読め。そして自分で書き直せ**（AI が最大限サポートして くれるのだから）:[THREAT-MODEL.md](/sakai-sktech/koime/blob/main/THREAT-MODEL.md)— 書き直すための 差し替え境界も、そこに示してある。\n\nこれは、作者が実務で日常利用しているアプリと**同じコードベース**の\nスナップショットです。開発は非公開の原本リポジトリで継続しており、その全てが\nここに同期されるとは限りません。ですから issue / PR への反応は薄いかもしれません\n（正直に書いておきます）。逆に、**自分の制御できる範囲で便利な音声入力を\n拡張するベースとして使ってほしい** — そのための公開です。\n\n旧名は koetype（2026-07 に改名）。同名の既存プロジェクト\n[yasu-888/koetype](https://github.com/yasu-888/koetype)（KoeType — 無関係の\n別プロジェクト）との混同を避けるため。経緯は DD-016。KoIME の由来は\nkoe（声）+ IME — 日本語で読むと「濃いめ」。\n\n- 通常のキー入力の内容を収集・送信することはない。\n- 送信されるのは、マイクをタップして録音した音声だけ。それも利用者自身が 設定した API キーで OpenAI へ直接送られる。\n- 広告・解析 SDK・テレメトリはゼロ。\n\n**→ docs/GETTING-STARTED.md** を読めば、何をすれば\nよいか分かる。ビルド → インストール → IME 有効化 → API キー設定 → 自分の鍵での\nrelease 署名まで、一通りの流れをすべて経験できるはずだ。\n\n**Android アプリの開発をしたことがなくても大丈夫。分からなければ、手順書ごと\nAI に読ませればいい**（そのまま実行手順として通じるように書いてある）。\nあなたにできない理由はない。作者の解説が言葉足らずだったら issue にあげてくれ。\n\n```\ngit clone https://github.com/sakai-sktech/koime.git\ncd koime && ./gradlew assembleDebug\nadb install app/build/outputs/apk/debug/app-debug.apk\n```\n\nAPI キー入力欄は Android 標準の Autofill に対応している。Bitwarden / 1Password /\nGoogle パスワードマネージャ / KeePassDX 等に保存したキーを、メール・チャット・\nクリップボードを経由せずに入力できる。これはキー管理の責任をアプリ側へ移す\nものではなく、**利用者自身の安全な管理方法を妨げないため**のもの（DD-012）。\n\n| 文書 | 内容 |\n|---|---|\n|\n\n[docs/KEY-STORAGE-SECURITY.md](/sakai-sktech/koime/blob/main/docs/KEY-STORAGE-SECURITY.md)[docs/SIGNING.md](/sakai-sktech/koime/blob/main/docs/SIGNING.md)[docs/DESIGN-DECISIONS.md](/sakai-sktech/koime/blob/main/docs/DESIGN-DECISIONS.md)[docs/PRODUCTIZATION.md](/sakai-sktech/koime/blob/main/docs/PRODUCTIZATION.md)[docs/GETTING-STARTED.md](/sakai-sktech/koime/blob/main/docs/GETTING-STARTED.md)\n\n```\napp/src/main/java/dev/sakai/koime/\n  ime/        InputMethodService とキーボード UI\n  audio/      録音（MediaRecorder → m4a バッファ）\n  stt/        SttEngine 抽象化 + OpenAI 実装\n  settings/   設定画面・権限フロー\n```\n\nフェーズ2 構想 — このベースの伸びしろ:\n\n**AI 推敲の層を追加する**: 転写後に LLM を一段挟む。フィラー除去・整文から、 特定ドメイン用の正確な言葉にしたテキスト化まで**ストリーミング化**: バッファ方式からリアルタイム文字起こしへ近づける**ローカル STT**: いずれスマホ単体でこの精度の文字起こしは出来るようになる。 そのときは`SttEngine`\n\nの下に whisper.cpp 等を差すだけでいい**UI ローカライズ**: 現状は中学英語のみ（DD-014）。母語表示が欲しくなったら`values-<lang>/strings.xml`\n\nを足すだけ。全文字列の台帳は[docs/LOCALIZATION.md](/sakai-sktech/koime/blob/main/docs/LOCALIZATION.md)に整備済み- こうした方向へ、\n**使う人が自分専用のツールとしてカスタマイズしていってほしい**。 そのための差し替え境界が`SttEngine`\n\nである", "url": "https://wpnews.pro/news/show-hn-koime-a-byok-voice-input-keyboard-for-android", "canonical_source": "https://github.com/sakai-sktech/koime", "published_at": "2026-07-24 22:00:34+00:00", "updated_at": "2026-07-24 22:22:35.987437+00:00", "lang": "en", "topics": ["ai-tools", "ai-products", "artificial-intelligence"], "entities": ["KoIME", "OpenAI", "GitHub", "Android"], "alternates": {"html": "https://wpnews.pro/news/show-hn-koime-a-byok-voice-input-keyboard-for-android", "markdown": "https://wpnews.pro/news/show-hn-koime-a-byok-voice-input-keyboard-for-android.md", "text": "https://wpnews.pro/news/show-hn-koime-a-byok-voice-input-keyboard-for-android.txt", "jsonld": "https://wpnews.pro/news/show-hn-koime-a-byok-voice-input-keyboard-for-android.jsonld"}}