{"id":30142940,"url":"https://github.com/daslearning-org/text-to-speech-offline","last_synced_at":"2026-04-25T09:35:23.014Z","repository":{"id":308914160,"uuid":"1034542997","full_name":"daslearning-org/text-to-speech-offline","owner":"daslearning-org","description":"A lightweight cross-platform Text-To-Speech application which works on Android native TTS and uses PiperTTS on desktop environment. The app looks like a simple chatbot made on kivy \u0026 kivymd which are based on Python. This app can also work Offline depending on the selected models. We will also include Speech-To-Text feature soon.","archived":false,"fork":false,"pushed_at":"2025-08-08T15:50:09.000Z","size":91,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-08T17:36:58.963Z","etag":null,"topics":["cross-platform","kivy-application","kivymd","mobile-app","python","speech-synthesis","speech-to-text","text-to-speech","tts","tts-android"],"latest_commit_sha":null,"homepage":"https://daslearning.in","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/daslearning-org.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":"2025-08-08T15:00:32.000Z","updated_at":"2025-08-08T15:50:13.000Z","dependencies_parsed_at":"2025-08-08T17:37:00.886Z","dependency_job_id":"d11fb076-d31b-4fd3-9642-578e44b7bfbf","html_url":"https://github.com/daslearning-org/text-to-speech-offline","commit_stats":null,"previous_names":["daslearning-org/text-to-speech-offline"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/daslearning-org/text-to-speech-offline","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daslearning-org%2Ftext-to-speech-offline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daslearning-org%2Ftext-to-speech-offline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daslearning-org%2Ftext-to-speech-offline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daslearning-org%2Ftext-to-speech-offline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daslearning-org","download_url":"https://codeload.github.com/daslearning-org/text-to-speech-offline/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daslearning-org%2Ftext-to-speech-offline/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269838601,"owners_count":24483248,"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-11T02:00:10.019Z","response_time":75,"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":["cross-platform","kivy-application","kivymd","mobile-app","python","speech-synthesis","speech-to-text","text-to-speech","tts","tts-android"],"created_at":"2025-08-11T06:22:12.678Z","updated_at":"2026-04-25T09:35:23.008Z","avatar_url":"https://github.com/daslearning-org.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ⌨️ ➜ 🔊 Offline Text to Speech Application\nYour private offline Text-To-Speech app for Android, Linux, Windows. The application is made with [Kivy](https://kivy.org/) and [KivyMD](https://kivymd.readthedocs.io/en/latest/) on Python.\n\n\u003e Overview: The app uses KivyMD and Kivy mainly for the AI Chatbot UI. It mainly uses [PiperTTS](https://github.com/OHF-Voice/piper1-gpl) on Desktop environments and native [Android-TTS](https://developer.android.com/reference/android/speech/tts/TextToSpeech) on `Android` platform.\n\n## 📽️ Demo\nYou can click on the below Image or this [Youtube Link](https://www.youtube.com/watch?v=AhcjJu2YwUE) to see the demo. Please let me know in the comments, how do you feel about this App. \u003cbr\u003e\n[![Android-TTS](./docs/images/ttsThumb.png)](https://www.youtube.com/watch?v=AhcjJu2YwUE)\n\n## 🖧 Our Scematic Architecture\nTo be added...\n\n## 🧑‍💻 Quickstart Guide\n\n### 📱 Download \u0026 Run the Android App\nGet the app from [Google PlayStore](https://play.google.com/store/apps/details?id=in.daslearning.ttssts) \u003cbr\u003e\n[![Google-Play](./docs/images/google_play.svg)](https://play.google.com/store/apps/details?id=in.daslearning.ttssts) \u003cbr\u003e\n\nYou can also check the [Releases](https://github.com/daslearning-org/text-to-speech-offline/releases) and downlaod the latest apk.\n\n\u003e If you use the `Download` button from the app, you can save the selected audio (.wav) in one of the mentioned folders: `Downloads`, `Music`, `Podcasts`, `Recordings` or `Ringtones` due android file access restrictions. It defaults to `TTS` folder in `Music`.\n\n\u003e If you have a `Samsung` phone (or some other brand's phone) which doesn't have `Google` as default text-to-speech engine. You may change it to google to get more voices. Go to `Settings` \u003e `Accessibility` \u003e `Talkback` \u003e `Settings` \u003e `text-to-speech settings`\u003e `Preferred engine` \u003e then choose `Google` as default engine. If you do not find this path, directly search `text-to-speech settings` in `Settings`.\n\n### 💻 Download \u0026 Run the Windows or Linux App\nGet the app from [Microsoft App Store](https://apps.microsoft.com/detail/9nbx1dwkc4fj?referrer=appbadge\u0026mode=direct\u0026hl=en-GB\u0026gl=IN) \u003cbr\u003e\n[![MS-Store](./docs/images/ms_store_light.svg)](https://apps.microsoft.com/detail/9nbx1dwkc4fj?referrer=appbadge\u0026mode=direct\u0026hl=en-GB\u0026gl=IN) \u003cbr\u003e\n\nYou can also check the [Releases](https://github.com/daslearning-org/text-to-speech-offline/releases) and downlaod the latest version of the application on your computer. If you are on `Windows`, download the `dlTTS_x.x.x.exe` file \u0026 double click to run it. If you are on `Linux`, download `dlTTS_Linux_XXX` file and run it.\n\n#### Notes:\n- Some Antivirus softwares might give you detection alert for the exe (happens for PyInstaller apps), you need to add an exception in that case.\n- On Linux you may need to change file permission to execute it.\n```bash\nchmod +x dlTTS_Linux_XXX\n./dlTTS_Linux_XXX\n```\n\n### 🐍 Run with Python\n\n1. Clone the repo\n```bash\ngit clone https://github.com/daslearning-org/text-to-speech-offline.git\n```\n\n2. Run the application as show below \u0026 you can download the voice models from settings of the app.\n```bash\ncd text-to-speech-offline/kivy/\npip install -r requirements.txt # virtual environment is recommended\npython main.py\n```\n\n## 🦾 Build your own App\nThe Kivy project has a great tool named [Buildozer](https://buildozer.readthedocs.io/en/latest/) which can make mobile apps for `Android` \u0026 `iOS`\n\n### 📱 Build Android App\nA Linux environment is recommended for the app development. If you are on Windows, you may use `WSL` or any `Virtual Machine`. As of now the `buildozer` tool works on Python version `3.11` at maximum. I am going to use Python `3.11`.\n\n```bash\n# add the python repository\nsudo add-apt-repository ppa:deadsnakes/ppa\nsudo apt update\n\n# install all dependencies.\nsudo apt install -y ant autoconf automake ccache cmake g++ gcc git lbzip2 libffi-dev libltdl-dev libtool libssl-dev make openjdk-17-jdk patch patchelf pkg-config python3-pip python3.11 python3.11-venv python3.11-dev unzip wget zip\n\n# optionally you may check the java installation with below commands\njava -version\njavac -version\n\n# install python modules\ngit clone https://github.com/daslearning-org/text-to-speech-offline.git\ncd text-to-speech-offline/kivy/\npython3.9 -m venv .env # create python virtual environment\nsource .env/bin/activate\npip install -r req_android.txt\n\n# build the android apk\nbuildozer android debug # this may take a good amount of time for the first time \u0026 will generate the apk in the bin directory\n```\n\n### 🖳 Build Computer Application (Windows / Linux / MacOS)\n\n#### Build simple executable (single file)\nA `Python` virtual environment is recommended and please follow the same steps from above till the pip module installations (do not require buildozer for desktop apps). It builds a native app depending on the OS type i.e. `.exe` if you are running `PyInstaller` from a Windows machine. You may use this [docker image](https://hub.docker.com/r/cdrx/pyinstaller-windows) for Windows exe.\n\n```bash\n# install pyinstaller\npip install pyinstaller\n\n# generate the spec file\npyinstaller --name \"pyinst-single\" --windowed --onefile main.py # optional as it is already create in the repo\n\n# then update the spec file as needed\n# then build your app which will be native to the OS i.e. Linux or Windows or MAC\npyinstaller pyinst-single.spec\n```\n\n#### Creating `MSIX` installer for Microsoft Store\n\n1. Creating an installer exe using [inno setup](https://jrsoftware.org/isinfo.php) and we are using this [spec file](./kivy/msi-inno.iss)\n\n2. Create self signed certificate. Once `.cer` is generated \u003e double click \u003e Install \u003e Local Machine \u003e Trusted People.\n\n```powershell\n# New certificate\n$cert = New-SelfSignedCertificate `\n  -Type CodeSigning `\n  -Subject \"CN=DasLearning, O=DasLearning, C=IN\" `\n  -CertStoreLocation \"Cert:\\LocalMachine\\My\" `\n  -NotAfter (Get-Date).AddYears(5)\n\n# User a strong password\n$password = ConvertTo-SecureString \"StrongPassword123!\" -AsPlainText -Force\n\n# Export teh certificate\nExport-PfxCertificate `\n  -Cert $cert `\n  -FilePath \".\\dlTTS.pfx\" `\n  -Password $password\n\n# Local installation certificate\nExport-Certificate `\n  -Cert $cert `\n  -FilePath \".\\dlTTS.cer\"\n\n# Optiona: check the pfx cert\nGet-PfxCertificate -FilePath \".\\dlTTS.pfx\" |\n  Format-List Subject, NotBefore, NotAfter\n```\n\n3. We will be using [MSIX Packaing Tool](https://apps.microsoft.com/detail/9n5lw3jbcxkf?hl=en-GB\u0026gl=IN) to create the MSIX package. Install it \u0026 follow the wizard.\n\n4. Use `http://timestamp.digicert.com` in the timestamp server. Use your details \u0026 Generate the MSIX.\n\n#### Build Windows exe from Linux\n\n* Install Wine\n```bash\n# Add the Wine repository key\nsudo mkdir -pm755 /etc/apt/keyrings\nsudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key\n\n# Add the Wine repository for your Linux Mint version\n# For Linux Mint 21.x (Vanessa, Virginia, Victoria - based on Ubuntu 22.04 Jammy Jellyfish)\n# Replace 'jammy' with your Ubuntu base codename if different (e.g., 'focal' for Mint 20.x)\nsudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources\n\n# Update package lists\nsudo apt update\n\n# Install Wine (Stable branch is usually recommended)\nsudo apt install --install-recommends winehq-stable\n\n# If you need 32-bit support (highly recommended for Python/PyInstaller compatibility)\n# This command typically handles it, but if you encounter issues later, ensure 32-bit architecture is enabled:\nsudo dpkg --add-architecture i386\nsudo apt update\nsudo apt install wine32 # This might be pulled by winehq-stable, but good to ensure\n```\n\n* Download Windows Python from [official page](https://www.python.org/downloads/windows/) and then install\n```bash\n# Navigate to where you downloaded the Python installer\ncd ~/Downloads\n\n# Run the installer using wine\n# Replace 'python-3.9.13-amd64.exe' with the actual filename you downloaded\nwine python-3.9.13-amd64.exe\n```\n\n* Then run the development\n```bash\ncd kivy/\nwine pip install pyinstaller\nwine pip install -r requirements.txt\n# Also install kivy-deps.sdl2, kivy-deps.glew, kivy-deps.angle explicitly if not pulled by Kivy/KivyMD\nwine pip install kivy-deps.sdl2 kivy-deps.glew kivy-deps.angle\n\n# Replace 'Python39' with your installed Python version in Wine\nwine pyinstaller dasLearningTTS.spec # exe will be in the dist folder\n```\n\n## 🐞 Issues\nThere can be few issues \u0026 some solutions around it.\n\n### Android Issues\n\n* Sometimes the apk might not get installed. You may enable `Developer Options` \u003e `USB Debugging` and run below command with [adb tool](https://developer.android.com/tools/adb).\n```bash\n# check your packages (it may not show the uninstalled version, some leftover may cause the issue)\nadb shell pm list packages | grep ttsstt\n\n# uninstall cleans it\nadb uninstall in.daslearning.ttsstt\n\n# you may use buildozer deploy run to check the adb\nbuildozer android debug deploy run\n```\n\n## Reference links\n- Piper-TTS [voices-list](https://huggingface.co/rhasspy/piper-voices/blob/main/voices.json)\n- Listen to [voice samples](https://rhasspy.github.io/piper-samples/)\n- Piper-TTS [GitHub](https://github.com/OHF-Voice/piper1-gpl)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaslearning-org%2Ftext-to-speech-offline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaslearning-org%2Ftext-to-speech-offline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaslearning-org%2Ftext-to-speech-offline/lists"}