Back to Ebook2audiobook

📚 ebook2audiobook (E2A)

readme/README_ben.md

26.6.943.3 KB
Original Source

📚 ebook2audiobook (E2A)

āĻ…āĻ§ā§āϝāĻžāϝāĻŧ āĻ“ āĻŽā§‡āϟāĻžāĻĄā§‡āϟāĻž āϏāĻš āχ-āĻŦ⧁āĻ• āĻĨ⧇āϕ⧇ āĻ…āĻĄāĻŋāĻ“āĻŦ⧁āϕ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰāĻ•āĻžāϰ⧀ CPU/GPU āĻ•āύāĻ­āĻžāĻ°ā§āϟāĻžāϰ

āωāĻ¨ā§āύāϤ TTS āχāĻžā§āϜāĻŋāύ āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤

āĻ­āϝāĻŧ⧇āϏ āĻ•ā§āϞ⧋āύāĻŋāĻ‚ āĻāĻŦāĻ‚ ā§§ā§§ā§Ģā§ŽāϟāĻŋ āĻ­āĻžāώāĻž āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇!

[!IMPORTANT] āĻāχ āϟ⧁āϞāϟāĻŋ āϕ⧇āĻŦāϞ DRM-āĻŽā§āĻ•ā§āϤ, āĻŦ⧈āϧāĻ­āĻžāĻŦ⧇ āĻ…āĻ°ā§āϜāĻŋāϤ āχ-āĻŦ⧁āϕ⧇āϰ āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āϞ⧇āĻ–āĻ•āĻ—āĻŖ āĻāχ āϏāĻĢāϟāĻ“āϝāĻŧā§āϝāĻžāϰ⧇āϰ āϕ⧋āύ⧋ āĻ…āĻĒāĻŦā§āϝāĻŦāĻšāĻžāϰ āĻŦāĻž āϤāĻž āĻĨ⧇āϕ⧇ āωāĻĻā§āĻ­ā§‚āϤ āϕ⧋āύ⧋ āφāχāύāĻŋ āĻĒāϰāĻŋāĻŖāϤāĻŋāϰ āϜāĻ¨ā§āϝ āĻĻāĻžāϝāĻŧā§€ āύāύāĨ¤

āĻāχ āϟ⧁āϞāϟāĻŋ āĻĻāĻžāϝāĻŧāĻŋāĻ¤ā§āĻŦ⧇āϰ āϏāĻžāĻĨ⧇ āĻāĻŦāĻ‚ āϏāĻŽāĻ¸ā§āϤ āĻĒā§āϰāϝ⧋āĻœā§āϝ āφāχāύ āĻŽā§‡āύ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤

ebook2audiobook-āĻāϰ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϧāĻ¨ā§āϝāĻŦāĻžāĻĻ!

āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āϚāĻžāϞāĻžāύ

<a href="https://github.com/DrewThomasson/ebook2audiobook">

</a><a href="https://hub.docker.com/r/athomasson2/ebook2audiobook">

</a>

āĻĻā§‚āϰāĻŦāĻ°ā§āϤ⧀āĻ­āĻžāĻŦ⧇ āϚāĻžāϞāĻžāύ

āĻ—ā§āϰāĻžāĻĢāĻŋāĻ•āĻžāϞ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ (GUI)

<details> <summary>āĻ“āϝāĻŧ⧇āĻŦ GUI-āĻāϰ āĻ›āĻŦāĻŋ āĻĻ⧇āĻ–āϤ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ</summary> </details>

āĻĄā§‡āĻŽā§‹

āύāϤ⧁āύ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻ­āϝāĻŧ⧇āϏ⧇āϰ āĻĄā§‡āĻŽā§‹

https://github.com/user-attachments/assets/750035dc-e355-46f1-9286-05c1d9e88cea

<details> <summary>āφāϰāĻ“ āĻĄā§‡āĻŽā§‹</summary>

ASMR āĻ­āϝāĻŧ⧇āϏ

https://github.com/user-attachments/assets/68eee9a1-6f71-4903-aacd-47397e47e422

āĻŦ⧃āĻˇā§āϟāĻŋāϰ āĻĻāĻŋāύ⧇āϰ āĻ­āϝāĻŧ⧇āϏ

https://github.com/user-attachments/assets/d25034d9-c77f-43a9-8f14-0d167172b080

āĻ¸ā§āĻ•āĻžāϰāϞ⧇āϟ āĻ­āϝāĻŧ⧇āϏ

https://github.com/user-attachments/assets/b12009ee-ec0d-45ce-a1ef-b3a52b9f8693

āĻĄā§‡āĻ­āĻŋāĻĄ āĻ…ā§āϝāĻžāĻŸā§‡āύāĻŦāϰ⧋ āĻ­āϝāĻŧ⧇āϏ

https://github.com/user-attachments/assets/81c4baad-117e-4db5-ac86-efc2b7fea921

āωāĻĻāĻžāĻšāϰāĻŖ

</details>

README.md

āϏ⧂āϚāĻŋāĻĒāĻ¤ā§āϰ

āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ

  • 🔧 āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ TTS āχāĻžā§āϜāĻŋāύ: XTTSv2, Bark, Fairseq, VITS, Tacotron2, Tortoise, GlowTTS, YourTTS

  • 📚 āĻāĻ•āĻžāϧāĻŋāĻ• āĻĢāĻžāχāϞ āĻĢāϰāĻŽā§āϝāĻžāϟ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰ⧁āύ: .epub, .mobi, .azw3, .fb2, .lrf, .rb, .snb, .tcr, .pdf, .txt, .rtf, .doc, .docx, .html, .odt, .azw, .tiff, .tif, .png, .jpg, .jpeg, .bmp, .zip

  • đŸ’ģ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤ āĻŸā§‡āĻ•ā§āϏāϟ āϏāϰāĻžāϏāϰāĻŋ āĻ…āĻĄāĻŋāĻ“āϤ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻŸā§‡āĻ•ā§āϏāϟ āĻāϰāĻŋāϝāĻŧāĻž

  • 🔍 āĻ›āĻŦāĻŋ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŸā§‡āĻ•ā§āϏāϟ āĻĒ⧃āĻˇā§āĻ āĻž āϏāĻš āĻĢāĻžāχāϞ⧇āϰ āϜāĻ¨ā§āϝ OCR āĻ¸ā§āĻ•ā§āϝāĻžāύāĻŋāĻ‚

  • 🔊 āωāĻšā§āϚāĻŽāĻžāύ⧇āϰ āĻŸā§‡āĻ•ā§āϏāϟ-āϟ⧁-āĻ¸ā§āĻĒāĻŋāϚ, āĻĒā§āϰāĻžāϝāĻŧ āϰāĻŋāϝāĻŧ⧇āϞ-āϟāĻžāχāĻŽ āĻĨ⧇āϕ⧇ āĻĒā§āϰāĻžāϝāĻŧ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻ­āϝāĻŧ⧇āϏ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ

  • đŸ—Ŗī¸ āφāĻĒāύāĻžāϰ āύāĻŋāĻœā§‡āϰ āĻ­āϝāĻŧ⧇āϏ āĻĢāĻžāχāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϐāĻšā§āĻ›āĻŋāĻ• āĻ­āϝāĻŧ⧇āϏ āĻ•ā§āϞ⧋āύāĻŋāĻ‚

  • 🌐 ā§§ā§§ā§Ģā§ŽāϟāĻŋ āĻ­āĻžāώāĻž āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇ (supported languages list)

  • đŸ’ģ āĻ•āĻŽ āϏāĻŽā§āĻĒāĻĻ-āĻŦāĻžāĻ¨ā§āϧāĻŦ — 2 GB RAM / 1 GB VRAM (āĻ¨ā§āϝ⧂āύāϤāĻŽ)-āĻ āϚāϞ⧇

  • đŸŽĩ āĻ…āĻĄāĻŋāĻ“āĻŦ⧁āĻ• āφāωāϟāĻĒ⧁āϟ āĻĢāϰāĻŽā§āϝāĻžāϟ: mono or stereo aac, flac, mp3, m4b, m4a, mp4, mov, ogg, wav, webm

  • 🧠 SML āĻŸā§āϝāĻžāĻ— āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ — āĻŦāĻŋāϰāϤāĻŋ, āĻĨāĻžāĻŽāĻž, āĻ­āϝāĻŧ⧇āϏ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āχāĻ¤ā§āϝāĻžāĻĻāĻŋāϰ āϏ⧂āĻ•ā§āĻˇā§āĻŽ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ (see below)

  • 🧩 āφāĻĒāύāĻžāϰ āύāĻŋāĻœā§‡āϰ āĻĒā§āϰāĻļāĻŋāĻ•ā§āώāĻŋāϤ āĻŽāĻĄā§‡āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϐāĻšā§āĻ›āĻŋāĻ• āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻŽāĻĄā§‡āϞ (XTTSv2, VITS, FAIRSEQ, PIPER, others on request)

  • đŸŽ›ī¸ E2A āϟāĻŋāĻŽ āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāĻļāĻŋāĻ•ā§āώāĻŋāϤ āĻĢāĻžāχāύ-āϟāĻŋāωāύ āĻ•āϰāĻž āĻĒā§āϰāĻŋāϏ⧇āϟ āĻŽāĻĄā§‡āϞ

    <i>(āφāĻĒāύāĻžāϰ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻĢāĻžāχāύ-āϟāĻŋāωāύ āĻ•āϰāĻž āĻŽāĻĄā§‡āϞ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϞ⧇, āĻ…āĻĨāĻŦāĻž āĻ…āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ āĻĒā§āϰāĻŋāϏ⧇āϟ āϤāĻžāϞāĻŋāĻ•āĻžāϝāĻŧ āφāĻĒāύāĻžāϰ āĻŽāĻĄā§‡āϞ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāχāϞ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰ⧁āύ)</i>

āĻšāĻžāĻ°ā§āĻĄāĻ“āϝāĻŧā§āϝāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž

  • RAM āĻ¨ā§āϝ⧂āύāϤāĻŽ 2GB, 8GB āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤāĨ¤
  • VRAM āĻ¨ā§āϝ⧂āύāϤāĻŽ 1GB, 4GB āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤāĨ¤
  • windows-āĻ āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŽāϝāĻŧ āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞāĻžāχāĻœā§‡āĻļāύ āϏāĻ•ā§āώāĻŽ (āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ Docker)āĨ¤
  • CPU, XPU (intel, AMD, ARM)*āĨ¤
  • CUDA, ROCm, JETSON
  • MPS (Apple Silicon CPU)

*<i> āφāϧ⧁āύāĻŋāĻ• TTS āχāĻžā§āϜāĻŋāύ CPU-āϤ⧇ āϖ⧁āĻŦ āϧ⧀āϰ, āϤāĻžāχ YourTTS, Tacotron2 āχāĻ¤ā§āϝāĻžāĻĻāĻŋāϰ āĻŽāϤ⧋ āύāĻŋāĻŽā§āύāĻŽāĻžāύ⧇āϰ TTS āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤</i>

āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ āĻ­āĻžāώāĻž

Arabic (ar)Chinese (zh)English (en)Spanish (es)
French (fr)German (de)Italian (it)Portuguese (pt)
Polish (pl)Turkish (tr)Russian (ru)Dutch (nl)
Czech (cs)Japanese (ja)Hindi (hi)Bengali (bn)
Hungarian (hu)Korean (ko)Vietnamese (vi)Swedish (sv)
Persian (fa)Yoruba (yo)Swahili (sw)Indonesian (id)
Slovak (sk)Croatian (hr)Tamil (ta)Danish (da)

āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ āχ-āĻŦ⧁āĻ• āĻĢāϰāĻŽā§āϝāĻžāϟ

  • .epub, .pdf, .mobi, .txt, .html, .rtf, .chm, .lit, .pdb, .fb2, .odt, .cbr, .cbz, .prc, .lrf, .pml, .snb, .cbc, .rb, .tcr
  • āϏ⧇āϰāĻž āĻĢāϞāĻžāĻĢāϞ: āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āĻ…āĻ§ā§āϝāĻžāϝāĻŧ āĻļāύāĻžāĻ•ā§āϤāĻ•āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ .epub āĻŦāĻž .mobi

āφāωāϟāĻĒ⧁āϟ āĻ“ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϰāĻŖ āĻĢāϰāĻŽā§āϝāĻžāϟ

  • .m4b, .m4a, .mp4, .webm, .mov, .mp3, .flac, .wav, .ogg, .aac
  • āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϰāĻŖ āĻĢāϰāĻŽā§āϝāĻžāϟ lib/conf.py-āϤ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āϝāĻžāϝāĻŧ

āωāĻĒāϞāĻŦā§āϧ SML āĻŸā§āϝāĻžāĻ—

  • [break] — āύ⧀āϰāĻŦāϤāĻž (āĻāϞ⧋āĻŽā§‡āϞ⧋ āĻĒāϰāĻŋāϏāϰ 0.3–0.6 sec.)
  • [pause] — āύ⧀āϰāĻŦāϤāĻž (āĻāϞ⧋āĻŽā§‡āϞ⧋ āĻĒāϰāĻŋāϏāϰ 1.0–1.6 sec.)
  • [pause:N] — āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŦāĻŋāϰāϤāĻŋ (N sec.)
  • [voice:/path/to/voice/file]...[/voice] — āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻŦāĻž GUI/CLI āĻĨ⧇āϕ⧇ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āĻ­āϝāĻŧ⧇āϏ āĻĨ⧇āϕ⧇ āĻ­āϝāĻŧ⧇āϏ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ

āφāĻĒāύāĻžāϰ āχ-āĻŦ⧁āϕ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ SML āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻŦ⧇āĻĻāĻŋāϤ āφāĻŽāĻžāĻĻ⧇āϰ āĻ…āĻ¨ā§āϝ āϰ⧇āĻĒā§‹āϟāĻŋ āĻĻ⧇āϖ⧁āύ -> E2A-SML

[!IMPORTANT] **āχāύāĻ¸ā§āϟāϞ⧇āĻļāύ āĻŦāĻž āĻŦāĻžāĻ— āϏāĻŽāĻ¸ā§āϝāĻž āĻĒā§‹āĻ¸ā§āϟ āĻ•āϰāĻžāϰ āφāϗ⧇, āĻ–ā§‹āϞāĻž āĻ“ āĻŦāĻ¨ā§āϧ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āĻŸā§āϝāĻžāĻŦ⧇ āϏāĻžāĻŦāϧāĻžāύ⧇ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻ•āϰ⧁āύ

āĻāϟāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ āϝ⧇ āφāĻĒāύāĻžāϰ āϏāĻŽāĻ¸ā§āϝāĻžāϟāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āύ⧇āχāĨ¤**

[!NOTE] **EPUB āĻĢāϰāĻŽā§āϝāĻžāĻŸā§‡ āĻ…āĻ§ā§āϝāĻžāϝāĻŧ, āĻ…āύ⧁āĻšā§āϛ⧇āĻĻ, āĻ­ā§‚āĻŽāĻŋāĻ•āĻž āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āϕ⧀ āϤāĻž āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻžāϰ āϕ⧋āύ⧋ āĻŽāĻžāύāĻ• āĻ•āĻžāĻ āĻžāĻŽā§‹ āύ⧇āχāĨ¤

āϤāĻžāχ āφāĻĒāύāĻžāϕ⧇ āĻĒā§āϰāĻĨāĻŽā§‡ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āϏ⧇āχ āϏāĻŽāĻ¸ā§āϤ āĻŸā§‡āĻ•ā§āϏāϟ āϏāϰāĻŋāϝāĻŧ⧇ āĻĢ⧇āϞāϤ⧇ āĻšāĻŦ⧇ āϝāĻž āφāĻĒāύāĻŋ āĻ…āĻĄāĻŋāĻ“āϤ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāϤ⧇ āϚāĻžāύ āύāĻžāĨ¤**

āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀

  1. āϰ⧇āĻĒā§‹ āĻ•ā§āϞ⧋āύ āĻ•āϰ⧁āύ

    bash
    git clone https://github.com/DrewThomasson/ebook2audiobook.git
    cd ebook2audiobook
    
  2. ebook2audiobook āχāύāĻ¸ā§āϟāϞ / āϚāĻžāϞāĻžāύ:

    • Linux/MacOS

      bash
      ./ebook2audiobook.command
      

      <i>MacOS āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϜāĻ¨ā§āϝ āύ⧋āϟ: āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāϤ⧇ homebrew āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤</i>

    • Mac āϞāĻžā§āϚāĻžāϰ
      Mac Ebook2Audiobook Launcher.command-āĻ āĻĄāĻžāĻŦāϞ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ

    • Windows

      bash
      ebook2audiobook.cmd
      

      āĻ…āĻĨāĻŦāĻž ebook2audiobook.cmd-āĻ āĻĄāĻžāĻŦāϞ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ

      <i>Windows āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϜāĻ¨ā§āϝ āύ⧋āϟ: āĻĒā§āϰāĻļāĻžāϏāĻ• āĻ…āύ⧁āĻŽāϤāĻŋ āĻ›āĻžāĻĄāĻŧāĻžāχ āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āχāύāĻ¸ā§āϟāϞ āĻ•āϰāϤ⧇ scoop āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤</i>

  3. āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒ āϖ⧁āϞ⧁āύ: āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒ⧇ āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āχ-āĻŦ⧁āĻ• āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāϤ⧇ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āĻĒā§āϰāĻĻāĻ¤ā§āϤ URL-āĻ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύāĨ¤ http://localhost:7860/

  4. āĻĒāĻžāĻŦāϞāĻŋāĻ• āϞāĻŋāĻ™ā§āϕ⧇āϰ āϜāĻ¨ā§āϝ: ./ebook2audiobook.command --share (Linux/MacOS) ebook2audiobook.cmd --share (Windows) python app.py --share (all OS)

[!IMPORTANT] **āϝāĻĻāĻŋ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇ āφāĻŦāĻžāϰ āϚāĻžāϞāĻžāύ⧋ āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϕ⧇ āφāĻĒāύāĻžāϰ Gradio GUI āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇

āϝāĻžāϤ⧇ āĻ“āϝāĻŧ⧇āĻŦ āĻĒ⧃āĻˇā§āĻ āĻžāϟāĻŋ āύāϤ⧁āύ āĻ•āĻžāύ⧇āĻ•āĻļāύ āϏāϕ⧇āĻŸā§‡ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤**

āĻŽā§ŒāϞāĻŋāĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰ

  • Linux/MacOS:

    bash
    ./ebook2audiobook.command --headless --ebook <path_to_ebook_file> --voice <path_to_voice_file> --language <language_code>
    
  • Windows

    bash
    ebook2audiobook.cmd --headless --ebook <path_to_ebook_file> --voice <path_to_voice_file> --language <language_code>
    
  • [--ebook]: āφāĻĒāύāĻžāϰ āχ-āĻŦ⧁āĻ• āĻĢāĻžāχāϞ⧇āϰ āĻĒāĻĨ

  • [--voice]: āĻ­āϝāĻŧ⧇āϏ āĻ•ā§āϞ⧋āύāĻŋāĻ‚ āĻĢāĻžāχāϞ āĻĒāĻĨ (āϐāĻšā§āĻ›āĻŋāĻ•)

  • [--language]: ISO-639-3-āϤ⧇ āĻ­āĻžāώāĻž āϕ⧋āĻĄ (āĻ…āĻ°ā§āĻĨāĻžā§Ž: āχāϤāĻžāϞ⧀āϝāĻŧāϰ āϜāĻ¨ā§āϝ ita, āχāĻ‚āϰ⧇āϜāĻŋāϰ āϜāĻ¨ā§āϝ eng, āϜāĻžāĻ°ā§āĻŽāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ deu...)āĨ¤

    āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻ­āĻžāώāĻž āĻšāϞ eng āĻāĻŦāĻ‚ ./lib/lang.py-āϤ⧇ āϏ⧇āϟ āĻ•āϰāĻž āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻ­āĻžāώāĻžāϰ āϜāĻ¨ā§āϝ --language āϐāĻšā§āĻ›āĻŋāĻ•āĨ¤

    ⧍ āĻ…āĻ•ā§āώāϰ⧇āϰ ISO-639-1 āϕ⧋āĻĄāĻ“ āϏāĻŽāĻ°ā§āĻĨāĻŋāϤāĨ¤

āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻŽāĻĄā§‡āϞ āϜāĻŋāĻĒ āφāĻĒāϞ⧋āĻĄā§‡āϰ āωāĻĻāĻžāĻšāϰāĻŖ

(āĻāϟāĻŋ āĻāĻ•āϟāĻŋ .zip āĻĢāĻžāχāϞ āĻšāϤ⧇ āĻšāĻŦ⧇ āϝāĻžāϤ⧇ āĻŦāĻžāĻ§ā§āϝāϤāĻžāĻŽā§‚āϞāĻ• āĻŽāĻĄā§‡āϞ āĻĢāĻžāχāϞ āĻĨāĻžāϕ⧇āĨ¤ XTTSv2-āĻāϰ āϜāĻ¨ā§āϝ āωāĻĻāĻžāĻšāϰāĻŖ: config.json, model.pth, vocab.json āĻāĻŦāĻ‚ ref.wav)

  • Linux/MacOS

    bash
    ./ebook2audiobook.command --headless --ebook <ebook_file_path> --language <language> --custom_model <custom_model_path>
    
  • Windows

    bash
    ebook2audiobook.cmd --headless --ebook <ebook_file_path> --language <language> --custom_model <custom_model_path>
    

    <i>āύ⧋āϟ: āφāĻĒāύāĻžāϰ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻŽāĻĄā§‡āϞ⧇āϰ ref.wav āϏāĻ°ā§āĻŦāĻĻāĻž āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ⧇āϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āĻ­āϝāĻŧ⧇āϏ</i>

  • <custom_model_path>: model_name.zip āĻĢāĻžāχāϞ⧇āϰ āĻĒāĻĨ, āϝāĻžāϤ⧇ (tts āχāĻžā§āϜāĻŋāύ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€) āϏāĻŽāĻ¸ā§āϤ āĻŦāĻžāĻ§ā§āϝāϤāĻžāĻŽā§‚āϞāĻ• āĻĢāĻžāχāϞ āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇

    (āĻĻ⧇āϖ⧁āύ ./lib/models.py)āĨ¤
    

āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϏāĻŽāĻ¸ā§āϤ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ⧇āϰ āϤāĻžāϞāĻŋāĻ•āĻž āϏāĻš āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āĻ—āĻžāχāĻĄā§‡āϰ āϜāĻ¨ā§āϝ

  • Linux/MacOS
    bash
    ./ebook2audiobook.command --help
    
  • Windows
    bash
    ebook2audiobook.cmd --help
    
  • āĻ…āĻĨāĻŦāĻž āϏāĻŽāĻ¸ā§āϤ OS-āĻāϰ āϜāĻ¨ā§āϝ python app.py --help

<a id="help-command-output"></a>

bash
usage: app.py [-h] [--session SESSION] [--share] [--headless] [--ebook EBOOK] [--ebooks_dir EBOOKS_DIR]
              [--language LANGUAGE] [--voice VOICE] [--voice_map VOICE_MAP] [--device {CPU,CUDA,MPS,ROCM,XPU,JETSON}]
              [--tts_engine {XTTS,BARK,VITS,FAIRSEQ,TACOTRON,YOURTTS,xtts,bark,vits,fairseq,tacotron,yourtts}]
              [--custom_model CUSTOM_MODEL] [--fine_tuned FINE_TUNED] [--output_format OUTPUT_FORMAT]
              [--output_channel OUTPUT_CHANNEL] [--temperature TEMPERATURE] [--length_penalty LENGTH_PENALTY]
              [--num_beams NUM_BEAMS] [--repetition_penalty REPETITION_PENALTY] [--top_k TOP_K] [--top_p TOP_P]
              [--speed SPEED] [--enable_text_splitting] [--text_temp TEXT_TEMP] [--waveform_temp WAVEFORM_TEMP]
              [--output_dir OUTPUT_DIR] [--version]

Convert 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.

options:
  -h, --help            show this help message and exit
  --session SESSION     Session to resume the conversion in case of interruption, crash,
                            or reuse of custom models and custom cloning voices.

**** The following option is for gradio/gui mode only:
  --share               (Optional) Enable a public shareable Gradio link.

**** The following options are for --headless mode only:
  --headless            Run the script in headless mode
  --ebook EBOOK         Path to the ebook file for conversion. Cannot be used when --ebooks_dir is present.
  --ebooks_dir EBOOKS_DIR
                        Relative or absolute path of the directory containing the files to convert.
                            Cannot be used when --ebook is present.
  --text TEXT           Raw text for conversion. Cannot be used when --ebook or --ebooks_dir is present.
  --language LANGUAGE   Language of the e-book. Default language is set
                            in ./lib/lang.py sed as default if not present. All compatible language codes are in ./lib/lang.py

optional parameters:
  --translate ISO3      (Optional) Translate ebook to a target language (ISO 639-3 code, e.g. eng, fra, deu) before TTS synthesis.
                            Uses argostranslate. The target language becomes the effective TTS language for the run.
                            A copy of the source ebook is made with the _<iso3> suffix so translated and non-translated
                            outputs stay isolated (independent process folder, audio chunks, and final file).
  --voice VOICE         (Optional) Path to the voice cloning file for TTS engine.
                            Uses the default voice if not present.
  --voice_map VOICE_MAP
                        (Optional, --ebooks_dir only) Path to a JSON file mapping ebook path -> voice path.
                            Each entry overrides --voice for that specific ebook. Missing/null entries fall back to --voice.
                            Keys may be absolute paths or basenames. Example:
                            {"book1.epub": "/voices/eng/adult/female/alice.wav", "/abs/path/book2.epub": null}
  --device {CPU,CUDA,MPS,ROCM,XPU,JETSON}
                        (Optional) Processor unit type for the conversion.
                            Default is set in ./lib/conf.py if not present. Fall back to CPU if CUDA or MPS is not available.
  --tts_engine {XTTS,BARK,VITS,FAIRSEQ,TACOTRON,YOURTTS,xtts,bark,vits,fairseq,tacotron,yourtts}
                        (Optional) Preferred TTS engine (available are: ['XTTS', 'BARK', 'VITS', 'FAIRSEQ', 'TACOTRON', 'YOURTTS', 'xtts', 'bark', 'vits', 'fairseq', 'tacotron', 'yourtts'].
                            Default depends on the selected language. The tts engine should be compatible with the chosen language
  --custom_model CUSTOM_MODEL
                        (Optional) Path to the custom model zip file cntaining mandatory model files.
                            Please refer to ./lib/models.py
  --fine_tuned FINE_TUNED
                        (Optional) Fine tuned model path. Default is builtin model.
  --output_format OUTPUT_FORMAT
                        (Optional) Output audio format. Default is m4b set in ./lib/conf.py
  --output_channel OUTPUT_CHANNEL
                        (Optional) Output audio channel. Default is mono set in ./lib/conf.py
  --temperature TEMPERATURE
                        (xtts only, optional) Temperature for the model.
                            Default to config.json model. Higher temperatures lead to more creative outputs.
  --length_penalty LENGTH_PENALTY
                        (xtts only, optional) A length penalty applied to the autoregressive decoder.
                            Default to config.json model. Not applied to custom models.
  --num_beams NUM_BEAMS
                        (xtts only, optional) Controls how many alternative sequences the model explores. Must be equal or greater than length penalty.
                            Default to config.json model.
  --repetition_penalty REPETITION_PENALTY
                        (xtts only, optional) A penalty that prevents the autoregressive decoder from repeating itself.
                            Default to config.json model.
  --top_k TOP_K         (xtts only, optional) Top-k sampling.
                            Lower values mean more likely outputs and increased audio generation speed.
                            Default to config.json model.
  --top_p TOP_P         (xtts only, optional) Top-p sampling.
                            Lower values mean more likely outputs and increased audio generation speed. Default to config.json model.
  --speed SPEED         (xtts only, optional) Speed factor for the speech generation.
                            Default to config.json model.
  --enable_text_splitting
                        (xtts only, optional) Enable TTS text splitting. This option is known to not be very efficient.
                            Default to config.json model.
  --text_temp TEXT_TEMP
                        (bark only, optional) Text Temperature for the model.
                            Default to config.json model.
  --waveform_temp WAVEFORM_TEMP
                        (bark only, optional) Waveform Temperature for the model.
                            Default to config.json model.
  --output_dir OUTPUT_DIR
                        (Optional) Path to the output directory. Default is set in ./lib/conf.py
  --version             Show the version of the script and exit

Example usage:
Windows:
    Gradio/GUI:
    ebook2audiobook.cmd
    Headless mode:
    ebook2audiobook.cmd --headless --ebook '/path/to/file' --language eng
Linux/Mac:
    Gradio/GUI:
    ./ebook2audiobook.command
    Headless mode:
    ./ebook2audiobook.command --headless --ebook '/path/to/file' --language eng

SML tags available:
	[break] — silence (random range **0.3–0.6 sec.**)
	[pause] — silence (random range **1.0–1.6 sec.**)
	[pause:N] — fixed pause (**N sec.**)
	[voice:/path/to/voice/file]...[/voice] — switch voice from default or selected voice from GUI/CLI

āύ⧋āϟ: gradio/gui āĻŽā§‹āĻĄā§‡, āϚāϞāĻŽāĻžāύ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻŦāĻžāϤāĻŋāϞ āĻ•āϰāϤ⧇, āϕ⧇āĻŦāϞ āχ-āĻŦ⧁āĻ• āφāĻĒāϞ⧋āĻĄ āωāĻĒāĻžāĻĻāĻžāύ⧇āϰ [X]-āĻ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύāĨ¤ āϟāĻŋāĻĒ: āϝāĻĻāĻŋ āĻāĻ•āϟ⧁ āĻŦ⧇āĻļāĻŋ āĻŦāĻŋāϰāϤāĻŋāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ ā§Š āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ '[pause:3]' āϝ⧋āĻ— āĻ•āϰ⧁āύ āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤

Docker

  1. āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋ āĻ•ā§āϞ⧋āύ āĻ•āϰ⧁āύ:
bash
   git clone https://github.com/DrewThomasson/ebook2audiobook.git
   cd ebook2audiobook
  1. āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ
bash
    Windows:
        Docker:
            ebook2audiobook.cmd --script_mode build_docker
        Docker Compose:
            ebook2audiobook.cmd --script_mode build_docker --docker_mode compose
        Podman Compose:
            ebook2audiobook.cmd --script_mode build_docker --docker_mode podman
    Linux/Mac
        Docker:
            ./ebook2audiobook.command --script_mode build_docker
        Docker Compose
            ./ebook2audiobook.command --script_mode build_docker --docker_mode compose
        Podman Compose:
            ./ebook2audiobook.command --script_mode build_docker --docker_mode podman
  1. āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϚāĻžāϞāĻžāύ:
bash
Docker run image:
    Gradio/GUI:
        CPU:
          docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" --rm -it -p 7860:7860 athomasson2/ebook2audiobook:cpu
        CUDA:
          docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" --gpus all --rm -it -p 7860:7860 athomasson2/ebook2audiobook:cu[118/122/124/126 etc..]
        ROCM:
          docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" --device=/dev/kfd --device=/dev/dri --rm -it -p 7860:7860 athomasson2/ebook2audiobook:rocm[6.0/6.1/6.4 etc..]
        XPU:
          docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" --device=/dev/dri --rm -it -p 7860:7860 athomasson2/ebook2audiobook:xpu
        JETSON:
          docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" --runtime nvidia  --rm -it -p 7860:7860 athomasson2/ebook2audiobook:jetson[51/60/61 etc...]
    Headless mode:
        CPU:
          docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" -v "/my/real/ebooks/folder/absolute/path:/app/another_ebook_folder" --rm -it -p 7860:7860 ebook2audiobook:cpu --headless --ebook "/app/another_ebook_folder/myfile.pdf" [--voice /app/my/voicepath/voice.mp3 etc..]
        CUDA:
          docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" -v "/my/real/ebooks/folder/absolute/path:/app/another_ebook_folder" --gpus all --rm -it -p 7860:7860 ebook2audiobook:cu[118/122/124/126 etc..] --headless --ebook "/app/another_ebook_folder/myfile.pdf" [--voice /app/my/voicepath/voice.mp3 etc..]
        ROCM:
          docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" -v "/my/real/ebooks/folder/absolute/path:/app/another_ebook_folder" --device=/dev/kfd --device=/dev/dri --rm -it -p 7860:7860 ebook2audiobook:rocm[6.0/6.1/6.4 etc.] --headless --ebook "/app/another_ebook_folder/myfile.pdf" [--voice /app/my/voicepath/voice.mp3 etc..]
        XPU:
          docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" -v "/my/real/ebooks/folder/absolute/path:/app/another_ebook_folder" --device=/dev/dri --rm -it -p 7860:7860 ebook2audiobook:xpu --headless --ebook "/app/another_ebook_folder/myfile.pdf" [--voice /app/my/voicepath/voice.mp3 etc..]
        JETSON:
          docker run -v "./ebooks:/app/ebooks" -v "./audiobooks:/app/audiobooks" -v "./models:/app/models" -v "./voices:/app/voices" -v "./tmp:/app/tmp" -v "/my/real/ebooks/folder/absolute/path:/app/another_ebook_folder" --runtime nvidia --rm -it -p 7860:7860 ebook2audiobook:jetson[51/60/61 etc.] --headless --ebook "/app/another_ebook_folder/myfile.pdf" [--voice /app/my/voicepath/voice.mp3 etc..]
Docker Compose (i.e. cuda 12.8:
        Run Gradio GUI:
               DEVICE_TAG=cu128 docker compose --profile gpu up --no-log-prefix
        Run Headless mode:
               DEVICE_TAG=cu128 docker compose --profile gpu run --rm ebook2audiobook --headless --ebook "/app/ebooks/myfile.pdf" --voice /app/voices/eng/adult/female/some_voice.wav etc..
Podman Compose (i.e. cuda 12.8:
        Run Gradio GUI:
               DEVICE_TAG=cu128 podman-compose -f podman-compose.yml --profile gpu up
        Run Headless mode:
               DEVICE_TAG=cu128 podman-compose -f podman-compose.yml --profile gpu run --rm ebook2audiobook-gpu --headless --ebook "/app/ebooks/myfile.pdf" --voice /app/voices/eng/adult/female/some_voice.wav etc..
  • āύ⧋āϟ: MPS docker-āĻ āωāĻ¨ā§āĻŽā§āĻ•ā§āϤ āύāϝāĻŧ āϤāĻžāχ CPU āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇

āϏāĻžāϧāĻžāϰāĻŖ Docker āϏāĻŽāĻ¸ā§āϝāĻž

āĻĢāĻžāχāύ-āϟāĻŋāωāύ āĻ•āϰāĻž (fine-tuned) TTS āĻŽāĻĄā§‡āϞ

āφāĻĒāύāĻžāϰ āύāĻŋāĻœā§‡āϰ XTTSv2 āĻŽāĻĄā§‡āϞ āĻĢāĻžāχāύ-āϟāĻŋāωāύ āĻ•āϰ⧁āύ

āĻĒā§āϰāĻļāĻŋāĻ•ā§āώāĻŖ āĻĄā§‡āϟāĻžāϰ āĻļāĻŦā§āĻĻ āĻ…āĻĒāϏāĻžāϰāĻŖ

āĻĢāĻžāχāύ-āϟāĻŋāωāύ āĻ•āϰāĻž TTS āĻŽāĻĄā§‡āϞ⧇āϰ āϏāĻ‚āĻ—ā§āϰāĻš

āĻ•āĻžāĻ¸ā§āϟāĻŽ XTTSv2 āĻŽāĻĄā§‡āϞ⧇āϰ āϜāĻ¨ā§āϝ, āĻ­āϝāĻŧ⧇āϏ⧇āϰ āĻāĻ•āϟāĻŋ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻ…āĻĄāĻŋāĻ“ āĻ•ā§āϞāĻŋāĻĒ āĻŦāĻžāĻ§ā§āϝāϤāĻžāĻŽā§‚āϞāĻ•:

āφāĻĒāύāĻžāϰ āύāĻŋāĻœā§‡āϰ Ebook2Audiobook āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāĻœā§‡āĻļāύ

āφāĻĒāύāĻŋ āϝ⧇ āϏ⧇āϟāĻŋāĻ‚āϏ āϚāĻžāύ āϤāĻž āϝ⧋āĻ— āĻŦāĻž āĻ…āĻĒāϏāĻžāϰāĻŖ āĻ•āϰāϤ⧇ libs/conf.py āĻ…āĻŦāĻžāϧ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāϟāĻŋ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ āϕ⧇āĻŦāϞ āĻŽā§‚āϞ conf.py-āĻāϰ āĻāĻ•āϟāĻŋ āĻ•āĻĒāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ ebook2audiobook āφāĻĒāĻĄā§‡āĻŸā§‡ āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ conf.py āĻŦā§āϝāĻžāĻ•āφāĻĒ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āĻŽā§‚āϞāϟāĻŋ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āϰāĻžāĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āφāĻĒāύāĻžāϕ⧇ models.py-āĻāϰ āϜāĻ¨ā§āϝāĻ“ āĻāĻ•āχ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āύāĻŋāĻœā§‡āϰ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻŽāĻĄā§‡āϞāϕ⧇ āĻāĻ•āϟāĻŋ āĻ…āĻĢāĻŋāϏāĻŋāϝāĻŧāĻžāϞ āĻĢāĻžāχāύ-āϟāĻŋāωāύ āĻ•āϰāĻž ebook2audiobook āĻŽāĻĄā§‡āϞ āĻŦāĻžāύāĻžāϤ⧇ āϚāĻžāύ, āϤāĻžāĻšāϞ⧇ āĻ…āύ⧁āĻ—ā§āϰāĻš āĻ•āϰ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āĻāϟāĻŋ āĻĒā§āϰāĻŋāϏ⧇āϟ āϤāĻžāϞāĻŋāĻ•āĻžāϝāĻŧ āϝ⧋āĻ— āĻ•āϰāĻŦāĨ¤

āĻĒ⧁āϰāύ⧋ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇ āĻĢāĻŋāϰ⧇ āϝāĻžāĻ“āϝāĻŧāĻž

āϰāĻŋāϞāĻŋāϜāϗ⧁āϞāĻŋ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāĻŦ⧇ -> āĻāĻ–āĻžāύ⧇

bash
git checkout tags/VERSION_NUM # Locally/Compose -> Example: git checkout tags/v25.7.7

āϏāĻžāϧāĻžāϰāĻŖ āϏāĻŽāĻ¸ā§āϝāĻž:

  • āφāĻŽāĻžāϰ NVIDIA/ROCm/XPU/MPS GPU āĻļāύāĻžāĻ•ā§āϤ āĻšāĻšā§āϛ⧇ āύāĻž?? -> GPU ISSUES Wiki Page
  • CPU āϧ⧀āϰ (āϏāĻžāĻ°ā§āĻ­āĻžāϰ smp CPU-āϤ⧇ āĻ­āĻžāϞ⧋) āϝāĻ–āύ GPU āĻĒā§āϰāĻžāϝāĻŧ āϰāĻŋāϝāĻŧ⧇āϞ-āϟāĻžāχāĻŽ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ Discussion about this (āϤāĻŦ⧇ āĻāϤ⧇ zero-shot āĻ­āϝāĻŧ⧇āϏ āĻ•ā§āϞ⧋āύāĻŋāĻ‚ āύ⧇āχ, āĻāĻŦāĻ‚ āĻāϗ⧁āϞāĻŋ Siri āĻŽāĻžāύ⧇āϰ āĻ­āϝāĻŧ⧇āϏ, āĻ•āĻŋāĻ¨ā§āϤ⧁ cpu-āϤ⧇ āĻ…āύ⧇āĻ• āĻĻā§āϰ⧁āϤ)āĨ¤
  • "āφāĻŽāĻžāϰ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻž āϏāĻ‚āĻ•ā§āϰāĻžāĻ¨ā§āϤ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāĻšā§āϛ⧇" - āϕ⧇āĻŦāϞ docker āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ, āĻāϟāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻāĻŦāĻ‚ āĻāϰ headless āĻŽā§‹āĻĄ āφāϛ⧇, āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ docker run āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āĻļ⧇āώ⧇ --help āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤
  • "āφāĻŽāĻžāϰ āĻ•āĻžāϟāĻž āĻ…āĻĄāĻŋāĻ“āϰ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāĻšā§āϛ⧇!" - āĻ…āύ⧁āĻ—ā§āϰāĻš āĻ•āϰ⧇ āĻāχ āĻŦāĻŋāώāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ ISSUE āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ, āφāĻŽāϰāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ­āĻžāώāĻž āĻŦāϞāĻŋ āύāĻž āĻāĻŦāĻ‚ āĻŦāĻžāĻ•ā§āϝ āĻŦāĻŋāĻ­āĻžāϜāύ āϝ⧁āĻ•ā§āϤāĻŋ āĻĢāĻžāχāύ-āϟāĻŋāωāύ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤đŸ˜Š

***** āϰ⧋āĻĄāĻŽā§āϝāĻžāĻĒ *****

  • āϏāĻŽāĻ¸ā§āϤ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āϏāĻ°ā§āĻŦāϜāύ⧀āύ āĻ…āĻŦāĻĻāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āωāĻ¨ā§āĻŽā§āĻ•ā§āϤ ⭐
  • āĻŽāĻĄā§‡āϞ āωāĻ¨ā§āύāϤ āĻ•āϰāϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϝ⧇āϕ⧋āύ⧋ āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ āĻ­āĻžāώāĻžāϝāĻŧ āĻ•āĻĨāĻž āĻŦāϞāĻž āϞ⧋āĻ•āĻĻ⧇āϰ āĻ•āĻžāĻ› āĻĨ⧇āϕ⧇ āϝ⧇āϕ⧋āύ⧋ āϏāĻžāĻšāĻžāĻ¯ā§āϝ ⭐
  • āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āφāϗ⧇ āĻŦā§āϞāĻ•/āĻ…āĻ§ā§āϝāĻžāϝāĻŧ āĻĒā§āϰāĻŋāĻ­āĻŋāω
  • āϏ⧂āĻ•ā§āĻˇā§āĻŽ āĻŸā§‡āĻ•ā§āϏāϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āϜāĻ¨ā§āϝ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰāĻŋāϤ āĻŦāĻžāĻ•ā§āϝ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž
  • āĻ­āϝāĻŧ⧇āϏ, āĻŦāĻŋāϰāϤāĻŋ, āĻĨāĻžāĻŽāĻž āĻāĻŦāĻ‚ āφāϰāĻ“ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āϜāĻ¨ā§āϝ SML āĻŸā§āϝāĻžāĻ— āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ
  • āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ­āĻžāώāĻžāϝāĻŧ -h -help āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϤāĻĨā§āϝ
  • PDF / JPG / BMP / PNG / TIFF-āĻāϰ āϜāĻ¨ā§āϝ OCR āĻ¸ā§āĻ•ā§āϝāĻžāύāĻŋāĻ‚
  • Notebooks āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ Talked about here
  • āĻšā§€āύāĻž āĻŸā§‡āĻ•ā§āϏāϟ āĻŦāĻŋāĻ­āĻžāϜāύ āϝāĻžāϤ⧇ āĻļāĻŦā§āĻĻ āĻ­āĻžāĻ— āύāĻž āĻ•āϰ⧇ āϤāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻŦāĻŋāϰāϤāĻŋāϰ āϏāĻŽāϝāĻŧ āωāĻ¨ā§āύāϤ āĻ•āϰāĻž Talked about here
  • Dockerfile
  • Docker compose
  • Podman compose
  • Kaggle Notebook
  • Google Colab Notebook
  • āĻāĻ•āϟāĻŋ iOS āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāĻž
  • āĻāĻ•āϟāĻŋ android āĻ…ā§āϝāĻžāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāĻž
  • Audiobookshelf āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ

āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ

  • āχ-āĻŦ⧁āĻ• āĻ…āύ⧁āĻŦāĻžāĻĻ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ
  • āφāωāϟāĻĒ⧁āϟ āĻĢāϰāĻŽā§āϝāĻžāϟ āĻĒāĻ›āĻ¨ā§āĻĻ
  • āĻŦā§āϝāĻžāϚ āχ-āĻŦ⧁āĻ• āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ
  • āĻŽāĻžāĻ˛ā§āϟāĻŋāĻĒā§āϰāϏ⧇āϏāĻŋāĻ‚ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ
  • āĻŦā§āϝāĻžāϚ āχ-āĻŦ⧁āĻ• āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ
  • GPU āĻĄāĻŋāĻ­āĻžāχāϏ āĻļāύāĻžāĻ•ā§āϤāĻ•āϰāĻŖ
  • āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻž āĻ­āϝāĻŧ⧇āϏ āĻ•ā§āϞ⧋āύāĻŋāĻ‚āϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āϝ⧇āϕ⧋āύ⧋ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻ…āĻĄāĻŋāĻ“āϰ āĻļāĻŦā§āĻĻ āĻ…āĻĒāϏāĻžāϰāĻŖ,
  • āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻŽāĻĄā§‡āϞ āφāĻĒāϞ⧋āĻĄ (āφāĻĒāĻžāϤāϤ āĻļ⧁āϧ⧁ XTTSv2āĨ¤ āϚāĻžāĻšāĻŋāĻĻāĻž āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āφāϰāĻ“)
  • āĻ…āĻ¨ā§āϤāϤ xttsv2, fairseq, vits, piper-āĻāϰ āϜāĻ¨ā§āϝ āχāωāϰ⧋āĻĒā§€āϝāĻŧ āĻĒāĻ°ā§āϤ⧁āĻ—āĻŋāϜ āĻ­āĻžāώāĻž āĻŽāĻĄā§‡āϞ āϝ⧋āĻ— āĻ•āϰāĻž (āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ¸ā§āĻŦāĻžāĻ—āϤ)
  • āĻ…āĻ¨ā§āϤāϤ xttsv2, fairseq, vits, piper-āĻāϰ āϜāĻ¨ā§āϝ āϏāĻŋāĻ¨ā§āϧāĻŋ āĻ­āĻžāώāĻž āĻŽāĻĄā§‡āϞ āϝ⧋āĻ— āĻ•āϰāĻž (āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ¸ā§āĻŦāĻžāĻ—āϤ)

TTS āχāĻžā§āϜāĻŋāύ

Readme āĻ…āύ⧁āĻŦāĻžāĻĻ

  • Arabic (ara)
  • Chinese (zho)
  • English (eng)
  • Spanish (spa)
  • French (fra)
  • German (deu)
  • Italian (ita)
  • Portuguese (por)
  • Polish (pol)
  • Turkish (tur)
  • Russian (rus)
  • Dutch (nld)
  • Czech (ces)
  • Japanese (jpn)
  • Hindi (hin)
  • Bengali (ben)
  • Hungarian (hun)
  • Korean (kor)
  • Vietnamese (vie)
  • Swedish (swe)
  • Persian (fas)
  • Yoruba (yor)
  • Swahili (swa)
  • Indonesian (ind)
  • Slovak (slk)
  • Croatian (hrv)

🐍 OS āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāϤāĻž

  • 🍎 Mac Intel x86
  • đŸĒŸ Windows x86
  • 🐧 Linux x86
  • đŸ–Ĩī¸đŸ Apple Silicon Mac
  • đŸĒŸđŸ’Ē ARM Windows
  • 🐧đŸ’Ē ARM Linux

āĻŽāĻĄā§‡āϞ āĻĒā§āϰāĻļāĻŋāĻ•ā§āώāĻŖ āχāĻ¤ā§āϝāĻžāĻĻāĻŋāϰ āϜāĻ¨ā§āϝ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ“āĻ­āĻžāϰāĻ•āĻŋāϞ (āϏāĻŽāĻ¸ā§āϤ āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ Coqui-tts āĻŽāĻĄā§‡āϞ āĻāĻŦāĻ‚ piper-tts āĻāĻ•āϟāĻŋ āϏāĻšāϜ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡)

  • āĻāχ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ @DrewThomasson, āϤāĻŋāύāĻŋ āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āĻāϰ āωāĻ¨ā§āύāϝāĻŧāύ⧇ āĻ•āĻžāϜ āĻ•āϰāϛ⧇āύ, āĻ•āĻžāĻ°ā§āϝ-āϚāϞāĻŽāĻžāύ āϰ⧇āĻĒā§‹ āĻāĻ–āĻžāύ⧇
  • ljspeech āĻĢāϰāĻŽā§āϝāĻžāϟ āĻĒā§āϰāĻļāĻŋāĻ•ā§āώāĻŖ āϰ⧇āϏāĻŋāĻĒāĻŋāϤ⧇ āϏāĻŽāĻ¸ā§āϤ coqui-tts āĻŽāĻĄā§‡āϞ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏāĻšāϜ-āĻŦā§āϝāĻŦāĻšāĻžāϰāϝ⧋āĻ—ā§āϝ āĻĒā§āϰāĻļāĻŋāĻ•ā§āώāĻŖ gui āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ coqui tts āĻĨ⧇āϕ⧇ āĻāĻ–āĻžāύ⧇

āĻ…āĻŦāĻĻāĻžāύāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϜāĻ¨ā§āϝ Python āϕ⧋āĻĄ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāϕ⧀āĻ•āϰāĻŖ āϤāĻĨā§āϝ

  • āĻĢāĻžāĻ‚āĻļāύ āĻāĻŦāĻ‚ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻ›āĻžāĻĄāĻŧāĻž, āϕ⧋āĻĄā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āϕ⧋āύ⧋ āĻ–āĻžāϞāĻŋ āϞāĻžāχāύ āύ⧇āχāĨ¤
  • dict() āĻāĻŦāĻ‚ json āĻ›āĻžāĻĄāĻŧāĻž āϏāĻŽāĻ¸ā§āϤ āϕ⧀-āĻāϰ āϜāĻ¨ā§āϝ āĻāĻ•āĻ• āωāĻĻā§āϧ⧃āϤāĻŋ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤ dict['key'] āϏāĻ°ā§āĻŦāĻĻāĻž āĻāĻ•āĻ• āωāĻĻā§āϧ⧃āϤāĻŋ āĻĻāĻŋāϝāĻŧ⧇ āĻ•āϞ āĻ•āϰāĻž āĻšāϝāĻŧ
  • ā§Ē āĻ¸ā§āĻĒ⧇āϏ āχāĻ¨ā§āĻĄā§‡āĻ¨ā§āĻŸā§‡āĻļāύ, āĻāĻ•āĻĻāĻŽāχ āϕ⧋āύ⧋ āĻŸā§āϝāĻžāĻŦ āύāϝāĻŧ
  • āϏāĻŽāĻ¸ā§āϤ āĻĢāĻžāĻ‚āĻļāύ āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻ“ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻŽāĻžāύ āĻ˜ā§‹āώāĻŖāĻžāϰ āϜāĻ¨ā§āϝ āĻ•āĻ ā§‹āϰ āϟāĻžāχāĻĒāĻŋāĻ‚
  • āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻāĻŦāĻ‚ āϤāĻžāϰ āϟāĻžāχāĻĒāĻŋāĻ‚āϝāĻŧ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϕ⧋āύ⧋ āĻ¸ā§āĻĒ⧇āϏ āύ⧇āχ, āĻĢāĻžāĻ‚āĻļāύ, "->" āĻāĻŦāĻ‚ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻŽāĻžāύ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϕ⧋āύ⧋ āĻ¸ā§āĻĒ⧇āϏ āύ⧇āχ

āωāĻĻāĻžāĻšāϰāĻŖ:

python
import json
from typing import Optional

def get_user(user_id:int, users:list[dict])->Optional[dict]:
    for user in users:
        if user['id'] == user_id:
            return user
    return None

def summarize(user:dict)->str:
    return f"User {user['name']} is {'active' if user['is_active'] else 'inactive'}."

def to_json(user:dict)->str:
    return json.dumps({"id": user['id'], "name": user['name'], "email": user['email']})

users:list = [
    dict(id=1, name="alice", email="[email protected]", role="admin", is_active=True),
    dict(id=2, name="bob", email="[email protected]", role="editor", is_active=False),
    dict(id=3, name="carol", email="[email protected]", role="viewer", is_active=True),
]
config = {
    "max_users": 100,
    "default_role": "viewer",
    "allow_signup": True,
}
roles = ['admin', 'editor', 'viewer']
found = get_user(1, users)
if found:
    print(summarize(found))
    print(found['email'])
    print(to_json(found))
if config['default_role'] in roles:
    print(config['default_role'])

āĻŦāĻŋāϟāĻž āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āϜāĻ¨ā§āϝ āĻšāĻžāĻ°ā§āĻĄāĻ“āϝāĻŧā§āϝāĻžāϰ āĻĻāĻžāύ āĻ–ā§‹āρāϜāĻž āĻšāĻšā§āϛ⧇

āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ āωāĻ¨ā§āύāϝāĻŧāύ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϝ⧇āϕ⧋āύ⧋ āϧāϰāύ⧇āϰ āĻšāĻžāĻ°ā§āĻĄāĻ“āϝāĻŧā§āϝāĻžāϰ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāĻŋ āϝ⧇āĻŽāύ:

  • Nvidia supporting cuda >= 11.8
  • XPU intel cards
  • ROCm AMD cards supporting ROCm >=5.7

@DrewThomasson āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āϝ⧇āϕ⧋āύ⧋ āωāĻĒāĻžāϝāĻŧ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāϤ⧇ āϚāĻžāύ! 😃

<!-- ## āφāĻŽāĻžāĻĻ⧇āϰ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻŦāĻžāĻĄāĻŧāĻžāϤ⧇ āφāĻĒāύāĻžāϰ āĻ•āĻŋ āĻāĻ•āϟāĻŋ GPU āĻ­āĻžāĻĄāĻŧāĻž āύ⧇āĻ“āϝāĻŧāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ? - āĻāĻ–āĻžāύ⧇ āĻāĻ•āϟāĻŋ āϜāϰāĻŋāĻĒ āĻ–ā§‹āϞāĻž āφāϛ⧇ https://github.com/DrewThomasson/ebook2audiobook/discussions/889 -->

āĻŦāĻŋāĻļ⧇āώ āϧāĻ¨ā§āϝāĻŦāĻžāĻĻ