Antalia Mini Web: Sayıları, Tarihleri ve Kısaltmaları Doğru Okuyan Çevrimdışı Türkçe TTS
🇹🇷 Sayıları, tarihleri ve kısaltmaları doğru okuyan akıllı normalizer'ıyla tamamen tarayıcıda çalışan çevrimdışı Türkçe TTS uygulaması.
Türkçe metinden sese (TTS) araçlarının neredeyse tamamı ya ücretli bir API’ye ya da sesinizi bir sunucuya göndermeye dayanır. Gizlilik, çevrimdışı çalışma ve kurulum derdi olmadan tek tıkla konuşma sentezi isteyenler için bu tablo can sıkıcıdır. Bu boşluğu kapatmak için Antalia-2 Mini modelini tamamen tarayıcıda çalışır hale getirdim.
Karşınızda Antalia Mini Web: yazdığınız metni cihazınızdan dışarı çıkarmadan, WebGPU/WASM ile tarayıcıda sese dönüştüren açık kaynaklı bir web uygulaması. | 🇬🇧 English
▶️ Canlı Demo: fr0stb1rd.github.io/antalia-mini-web | 💻 Repo: github.com/fr0stb1rd/antalia-mini-web
Antalia Mini Web Nedir?
Antalia Mini Web, cloud0day3/antalia-mini (PatientDesk AI, Antalia-2 Mini) modelinin tarayıcı portudur: 7,62M parametre, 48 kHz çıkış, tek sentetik erkek sesi, Apache-2.0 lisanslı. PyTorch hattını ONNX’e çevirip onnxruntime-web + WebAudio ile koşturur. Sunucu yok, API anahtarı yok.
İlk açılışta ~50 MB (3 ONNX modeli + 4 sözlük) bir kez iner, sonrası Cache Storage sayesinde tamamen çevrimdışı çalışır.
✨ Öne Çıkan Özellikler
- Birebir Türkçe normalizer (
normalize.js): Orijinal Python normalizer’ın satır satır portu. Sayı (1250), ondalık (68,5→... buçuk), sıra sayısı (2.), tarih (15.10.2026), saat (14:30), yüzde (%18), para (1.250,75 TL→ lira + kuruş), telefon, e-posta/URL, kısaltma (Dr.→doktor,SGK→segeka,THY→teheye), Roma rakamı ve marka/İngilizce kelimeleri (GitHub→git hab) okur. 9.000+ girdide Python çıktısıyla birebir eşleşir, her CI koşusunda testlerle doğrulanır. - Birebir ses tonu ve duraklamalar (
audio.js): Release ton yolu (+6 dB low-shelf @210 Hz, −9 dB high-shelf @4 kHz, soft limiter) ve parça arası sessizlikler (cümle sonu 0,12 sn, diğer 0,06 sn) float32 toleransında orijinalle örnek-örnek aynıdır. - 49 hazır örnek: 9 kategoride (sayı, para, telefon, marka, kısaltma…) normalizer vitrini.
- Akışlı sentez (streaming): Cümleler parça parça üretilir; ilk cümle hemen çalmaya başlarken kalanı arkada üretilir, okunan kelime canlı işaretlenir.
- Flow-Matching + Shortcut Self-Consistency: 8 adımlı DiT çıkarımı, CFG 2.0 — export aşamasında ONNX modeline gömülü.
--steps 4veya--steps 2ile daha hızlı varyantlar üretilebilir. - Tekrar ziyarette sıfır trafik: Model ve sözlükler Cache Storage API ile önbelleğe alınır (1 günlük TTL).
- Gizlilik: %100 istemci taraflı çalışma; metin ve ses cihazdan çıkmaz.
🏗️ Mimari
PyTorch hattı, tarayıcıda akışlı oynatma için üç ONNX aşamasına bölünmüştür:
flowchart LR
A["Ham Türkçe Metin"] --> B["normalize.js\nSayı, tarih, marka"]
B --> C["text_stage.onnx\nHarfler → Vektör + Süre"]
C --> D["Frame Planlama (JS)\nSüreler → Zaman çizelgesi"]
D --> E["sound_stage.onnx\nDiT Flow-Matching → Mel"]
E --> F["decoder.onnx\nConvNeXt Vocoder + iSTFT → 48 kHz"]
F --> G["audio.js\nTon EQ + Duraklama → WebAudio + .wav"]
| Aşama | Girdi | Çıktı |
|---|---|---|
text_stage.onnx |
ids [B,L], mask [B,L] |
h [B,L,192], logd [B,L] |
| Frame planlama (JS) | süreler | kare zaman çizelgesi |
sound_stage.onnx |
cond, fmask, noise |
mel [B,128,T] (5 blok DiT, 8 adım, CFG 2.0) |
decoder.onnx |
mel |
audio [B,S] @48 kHz |
Tarayıcı sözlükleri export’ta üretilip HuggingFace üzerinden sunulur: foreign_dict.json (80 bin fonetik karşılık), foreign_parts.json (37 bin CamelCase parçası), known_words.json (6 bin respell kalkanı), english_i.json (14 bin noktalı/noktasız I kararı).
🚀 Kullanım
- Canlı siteyi açın.
- Metni yazın, Sesi Üret‘e basın. İlk cümle hemen çalar.
- İsterseniz
.wavolarak indirin.
Kurulum gerektirmez; modern bir tarayıcı (WebGPU varsa daha hızlı, yoksa WASM) yeterlidir.
🛠️ Geliştirici Notları: Otomatik CI/CD
Her şey GitHub Actions ile otomatik: export-onnx.yml safetensors’tan 3 ONNX modeli + sözlükleri üretir, ONNX checker + smoke test + normalizer/ses diferansiyel testlerinden geçirir, push_hf.py ile HuggingFace Hub’a (fr0stb1rd/antalia-mini-web-onnx) yükler, pages.yml siteyi GitHub Pages’e dağıtır.
1
2
python3 tests/make_fixtures.py # oracle fixture'larını Python'dan yeniden üret
node --test tests/test_normalize.mjs tests/test_audio.mjs
Tek seferlik kurulum olarak Hub’da antalia-mini-web-onnx deposu açıp HF_TOKEN eklemek yeterlidir; sonrası tek tıkla Run workflow.
📄 Lisans ve Teşekkür
- Model ağırlıkları ve orijinal kod: Apache-2.0 (cloud0day3/antalia-mini, PatientDesk AI —
NOTICEatıf dosyası aynen dahildir). - Bu repodaki web uygulaması (
app.js,normalize.js,audio.js, …): Apache-2.0 © 2026 fr0stb1rd.
Kodu incelemek ve katkıda bulunmak için: fr0stb1rd/antalia-mini-web — kardeş proje: EMA Lightning Web
