{"id":29103339,"url":"https://github.com/callstack/ai-meeting-transcription","last_synced_at":"2025-08-08T04:14:08.567Z","repository":{"id":200499538,"uuid":"705613795","full_name":"callstack/ai-meeting-transcription","owner":"callstack","description":"AI Tool for meeting transcriptions","archived":false,"fork":false,"pushed_at":"2023-11-27T22:37:40.000Z","size":17,"stargazers_count":79,"open_issues_count":1,"forks_count":9,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-28T23:44:48.628Z","etag":null,"topics":["ai","python"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","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/callstack.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}},"created_at":"2023-10-16T11:06:49.000Z","updated_at":"2025-06-28T08:49:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"544c8648-724a-412c-872f-4430fc7689a0","html_url":"https://github.com/callstack/ai-meeting-transcription","commit_stats":null,"previous_names":["callstack/ai-meeting-transcription"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/callstack/ai-meeting-transcription","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/callstack%2Fai-meeting-transcription","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/callstack%2Fai-meeting-transcription/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/callstack%2Fai-meeting-transcription/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/callstack%2Fai-meeting-transcription/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/callstack","download_url":"https://codeload.github.com/callstack/ai-meeting-transcription/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/callstack%2Fai-meeting-transcription/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269361858,"owners_count":24404435,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-08T02:00:09.200Z","response_time":72,"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":["ai","python"],"created_at":"2025-06-28T23:42:04.290Z","updated_at":"2025-08-08T04:14:08.560Z","avatar_url":"https://github.com/callstack.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AI Meeting Transcription\nRepo showcasing AI meeting transcription tool.\n\n## Summary\nThis repo showcase a basic tool for meeting transcription. It's targetted at meetings conducted in English, but with little tweaking could be used for other languages as well.\n\n### Workflow\nThe tool works in a three step process:\n1. It extract audio path from given video file or YouTube link\n2. It generates speaker diarization (separating different speaker tracks) by using [`pyannote/speaker-diarization-3.0`](https://huggingface.co/pyannote/speaker-diarization-3.0) model\n3. Finally it generates transcription using [Open AI Whisper model](https://huggingface.co/openai/whisper-base.en). By default it uses Whisper `base.en` version but you can select other model sizes. The output is saved to `output.sub` file in [SubViewer format](https://wiki.videolan.org/SubViewer/).\n   \n\n### Local processing\nAll processing is done locally on the users machine. The model weights are downloaded to local `~/.cache` folder (on macOS).\n- Speaker Diarization 3.0 model weights around 6 MB\n- Whisper Base.en model weights around 300 MB\n\n## Setup\n\n### Install Dependencies\n\nInstall following dependencies (on macOS):\n\n- `ffmpeg` CLI - [`brew install ffmpeg`](https://formulae.brew.sh/formula/ffmpeg)\n- Python 3 installation - e.g. [Miniconda](https://docs.conda.io/projects/miniconda/en/latest/) or [Homebrew package](https://formulae.brew.sh/formula/python@3.10).\n- Python packages - `pip3 install -r requirements.txt`\n\n### Hugging Face token\nIn order to download models used by these tool you need to:\n\n1. Generate a private Hugging Face auth token - [instructions here](https://huggingface.co/docs/hub/security-tokens)\n2. Create `.env` file inside root repo folder with following content:\n```env\nHUGGINGFACE_AUTH_TOKEN=\"your token here...\"\n```\n3. Accept `Speaker diarization 3.0` model terms of service - [link here](https://huggingface.co/pyannote/speaker-diarization-3.0)\n4. Accept `\"Powerset\" speaker segmentation` model terms of service - [link here](https://huggingface.co/pyannote/segmentation-3.0)\n\n## Running\n\n### Web UI\n\nIn order to run Web UI just run `python3 ./web-ui.py` in the repo folder. This should open following Web UI interface in the browser.\n\n### Jupyter Notebook\n\nThe tool can be used as Jupyter Labs/Notebook as well, you open the  `Transcription.ipynb` in [Jupyter Labs](https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html#conda).\n\n### Notes\n\nSpeaker diarization steps is the longest part of moder execution. It roughly takes 30s for each 1 minute of the meeting to execute on M1 MacBook Pro. \n\n## Troubleshooting\n\n1. If you get following error `\"Could not download 'pyannote/segmentation-3.0' model. It might be because the model is private or gated so make sure to authenticate.\"` then make sure you provided [Hugging Face auth](#hugging-face-token) token AND accepted `Speaker diarization 3.0` model [terms of service](https://huggingface.co/pyannote/speaker-diarization-3.0).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcallstack%2Fai-meeting-transcription","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcallstack%2Fai-meeting-transcription","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcallstack%2Fai-meeting-transcription/lists"}