{"id":50572199,"url":"https://github.com/okamyuji/meeting-transcriber","last_synced_at":"2026-06-04T19:30:31.147Z","repository":{"id":359130430,"uuid":"1106833489","full_name":"okamyuji/meeting-transcriber","owner":"okamyuji","description":"Japanese meeting transcription \u0026 minutes generation app with local ASR (Kotoba Whisper) + LLM (Ollama) + RAG. Privacy-focused, runs offline on CPU.","archived":false,"fork":false,"pushed_at":"2026-05-20T13:54:04.000Z","size":202,"stargazers_count":10,"open_issues_count":1,"forks_count":5,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-20T18:34:45.072Z","etag":null,"topics":["cli-app","faster-whisper","japanese","kotoba-whisper","local-llm","meeting-minutes","offline","ollama","privacy","python","rag","speech-to-text","transcription","uv","whisper"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/okamyuji.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-30T03:07:37.000Z","updated_at":"2026-05-20T13:51:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/okamyuji/meeting-transcriber","commit_stats":null,"previous_names":["okamyuji/meeting-transcriber"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/okamyuji/meeting-transcriber","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okamyuji%2Fmeeting-transcriber","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okamyuji%2Fmeeting-transcriber/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okamyuji%2Fmeeting-transcriber/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okamyuji%2Fmeeting-transcriber/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/okamyuji","download_url":"https://codeload.github.com/okamyuji/meeting-transcriber/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/okamyuji%2Fmeeting-transcriber/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33917183,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli-app","faster-whisper","japanese","kotoba-whisper","local-llm","meeting-minutes","offline","ollama","privacy","python","rag","speech-to-text","transcription","uv","whisper"],"created_at":"2026-06-04T19:30:29.309Z","updated_at":"2026-06-04T19:30:31.138Z","avatar_url":"https://github.com/okamyuji.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# meeting-transcriber\n\n完全ローカルで動作する日本語向け会議文字起こしと議事録自動生成ツールです。faster-whisper を使った音声文字起こしと、Ollama によるローカルLLMを組み合わせ、データを外部に送らずに会議の記録と議事録作成をおこなえます。\n\n## 特徴\n\n- 初回セットアップで依存パッケージとモデルを取得した後は、インターネット接続なしで動作します\n- faster-whisperで日本語音声を文字起こしできます\n- Ollamaの任意のローカルLLMで議事録を自動生成できます\n- ナレッジベースを参照して用語を補正するRAG機能を備えています\n- ruffとmypyとpytestでコード品質を担保しています\n- pre-commitとGitHub Actionsにgitleaksを組み込み、機密情報の混入を継続的に検査しています\n\n## 動作要件\n\n- Python 3.11以上\n- macOSまたはLinuxでの動作を想定しています\n- 議事録生成機能を使う場合はOllamaを別途インストールしておいてください\n\n## インストール\n\n依存解決にはuvを使います。インストールしていない場合は[公式手順](https://docs.astral.sh/uv/)に従って導入してください。\n\n```bash\ngit clone https://github.com/okamyuji/meeting-transcriber.git\ncd meeting-transcriber\n\n# 本番依存のみ\nuv sync\n\n# 開発依存も含める\nuv sync --all-groups\n```\n\nOllamaを利用する場合は議事録生成用のモデルと、RAG用の埋め込みモデルを取得しておきます。\n\n```bash\nollama pull qwen2.5:7b\nollama pull mxbai-embed-large\n```\n\n## クイックスタート\n\n```bash\nuv run python main.py\n```\n\nメニューから処理を選びます。\n\n```text\n1. 録音 -\u003e 文字起こし -\u003e 議事録作成（フルワークフロー）\n2. 既存の音声ファイルから文字起こしと議事録作成\n3. 既存の文字起こしから議事録作成\n4. 録音のみ\n5. 設定（モデル選択など）\n6. 終了\n```\n\n文字起こしだけを試したい場合は次のコマンドで音声ファイルを指定できます。\n\n```bash\nuv run python -m app.transcriber path/to/audio.wav large-v3\n```\n\n## Whisperモデルの選択\n\n`app/transcriber.py` の `JAPANESE_MODELS` で内部マッピングを定義しています。\n\n| 設定値 | 実体 | 用途 |\n|---|---|---|\n| `small` | `small` | 軽量で低スペック環境向けです |\n| `medium` | `medium` | バランス重視の標準モデルです |\n| `large-v3` | `large-v3` | 完走の安定性を重視する場合に向いています |\n| `large-v3-ja` | `kotoba-tech/kotoba-whisper-v1.0-faster` | 日本語特化のCTranslate2版です |\n\n`kotoba-tech/kotoba-whisper-v1.0` はHuggingFace Transformers形式で配布されているため、faster-whisperでは `model.bin` が見つからずロードに失敗します。日本語特化モデルを利用する場合はCTranslate2変換済みの `kotoba-tech/kotoba-whisper-v1.0-faster` を指定してください。\n\nなお、漫才やバラエティ音声を題材にした実機検証では、Kotoba Whisper系（`v1.0-faster` と `v2.0-faster`）で音声の前半数十秒で文字起こしが停止する事象を確認しました。途中停止に遭遇した場合は `large-v3` への切り替えを試してください。\n\n## RAG機能\n\n`data/knowledge/` ディレクトリにMarkdownファイルを置くと、議事録生成のプロンプトに関連知識が自動的に追加されます。埋め込みは初回計算時に `.rag_cache/` にキャッシュされ、2回目以降の起動を高速化します。\n\n```text\ndata/knowledge/\n  README.md\n  terms.md\n```\n\n用語集の中身は自由に編集できます。新しい `.md` ファイルを追加するだけで自動的に取り込まれます。\n\n## 開発\n\nリポジトリには以下の品質ゲートを設定しています。\n\n- ruff: lintとフォーマット\n- mypy: 静的型検査\n- pytest: 単体テスト\n- gitleaks: 機密情報の検査\n- pre-commit: 上記をコミット前に一括実行\n- GitHub Actions: pushとpull requestで同じチェックを実行\n\nローカルで一括実行する場合は次のコマンドを使います。\n\n```bash\nuv run ruff check app/ main.py\nuv run ruff format --check app/ main.py\nuv run mypy app/ main.py\nuv run pytest\nuv run pre-commit run --all-files\n```\n\n初回はpre-commitフックの有効化を忘れずにおこなってください。\n\n```bash\nuv run pre-commit install\n```\n\n## ディレクトリ構成\n\n```text\nmeeting-transcriber/\n  app/\n    __init__.py\n    logger.py\n    recorder.py\n    transcriber.py\n    minutes_generator.py\n    rag.py\n  data/\n    audio/\n    transcripts/\n    knowledge/\n  .github/workflows/ci.yml\n  .pre-commit-config.yaml\n  main.py\n  pyproject.toml\n  README.md\n```\n\n## トラブルシューティング\n\n| 症状 | 対処 |\n|---|---|\n| 録音できない | macOSではシステム設定のプライバシー項目でターミナルにマイク利用を許可してください |\n| 文字起こしが途中で止まる | `large-v3` に切り替える、`vad_filter=False` を試す、`beam_size` を下げるなどで挙動を確認してください |\n| `kotoba-tech/kotoba-whisper-v1.0` のロード失敗 | CTranslate2版の `kotoba-tech/kotoba-whisper-v1.0-faster` を指定してください |\n| Ollamaに接続できない | 別ターミナルで `ollama serve` を起動し、必要なモデルが `ollama list` に表示されることを確認してください |\n| メモリ不足 | より小さなモデル（`small` や `medium`）を選んでください |\n\n## コストについて\n\n文字起こしと議事録生成はいずれも自分の計算機の上で動きます。外部APIや有償SaaSは経由しないため、ランニングコストは電力とディスクの実費だけです。クラウド型の文字起こしサービスでよくある従量課金は発生しません。\n\n- 録音: ストレージのみ\n- 文字起こし: faster-whisperによるローカル計算\n- 議事録生成: Ollamaによるローカル計算\n\n## プライバシーとセキュリティ\n\n音声データも文字起こしも議事録もすべてローカルファイルに保存され、外部に送信されません。\n\n| 機能 | 保存先 | 外部送信 |\n|---|---|---|\n| 録音 | `data/audio/` | なし |\n| 文字起こし | `data/transcripts/` | なし |\n| 議事録 | `data/transcripts/` | なし |\n\n機密情報を含む打ち合わせや、組織のセキュリティポリシー上クラウドへの送信が難しい録音でも安心して利用できます。なお、初回セットアップ時にfaster-whisperのモデルファイルとOllamaのLLMモデルをダウンロードするため、その時点ではインターネット接続が必要です。\n\n## ライセンス\n\nMITライセンスのもとで配布しています。著作権表記の名義はokamyujiです。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fokamyuji%2Fmeeting-transcriber","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fokamyuji%2Fmeeting-transcriber","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fokamyuji%2Fmeeting-transcriber/lists"}