{"id":13585008,"url":"https://github.com/nateshmbhat/pyttsx3","last_synced_at":"2026-10-19T08:03:55.705Z","repository":{"id":37664078,"uuid":"95295862","full_name":"nateshmbhat/pyttsx3","owner":"nateshmbhat","description":"Offline Text To Speech synthesis for python","archived":false,"fork":false,"pushed_at":"2026-07-22T06:14:56.000Z","size":410,"stargazers_count":2534,"open_issues_count":90,"forks_count":361,"subscribers_count":42,"default_branch":"master","last_synced_at":"2026-10-13T06:43:42.437Z","etag":null,"topics":["python","python3","pyttsx","pyttsx3","text-to-speech","text-to-speech-python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nateshmbhat.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,"accessibility":null,"support":"docs/support.rst","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null}},"created_at":"2017-06-24T12:20:26.000Z","updated_at":"2026-10-07T07:17:04.000Z","dependencies_parsed_at":"2026-10-13T06:43:32.349Z","dependency_job_id":null,"html_url":"https://github.com/nateshmbhat/pyttsx3","commit_stats":{"total_commits":94,"total_committers":15,"mean_commits":6.266666666666667,"dds":"0.22340425531914898","last_synced_commit":"5d3755b060a980f48fcaf81df018dd06cbd17a8f"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/nateshmbhat/pyttsx3","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nateshmbhat%2Fpyttsx3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nateshmbhat%2Fpyttsx3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nateshmbhat%2Fpyttsx3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nateshmbhat%2Fpyttsx3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nateshmbhat","download_url":"https://codeload.github.com/nateshmbhat/pyttsx3/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nateshmbhat%2Fpyttsx3/sbom","scorecard":{"id":675278,"data":{"date":"2025-08-11","repo":{"name":"github.com/nateshmbhat/pyttsx3","commit":"4ba15e81ac5f2c1c38c701ff3152427e213353a2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.1,"checks":[{"name":"Code-Review","score":4,"reason":"Found 8/17 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"7 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/python_publish.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python_publish.yml:73: update your workflow using https://app.stepsecurity.io/secureworkflow/nateshmbhat/pyttsx3/python_publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python_publish.yml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/nateshmbhat/pyttsx3/python_publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python_publish.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/nateshmbhat/pyttsx3/python_publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python_publish.yml:111: update your workflow using https://app.stepsecurity.io/secureworkflow/nateshmbhat/pyttsx3/python_publish.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python_publish.yml:117: update your workflow using https://app.stepsecurity.io/secureworkflow/nateshmbhat/pyttsx3/python_publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python_publish.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/nateshmbhat/pyttsx3/python_publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python_publish.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/nateshmbhat/pyttsx3/python_publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python_publish.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/nateshmbhat/pyttsx3/python_publish.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/python_publish.yml:59","Warn: pipCommand not pinned by hash: .github/workflows/python_publish.yml:60","Warn: pipCommand not pinned by hash: .github/workflows/python_publish.yml:61","Warn: pipCommand not pinned by hash: .github/workflows/python_publish.yml:81","Warn: pipCommand not pinned by hash: .github/workflows/python_publish.yml:82","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   5 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Mozilla Public License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/python_publish.yml:99"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T21:15:33.289Z","repository_id":37664078,"created_at":"2025-08-21T21:15:33.289Z","updated_at":"2025-08-21T21:15:33.289Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344794859,"owners_count":38305396,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-14T02:00:06.392Z","response_time":82,"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":["python","python3","pyttsx","pyttsx3","text-to-speech","text-to-speech-python3"],"created_at":"2024-08-01T15:04:40.250Z","updated_at":"2026-10-19T08:03:55.699Z","avatar_url":"https://github.com/nateshmbhat.png","language":"Python","funding_links":["https://www.buymeacoffee.com/nateshmbhat"],"categories":["Speech Processing","Python","Tooling \u0026 Infrastructure","Open Source TTS Libraries"],"sub_categories":["Text-to-Speech","Python Libraries"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/logo.svg?sanitize=true\" width=\"200px\" height=\"200px\"\u003e\n\u003c/p\u003e\n\u003ch2 align=\"center\"\u003eOffline Text To Speech (TTS) converter for Python \u003c/h2\u003e\n\n\n[![Downloads](https://pepy.tech/badge/pyttsx3)](https://pepy.tech/project/pyttsx3) ![Downloads](https://pepy.tech/badge/pyttsx3/month)  [![](https://img.shields.io/github/languages/code-size/nateshmbhat/pyttsx3.svg?style=plastic)](https://github.com/nateshmbhat/pyttsx3)  [![](https://img.shields.io/github/license/nateshmbhat/pyttsx3?style=plastic)](https://github.com/nateshmbhat/pyttsx3) [![](https://img.shields.io/pypi/v/pyttsx3.svg?style=plastic)](https://pypi.org/project/pyttsx3/) [![](https://img.shields.io/github/languages/top/nateshmbhat/pyttsx3.svg?style=plastic)](https://github.com/nateshmbhat/pyttsx3) [![](https://img.shields.io/badge/author-nateshmbhat-green.svg)](https://github.com/nateshmbhat)\n\n\n`pyttsx3` is a text-to-speech conversion library in Python. Unlike alternative libraries, **it works offline**.\n\n\u003ca class=\"bmc-button\" target=\"_blank\" href=\"https://www.buymeacoffee.com/nateshmbhat\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/bmc-new-btn-logo.svg\" alt=\"Buy me a coffee 😇\"\u003e\u003cspan style=\"margin-left:5px;font-size:19px !important;\"\u003eBuy me a coffee 😇\u003c/span\u003e\u003c/a\u003e\n\n## Installation :\n\n\tpip install pyttsx3\n\n\u003e If you get installation errors , make sure you first upgrade your wheel version using :\n`pip install --upgrade wheel`\n\n\n## Features :\n\n- ✨Fully **OFFLINE** text to speech conversion\n- 🎈 Choose among different voices installed in your system\n- 🎛 Control speed/rate of speech\n- 🎚 Tweak Volume\n- 📀 Save the speech audio as a file\n- ❤️ Simple, powerful, \u0026 intuitive API\n\n\n#### Linux installation requirements :\n\n+ If you are on a Linux system and if the voice output is not working, then  :\n\n\tInstall espeak-ng and libespeak1 as shown below:\n\n\t```\n\tsudo apt update \u0026\u0026 sudo apt install espeak-ng libespeak1\n\t```\n\n## Usage :\n\n```python3\nimport pyttsx3\nengine = pyttsx3.init()\n\n# For Mac, If you face error related to \"pyobjc\" when running the `init()` method :\n# Install 9.0.1 version of pyobjc : \"pip install pyobjc\u003e=9.0.1\"\n\nengine.say(\"I will speak this text\")\nengine.runAndWait()\n```\n\n**Single line usage with speak function with default options**\n\n```python3\nimport pyttsx3\npyttsx3.speak(\"I will speak this text\")\n```\n\n**Changing Voice , Rate and Volume :**\n\n```python3\nimport pyttsx3\nengine = pyttsx3.init() # object creation\n\n# RATE\nrate = engine.getProperty('rate')   # getting details of current speaking rate\nprint (rate)                        # printing current voice rate\nengine.setProperty('rate', 125)     # setting up new voice rate\n\n# VOLUME\nvolume = engine.getProperty('volume')   # getting to know current volume level (min=0 and max=1)\nprint (volume)                          # printing current volume level\nengine.setProperty('volume',1.0)        # setting up volume level  between 0 and 1\n\n# VOICE\nvoices = engine.getProperty('voices')       # getting details of current voice\n#engine.setProperty('voice', voices[0].id)  # changing index, changes voices. 0 for male\nengine.setProperty('voice', voices[1].id)   # changing index, changes voices. 1 for female\n\nengine.say(\"Hello World!\")\nengine.say('My current speaking rate is ' + str(rate))\nengine.runAndWait()\nengine.stop()\n\n# Saving Voice to a file\n# On Linux, make sure that 'espeak-ng' is installed\nengine.save_to_file('Hello World', 'test.mp3')\nengine.runAndWait()\n```\n\n### **Full documentation of the Library**\n\nhttps://pyttsx3.readthedocs.io\n\n#### Included Text-To-Speech Engines by Operating System\n|                         | Linux | macOS | Windows |\n|-------------------------|:-----:|:-----:|:-------:|\n| [AVSpeech][]            |       |   ✅︎  |         |\n| [eSpeak][]              |   ✅︎  |   ✅︎  |    ✅︎   |\n| [NSSpeechSynthesizer][] |       |   ✅︎  |         |\n| [SAPI5][]               |       |       |    ✅︎   |\n\n\u003e [!NOTE]\n\u003e * AVSpeechSynthesizer support is still experimental.\n\u003e * NSSpeechSynthesizer is deprecated by Apple.\n\n[AVSpeech]: https://developer.apple.com/documentation/avfoundation/speech_synthesis\n[eSpeak]: https://github.com/espeak-ng/espeak-ng?tab=readme-ov-file#readme\n[NSSpeechSynthesizer]: https://developer.apple.com/documentation/appkit/nsspeechsynthesizer\n[SAPI5]: https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ms723627(v=vs.85)\n\nFeel free to wrap another text-to-speech engine for use with ``pyttsx3``.\n\n### Project Links :\n\n* PyPI (https://pypi.org/project/pyttsx3)\n* GitHub (https://github.com/nateshmbhat/pyttsx3)\n* Full Documentation (https://pyttsx3.readthedocs.org)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnateshmbhat%2Fpyttsx3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnateshmbhat%2Fpyttsx3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnateshmbhat%2Fpyttsx3/lists"}