Reki Serverで文字起こしとLLM中継を共有する
Reki Serverは、Reki noteとは別に配布しているアプリです。同じLAN上の端末から使える文字起こしサーバーと、LLMサーバーへの中継を、この1つのアプリで担当します。音声はサーバーとして動かしている端末へ送られ、その端末で文字起こしします。版数・自動更新・保存先はReki noteと独立しているため、Reki noteを更新するたびに入れ直す必要はありません。
最終更新日:2026年10月14日
何を担当するか
Section titled “何を担当するか”Reki Serverには2つの役割があります。
- 文字起こし:同じLANの端末から音声を受け取り、サーバー端末のエンジン(Apple Speech EnhancedまたはWhisper)で文字起こしします。
- LLMの中継:利用端末から届いたOpenAI互換の要求を、設定した1台のLLMサーバー(LM Studio、Ollamaなど)へそのまま渡します。モデルの実行はLLMサーバー側が担当し、Reki Serverは推論しません。
文字起こしと中継は別々に使えます。文字起こしだけを使い、中継は使わない構成にもできます。どちらもクラウドのAIサービスへは送信しません。
端末内だけで完結させたい場合は、このアプリを使わず端末内の文字起こしやローカルLLMを使ってください。
サーバー側の設定
Section titled “サーバー側の設定”「サーバー運用」タブで設定し、右下の「設定を保存」で確定します。設定はサーバーを停止している間だけ保存でき、未保存の変更がある間はサーバーを開始できません。
| 設定 | 内容 |
|---|---|
| 待受範囲 | 「社内LAN」は同じLANの端末から、「このPCだけ」は同じPCからの接続に限ります。 |
| ポート | 既定は 39010(1024〜65535)。変更したときは、利用端末に入れるURLのポートも変えます。 |
| エンジン | Apple Speech Enhanced(macOS 26以降と対象言語のモデルが必要)またはWhisper。 |
| 言語 | 既定は日本語。利用端末が明示しないときは、この言語で送信します。 |
| 最大同時処理数 | 1〜4件。Whisperのときは1件(本体と共通のクライアントが1件ずつ処理するため)。 |
| Whisperモデル | Reki noteと共通の保存先から選びます。どちらかで1回ダウンロードすれば、両方で使えます。 |
| LLMの中継 | 使うときは中継先のLLMサーバーを1台選びます。 |
| 起動時の動作 | 「アプリ設定」タブの「ログイン時にアプリを起動」と「起動時にサーバーを開始」(既定はオン)。 |
サーバーの開始と停止は、画面上部のバーのスイッチで行います。停止すると新規の受付を止め、処理と待機が終わってから待受を閉じます。
Windowsでは、初めて待ち受けるときに受信の許可を求められます。「受信を許可」を実行すると、待受ポートのファイアウォール規則が追加されます。許可しないと、別の端末から接続できません。Macでは、ローカルネットワークへのアクセス許可を求められることがあります。
接続情報と共有トークン
Section titled “接続情報と共有トークン”「接続情報」に、利用端末へ入力するURLと共有トークンが表示されます。コピーして利用端末へ渡します。
- 文字起こしのURL:
http://192.168.1.10:39010/reki-sound/v1(サーバー端末のLAN内IPv4アドレス) - LLMの中継先URL:
http://192.168.1.10:39010/reki-llm/v1 - 共有トークン:すべてのAPIで使うトークン。同じ値を使う端末は、すべてのジョブを取得・取り消しできます。
トークンを再発行するときは、サーバーを停止してから実行します。再発行後は、利用端末側で入力し直すまで接続できません。
Reki ServerはIPv4で待ち受けます。同じPCから接続する場合は 127.0.0.1 を使えます。IPv6、DNS名、公開IP、URL内の認証情報、リダイレクトには対応していません。
利用端末のReki noteを接続する
Section titled “利用端末のReki noteを接続する”文字起こしを使う
Section titled “文字起こしを使う”- Serverの「接続情報」から、URLと共有トークンを控えます。
- Reki noteの「設定」→「文字起こし」で「Reki ローカルサーバー文字起こし」を選びます。
- 「Server URL」にURLを入力します。「Reki Serverを探す」を使うと、このPC内とLAN内の候補から選べます。
- 「認証トークン」に共有トークンを入力します。
- 「接続テストをして使用する」を押します。モデルの準備ができていれば、そのまま使い始められます。
URLにはバージョン(/reki-sound/v1)まで入力します。バージョンのないURLは受け付けません。
LLMの中継先として使う
Section titled “LLMの中継先として使う”- Reki noteの「設定」→「データ処理」で「ローカルエンドポイント」を選びます。
- 「サーバーURL」に
http://<ServerのIPv4>:39010/reki-llm/v1を入力します。 - 「APIキー」に共有トークンを入力します。空のままでも、Reki noteに保存済みのReki Server認証トークンがあればそれを使います。
- 「モデル一覧を更新」でモデルを選び、「接続テストをして確定」を押します。
利用端末として表示される
Section titled “利用端末として表示される”Reki noteは、接続先を設定している間、60秒ごとに在席をServerへ知らせます。文字起こしを送っていない端末も「利用端末」に並びます。知らせが3回分(180秒)途切れると切断とみなし、一覧から外れます。
この一覧は、端末が申告した表示名です。端末ごとの認証やアクセス制御ではなく、同じトークンを使う端末は同じ権限を持ちます。
API v1の仕様
Section titled “API v1の仕様”認証とURL
Section titled “認証とURL”すべてのAPIに、Authorization: Bearer <共有トークン> が必要です。Originヘッダが付いたリクエストは拒否します(ブラウザからは利用できません)。Cookie、CORS、リダイレクト、本文のログは扱いません。
用途がURLで分かるように、文字起こしは /reki-sound/v1、LLMの中継は /reki-llm/v1 の下だけにAPIを提供します。接頭辞やバージョンのないパスは404で、/reki-llm で文字起こしは受け付けません。
エンドポイント
Section titled “エンドポイント”| メソッド | パス | 用途 |
|---|---|---|
| GET | /reki-sound/v1/health | APIバージョン、エンジンの準備状態、受付状態、キューの件数 |
| POST | /reki-sound/v1/transcriptions | 音声を送って文字起こしを依頼(202とjobId) |
| GET | /reki-sound/v1/jobs/<jobId> | ジョブの状態と完了結果 |
| GET | /reki-sound/v1/jobs/by-key/<idempotencyKey> | 受理済みジョブIDの回収 |
| POST | /reki-sound/v1/jobs/<jobId>/ack | 完了結果の受領通知 |
| DELETE | /reki-sound/v1/jobs/<jobId> | 待機・処理中ジョブの取り消し |
| POST | /reki-sound/v1/clients/heartbeat | 端末の在席を記録(文字起こしは送らない) |
| GET | /reki-llm/v1/models | 中継先のモデル一覧 |
| POST | /reki-llm/v1/chat/completions | 中継先へチャット要求(ストリーム対応) |
文字起こしを依頼する
Section titled “文字起こしを依頼する”POST /reki-sound/v1/transcriptions?engine=apple-enhanced&language=ja&format=wavAuthorization: Bearer <共有トークン>Idempotency-Key: <任意のキー>X-Reki-Client: MacBook Airengine:apple-enhancedまたはwhisper。省略するとServerの設定を使います。準備できているエンジンと一致しない場合は受け付けません。language:ja、en-USのような言語。省略するとServerの設定を使います。format:音声の形式。省略するとwebm。Idempotency-Key:同じ送信を1件にまとめるためのキー。英数字と:._-で最大128文字。X-Reki-Client:利用端末の表示名。「利用端末」の一覧に使います。
受け付けられると 202 と {"jobId":"...","reused":false} を返します。同じキー・同じ音声・同じ条件の再送は、既存のジョブIDを reused: true で返します。同じキーで内容が違う場合は 409 です。
| 項目 | 値 |
|---|---|
| 音声の形式 | wav webm m4a mp3 ogg flac mp4 |
| 音声のサイズ | 256MiBまで |
| 同時に受け取るアップロード | 4件 |
| 待機できる件数 | 20件 |
| 保持するジョブ | 100件 |
| 完了結果の保持 | 完了から10分(メモリ内。再起動で消えます) |
| 中継する本文のサイズ | 32MiBまで |
| 状態 | コード | 意味 |
|---|---|---|
| 401 | unauthorized | トークンがない・違う・Originヘッダが付いている |
| 400 | invalid_request | エンジン・言語・形式・キーの指定が不正 |
| 404 | not_found / job_not_found | パスが違う、またはジョブが見つからない |
| 409 | idempotency_conflict | 同じキーで内容が違う |
| 409 | job_not_finished | 未完了のジョブに受領通知をした |
| 413 | audio_too_large / request_too_large | 音声または中継の本文が上限を超えている |
| 429 | queue_full | 待機が上限に達している |
| 502 | upstream_unreachable | 中継先に接続できない |
| 503 | engine_not_ready | エンジンが準備できていない |
| 503 | server_busy / server_stopping | 受付を停止している、または停止処理中 |
| 503 | relay_not_configured | 中継先が設定されていない |
結果を受け取る
Section titled “結果を受け取る”GET /reki-sound/v1/jobs/<jobId>で状態を確認します。完了すると、Reki noteの文字起こし結果と同じ形式のresultが入ります。healthがresultAcknowledgement: trueを返すサーバーでは、結果を解析したあとにPOST /reki-sound/v1/jobs/<jobId>/ackで受領を知らせます。取得だけでは受領になりません。healthがidempotencyLookup: trueを返すサーバーでは、送信の前にGET /reki-sound/v1/jobs/by-key/<idempotencyKey>で既存のジョブを探せます。送信の応答を失っても、音声を送り直さずにジョブIDを回収できます。- 不要になったジョブは
DELETE /reki-sound/v1/jobs/<jobId>で取り消します。処理中でも取り消せます。
LLMの中継
Section titled “LLMの中継”- 中継するのは
GET /v1/modelsとPOST /v1/chat/completionsだけです。それ以外のパスは中継しません。 - 中継先は、同じPC内または同じネットワーク内のアドレスに限ります。認証が必要なLLMサーバーには対応していません。受け取った共有トークンは中継先へ渡しません。
- 要求と応答の本文はServerを通りますが、保存も記録もしません。記録するのは、時刻・モデル名・文字数・ストリームの有無・結果・初回応答までの時間・全体の時間・応答サイズ・エラーコードだけです。直近200件をメモリ内に持ち、再起動で消えます。画面の「書き出す」でJSONに保存できます。
- 受付を停止すると中継も止まります。中継先に接続できないときは502、サイズが上限を超えたときは413を返します。利用端末が切断すると、中継先への要求も止めます。
停止・更新とデータの扱い
Section titled “停止・更新とデータの扱い”- 受付を停止すると、新規の音声を受け付けません。待受は、処理と待機が終わったあとに、完了結果の受領通知か60秒の猶予の終了で閉じます。処理中の文字起こしが終わるまで閉じません。
- アプリの更新は、ジョブがない状態で適用します。
- アップロードされた音声はServer専用の領域に置き、完了・失敗・取り消し・アップロード中断のときに削除します。異常終了で残った音声は、次の起動時に削除します。
- ジョブと結果はメモリ内だけです。再起動で失われます。画面に文字起こしの本文は表示しません。音声・文字起こし・接続URL・共有トークンはテレメトリとして送信しません。
うまくいかないとき
Section titled “うまくいかないとき”- サーバーが見つからない:Serverが起動しているか、待受範囲が「社内LAN」か、同じネットワークかを確認します。Windowsではファイアウォールの受信許可、Macではローカルネットワークへのアクセス許可も確認します。
- 接続できない・認証エラーになる:URLのポート、共有トークン、URLにバージョン(
/v1)が含まれるかを確認します。トークンを再発行したときは、利用端末にも入れ直します。 - 「モデル準備中」と出る:Serverでエンジンを用意し、受付を開始します。Whisperはモデルを選んでダウンロードし、Apple Speech EnhancedはmacOS 26以降と対象言語のモデルが必要です。
- 文字起こしが始まらない:受付が停止していないか、待機(20件)や保持(100件)の上限に達していないかを確認します。
- 中継に失敗する:中継先のLLMサーバーが起動しているか、モデルが読み込まれているか、中継が有効かを確認します。中継先が別PCの場合は、そのPCの待受設定とファイアウォールも確認します。