adzetto/reading-library-tts

Colab uretim hatti: reading-library belgelerini Step-Audio-EditX ile seslendirir. Whisper ile kalite denetimi, kendi kendini onaran CUDA/bagimlilik kurulumu, Drive'a yazip kaldigi yerden devam etme.

0

stars

11

commits

Python

primary language

Aug 5, 2026

updated

audiobook
google-colab
step-audio
text-to-speech
tts
vllm
voice-cloning
whisper

README

reading-library-tts

adzetto/reading-library belgelerini Step-Audio-EditX ile seslendiren, Google Colab için tasarlanmış üretim hattı.

Tek dosya, sıfır kurulum: bağımlılıkları, CUDA kütüphanelerini ve model indirmelerini kendisi halleder; çıktıyı Google Drive'a yazdığı için oturum koparsa kaldığı yerden devam eder.


Colab'da çalıştırma (tek satır)

Yeni bir hücreye yapıştır, çalıştır:

import os, subprocess; os.environ["TTS_DOC_ID"] = "aesop-fables"; subprocess.run("rm -rf /content/rltts && git clone -q https://github.com/adzetto/reading-library-tts /content/rltts", shell=True, check=True); exec(open("/content/rltts/colab_tts_pipeline.py", encoding="utf-8").read())

Her çalıştırmada depoyu silip yeniden klonlar, yani her zaman en güncel sürümü çalıştırır. Ayarları os.environ["TTS_..."] ile geçebilirsin:

os.environ["TTS_DOC_ID"] = "*"            # depodaki TÜM belgeler
os.environ["TTS_SMOKE_TEST"] = "3"        # sadece ilk 3 parça (deneme koşusu)
os.environ["TTS_STEP_MOTOR"] = "transformers"   # vllm'i hiç deneme
os.environ["TTS_KALITE_ASR_MODEL"] = "small"    # daha hızlı kalite denetimi

Yerelde / terminalde CLI de var:

python colab_tts_pipeline.py --doc_id "*" --drive_modu output
python colab_tts_pipeline.py --kuru_kosu          # model yüklemeden doğrulama

Melez üretim (önerilen)

Step-Audio-EditX gövde metninde iyi çalışıyor ama noktalamasız kısa başlıklarda durma işareti bulamayıp token tavanına kadar uyduruyor. Kalite kapısı bu parçaları zaten tespit ettiği için, yalnızca onları ElevenLabs'e devrediyoruz:

karakter
Tüm kütüphane (10 belge, 1366 parça)365.168
Bunun Step'in tökezlediği kısmı12.630 (%3)

Yani ücretsiz bir ElevenLabs kotası, kütüphanenin tamamını tamamlamaya yeter.

os.environ["ELEVENLABS_API_KEY"] = "sk_..."     # virgülle birden fazla verilebilir
os.environ["TTS_DOC_ID"] = "*"
# KALITE_YEDEK_MOTOR zaten "elevenlabs" (kapatmak için "")

Birden fazla anahtar verirsen biri kotayı doldurduğunda otomatik olarak diğerine geçilir (ELEVENLABS_API_KEYS_FILE ile dosyadan da okunur).

Step'in bilinen kayıp deseni (kısa + noktalamasız metin) doğrudan yedeğe yönlendirilir; üç deneme boşa gitmez. Ölçüm: kütüphanedeki 1366 parçanın 127'si bu desende, toplam 2.207 karakter — ve ~2.1 saat kazandırıyor. API çıktısı zaten tutarlı olduğu için ASR geri okuması atlanır (boş/sessiz/ kırpık dosya kontrolü yine çalışır).

Sadece ElevenLabs ile üretmek için: TTS_MODEL_TIPI="elevenlabs".

Ne yapıyor

reading-library/narration/<doc>.json
        │
        ├─ metni cümle sınırlarından dilimle
        ├─ Step-Audio-EditX ile klonlanmış sesle sentezle   (vllm | transformers)
        ├─ KALİTE DENETİMİ: süre mantığı + whisper ile geri okuma
        │     └─ tutmazsa parametreleri uyarlayıp yeniden üret
        ├─ WAV → OPUS (ffmpeg, paralel)
        └─ manifest.json + manifest.js + zip   →  Google Drive

Öne çıkanlar

  • Kalite kapısı. Üretilen ses whisper ile geri okunup hedef metinle karşılaştırılır. Eşiği geçemeyen parça paketlenmez; reddin sebebine göre (çok uzun / çok kısa / içerik uyuşmuyor) sıcaklık, token tavanı ve dilim boyu uyarlanıp yeniden denenir.
  • Kendi kendini onaran kurulum. Eksik CUDA kütüphanelerini ve Python paketlerini hata mesajından tespit edip kurar (aşağıdaki Bilinen tuzaklar).
  • İki motor. vllm (hızlı) çalışmazsa aynı ağırlıklarla transformers köprüsüne düşer — koşu kaybedilmez.
  • Devam edebilirlik. Tamamlanan parçalar Drive'da; yeniden çalıştırınca yalnızca eksikler üretilir. Bozuk olanlar denetimden geçirilip yeniden üretilir.
  • Çoklu belge. DOC_ID="*" ile tüm depo tek koşuda, model bir kez yüklenerek.

Ayarlar

Dosyanın başındaki blok ya da TTS_<AYAR> ortam değişkeni ile:

AyarVarsayılanAçıklama
DOC_IDaesop-fablesBelge kimliği, a,b,c listesi veya * (hepsi)
DRIVE_MODUoutputoff / output / full
STEP_MOTORautoauto / vllm / transformers
MODEL_TIPIstepstep / higgs / elevenlabs
KALITE_YEDEK_MOTORelevenlabsKaliteden geçemeyen parçayı devret ("" = kapalı)
KALITE_YEDEK_DENETIMFalseYedek motor çıktısını ASR ile de denetle
YEDEK_DOGRUDAN_KISATrueKısa + noktalamasız parçayı doğrudan yedeğe ver
ELEVEN_SESGeorgeAnlatıcı sesi (21 ses mevcut)
STEP_SICAKLIK0.3Örnekleme sıcaklığı (depo sabit 0.7 kullanır)
STEP_GPU_KULLANIM0.45vllm gpu_memory_utilization
KALITE_DENETIMTrueASR ile içerik doğrulama
KALITE_ASR_MODELlarge-v3tiny/base/small/medium/large-v3
KALITE_BENZERLIK0.55Kabul eşiği (0-1)
SMOKE_TEST0>0 ise sadece ilk N parça
SESSIZ_MODTrueÜçüncü parti günlük gürültüsünü kıs

Bilinen tuzaklar (ve hattın nasıl çözdüğü)

Colab 2026.04+ ortamında karşılaşılan ve hattın otomatik hallettiği sorunlar:

BelirtiSebepÇözüm
ImportError: libcudart.so.13PyPI'daki vllm CUDA 13 ile derli; torch 2.11 CUDA çalışma zamanını statik bağlıyor, dosya hiçbir pakette gelmiyornvidia-cuda-runtime kurulur, ctypes ile RTLD_GLOBAL ön-yüklenir (LD_LIBRARY_PATH çalışan süreçte işe yaramaz)
libnvrtc.so.13 / torchcodectorchaudio 2.9+ load/save işini torchcodec'e devrediyorEksik kütüphane kurulur; olmazsa load/save soundfile'a çevrilir
'<=' not supported between 'int' and 'str'transformers v5'te apply_chat_template artık BatchEncoding döndürüyorTokenizer sarılıp düz [int] listesine indirilir
use_alibi_sqrt is not supported by backend FLASH_ATTNStep1 ALiBi-sqrt kullanıyor; vllm 0.26'da sadece triton_attn destekliyorattention_backend="TRITON_ATTN" enjekte edilir
UnsupportedOperation: filenoColab'da sys.stdout ipykernel nesnesi, vllm fileno() istiyorMotor kurulumu boyunca gerçek dosya tanımlayıcısına bağlanır
No module named 'sox'Depo pyproject'inde var ama Colab'da yokEksik modül hata mesajından tespit edilip kurulur
Kurulumdan sonra OOMBaşarısız vllm motoru VRAM'i bırakmıyorcleanup_dist_env_and_memory() ile geri alınır

Testler

python -m pytest tests -q          # veya: for f in tests/test_*.py; do python $f; done

Testler GPU veya Colab gerektirmez; kurulum onarımını, kalite kapısını ve sürüm uyumluluk yamalarını gerçek hata metinleri üzerinde doğrular.


Gereksinimler

  • Google Colab (A100 / L4 önerilir) veya CUDA'lı bir Linux makine
  • Python 3.12
  • Model ağırlıkları otomatik iner: stepfun-ai/Step-Audio-EditX + Step-Audio-Tokenizer

Contributors

adzetto

11 commits

adzetto/reading-library-tts

Colab uretim hatti: reading-library belgelerini Step-Audio-EditX ile seslendirir. Whisper ile kalite denetimi, kendi kendini onaran CUDA/bagimlilik kurulumu, Drive'a yazip kaldigi yerden devam etme.

0

stars

11

commits

Python

primary language

Aug 5, 2026

updated

audiobook
google-colab
step-audio
text-to-speech
tts
vllm
voice-cloning
whisper

README

reading-library-tts

adzetto/reading-library belgelerini Step-Audio-EditX ile seslendiren, Google Colab için tasarlanmış üretim hattı.

Tek dosya, sıfır kurulum: bağımlılıkları, CUDA kütüphanelerini ve model indirmelerini kendisi halleder; çıktıyı Google Drive'a yazdığı için oturum koparsa kaldığı yerden devam eder.


Colab'da çalıştırma (tek satır)

Yeni bir hücreye yapıştır, çalıştır:

import os, subprocess; os.environ["TTS_DOC_ID"] = "aesop-fables"; subprocess.run("rm -rf /content/rltts && git clone -q https://github.com/adzetto/reading-library-tts /content/rltts", shell=True, check=True); exec(open("/content/rltts/colab_tts_pipeline.py", encoding="utf-8").read())

Her çalıştırmada depoyu silip yeniden klonlar, yani her zaman en güncel sürümü çalıştırır. Ayarları os.environ["TTS_..."] ile geçebilirsin:

os.environ["TTS_DOC_ID"] = "*"            # depodaki TÜM belgeler
os.environ["TTS_SMOKE_TEST"] = "3"        # sadece ilk 3 parça (deneme koşusu)
os.environ["TTS_STEP_MOTOR"] = "transformers"   # vllm'i hiç deneme
os.environ["TTS_KALITE_ASR_MODEL"] = "small"    # daha hızlı kalite denetimi

Yerelde / terminalde CLI de var:

python colab_tts_pipeline.py --doc_id "*" --drive_modu output
python colab_tts_pipeline.py --kuru_kosu          # model yüklemeden doğrulama

Melez üretim (önerilen)

Step-Audio-EditX gövde metninde iyi çalışıyor ama noktalamasız kısa başlıklarda durma işareti bulamayıp token tavanına kadar uyduruyor. Kalite kapısı bu parçaları zaten tespit ettiği için, yalnızca onları ElevenLabs'e devrediyoruz:

karakter
Tüm kütüphane (10 belge, 1366 parça)365.168
Bunun Step'in tökezlediği kısmı12.630 (%3)

Yani ücretsiz bir ElevenLabs kotası, kütüphanenin tamamını tamamlamaya yeter.

os.environ["ELEVENLABS_API_KEY"] = "sk_..."     # virgülle birden fazla verilebilir
os.environ["TTS_DOC_ID"] = "*"
# KALITE_YEDEK_MOTOR zaten "elevenlabs" (kapatmak için "")

Birden fazla anahtar verirsen biri kotayı doldurduğunda otomatik olarak diğerine geçilir (ELEVENLABS_API_KEYS_FILE ile dosyadan da okunur).

Step'in bilinen kayıp deseni (kısa + noktalamasız metin) doğrudan yedeğe yönlendirilir; üç deneme boşa gitmez. Ölçüm: kütüphanedeki 1366 parçanın 127'si bu desende, toplam 2.207 karakter — ve ~2.1 saat kazandırıyor. API çıktısı zaten tutarlı olduğu için ASR geri okuması atlanır (boş/sessiz/ kırpık dosya kontrolü yine çalışır).

Sadece ElevenLabs ile üretmek için: TTS_MODEL_TIPI="elevenlabs".

Ne yapıyor

reading-library/narration/<doc>.json
        │
        ├─ metni cümle sınırlarından dilimle
        ├─ Step-Audio-EditX ile klonlanmış sesle sentezle   (vllm | transformers)
        ├─ KALİTE DENETİMİ: süre mantığı + whisper ile geri okuma
        │     └─ tutmazsa parametreleri uyarlayıp yeniden üret
        ├─ WAV → OPUS (ffmpeg, paralel)
        └─ manifest.json + manifest.js + zip   →  Google Drive

Öne çıkanlar

  • Kalite kapısı. Üretilen ses whisper ile geri okunup hedef metinle karşılaştırılır. Eşiği geçemeyen parça paketlenmez; reddin sebebine göre (çok uzun / çok kısa / içerik uyuşmuyor) sıcaklık, token tavanı ve dilim boyu uyarlanıp yeniden denenir.
  • Kendi kendini onaran kurulum. Eksik CUDA kütüphanelerini ve Python paketlerini hata mesajından tespit edip kurar (aşağıdaki Bilinen tuzaklar).
  • İki motor. vllm (hızlı) çalışmazsa aynı ağırlıklarla transformers köprüsüne düşer — koşu kaybedilmez.
  • Devam edebilirlik. Tamamlanan parçalar Drive'da; yeniden çalıştırınca yalnızca eksikler üretilir. Bozuk olanlar denetimden geçirilip yeniden üretilir.
  • Çoklu belge. DOC_ID="*" ile tüm depo tek koşuda, model bir kez yüklenerek.

Ayarlar

Dosyanın başındaki blok ya da TTS_<AYAR> ortam değişkeni ile:

AyarVarsayılanAçıklama
DOC_IDaesop-fablesBelge kimliği, a,b,c listesi veya * (hepsi)
DRIVE_MODUoutputoff / output / full
STEP_MOTORautoauto / vllm / transformers
MODEL_TIPIstepstep / higgs / elevenlabs
KALITE_YEDEK_MOTORelevenlabsKaliteden geçemeyen parçayı devret ("" = kapalı)
KALITE_YEDEK_DENETIMFalseYedek motor çıktısını ASR ile de denetle
YEDEK_DOGRUDAN_KISATrueKısa + noktalamasız parçayı doğrudan yedeğe ver
ELEVEN_SESGeorgeAnlatıcı sesi (21 ses mevcut)
STEP_SICAKLIK0.3Örnekleme sıcaklığı (depo sabit 0.7 kullanır)
STEP_GPU_KULLANIM0.45vllm gpu_memory_utilization
KALITE_DENETIMTrueASR ile içerik doğrulama
KALITE_ASR_MODELlarge-v3tiny/base/small/medium/large-v3
KALITE_BENZERLIK0.55Kabul eşiği (0-1)
SMOKE_TEST0>0 ise sadece ilk N parça
SESSIZ_MODTrueÜçüncü parti günlük gürültüsünü kıs

Bilinen tuzaklar (ve hattın nasıl çözdüğü)

Colab 2026.04+ ortamında karşılaşılan ve hattın otomatik hallettiği sorunlar:

BelirtiSebepÇözüm
ImportError: libcudart.so.13PyPI'daki vllm CUDA 13 ile derli; torch 2.11 CUDA çalışma zamanını statik bağlıyor, dosya hiçbir pakette gelmiyornvidia-cuda-runtime kurulur, ctypes ile RTLD_GLOBAL ön-yüklenir (LD_LIBRARY_PATH çalışan süreçte işe yaramaz)
libnvrtc.so.13 / torchcodectorchaudio 2.9+ load/save işini torchcodec'e devrediyorEksik kütüphane kurulur; olmazsa load/save soundfile'a çevrilir
'<=' not supported between 'int' and 'str'transformers v5'te apply_chat_template artık BatchEncoding döndürüyorTokenizer sarılıp düz [int] listesine indirilir
use_alibi_sqrt is not supported by backend FLASH_ATTNStep1 ALiBi-sqrt kullanıyor; vllm 0.26'da sadece triton_attn destekliyorattention_backend="TRITON_ATTN" enjekte edilir
UnsupportedOperation: filenoColab'da sys.stdout ipykernel nesnesi, vllm fileno() istiyorMotor kurulumu boyunca gerçek dosya tanımlayıcısına bağlanır
No module named 'sox'Depo pyproject'inde var ama Colab'da yokEksik modül hata mesajından tespit edilip kurulur
Kurulumdan sonra OOMBaşarısız vllm motoru VRAM'i bırakmıyorcleanup_dist_env_and_memory() ile geri alınır

Testler

python -m pytest tests -q          # veya: for f in tests/test_*.py; do python $f; done

Testler GPU veya Colab gerektirmez; kurulum onarımını, kalite kapısını ve sürüm uyumluluk yamalarını gerçek hata metinleri üzerinde doğrular.


Gereksinimler

  • Google Colab (A100 / L4 önerilir) veya CUDA'lı bir Linux makine
  • Python 3.12
  • Model ağırlıkları otomatik iner: stepfun-ai/Step-Audio-EditX + Step-Audio-Tokenizer

Contributors

adzetto

11 commits

Languages

Python

100.0%