Files
echo-core/memory/kb/projects/f5-tts-ro-voice-clone-eval.md

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 pachetul supertonic local (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 formatul style_ttl/style_dp al 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 .venv de 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ăsea libavutil.so, FFmpeg lipsă ca librării shared pe sistem — doar binar static). Patch local în venv-ul de test: înlocuit torchaudio.load cu soundfile.read în utils_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 (pkill automat 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.