{"id":28477663,"url":"https://github.com/dense-analysis/vim-speech","last_synced_at":"2026-01-02T19:31:30.160Z","repository":{"id":55401673,"uuid":"135830207","full_name":"dense-analysis/vim-speech","owner":"dense-analysis","description":"Vim Speech Recognition Experiments","archived":false,"fork":false,"pushed_at":"2025-05-30T08:27:34.000Z","size":16,"stargazers_count":20,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-27T03:18:23.452Z","etag":null,"topics":["ai","neovim","neovim-plugin","speech-recognition","speech-to-text","vim","vim-plugin","whisper"],"latest_commit_sha":null,"homepage":"","language":"Vim script","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/dense-analysis.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}},"created_at":"2018-06-02T15:39:06.000Z","updated_at":"2025-05-30T07:47:09.000Z","dependencies_parsed_at":"2025-06-01T20:50:45.201Z","dependency_job_id":"3a859af2-7644-47ce-8735-68e8f3215af7","html_url":"https://github.com/dense-analysis/vim-speech","commit_stats":null,"previous_names":["dense-analysis/vim-speech","w0rp/vim-speech"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dense-analysis/vim-speech","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dense-analysis%2Fvim-speech","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dense-analysis%2Fvim-speech/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dense-analysis%2Fvim-speech/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dense-analysis%2Fvim-speech/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dense-analysis","download_url":"https://codeload.github.com/dense-analysis/vim-speech/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dense-analysis%2Fvim-speech/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262738850,"owners_count":23356597,"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","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","neovim","neovim-plugin","speech-recognition","speech-to-text","vim","vim-plugin","whisper"],"created_at":"2025-06-07T17:08:21.320Z","updated_at":"2026-01-02T19:31:30.113Z","avatar_url":"https://github.com/dense-analysis.png","language":"Vim script","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vim-speech\n\nThis project is an attempt at getting some basic speech to text processing\nworking in Vim using Google's cloud services.\n\n**NOTE:** This project is a proof of concept.\n\n**NOTE:** To use this plugin, you will probably need to pay Google money, at\nleast eventually.\n\nThis project uses an MIT licence to allow you to basically do what you want.\n\nClick the image below to watch a video demonstration.\n\n[![vim-speech video demo](https://img.youtube.com/vi/UtInOI7LluA/0.jpg)](http://www.youtube.com/watch?v=UtInOI7LluA \"vim-speech video demo\")\n\n## Installation\n\nAdd the directory for this git project to `runtimepath` for Vim somehow.\nYou can load the plugin in Vim 8 easily with the built-in plugin mechanism by\nstoring in in a path like the following:\n\n```\n~/.vim/pack/git-plugins/start/vim-speech\n```\n\nYou will also need to install [ALE](https://github.com/w0rp/ale), as this plugin\ncurrently uses functions from ALE, purely so the plugin could be written more\nquickly. Follow the [instructions for installing ALE](https://github.com/w0rp/ale#installation).\n\nAfter the plugin has been installed, you'll need to install all of the\nrequirements for your system and build the virtualenv that the project uses\nfor the Python text to speech client. You will need...\n\n1. Python 2.7 with `virtualenv` installed.\n2. Google's `google-cloud-sdk` tools.\n3. `libportaudio2` and `portaudio19-dev` for audio recording.\n\nYou can run the following to set up everything, including installing packages\non Ubuntu:\n\n```\ncd ~/.vim/pack/git-plugins/start/vim-speech\n./install.sh\n```\n\nIf you don't like running scripts from the Internet, _as you shouldn't_, go read\n`install.sh`, look at what it does, and figure it out.\n\nAfter the Python script has been set up, you will need to tell Vim and the\nscript where your Google application credentials are by setting an environment\nvariable. The easiest way to do this is to add a line to your `vimrc` file.\n\n```\n\" This is how I specify the path to the JSON credentials file.\nlet $GOOGLE_APPLICATION_CREDENTIALS = $HOME\n\\   . '/content/application/speech-to-text-key.json'\n```\n\nYou have to register a Google cloud service at https://cloud.google.com/ for any\nof this to work. You will be given such a JSON credentials file after you\nregister a project with access to the \"Cloud Speech API.\" See Google's\nspeech-to-text demo site for more information:\nhttps://cloud.google.com/speech-to-text/\n\n## Usage\n\nOnce you have figured out how to get everything installed, you can use the\nfollowing commands in Vim for recording speech.\n\n| Command         | Description                                               |\n| --------------- | --------------------------------------------------------- |\n| `:SpeechRecord` | Start recording, and start the job if needed.             |\n| `:SpeechStop`   | Stop recording, and print the output to your buffer.      |\n| `:SpeechQuit`   | Stop the background job and free some memory.             |\n\nIf you don't see any text being outputted into your buffer, you're probably just\nrecording from the wrong device on your machine. Mess around in `pavucontrol` or\nwhatever device selection application you have until it works.\n\n## Running the speech to text client outside of Vim\n\nRun the script from a terminal where your `GOOGLE_APPLICATION_CREDENTIALS`\nenvironment variable is set. For example:\n\n```bash\n# ~/whatever.json won't work, so use $HOME/whatever.json.\nexport GOOGLE_APPLICATION_CREDENTIALS=\"$HOME/whatever.json\"\n```\n\nRun `plugin/speech_to_text_client.py` To start the speech-to-text client\nrecording audio. It uses a simple text protocol which accepts the following\ncommands as lines of input, in a case-insensitive manner.\n\n| Command        | Description                                                |\n| -------------- | ---------------------------------------------------------- |\n| `record`       | Start recording audio.                                     |\n| `stop`         | Stop recording audio, and get the text from Google.        |\n\nThe protocol will respond with the following lines.\n\n| Response       | Description                                                |\n| -------------- | ---------------------------------------------------------- |\n| `record start` | Signals when recording stops.                              |\n| `record stop`  | Signals when recording ends.                               |\n| `speech ...`   | Text data returned from Google.                            |\n\nThe client will catch SIGINT and stop the client as soon as possible, in a safe\nmanner. Debug information may be written to stderr. The client won't work at all\non operating systems that aren't Unix-like.\n\nNothing might be coming out from the voice samples when you try to record\nspeech. If this happens, mess around with `pavucontrol` and select different\naudio devices while recording is live. You're probably using the wrong audio\ndevice.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdense-analysis%2Fvim-speech","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdense-analysis%2Fvim-speech","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdense-analysis%2Fvim-speech/lists"}