4.6 KiB
F5-TTS-RO — evaluare clonare voce Marius în română (2026-07-11)
Spike de testare: se poate folosi F5-TTS-RO (fine-tune gratuit, open-source) pentru clonarea vocii lui Marius în română, ca alternativă la Supertonic (care are Voice Builder plătit pentru clonare) și pocket-tts (nu suportă română)?
Context — de ce s-a pornit testul
Marius 4(pocket-tts) e clonat, dar pocket-tts e English-only — nu se poate reutiliza în română.- Supertonic (motorul curent RO) suportă import de style JSON custom (
/v1/styles/import), dar extragerea style-ului dintr-un sample audio se face doar prin Voice Builder-ul lor găzduit, plătit (supertonic.supertone.ai/voice_builder) — verificat direct în pachetulsupertoniclocal (loader.py,core.py,cli.py): nu există niciun extractor local audio→style_ttl/style_dp. marius-4.safetensors(pocket-tts) NU e un embedding vocal portabil — e un KV-cache de transformer Kyutai (transformer.layers.N.self_attn/cache), stare internă specifică arhitecturii lor. Nu se poate converti matematic în formatulstyle_ttl/style_dpal Supertonic (encodere diferite, spații latente independente, verificat direct din structura ambelor fișiere).
Ce s-a testat
Model: MihaiPopa-1/F5-TTS-Romanian (apache-2.0, fine-tune F5TTS_v1_Base pe Common Voice 22.0 RO — doar 1200 clipuri / 1.3 ore date).
- Instalare izolată:
~/workspace/f5-tts-ro-test/.venv(nu a atins.venvde producție din echo-core). - Runda 1: checkpoint
model_1125_pruned.safetensors(1.35GB, fără EMA — recomandat de autor pentru pronunție RO corectă) + referință scurtămarius_real_voice.wav(7.8s, cel folosit și pentru pocket-tts). - Runda 2 (abandonată de Marius mid-run): checkpoint
model_1125.pt(3.38GB, cu EMA — autorul zice că EMA îmbunătățește similaritatea vocii dar înrăutățește pronunția RO) + referință mai lungă, sample dedicat trimis de Marius pe WhatsApp (32s). - Blocaj tehnic întâmpinat și rezolvat:
torchaudio.load()eșua (torchcodec nu găsealibavutil.so, FFmpeg lipsă ca librării shared pe sistem — doar binar static). Patch local în venv-ul de test: înlocuittorchaudio.loadcusoundfile.readînutils_infer.py(doar în venv-ul izolat, cod din echo-core neatins).
Rezultate
- Viteză pe CPU (i7-6700T, fără GPU): ~32x mai lent decât realtime — 7s audio generate în 3:51 (231s). Comparativ: Supertonic aproape instant (ONNX), pocket-tts ~2.8x mai rapid decât realtime pe același CPU.
- Calitate clonare (runda 1, checkpoint pruned): Marius a confirmat ascultând — nu a sunat deloc a vocea lui. Cauză probabilă: fine-tune-ul RO (doar 1.3h date, mulți vorbitori diferiți din Common Voice) a diluat capacitatea de zero-shot cloning a modelului de bază, mai ales pe checkpoint-ul fără EMA (trade-off documentat explicit chiar de autor în README).
- RAM: vârf ~3.4GB rezident la runda 1 (checkpoint mic). Prima încercare (înainte de fix-ul ffmpeg) a scăzut RAM disponibil la 64MB la un moment dat — sistemul are doar 8GB RAM total, fără swap. S-a adăugat un watchdog (
pkillautomat dacăMemAvailable< 150MB) pentru protecția serviciilor de producție (bot echo-core, Supertonic) în rundele următoare. - Runda 2 (EMA + referință lungă) nu s-a mai încheiat — Marius a oprit testul înainte de rulare, considerând că viteza (deja confirmată prohibitivă la runda 1) face oricum ideea impracticabilă indiferent de calitate.
Concluzie
F5-TTS-RO nu e o soluție viabilă pe hardware-ul curent (CPU fără GPU, 8GB RAM/fără swap): prea lent pentru orice utilizare conversațională (un răspuns de 10s ar dura ~5 minute să se genereze), și calitatea clonării pe checkpoint-ul testat a fost slabă. Nu s-a validat dacă varianta EMA ar fi sunat mai bine — rămâne netestat.
Decizie: rămânem cu setup-ul curent — Supertonic (voci fixe M1-M5/F1-F5) pentru română, pocket-tts (Marius 1-4) pentru engleză. Nicio schimbare de cod în echo-core.
Dacă se reia pe viitor: ar avea sens doar cu (a) GPU disponibil, sau (b) alt fine-tune RO cu dataset mai mare/calitate mai bună pentru speaker similarity. Nu repeta testul cu acest model + hardware-ul actual — rezultatul de viteză nu se schimbă.
Artefacte
Folderul de test (~/workspace/f5-tts-ro-test/, ~7GB — venv izolat + checkpoint-uri HF) a fost șters după test pentru a elibera spațiu pe disc (era la 96% ocupare). Fișierele audio generate au fost trimise pe Discord (canal echo-core) în timpul testului, dacă mai sunt necesare pentru re-ascultare.