[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-2540":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":43,"readmeContent":44,"aiSummary":45,"trendingCount":16,"starSnapshotCount":16,"syncStatus":46,"lastSyncTime":47,"discoverSource":48},2540,"ebook2audiobook","DrewThomasson\u002Febook2audiobook","DrewThomasson","Generate audiobooks from e-books, voice cloning & 1158+ languages!","",null,"Python",19236,1597,89,5,0,9,58,373,43,44.61,"Apache License 2.0",false,"main",true,[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"audiobook","audiobooks","chinese","colab-notebook","docker","english","epub","gradio","kaggle","linux","mac","multilingual","tts","voice-cloning","windows","xtts","2026-06-12 02:00:42","# 📚 ebook2audiobook (E2A)\nCPU\u002FGPU Converter from E-Book to audiobook with chapters and metadata\u003Cbr\u002F>\nusing advanced TTS engines and much more.\u003Cbr\u002F>\nSupports voice cloning and 1158 languages!\n> [!IMPORTANT]\n**This tool is intended for use with non-DRM, legally acquired eBooks only.** \u003Cbr>\nThe authors are not responsible for any misuse of this software or any resulting legal consequences. \u003Cbr>\nUse this tool responsibly and in accordance with all applicable laws.\n\n[![Discord](https:\u002F\u002Fdcbadge.limes.pink\u002Fapi\u002Fserver\u002Fhttps:\u002F\u002Fdiscord.gg\u002F63Tv3F65k6)](https:\u002F\u002Fdiscord.gg\u002F63Tv3F65k6)\n\n### Thanks to support ebook2audiobook developers!\n[![Ko-Fi](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FKo--fi-F16061?style=for-the-badge&logo=ko-fi&logoColor=white)](https:\u002F\u002Fko-fi.com\u002Fathomasson2) \n\n### Run locally\n\n[![Quick Start](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FQuick%20Start-blue?style=for-the-badge)](#instructions)\n\n[![Docker Build](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\u002Factions\u002Fworkflows\u002FDocker-Build.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\u002Factions\u002Fworkflows\u002FDocker-Build.yml)  [![Download](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDownload-Now-blue.svg)](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\u002Freleases\u002Flatest)   \n\n\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPlatform-mac%20|%20linux%20|%20windows-lightgrey\" alt=\"Platform\">\n\u003C\u002Fa>\u003Ca href=\"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fathomasson2\u002Febook2audiobook\">\n\u003Cimg alt=\"Docker Pull Count\" src=\"https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fpulls\u002Fathomasson2\u002Febook2audiobook.svg\"\u002F>\n\u003C\u002Fa>\n\n### Run Remotely\n[![Hugging Face](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHugging%20Face-Spaces-yellow?style=flat&logo=huggingface)](https:\u002F\u002Fhuggingface.co\u002Fspaces\u002FdrewThomasson\u002Febook2audiobook)\n[![Free Google Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002FDrewThomasson\u002Febook2audiobook\u002Fblob\u002Fmain\u002FNotebooks\u002Fcolab_ebook2audiobook.ipynb) [![Kaggle](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FKaggle-035a7d?style=flat&logo=kaggle&logoColor=white)](https:\u002F\u002Fgithub.com\u002FRihcus\u002Febook2audiobookXTTS\u002Fblob\u002Fmain\u002FNotebooks\u002Fkaggle-ebook2audiobook.ipynb)\n\n#### GUI Interface\n![demo_web_gui](assets\u002Fdemo_web_gui.gif)\n\n\u003Cdetails>\n  \u003Csummary>Click to see images of Web GUI\u003C\u002Fsummary>\n  \u003Cimg width=\"1728\" alt=\"GUI Screen 1\" src=\"assets\u002Fgui_1.png\">\n  \u003Cimg width=\"1728\" alt=\"GUI Screen 2\" src=\"assets\u002Fgui_2.png\">\n  \u003Cimg width=\"1728\" alt=\"GUI Screen 3\" src=\"assets\u002Fgui_3.png\">\n\u003C\u002Fdetails>\n\n## Demos\n\n**New Default Voice Demo**  \n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F750035dc-e355-46f1-9286-05c1d9e88cea  \n\n\u003Cdetails>\n  \u003Csummary>More Demos\u003C\u002Fsummary>\n\n**ASMR Voice** \n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F68eee9a1-6f71-4903-aacd-47397e47e422\n\n**Rainy Day Voice**  \n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fd25034d9-c77f-43a9-8f14-0d167172b080  \n\n**Scarlett Voice**\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fb12009ee-ec0d-45ce-a1ef-b3a52b9f8693\n\n**David Attenborough Voice** \n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F81c4baad-117e-4db5-ac86-efc2b7fea921\n\n**Example**\n\n![Example](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002FVoxNovel\u002Fblob\u002Fdc5197dff97252fa44c391dc0596902d71278a88\u002Freadme_files\u002Fexample_in_app.jpeg)\n\u003C\u002Fdetails>\n\n## README.md\n\n## Table of Contents\n- [ebook2audiobook](#-ebook2audiobook)\n- [Features](#features)\n- [GUI Interface](#gui-interface)\n- [Demos](#demos)\n- [Supported Languages](#supported-languages)\n- [Minimum Requirements](#hardware-requirements)\n- [Usage](#instructions)\n  - [Run Locally](#instructions)\n    - [Launching Gradio Web Interface](#instructions)\n    - [Basic Headless Usage](#basic-usage)\n    - [Headless Custom XTTS Model Usage](#example-of-custom-model-zip-upload)\n    - [Help command output](#help-command-output)\n  - [Run Remotely](#run-remotely)\n  - [Docker](#docker)\n    - [Steps to Run](#docker)\n    - [Common Docker Issues](#common-docker-issues)\n  \n- [Fine Tuned TTS models](#fine-tuned-tts-models)\n  - [Collection of Fine-Tuned TTS Models](#fine-tuned-tts-collection)\n  - [Train XTTSv2](#fine-tune-your-own-xttsv2-model)\n- [Supported eBook Formats](#supported-ebook-formats)\n- [Output Formats](#output-and-process-formats)\n- [Revert to older Version](#reverting-to-older-versions)\n- [Common Issues](#common-issues)\n- [Special Thanks](#special-thanks)\n- [Table of Contents](#table-of-contents)\n\n\n## Features\n- 🔧 **TTS Engines supported**: `XTTSv2`, `Bark`, `Fairseq`, `VITS`, `Tacotron2`, `Tortoise`, `GlowTTS`, `YourTTS`\n- 📚 **Convert multiple file formats**: `.epub`, `.mobi`, `.azw3`, `.fb2`, `.lrf`, `.rb`, `.snb`, `.tcr`, `.pdf`, `.txt`, `.rtf`, `.doc`, `.docx`, `.html`, `.odt`, `.azw`, `.tiff`, `.tif`, `.png`, `.jpg`, `.jpeg`, `.bmp`\n- 💻 **TextArea** to convert directly a short text in audio\n- 🔍 **OCR scanning** for files with text pages as images\n- 🔊 **High-quality text-to-speech** from near realtime to near real voice\n- 🗣️ **Optional voice cloning** using your own voice file\n- 🌐 **Supports 1158 languages** ([supported languages list](https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fmms\u002Ftts\u002Fall-tts-languages.html))\n- 💻 **Low-resource friendly** — runs on **2 GB RAM \u002F 1 GB VRAM (minimum)**\n- 🎵 **Audiobook output formats**: mono or stereo `aac`, `flac`, `mp3`, `m4b`, `m4a`, `mp4`, `mov`, `ogg`, `wav`, `webm`\n- 🧠 **SML tags supported** — fine-grained control of breaks, pauses, voice switching and more ([see below](#sml-tags-available))\n- 🧩 **Optional custom model** using your own trained model (XTTSv2 only, other on request)\n- 🎛️ **Fine-tuned preset models** trained by the E2A Team\u003Cbr\u002F>\n     \u003Ci>(Contact us if you need additional fine-tuned models, or if you’d like to share yours to the official preset list)\u003C\u002Fi>\n\n\n##  Hardware Requirements\n- 2GB RAM min, 8GB recommended.\n- 1GB VRAM min, 4GB recommended.\n- Virtualization enabled if running on windows (Docker only).\n- CPU, XPU (intel, AMD, ARM)*.\n- CUDA, ROCm, JETSON\n- MPS (Apple Silicon CPU)\n\n*\u003Ci> Modern TTS engines are very slow on CPU, so use lower quality TTS like YourTTS, Tacotron2 etc..\u003C\u002Fi>\n\n## Supported Languages\n| **Arabic (ar)**    | **Chinese (zh)**    | **English (en)**   | **Spanish (es)**   |\n|:------------------:|:------------------:|:------------------:|:------------------:|\n| **French (fr)**    | **German (de)**     | **Italian (it)**   | **Portuguese (pt)** |\n| **Polish (pl)**    | **Turkish (tr)**    | **Russian (ru)**   | **Dutch (nl)**     |\n| **Czech (cs)**     | **Japanese (ja)**   | **Hindi (hi)**     | **Bengali (bn)**   |\n| **Hungarian (hu)** | **Korean (ko)**     | **Vietnamese (vi)**| **Swedish (sv)**   |\n| **Persian (fa)**   | **Yoruba (yo)**     | **Swahili (sw)**   | **Indonesian (id)**|\n| **Slovak (sk)**    | **Croatian (hr)**   | **Tamil (ta)**     | **Danish (da)**    |\n- [**+1130 languages and dialects here**](https:\u002F\u002Fdl.fbaipublicfiles.com\u002Fmms\u002Ftts\u002Fall-tts-languages.html)\n\n\n## Supported eBook Formats\n- `.epub`, `.pdf`, `.mobi`, `.txt`, `.html`, `.rtf`, `.chm`, `.lit`,\n  `.pdb`, `.fb2`, `.odt`, `.cbr`, `.cbz`, `.prc`, `.lrf`, `.pml`,\n  `.snb`, `.cbc`, `.rb`, `.tcr`\n- **Best results**: `.epub` or `.mobi` for automatic chapter detection\n\n## Output and process Formats\n- `.m4b`, `.m4a`, `.mp4`, `.webm`, `.mov`, `.mp3`, `.flac`, `.wav`, `.ogg`, `.aac`\n- Process format can be changed in lib\u002Fconf.py\n\n## SML tags available\n- `[break]` — silence (random range **0.3–0.6 sec.**)\n- `[pause]` — silence (random range **1.0–1.6 sec.**)\n- `[pause:N]` — fixed pause (**N sec.**)\n- `[voice:\u002Fpath\u002Fto\u002Fvoice\u002Ffile]...[\u002Fvoice]` — switch voice from default or selected voice from GUI\u002FCLI\n\n**Check our other repo dedicated to add SML automatically in your ebook -> [E2A-SML](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002FE2A-SML)**\n\n> [!IMPORTANT]\n**Before to post an install or bug issue search carefully to the opened and closed issues TAB\u003Cbr>\nto be sure your issue does not exist already.**\n\n>[!NOTE]\n**EPUB format lacks any standard structure like what is a chapter, paragraph, preface etc.\u003Cbr>\nSo you should first remove manually any text you don't want to be converted in audio.**\n\n\n### Instructions \n1. **Clone repo**\n\t```bash\n\tgit clone https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook.git\n\tcd ebook2audiobook\n\t```\n\n2. **Install \u002F Run ebook2audiobook**:\n\n   - **Linux\u002FMacOS**  \n     ```bash\n     .\u002Febook2audiobook.command\n     ```\n     \u003Ci>Note for MacOS users: homebrew is installed to install missing programs.\u003C\u002Fi>\n     \n   - **Mac Launcher**  \n     Double click `Mac Ebook2Audiobook Launcher.command`\n\n\n   - **Windows**  \n     ```bash\n     ebook2audiobook.cmd\n     ```\n     or\n     Double click `ebook2audiobook.cmd`\n\n     \u003Ci>Note for Windows users: scoop is installed to install missing programs without administrator privileges.\u003C\u002Fi>\n   \n1. **Open the Web App**: Click the URL provided in the terminal to access the web app and convert eBooks. `http:\u002F\u002Flocalhost:7860\u002F`\n2. **For Public Link**:\n   `.\u002Febook2audiobook.command --share` (Linux\u002FMacOS)\n   `ebook2audiobook.cmd --share` (Windows)\n   `python app.py --share` (all OS)\n\n> [!IMPORTANT]\n**If the script is stopped and run again, you need to refresh your gradio GUI interface\u003Cbr>\nto let the web page reconnect to the new connection socket.**\n\n### Basic  Usage\n   - **Linux\u002FMacOS**:\n     ```bash\n     .\u002Febook2audiobook.command --headless --ebook \u003Cpath_to_ebook_file> --voice \u003Cpath_to_voice_file> --language \u003Clanguage_code>\n     ```\n   - **Windows**\n     ```bash\n     ebook2audiobook.cmd --headless --ebook \u003Cpath_to_ebook_file> --voice \u003Cpath_to_voice_file> --language \u003Clanguage_code>\n     ```\n     \n  - **[--ebook]**: Path to your eBook file\n  - **[--voice]**: Voice cloning file path (optional)\n  - **[--language]**: Language code in ISO-639-3 (i.e.: ita for italian, eng for english, deu for german...).\u003Cbr>\n    Default language is eng and --language is optional for default language set in .\u002Flib\u002Flang.py.\u003Cbr>\n    The ISO-639-1 2 letters codes are also supported.\n\n\n###  Example of Custom Model Zip Upload\n  (must be a .zip file containing the mandatory model files. Example for XTTSv2: config.json, model.pth, vocab.json and ref.wav)\n   - **Linux\u002FMacOS**\n     ```bash\n     .\u002Febook2audiobook.command --headless --ebook \u003Cebook_file_path> --language \u003Clanguage> --custom_model \u003Ccustom_model_path>\n     ```\n   - **Windows**\n     ```bash\n     ebook2audiobook.cmd --headless --ebook \u003Cebook_file_path> --language \u003Clanguage> --custom_model \u003Ccustom_model_path>\n     ```\n     \u003Ci>Note: the ref.wav of your custom model is always the voice selected for the conversion\u003C\u002Fi>\n     \n- **\u003Ccustom_model_path>**: Path to `model_name.zip` file,\n      which must contain (according to the tts engine) all the mandatory files\u003Cbr>\n      (see .\u002Flib\u002Fmodels.py).\n\n### For Detailed Guide with list of all Parameters to use\n   - **Linux\u002FMacOS**\n     ```bash\n     .\u002Febook2audiobook.command --help\n     ```\n   - **Windows**\n     ```bash\n     ebook2audiobook.cmd --help\n     ```\n   - **Or for all OS**\n    ```python\n     app.py --help\n    ```\n\n\u003Ca id=\"help-command-output\">\u003C\u002Fa>\n```bash\nusage: app.py [-h] [--session SESSION] [--share] [--headless] [--ebook EBOOK] [--ebooks_dir EBOOKS_DIR]\n              [--language LANGUAGE] [--voice VOICE] [--device {CPU,CUDA,MPS,ROCM,XPU,JETSON}]\n              [--tts_engine {XTTSv2,BARK,VITS,FAIRSEQ,TACOTRON2,YOURTTS,xtts,bark,vits,fairseq,tacotron,yourtts}]\n              [--custom_model CUSTOM_MODEL] [--fine_tuned FINE_TUNED] [--output_format OUTPUT_FORMAT]\n              [--output_channel OUTPUT_CHANNEL] [--temperature TEMPERATURE] [--length_penalty LENGTH_PENALTY]\n              [--num_beams NUM_BEAMS] [--repetition_penalty REPETITION_PENALTY] [--top_k TOP_K] [--top_p TOP_P]\n              [--speed SPEED] [--enable_text_splitting] [--text_temp TEXT_TEMP] [--waveform_temp WAVEFORM_TEMP]\n              [--output_dir OUTPUT_DIR] [--version]\n\nConvert eBooks to Audiobooks using a Text-to-Speech model. You can either launch the Gradio interface or run the script in headless mode for direct conversion.\n\noptions:\n  -h, --help            show this help message and exit\n  --session SESSION     Session to resume the conversion in case of interruption, crash,\n                            or reuse of custom models and custom cloning voices.\n\n**** The following options are for all modes:\n  Optional\n\n**** The following option are for gradio\u002Fgui mode only:\n  Optional\n\n  --share               Enable a public shareable Gradio link.\n\n**** The following options are for --headless mode only:\n  --headless            Run the script in headless mode\n  --ebook EBOOK         Path to the ebook file for conversion. Cannot be used when --ebooks_dir is present.\n  --ebooks_dir EBOOKS_DIR\n                        Relative or absolute path of the directory containing the files to convert.\n                            Cannot be used when --ebook is present.\n  --text TEXT           Raw text for conversion. Cannot be used when --ebook or --ebooks_dir is present.\n  --language LANGUAGE   Language of the e-book. Default language is set\n                            in .\u002Flib\u002Flang.py sed as default if not present. All compatible language codes are in .\u002Flib\u002Flang.py\n\noptional parameters:\n  --voice VOICE         (Optional) Path to the voice cloning file for TTS engine.\n                            Uses the default voice if not present.\n  --device {CPU,CUDA,MPS,ROCM,XPU,JETSON}\n                        (Optional) Processor unit type for the conversion.\n                            Default is set in .\u002Flib\u002Fconf.py if not present. Fall back to CPU if CUDA or MPS is not available.\n  --tts_engine {XTTSv2,BARK,VITS,FAIRSEQ,TACOTRON2,YOURTTS,xtts,bark,vits,fairseq,tacotron,yourtts}\n                        (Optional) Preferred TTS engine (available are: ['XTTSv2', 'BARK', 'VITS', 'FAIRSEQ', 'TACOTRON2', 'YOURTTS', 'xtts', 'bark', 'vits', 'fairseq', 'tacotron', 'yourtts'].\n                            Default depends on the selected language. The tts engine should be compatible with the chosen language\n  --custom_model CUSTOM_MODEL\n                        (Optional) Path to the custom model zip file cntaining mandatory model files.\n                            Please refer to .\u002Flib\u002Fmodels.py\n  --fine_tuned FINE_TUNED\n                        (Optional) Fine tuned model path. Default is builtin model.\n  --output_format OUTPUT_FORMAT\n                        (Optional) Output audio format. Default is m4b set in .\u002Flib\u002Fconf.py\n  --output_channel OUTPUT_CHANNEL\n                        (Optional) Output audio channel. Default is mono set in .\u002Flib\u002Fconf.py\n  --temperature TEMPERATURE\n                        (xtts only, optional) Temperature for the model.\n                            Default to config.json model. Higher temperatures lead to more creative outputs.\n  --length_penalty LENGTH_PENALTY\n                        (xtts only, optional) A length penalty applied to the autoregressive decoder.\n                            Default to config.json model. Not applied to custom models.\n  --num_beams NUM_BEAMS\n                        (xtts only, optional) Controls how many alternative sequences the model explores. Must be equal or greater than length penalty.\n                            Default to config.json model.\n  --repetition_penalty REPETITION_PENALTY\n                        (xtts only, optional) A penalty that prevents the autoregressive decoder from repeating itself.\n                            Default to config.json model.\n  --top_k TOP_K         (xtts only, optional) Top-k sampling.\n                            Lower values mean more likely outputs and increased audio generation speed.\n                            Default to config.json model.\n  --top_p TOP_P         (xtts only, optional) Top-p sampling.\n                            Lower values mean more likely outputs and increased audio generation speed. Default to config.json model.\n  --speed SPEED         (xtts only, optional) Speed factor for the speech generation.\n                            Default to config.json model.\n  --enable_text_splitting\n                        (xtts only, optional) Enable TTS text splitting. This option is known to not be very efficient.\n                            Default to config.json model.\n  --text_temp TEXT_TEMP\n                        (bark only, optional) Text Temperature for the model.\n                            Default to config.json model.\n  --waveform_temp WAVEFORM_TEMP\n                        (bark only, optional) Waveform Temperature for the model.\n                            Default to config.json model.\n  --output_dir OUTPUT_DIR\n                        (Optional) Path to the output directory. Default is set in .\u002Flib\u002Fconf.py\n  --version             Show the version of the script and exit\n\nExample usage:\nWindows:\n    Gradio\u002FGUI:\n    ebook2audiobook.cmd\n    Headless mode:\n    ebook2audiobook.cmd --headless --ebook '\u002Fpath\u002Fto\u002Ffile' --language eng\nLinux\u002FMac:\n    Gradio\u002FGUI:\n    .\u002Febook2audiobook.command\n    Headless mode:\n    .\u002Febook2audiobook.command --headless --ebook '\u002Fpath\u002Fto\u002Ffile' --language eng\n\nSML tags available:\n        [break] — silence (random range **0.3–0.6 sec.**)\n        [pause] — silence (random range **1.0–1.6 sec.**)\n        [pause:N] — fixed pause (**N sec.**)\n        [voice:\u002Fpath\u002Fto\u002Fvoice\u002Ffile]...[\u002Fvoice] — switch voice from default or selected voice from GUI\u002FCLI\n\n```\n\nNOTE: in gradio\u002Fgui mode, to cancel a running conversion, just click on the [X] from the ebook upload component.\nTIP: if it needs some more pause, add '[pause:3]' for 3 sec. etc.\n\n### Docker\n1. **Clone the Repository**:\n```bash\n   git clone https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook.git\n   cd ebook2audiobook\n```\n2. **Build the container**\n```bash\n    Windows:\n        Docker:\n            ebook2audiobook.cmd --script_mode build_docker\n        Docker Compose:\n            ebook2audiobook.cmd --script_mode build_docker --docker_mode compose\n        Podman Compose:\n            ebook2audiobook.cmd --script_mode build_docker --docker_mode podman\n    Linux\u002FMac\n        Docker:\n            .\u002Febook2audiobook.command --script_mode build_docker\n        Docker Compose\n            .\u002Febook2audiobook.command --script_mode build_docker --docker_mode compose\n        Podman Compose:\n            .\u002Febook2audiobook.command --script_mode build_docker --docker_mode podman\n```\n4. **Run the Container:**\n```bash\nDocker run image:\n    Gradio\u002FGUI:\n        CPU:\n          docker run -v \".\u002Febooks:\u002Fapp\u002Febooks\" -v \".\u002Faudiobooks:\u002Fapp\u002Faudiobooks\" -v \".\u002Fmodels:\u002Fapp\u002Fmodels\" -v \".\u002Fvoices:\u002Fapp\u002Fvoices\" -v \".\u002Ftmp:\u002Fapp\u002Ftmp\" --rm -it -p 7860:7860 athomasson2\u002Febook2audiobook:cpu\n        CUDA:\n          docker run -v \".\u002Febooks:\u002Fapp\u002Febooks\" -v \".\u002Faudiobooks:\u002Fapp\u002Faudiobooks\" -v \".\u002Fmodels:\u002Fapp\u002Fmodels\" -v \".\u002Fvoices:\u002Fapp\u002Fvoices\" -v \".\u002Ftmp:\u002Fapp\u002Ftmp\" --gpus all --rm -it -p 7860:7860 athomasson2\u002Febook2audiobook:cu[118\u002F122\u002F124\u002F126 etc..]\n        ROCM:\n          docker run -v \".\u002Febooks:\u002Fapp\u002Febooks\" -v \".\u002Faudiobooks:\u002Fapp\u002Faudiobooks\" -v \".\u002Fmodels:\u002Fapp\u002Fmodels\" -v \".\u002Fvoices:\u002Fapp\u002Fvoices\" -v \".\u002Ftmp:\u002Fapp\u002Ftmp\" --device=\u002Fdev\u002Fkfd --device=\u002Fdev\u002Fdri --rm -it -p 7860:7860 athomasson2\u002Febook2audiobook:rocm[6.0\u002F6.1\u002F6.4 etc..]\n        XPU:\n          docker run -v \".\u002Febooks:\u002Fapp\u002Febooks\" -v \".\u002Faudiobooks:\u002Fapp\u002Faudiobooks\" -v \".\u002Fmodels:\u002Fapp\u002Fmodels\" -v \".\u002Fvoices:\u002Fapp\u002Fvoices\" -v \".\u002Ftmp:\u002Fapp\u002Ftmp\" --device=\u002Fdev\u002Fdri --rm -it -p 7860:7860 athomasson2\u002Febook2audiobook:xpu\n        JETSON:\n          docker run -v \".\u002Febooks:\u002Fapp\u002Febooks\" -v \".\u002Faudiobooks:\u002Fapp\u002Faudiobooks\" -v \".\u002Fmodels:\u002Fapp\u002Fmodels\" -v \".\u002Fvoices:\u002Fapp\u002Fvoices\" -v \".\u002Ftmp:\u002Fapp\u002Ftmp\" --runtime nvidia  --rm -it -p 7860:7860 athomasson2\u002Febook2audiobook:jetson[51\u002F60\u002F61 etc...]\n    Headless mode:\n        CPU:\n          docker run -v \".\u002Febooks:\u002Fapp\u002Febooks\" -v \".\u002Faudiobooks:\u002Fapp\u002Faudiobooks\" -v \".\u002Fmodels:\u002Fapp\u002Fmodels\" -v \".\u002Fvoices:\u002Fapp\u002Fvoices\" -v \".\u002Ftmp:\u002Fapp\u002Ftmp\" -v \"\u002Fmy\u002Freal\u002Febooks\u002Ffolder\u002Fabsolute\u002Fpath:\u002Fapp\u002Fanother_ebook_folder\" --rm -it -p 7860:7860 ebook2audiobook:cpu --headless --ebook \"\u002Fapp\u002Fanother_ebook_folder\u002Fmyfile.pdf\" [--voice \u002Fapp\u002Fmy\u002Fvoicepath\u002Fvoice.mp3 etc..]\n        CUDA:\n          docker run -v \".\u002Febooks:\u002Fapp\u002Febooks\" -v \".\u002Faudiobooks:\u002Fapp\u002Faudiobooks\" -v \".\u002Fmodels:\u002Fapp\u002Fmodels\" -v \".\u002Fvoices:\u002Fapp\u002Fvoices\" -v \".\u002Ftmp:\u002Fapp\u002Ftmp\" -v \"\u002Fmy\u002Freal\u002Febooks\u002Ffolder\u002Fabsolute\u002Fpath:\u002Fapp\u002Fanother_ebook_folder\" --gpus all --rm -it -p 7860:7860 ebook2audiobook:cu[118\u002F122\u002F124\u002F126 etc..] --headless --ebook \"\u002Fapp\u002Fanother_ebook_folder\u002Fmyfile.pdf\" [--voice \u002Fapp\u002Fmy\u002Fvoicepath\u002Fvoice.mp3 etc..]\n        ROCM:\n          docker run -v \".\u002Febooks:\u002Fapp\u002Febooks\" -v \".\u002Faudiobooks:\u002Fapp\u002Faudiobooks\" -v \".\u002Fmodels:\u002Fapp\u002Fmodels\" -v \".\u002Fvoices:\u002Fapp\u002Fvoices\" -v \".\u002Ftmp:\u002Fapp\u002Ftmp\" -v \"\u002Fmy\u002Freal\u002Febooks\u002Ffolder\u002Fabsolute\u002Fpath:\u002Fapp\u002Fanother_ebook_folder\" --device=\u002Fdev\u002Fkfd --device=\u002Fdev\u002Fdri --rm -it -p 7860:7860 ebook2audiobook:rocm[6.0\u002F6.1\u002F6.4 etc.] --headless --ebook \"\u002Fapp\u002Fanother_ebook_folder\u002Fmyfile.pdf\" [--voice \u002Fapp\u002Fmy\u002Fvoicepath\u002Fvoice.mp3 etc..]\n        XPU:\n          docker run -v \".\u002Febooks:\u002Fapp\u002Febooks\" -v \".\u002Faudiobooks:\u002Fapp\u002Faudiobooks\" -v \".\u002Fmodels:\u002Fapp\u002Fmodels\" -v \".\u002Fvoices:\u002Fapp\u002Fvoices\" -v \".\u002Ftmp:\u002Fapp\u002Ftmp\" -v \"\u002Fmy\u002Freal\u002Febooks\u002Ffolder\u002Fabsolute\u002Fpath:\u002Fapp\u002Fanother_ebook_folder\" --device=\u002Fdev\u002Fdri --rm -it -p 7860:7860 ebook2audiobook:xpu --headless --ebook \"\u002Fapp\u002Fanother_ebook_folder\u002Fmyfile.pdf\" [--voice \u002Fapp\u002Fmy\u002Fvoicepath\u002Fvoice.mp3 etc..]\n        JETSON:\n          docker run -v \".\u002Febooks:\u002Fapp\u002Febooks\" -v \".\u002Faudiobooks:\u002Fapp\u002Faudiobooks\" -v \".\u002Fmodels:\u002Fapp\u002Fmodels\" -v \".\u002Fvoices:\u002Fapp\u002Fvoices\" -v \".\u002Ftmp:\u002Fapp\u002Ftmp\" -v \"\u002Fmy\u002Freal\u002Febooks\u002Ffolder\u002Fabsolute\u002Fpath:\u002Fapp\u002Fanother_ebook_folder\" --runtime nvidia --rm -it -p 7860:7860 ebook2audiobook:jetson[51\u002F60\u002F61 etc.] --headless --ebook \"\u002Fapp\u002Fanother_ebook_folder\u002Fmyfile.pdf\" [--voice \u002Fapp\u002Fmy\u002Fvoicepath\u002Fvoice.mp3 etc..]\nDocker Compose (i.e. cuda 12.8:\n        Run Gradio GUI:\n               DEVICE_TAG=cu128 docker compose --profile gpu up --no-log-prefix\n        Run Headless mode:\n               DEVICE_TAG=cu128 docker compose --profile gpu run --rm ebook2audiobook --headless --ebook \"\u002Fapp\u002Febooks\u002Fmyfile.pdf\" --voice \u002Fapp\u002Fvoices\u002Feng\u002Fadult\u002Ffemale\u002Fsome_voice.wav etc..\nPodman Compose (i.e. cuda 12.8:\n        Run Gradio GUI:\n               DEVICE_TAG=cu128 podman-compose -f podman-compose.yml --profile gpu up\n        Run Headless mode:\n               DEVICE_TAG=cu128 podman-compose -f podman-compose.yml --profile gpu run --rm ebook2audiobook-gpu --headless --ebook \"\u002Fapp\u002Febooks\u002Fmyfile.pdf\" --voice \u002Fapp\u002Fvoices\u002Feng\u002Fadult\u002Ffemale\u002Fsome_voice.wav etc..\n```\n- NOTE: MPS is not exposed in docker so CPU must be used\n  \n### Common Docker Issues\n- My NVIDIA GPU isn't being detected?? -> [GPU ISSUES Wiki Page](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\u002Fwiki\u002FGPU-ISSUES)\n\n## Fine Tuned TTS models\n#### Fine Tune your own XTTSv2 model\n\n[![Hugging Face](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHugging%20Face-Spaces-yellow?style=flat&logo=huggingface)](https:\u002F\u002Fhuggingface.co\u002Fspaces\u002FdrewThomasson\u002Fxtts-finetune-webui-gpu) [![Kaggle](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FKaggle-035a7d?style=flat&logo=kaggle&logoColor=white)](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\u002Fblob\u002Fv25\u002FNotebooks\u002Ffinetune\u002Fxtts\u002Fkaggle-xtts-finetune-webui-gradio-gui.ipynb) [![Open In Colab](https:\u002F\u002Fcolab.research.google.com\u002Fassets\u002Fcolab-badge.svg)](https:\u002F\u002Fcolab.research.google.com\u002Fgithub\u002FDrewThomasson\u002Febook2audiobook\u002Fblob\u002Fv25\u002FNotebooks\u002Ffinetune\u002Fxtts\u002Fcolab_xtts_finetune_webui.ipynb)\n\n\n#### De-noise training data\n\n[![Hugging Face](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHugging%20Face-Spaces-yellow?style=flat&logo=huggingface)](https:\u002F\u002Fhuggingface.co\u002Fspaces\u002FdrewThomasson\u002FDeepFilterNet2_no_limit) [![GitHub Repo](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDeepFilterNet-181717?logo=github)](https:\u002F\u002Fgithub.com\u002FRikorose\u002FDeepFilterNet)\n\n\n### Fine Tuned TTS Collection\n\n[![Hugging Face](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHugging%20Face-Models-yellow?style=flat&logo=huggingface)](https:\u002F\u002Fhuggingface.co\u002FdrewThomasson\u002FfineTunedTTSModels\u002Ftree\u002Fmain)\n\nFor an XTTSv2 custom model a ref audio clip of the voice reference is mandatory:\n\n## Your own Ebook2Audiobook customization\nYou are free to modify libs\u002Fconf.py to add or remove the settings you wish. If you plan to do it just make\na copy of the original conf.py so on each ebook2audiobook update you will backup your modified conf.py and put\nback the original one. You must plan the same process for models.py. If you wish to make your own custom model\nas an official ebook2audiobook fine tuned model so please contact us and we'll add it to the presets list.\n\n## Reverting to older Versions\nReleases can be found -> [here](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\u002Freleases)\n```bash\ngit checkout tags\u002FVERSION_NUM # Locally\u002FCompose -> Example: git checkout tags\u002Fv25.7.7\n```\n\n## Common Issues:\n- My NVIDIA\u002FROCm\u002FXPU\u002FMPS GPU isn't being detected?? -> [GPU ISSUES Wiki Page](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\u002Fwiki\u002FGPU-ISSUES)\n-  CPU is slow (better on server smp CPU) while GPU can have almost real time conversion.\n   [Discussion about this](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\u002Fdiscussions\u002F19#discussioncomment-10879846)\n   For faster multilingual generation I would suggest my other\n   [project that uses piper-tts](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobookpiper-tts) instead\n   (It doesn't have zero-shot voice cloning though, and is Siri quality voices, but it is much faster on cpu).\n- \"I'm having dependency issues\" - Just use the docker, its fully self contained and has a headless mode,\n   add `--help` parameter at the end of the docker run command for more information.\n- \"I'm getting a truncated audio issue!\" - PLEASE MAKE AN ISSUE OF THIS,\n   we don't speak every language and need advise from users to fine tune the sentence splitting logic.😊\n\n## ***** ROADMAP *****\n- All Features open to public Contributions ⭐\n- Any help from people speaking any of the supported languages to help us improve the models ⭐\n- [x] Preview Blocks\u002FChapters before to start the conversion\n- [ ] Parallel sentences conversion with workers\n- [ ] Edit by sentence converted for surgical text change\n- [x] SML tags integration for voice, pause, break, and more changes \n- [x] -h -help parameter info in different languages\n- [x] OCR scanning for PDF \u002F JPG \u002F BMP \u002F PNG \u002F TIFF\n- [x] Notebooks Folder [Talked about here](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobookXTTS\u002Fissues\u002F5#issuecomment-2408773254)\n- [x] Make Chinese text splitting not split words and improve pause timing [Talked about here](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobookXTTS\u002Fissues\u002F18#issuecomment-2401154894)\n- [x] Dockerfile\n- [x] Docker compose\n- [x] Podman compose   \n- [x] Kaggle Notebook\n- [x] Google Colab Notebook\n- [ ] [Make a IOS app](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\u002Fpull\u002F35#issuecomment-2496495212)\n- [ ] [Make an android app](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\u002Fpull\u002F35#issuecomment-2496495212)\n- [ ] Audiobookshelf integration\n\n#### Extra Options\n- [ ] Ebook Translation option\n- [x] Output format choices\n- [x] Batch ebook folder\n- [x] Multiprocessing conversion\n- [x] Batch ebook folder conversion\n- [x] GPU Device detection\n- [x] Denoise any reference audio for upload voice cloning,\n- [x] Custom model upload (XTTSv2 only for now. more on request)\n- [ ]  Add Portuguese Xttsv2 model fine tuned for EU portuguese\n\n#### TTS engines\n- [x] XTTSv2\n- [x] Bark\n- [x] Fairseq\n- [x] VITS\n- [x] Tacotron2\n- [x] YourTTS\n- [x] Tortoise\n- [x] GlowTTS\n- [ ] Piper-TTS\n- [ ] CosyVoice (https:\u002F\u002Fgithub.com\u002FFunAudioLLM\u002FCosyVoice)\n- [ ] Kokoro-TTS\n- [ ] Orpheus-TTS\n- [ ] Zonos\n- [ ] OmniVoice (https:\u002F\u002Fgithub.com\u002Fk2-fsa\u002FOmniVoice)\n- [ ] Style-TTS2\n- [ ] GPT-SoVITS\n- [ ] F5-TTS (https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobookXTTS\u002Fissues\u002F38#issuecomment-2453224267)\n- [ ] VIbeVoice (https:\u002F\u002Fgithub.com\u002Fvibevoice-community\u002FVibeVoice)\n- [ ] Qwen3-TTS (https:\u002F\u002Fhuggingface.co\u002Fspaces\u002FQwen\u002FQwen3-TTS)\n- [ ] NewTTS (https:\u002F\u002Fgithub.com\u002Fneuphonic\u002Fneutts?tab=readme-ov-file)\n- [ ] Speedy-Speech\n- [ ] Supertonic (https:\u002F\u002Fgithub.com\u002Fsupertone-inc\u002Fsupertonic)\n- [ ] Align-TTS\n- [ ] Delightful-TTS\n- [ ] Spark-TTS\n\n#### Readme Translation\n- [ ] Arabic (ara)\n- [ ] Chinese (zho)\n- [x] English (eng)\n- [ ] Spanish (spa)\n- [ ] French (fra)\n- [ ] German (deu)\n- [ ] Italian (ita)\n- [ ] Portuguese (por)\n- [ ] Polish (pol)\n- [ ] Turkish (tur)\n- [ ] Russian (rus)\n- [ ] Dutch (nld)\n- [ ] Czech (ces)\n- [ ] Japanese (jpn)\n- [ ] Hindi (hin)\n- [ ] Bengali (ben)\n- [ ] Hungarian (hun)\n- [ ] Korean (kor)\n- [ ] Vietnamese (vie)\n- [ ] Swedish (swe)\n- [ ] Persian (fas)\n- [ ] Yoruba (yor)\n- [ ] Swahili (swa)\n- [ ] Indonesian (ind)\n- [ ] Slovak (slk)\n- [ ] Croatian (hrv)   \n\n#### 🐍 OS Compatibility\n- [x] 🍎 Mac Intel x86\n- [x] 🪟 Windows x86\n- [x] 🐧 Linux x86\n- [x] 🖥️🍏 Apple Silicon Mac\n- [x] 🪟💪 ARM Windows\n- [x] 🐧💪 ARM Linux\n\n**********\n\n## Extra Overkill for training models and such (All supported Coqui-tts models and piper-tts in one easy command) \n- For info about this @DrewThomasson, he is currently working on the development of this, [work-in-progress-repo here](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002FUniversal_TTS_Finetune)\n- [ ] Make a easy to use training gui for all coqui-tts models in the ljspeech format training recipes [here from coqui tts](https:\u002F\u002Fgithub.com\u002Fcoqui-ai\u002FTTS\u002Ftree\u002Fdev\u002Frecipes\u002Fljspeech)\n\n## Auto-testing scripts for development\n\n- [x] #1804\n\n## Python Code normalization information for contributors\n- no blank line between code, unless between functions and classes.\n- single quote used for all key unless for dict() and json. dict['key'] always called with single quote\n- 4 spaces indentation, not tab at all\n- strict typing for all functions and its arguments declaration and return values\n- no space between the argument and its typing, no space between the function, the \"->\" and the return value\n\nExample:\n\n```python\nimport json\nfrom typing import Optional\n\ndef get_user(user_id:int, users:list[dict])->Optional[dict]:\n    for user in users:\n        if user['id'] == user_id:\n            return user\n    return None\n\ndef summarize(user:dict)->str:\n    return f\"User {user['name']} is {'active' if user['is_active'] else 'inactive'}.\"\n\ndef to_json(user:dict)->str:\n    return json.dumps({\"id\": user['id'], \"name\": user['name'], \"email\": user['email']})\n\nusers:list = [\n    dict(id=1, name='alice', email='alice@example.com', role='admin', is_active=True),\n    dict(id=2, name='bob', email='bob@example.com', role='editor', is_active=False),\n    dict(id=3, name='carol', email='carol@example.com', role='viewer', is_active=True),\n]\nconfig = {\n    \"max_users\": 100,\n    \"default_role\": \"viewer\",\n    \"allow_signup\": True,\n}\nroles = ['admin', 'editor', 'viewer']\nfound = get_user(1, users)\nif found:\n    print(summarize(found))\n    print(found['email'])\n    print(to_json(found))\nif config['default_role'] in roles:\n    print(config['default_role'])\n```\n\n## Hardware donation for beta tests wanted\nWe accept any kind of hardware to test our development like:\n- Nvidia supporting cuda >= 11.8\n- XPU intel cards\n- ROCm AMD cards supporting ROCm >=5.7\n\n@DrewThomasson if you want to help out at all! 😃\n\u003C!--\n## Do you need to rent a GPU to boost service from us?\n- A poll is open here https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\u002Fdiscussions\u002F889\n-->\n\n## Special Thanks\n- **Coqui TTS**: [Coqui TTS GitHub](https:\u002F\u002Fgithub.com\u002Fidiap\u002Fcoqui-ai-TTS)\n- **Calibre**: [Calibre Website](https:\u002F\u002Fcalibre-ebook.com)\n- **FFmpeg**: [FFmpeg Website](https:\u002F\u002Fffmpeg.org)\n- [@shakenbake15 for better chapter saving method](https:\u002F\u002Fgithub.com\u002FDrewThomasson\u002Febook2audiobook\u002Fissues\u002F8) \n","ebook2audiobook 是一个将电子书转换为有声书的工具，支持章节和元数据保留。项目基于 Python 开发，利用先进的文本转语音（TTS）引擎，支持超过1158种语言，并具备声音克隆功能。其核心特点包括跨平台运行能力（支持 Windows、macOS 和 Linux），以及通过 Docker 容器化部署或在 Google Colab 和 Kaggle 上远程运行的灵活性。此外，还提供了图形用户界面（GUI）以简化操作流程。适用于需要将合法获取且无 DRM 保护的电子书籍转换成高质量有声读物的个人用户或小团队。",2,"2026-06-11 02:50:16","top_language"]