AkinVox Kokoro Multispeaker
8 English voices. 8 German voices. Language adapters for the original Kokoro model.
Choose a named voice and give it text. The AV_ prefix identifies an AkinVox voice. English and German each use a language adapter over the same original Kokoro base.
I'm building this for AkinVox, my audiobook site. I wanted more voices and languages for narration while keeping Kokoro small and easy to run. English and German are the first two languages. More adapters and voices will follow here.
AkinVox is still taking shape, and I'd appreciate you giving it a go. Feedback on the voices, pronunciation and storytelling rhythm will help shape what comes next.
Listen
Training data was capped at 20 hours per training voice. Figures show selected recordings and exclude held-out audio.
English
AV_ariala · up to 20 h per training voice · 12.4 secondsThe house was quiet that morning. Sunlight reached across the kitchen table, and a cup of tea waited beside an open book. She sat down, listened to the birds outside, and began to read the next chapter.
AV_brody · up to 20 h per training voice · 13.0 secondsBy the time the ferry reached the harbour, the sky had turned gold. He lifted his bag, thanked the captain, and walked towards the village, wondering whether the house at the end of the lane would still remember him.
AV_david · 20.0 h training data · 15.4 secondsEvery evening, the lighthouse keeper climbed the narrow stairs and checked the lamp. Far below, waves moved through the dark water, while the steady beam swept across the bay and guided the last fishing boats safely towards home.
AV_elliott · 6.2 h training data · 13.0 secondsAt first, the garden seemed completely quiet. Then a robin landed on the fence, a door opened somewhere nearby, and the familiar sound of a bicycle bell travelled down the street. The whole neighbourhood was waking up again.
AV_ralph · 13.6 h training data · 13.8 secondsThe train was already waiting when he reached the platform. Through an open window, he could hear someone laughing. He found his seat, placed the small wooden box beneath it, and watched the town slowly disappear behind the trees.
AV_cori · 20.0 h training data · 12.4 secondsShe had promised herself a quiet afternoon, a cup of tea, and the next chapter of her favourite book. But when the telephone rang, she recognised the voice immediately, and every plan she had made began to change.
AV_phil · 20.0 h training data · 13.2 secondsA compass can help you find your direction, but a good map tells you what lies ahead. Before setting off, check the distance, look for safe crossings, and make sure someone knows when you expect to return home.
AV_helen · 20.0 h training data · 15.6 secondsWould the letter finally answer her questions? She turned it over once more, noticed the faded stamp, and took a careful breath. Outside, the last light touched the windows, and somewhere in the house a clock began to strike.
German
AV_thorsten · 18.4 h training data · 12.2 secondsAm frühen Morgen öffnete er das Fenster und hörte die Vögel im Garten. Auf dem Tisch lag ein alter Brief, den er gestern gefunden hatte. Heute wollte er endlich herausfinden, wer ihn geschrieben hatte.
AV_bernd · 20.0 h training data · 12.7 secondsDer letzte Zug war längst verschwunden, als er den kleinen Bahnhof erreichte. Über den Hügeln wurde der Himmel langsam dunkel. Er stellte seine Tasche auf die Bank und wartete auf das Licht im alten Haus.
AV_eva_k · 15.1 h training data · 11.9 secondsSie nahm das Buch aus dem Regal und setzte sich ans Fenster. Draußen begann es zu regnen, doch im Zimmer war es warm. Schon nach den ersten Seiten fühlte sie sich wie auf einer Reise.
AV_karlsson · 19.6 h training data · 13.3 secondsBist du sicher, dass wir hier richtig sind? Er sah auf die Karte und dann zum Fluss. Die Brücke sollte hinter uns liegen. Einen Moment lang schwiegen beide, bevor sie gemeinsam über ihren Fehler lachten.
AV_kerstin · 1.5 h training data · 11.8 secondsAm Abend ging sie noch einmal durch den Garten. Die Luft roch nach frischem Regen, und hinter dem Zaun spielte jemand leise Klavier. Sie blieb stehen und hörte zu, bis die letzten Töne verklungen waren.
AV_mucky · 15.4 h training data · 13.3 secondsDie kleine Bäckerei öffnete jeden Morgen zur gleichen Zeit. Heute stand jedoch ein fremdes Fahrrad vor der Tür. Als er näher kam, sah er einen Zettel am Lenker und erkannte sofort die vertraute Handschrift.
AV_hokuspokus · 20.0 h training data · 13.9 secondsEine gute Geschichte beginnt manchmal mit einer ganz einfachen Frage. Warum brennt im verlassenen Haus noch Licht? Wer hat die Tür geöffnet? Und weshalb liegt auf dem Tisch ein Brief, der an dich gerichtet ist?
AV_julia · 4.0 h training data · 11.1 secondsAls die Fähre den Hafen erreichte, lag die Stadt noch im Morgennebel. Sie hob ihre Tasche auf und ging langsam an Land. Nach all den Jahren war sie zurück, und plötzlich fühlte sich alles wieder vertraut an.
Quick start
Install the inference package, choose a voice and give it text. The loader uses one original Kokoro base and the selected language adapter; no merging is needed.
from kokoro_multispeaker import KokoroMultispeaker
model = KokoroMultispeaker(device="cpu")
model.save(
"A new story begins at the little bookshop beside the station.",
"english.wav",
language="en",
speaker="AV_cori",
)
model.save(
"Eine neue Geschichte beginnt im kleinen Buchladen am Bahnhof.",
"german.wav",
language="de",
speaker="AV_julia",
)
The installation guide covers CPU, GPU, offline use and the command line. The loader downloads the adapters from an immutable model revision and verifies their checksums. You can also supply local adapter folders for offline use.
Longer narration
Longer passages use the current AkinVox production context policy: English fixed voices use one preceding word and two following words at internal boundaries; German and stock mode use one word on either side. The following words are reserved within the native input limit, and context is removed from returned audio and timings. Separate adjacent requests can pass the same bounded lookahead; uncertain source ownership preserves body speech without narrating the optional neighbors.
for chunk in model.stream(long_text, language="en", speaker="AV_brody"):
audio = chunk.audio # Mono float32 audio at 24 kHz.
The voicepacks are ready to use with their matching language adapter.
Quality and limits
Pronunciation, pacing and voice consistency can vary with the text. Listen to a few passages before choosing a voice for a longer narration.
What's next
More languages and more voices will use this same project and adapter layout. I intend to keep working on pronunciation, rhythm and consistency. The samples show the current voices; please listen before choosing one for your narration.
Apache-2.0 for AkinVox code and adapter weights. Source and dependency notices