{"id":49486473,"url":"https://github.com/zxkane/audio-transcriber-funasr","last_synced_at":"2026-05-01T02:02:39.307Z","repository":{"id":350989362,"uuid":"1209071855","full_name":"zxkane/audio-transcriber-funasr","owner":"zxkane","description":"Agent skill for multi-speaker meeting \u0026 podcast transcription with FunASR speaker diarization and LLM cleanup. Supports 99 languages (zh/en/ja/ko/yue + Whisper). GPU \u0026 CPU. Packaged as a Claude Code plugin.","archived":false,"fork":false,"pushed_at":"2026-04-25T09:06:32.000Z","size":119,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-25T09:24:25.984Z","etag":null,"topics":["agent-skill","asr","chinese-asr","claude-code","claude-code-skill","funasr","interview-transcription","meeting-transcription","multilingual","paraformer","podcast-transcription","skills-sh","speaker-diarization","speech-to-text","whisper"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zxkane.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2026-04-13T04:14:26.000Z","updated_at":"2026-04-25T07:18:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/zxkane/audio-transcriber-funasr","commit_stats":null,"previous_names":["zxkane/meeting-transcriber","zxkane/audio-transcriber-funasr"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zxkane/audio-transcriber-funasr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxkane%2Faudio-transcriber-funasr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxkane%2Faudio-transcriber-funasr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxkane%2Faudio-transcriber-funasr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxkane%2Faudio-transcriber-funasr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zxkane","download_url":"https://codeload.github.com/zxkane/audio-transcriber-funasr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxkane%2Faudio-transcriber-funasr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32482460,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","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":["agent-skill","asr","chinese-asr","claude-code","claude-code-skill","funasr","interview-transcription","meeting-transcription","multilingual","paraformer","podcast-transcription","skills-sh","speaker-diarization","speech-to-text","whisper"],"created_at":"2026-05-01T02:02:37.459Z","updated_at":"2026-05-01T02:02:39.302Z","avatar_url":"https://github.com/zxkane.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FunASR Audio Transcriber\n\n[![View on ClawHub](https://img.shields.io/badge/ClawHub-audio--transcriber--funasr-6E56CF?logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0xMiAyTDIgN2wxMCA1IDEwLTUtMTAtNXptMCAxMUwyIDhsLjA1IDkuOTVMMTIgMjNsOS45NS01LjA1TDIyIDhsLTEwIDV6Ii8+PC9zdmc+)](https://clawhub.ai/zxkane/zxkane-audio-transcriber-funasr)\n\nClaude Code plugin for multi-speaker meeting and podcast transcription with automatic speaker diarization and LLM cleanup, powered by [FunASR](https://github.com/modelscope/FunASR).\n\n## Features\n\n- **Meetings \u0026 podcasts** — Handles large meetings (10+ speakers) and podcasts/interviews (2–3 speakers) with CAM++ speaker diarization, `--num-speakers` hint, real name mapping, and speaker context for LLM identification\n- **Hotword biasing** — SeACo-Paraformer accepts participant names and domain terms to improve recognition accuracy (+50% on tested Chinese terms)\n- **Multi-language** — Chinese (SeACo-Paraformer, CER 1.95%), English (Paraformer-en), auto-detect (SenseVoiceSmall: zh/en/ja/ko/yue), or 99 languages (Whisper-large-v3-turbo)\n- **Long recordings** — Handles 4+ hour recordings without splitting (includes spectral clustering performance patch)\n- **LLM cleanup** — Bedrock Claude removes fillers, fixes ASR errors, polishes grammar\n- **GPU \u0026 CPU** — Auto-detects CUDA; fully functional on CPU with [low-memory guidance](plugins/funasr-transcriber/skills/funasr-transcribe/references/pipeline-details.md#running-on-cpu-only--low-memory-machines)\n- **Resume support** — Checkpoint at every phase for interrupted runs\n- **Local MiMo-V2.5-ASR support (new in 1.7.0):** opt-in `--lang mimo` runs\n  Xiaomi's 8B ASR model locally on a CUDA GPU for dialect-heavy or\n  code-switching audio, with diarization preserved via FSMN VAD + CAM++.\n  Requires Python 3.12, ≥20 GB VRAM, and `INSTALL_MIMO=1 bash setup_env.sh`.\n\n## Installation\n\n### As Agent Skill (via [skills.sh](https://skills.sh))\n\n```bash\nnpx skills add zxkane/audio-transcriber-funasr\n```\n\n### As Claude Code Plugin\n\nAdd as a marketplace, then install:\n\n```bash\n# In Claude Code\n/plugin marketplace add zxkane/audio-transcriber-funasr\n/plugin install funasr-transcriber@zxkane-audio-transcriber-funasr\n```\n\n### Manual Usage\n\n```bash\n# 1. Set up environment (auto-detects GPU/CPU)\nbash plugins/funasr-transcriber/skills/funasr-transcribe/scripts/setup_env.sh\nsource .venv/bin/activate\n\n# 2. Convert audio to 16kHz mono FLAC (lossless, ~50% smaller than WAV)\nffmpeg -i recording.m4a -ar 16000 -ac 1 -sample_fmt s16 meeting.flac\n\n# 3. Chinese meeting, 9 speakers\npython3 plugins/funasr-transcriber/skills/funasr-transcribe/scripts/transcribe_funasr.py \\\n  meeting.flac --lang zh --num-speakers 9\n\n# 4. English meeting, with real names\npython3 plugins/funasr-transcriber/skills/funasr-transcribe/scripts/transcribe_funasr.py \\\n  meeting.flac --lang en --speakers \"Alice,Bob,Carol,Dave\"\n\n# 5. English podcast, 2 speakers\npython3 plugins/funasr-transcriber/skills/funasr-transcribe/scripts/transcribe_funasr.py \\\n  episode.flac --lang en --num-speakers 2 --speakers \"Host,Guest\" \\\n  --title \"Podcast Transcript\"\n\n# 6. Auto-detect language (zh/en/ja/ko/yue)\npython3 plugins/funasr-transcriber/skills/funasr-transcribe/scripts/transcribe_funasr.py \\\n  meeting.flac --lang auto --num-speakers 6\n```\n\n## Plugin Structure\n\n```\n.\n├── .claude-plugin/\n│   └── marketplace.json          # skills.sh marketplace registration\n├── .claude/\n│   └── skills/\n│       └── funasr-transcribe -\u003e ../../plugins/funasr-transcriber/skills/funasr-transcribe\n├── plugins/\n│   └── funasr-transcriber/\n│       └── skills/\n│           └── funasr-transcribe/\n│               ├── SKILL.md              # Skill entry point\n│               ├── references/\n│               │   └── pipeline-details.md\n│               └── scripts/\n│                   ├── transcribe_funasr.py    # Main pipeline\n│                   ├── patch_clustering.py     # Long-audio perf fix\n│                   └── setup_env.sh            # One-click env setup\n├── CLAUDE.md\n├── README.md\n└── .gitignore\n```\n\n## Pipeline\n\n```\nAudio (.m4a/.mp3) ─► ffmpeg ─► 16kHz WAV\n                                  │\nPhase 1: FunASR ASR              │\n  ├─ FSMN-VAD (voice detection)  │\n  ├─ ASR model (lang-dependent)  ├─► raw_transcript.json\n  ├─ Hotword biasing (zh only)   │\n  ├─ Punctuation restoration     │\n  └─ CAM++ (speaker clustering)  │\n                                  │\nPhase 2: Post-process            │\n  ├─ Merge consecutive utterances├─► merged segments\n  └─ Map speaker IDs to names    │\n                                  │\nPhase 3: LLM cleanup (optional)  │\n  └─ Bedrock Claude              └─► transcript.md\n```\n\n## Performance\n\nBenchmarked on a 4h14m, 9-speaker Chinese meeting recording:\n\n| Phase | GPU (L40S) | CPU |\n|-------|-----------|-----|\n| Model load | 14s | ~30s |\n| Transcription | 169s | ~30-60 min |\n| Clustering (patched) | ~10s | ~2-5 min |\n| LLM cleanup (17 chunks) | ~35 min | ~35 min |\n\n**Without the clustering patch**, speaker clustering on long audio takes 10+ hours.\nThe patch replaces O(N^3) `scipy.linalg.eigh` with O(N^2·k) `scipy.sparse.linalg.eigsh`.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzxkane%2Faudio-transcriber-funasr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzxkane%2Faudio-transcriber-funasr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzxkane%2Faudio-transcriber-funasr/lists"}