-
Stefy Lanza (nextime / spora ) authored
Languages landed but the voices did not: kokoro reported none until something loaded it, so a client could see nine languages and still have nothing to pick from. The names are now read out of the voices file the backend itself selects from — the same file, so the listing cannot offer a voice that synthesis would then reject — and the accent map already in the module decodes each one's language and gender. 54 voices across all nine languages. Pointedly NOT via _resolve_kokoro_files: that downloads a 28 MB release when nothing local matches, and /v1/models is a polled endpoint, so it must never be a download trigger. A file that is not on disk simply yields no names, and there is a test that fails if the listing path reaches for the network at all. The zip index read is memoised against the file's own mtime (27ms -> 0.1ms). A list a load actually enumerated still outranks the file, and a card's voices_path is honoured. XTTS keeps filling in after its first load, and parler stays empty with selection "described" — it has no speaker names to give. Co-Authored-By:
Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014T3rZozi1Ehk96NG1WesgC
40aa3eb0