{"id":1581,"date":"2025-07-18T08:56:54","date_gmt":"2025-07-18T08:56:54","guid":{"rendered":"https:\/\/zahiralam.com\/blog\/?p=1581"},"modified":"2025-07-28T08:14:45","modified_gmt":"2025-07-28T08:14:45","slug":"how-to-install-and-run-coqui-tts-on-mac-for-high-quality-voice-synthesis","status":"publish","type":"post","link":"https:\/\/zahiralam.com\/blog\/how-to-install-and-run-coqui-tts-on-mac-for-high-quality-voice-synthesis\/","title":{"rendered":"How to Install and Run Coqui TTS on Mac for High-Quality Voice Synthesis"},"content":{"rendered":"\n<p>\n\n\n\n<p>Coqui TTS is a powerful open-source text-to-speech system that supports multiple languages, including Spanish, German, Chinese, Japanese etc . In this guide, we\u2019ll walk you through how to install it on your Mac , resolve compatibility issues with PyTorch, and generate natural-sounding Spanish speech step by step.\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udde3\ufe0f Bonus Tip: Preview Built-in macOS Spanish Voices<\/h2>\n\n\n\n<p>Before diving into Coqui TTS, you might want to explore what\u2019s already built into macOS.\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udc49 To list all available voices on macOS:<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">say -v \"?\"<\/pre>\n\n\n\n<p>You\u2019ll see a list like:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-1\">...\nJorge        es_ES    # Spanish (Spain)\nJuan         es_MX    # Spanish (Mexico)\nPaulina      es_MX    # Spanish (Mexico)\nMonica       es_ES    # Spanish (Spain)\n...<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#...%0AJorge%20%20%20%20%20%20%20%20es_ES%20%20%20%20%23%20Spanish%20%28Spain%29%0AJuan%20%20%20%20%20%20%20%20%20es_MX%20%20%20%20%23%20Spanish%20%28Mexico%29%0APaulina%20%20%20%20%20%20es_MX%20%20%20%20%23%20Spanish%20%28Mexico%29%0AMonica%20%20%20%20%20%20%20es_ES%20%20%20%20%23%20Spanish%20%28Spain%29%0A...\">\n                            <button class=\"copy-button\" data-label=\"...\nJorge        es_ES    # Spanish (Spain)\nJuan         es_MX    # Spanish (Mexico)\nPaulina      es_MX    # Spanish (Mexico)\nMonica       es_ES    # Spanish (Spain)\n...\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<p>To test one of these voices:\n\n\n\n<pre class=\"wp-block-preformatted\">say -v \"Jorge\" \"Hola, \u00bfc\u00f3mo est\u00e1s?\"<\/pre>\n\n\n\n<p>While macOS voices are good, they are not open-source and can\u2019t be customized. That\u2019s where&nbsp;<strong>Coqui TTS<\/strong>&nbsp;comes in.\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Prerequisites<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A Mac M1, M2,  M3 or M4 running macOS<\/li>\n\n\n\n<li>Conda installed (via&nbsp;<a href=\"https:\/\/docs.conda.io\/en\/latest\/miniconda.html\">Miniconda<\/a>&nbsp;or&nbsp;<a href=\"https:\/\/brew.sh\/\">Homebrew<\/a>)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Step 1: Create a Conda Environment<\/h2>\n\n\n\n<p>We\u2019ll use Python 3.10 for compatibility.\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-2\">conda create -n coqui-tts python=3.10 -y\nconda activate coqui-tts<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#conda%20create%20-n%20coqui-tts%20python%3D3.10%20-y%0Aconda%20activate%20coqui-tts\">\n                            <button class=\"copy-button\" data-label=\"conda create -n coqui-tts python=3.10 -y\nconda activate coqui-tts\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udce6 Step 2: Install Coqui TTS with Full Features<\/h2>\n\n\n\n<p>Install the TTS library along with development and notebook extras for full support:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-3\">pip install &quot;TTS[all,dev,notebooks]&quot;<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#pip%20install%20%22TTS%5Ball%2Cdev%2Cnotebooks%5D%22\">\n                            <button class=\"copy-button\" data-label=\"pip install &quot;TTS[all,dev,notebooks]&quot;\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u26a0\ufe0f Step 3: Fix the PyTorch Compatibility Issue<\/h2>\n\n\n\n<p>Coqui TTS models like Tacotron2 use custom layers that are blocked by newer PyTorch versions (&gt;=2.6) due to a&nbsp;<code>pickle.UnpicklingError<\/code>. To fix this,&nbsp;<strong>downgrade PyTorch<\/strong>&nbsp;to version 2.5.1.\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-4\">pip uninstall torch torchaudio -y\npip install torch==2.5.1 torchaudio==2.5.1<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#pip%20uninstall%20torch%20torchaudio%20-y%0Apip%20install%20torch%3D%3D2.5.1%20torchaudio%3D%3D2.5.1\">\n                            <button class=\"copy-button\" data-label=\"pip uninstall torch torchaudio -y\npip install torch==2.5.1 torchaudio==2.5.1\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udce5 Step 4: Download and Use a Spanish TTS Model<\/h2>\n\n\n\n<p>We\u2019ll use the pre-trained Spanish model&nbsp;<code>tts_models\/es\/mai\/tacotron2-DDC<\/code>.\n\n\n\n<p>Run this command to synthesize Spanish audio:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-5\">tts --text &quot;Hola, \u00bfc\u00f3mo est\u00e1s?&quot; \\\n    --model_name tts_models\/es\/mai\/tacotron2-DDC \\\n    --out_path hola.wav<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#tts%20--text%20%22Hola%2C%20%C2%BFc%C3%B3mo%20est%C3%A1s%3F%22%20%5C%0A%20%20%20%20--model_name%20tts_models%2Fes%2Fmai%2Ftacotron2-DDC%20%5C%0A%20%20%20%20--out_path%20hola.wav\">\n                            <button class=\"copy-button\" data-label=\"tts --text &quot;Hola, \u00bfc\u00f3mo est\u00e1s?&quot; \\\n    --model_name tts_models\/es\/mai\/tacotron2-DDC \\\n    --out_path hola.wav\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<p>\u2705 This will:\n\n\n\n<ul class=\"wp-block-list\">\n<li>Download the Spanish TTS model<\/li>\n\n\n\n<li>Download a compatible vocoder (MelGAN)<\/li>\n\n\n\n<li>Generate&nbsp;<code>hola.wav<\/code>&nbsp;with natural-sounding Spanish<\/li>\n<\/ul>\n\n\n\n<p>To play the audio:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-6\">afplay hola.wav<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#afplay%20hola.wav\">\n                            <button class=\"copy-button\" data-label=\"afplay hola.wav\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udee0 Optional: Use Python Script Instead of CLI<\/h2>\n\n\n\n<p>Here\u2019s a Python version if you prefer using code:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-7\">from TTS.api import TTS\n\ntts = TTS(model_name=&quot;tts_models\/es\/mai\/tacotron2-DDC&quot;)\ntts.tts_to_file(text=&quot;Hola, \u00bfc\u00f3mo est\u00e1s?&quot;, file_path=&quot;output.wav&quot;)<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#from%20TTS.api%20import%20TTS%0A%0Atts%20%3D%20TTS%28model_name%3D%22tts_models%2Fes%2Fmai%2Ftacotron2-DDC%22%29%0Atts.tts_to_file%28text%3D%22Hola%2C%20%C2%BFc%C3%B3mo%20est%C3%A1s%3F%22%2C%20file_path%3D%22output.wav%22%29\">\n                            <button class=\"copy-button\" data-label=\"from TTS.api import TTS\n\ntts = TTS(model_name=&quot;tts_models\/es\/mai\/tacotron2-DDC&quot;)\ntts.tts_to_file(text=&quot;Hola, \u00bfc\u00f3mo est\u00e1s?&quot;, file_path=&quot;output.wav&quot;)\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Bonus: Try Higher Quality with Voice Cloning (xtts_v2)<\/h2>\n\n\n\n<p>For even better quality and multilingual voice cloning (optional):\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-8\">tts = TTS(&quot;tts_models\/multilingual\/multi-dataset\/xtts_v2&quot;)\ntts.tts_to_file(\n    text=&quot;Hola, \u00bfc\u00f3mo est\u00e1s?&quot;,\n    speaker_wav=&quot;your-voice-sample.wav&quot;,  # Optional for cloning\n    language=&quot;es&quot;,\n    file_path=&quot;xtts_output.wav&quot;\n)<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#tts%20%3D%20TTS%28%22tts_models%2Fmultilingual%2Fmulti-dataset%2Fxtts_v2%22%29%0Atts.tts_to_file%28%0A%20%20%20%20text%3D%22Hola%2C%20%C2%BFc%C3%B3mo%20est%C3%A1s%3F%22%2C%0A%20%20%20%20speaker_wav%3D%22your-voice-sample.wav%22%2C%20%20%23%20Optional%20for%20cloning%0A%20%20%20%20language%3D%22es%22%2C%0A%20%20%20%20file_path%3D%22xtts_output.wav%22%0A%29\">\n                            <button class=\"copy-button\" data-label=\"tts = TTS(&quot;tts_models\/multilingual\/multi-dataset\/xtts_v2&quot;)\ntts.tts_to_file(\n    text=&quot;Hola, \u00bfc\u00f3mo est\u00e1s?&quot;,\n    speaker_wav=&quot;your-voice-sample.wav&quot;,  # Optional for cloning\n    language=&quot;es&quot;,\n    file_path=&quot;xtts_output.wav&quot;\n)\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Final Thoughts<\/h2>\n\n\n\n<p>With this setup:\n\n\n\n<ul class=\"wp-block-list\">\n<li>You\u2019re running&nbsp;<strong>Coqui TTS locally<\/strong>&nbsp;on Mac M1 Pro<\/li>\n\n\n\n<li>Using&nbsp;<strong>high-quality Spanish voices<\/strong><\/li>\n\n\n\n<li>Solved&nbsp;<strong>PyTorch compatibility<\/strong>&nbsp;using the correct version<\/li>\n\n\n\n<li>And optionally prepared for&nbsp;<strong>voice cloning or multilingual support<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd17 Related Links<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/coqui-ai\/TTS\">Coqui TTS GitHub<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/huggingface.co\/tts_models\/es\/mai\/tacotron2-DDC\">Tacotron2 Spanish model<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.mozilla.org\/en-US\/MPL\/2.0\/\">Mozilla Public License (MPL 2.0)<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Coqui TTS is a powerful open-source text-to-speech system that supports multiple languages, including Spanish, German, Chinese, Japanese etc . In this guide, we\u2019ll walk you [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":1589,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[214],"tags":[256,276,275],"class_list":["post-1581","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-installation","tag-mac-m1-m2-m3-m4","tag-open-source","tag-tts"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/posts\/1581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/comments?post=1581"}],"version-history":[{"count":2,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/posts\/1581\/revisions"}],"predecessor-version":[{"id":1586,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/posts\/1581\/revisions\/1586"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/media\/1589"}],"wp:attachment":[{"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/media?parent=1581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/categories?post=1581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/tags?post=1581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}