Local evaluation harness for GalsenAI's Wolof TTS model — measuring whether Wolof dubbing is viable
# Wolof TTS — local evaluation harness
A small harness to answer one question: **is Wolof speech synthesis good enough,
and fast enough, to dub video with?**
I'm building SankofaDrama, a
vertical mini-drama platform for African audiences. Its bet is one-click dubbing
into African languages — so before designing anything around that bet, I wanted
numbers rather than a vendor's demo reel. Commercial providers (ElevenLabs and
friends) cover Wolof poorly or not at all, which leaves open models. This is the
rig I used to try one.
## Attribution — read this first
The model is **not mine**. It is
`galsenai/parler-tts-mini-v1-wolof`,
fine-tuned and released by the **GalsenAI**
community in Senegal, on top of
Parler-TTS by Hugging Face. Their
training work lives at
Galsenaicommunity/Wolof-TTS.
This repository contains only the evaluation code I wrote around their model.
All credit for making Wolof synthesis exist goes to them.
## What's here
| File | What it is |
|---|---|
| `test_tts.py` | Smoke test. One fixed Wolof sentence → `test_wolof.wav`, prints generation time. The first thing to run: it proves the model loads and speaks. |
| `app.py` | Gradio UI — voice-style presets, temperature and length sliders, sample sentences, timing on every generation. |
| `server.py` | The same thing with **zero web dependencies** — Python's `http.server` only. Serves a browser page and a `POST /tts` endpoint returning WAV with an `X-Audio-Duration` header. |
`server.py` exists because `app.py` didn't survive contact with dependency
resolution. Gradio drags in a large tree that conflicted with the pinned
`transformers` / `numpy` versions Parler-TTS needs. Rewriting the UI against the
standard library removed the whole class of problem: the only dependencies left
are the ones the model itself requires. On a machine where you are already
fighting `scipy` and `numpy` pins to get inference running, a UI that cannot
break is worth more than a UI with sliders.
## What it measures
Ever …