I developed https://keenwrite.com for my hard sci-fi novel. I started with OpenOffice and a spreadsheet and then realized I could combine a character sheet with a Markdown editor. The character sheet became a YAML file with interpolated strings. The editor calls out to ConTeXt for typesetting to PDF. To create an audiobook, the same character sheet identifies the characters for gemma4:31b, which excels at quotation attributions when given a cast of characters and curated list of emotions. Next, I feed the chapters coupled with JSON-formatted attributions, pronunciation guides, and voice descriptions into qwen3 (VoiceDesign, Base, and 32b) to produce an audiobook with a full cast of characters.
Here's some output (to console, not JSON for brevity here) from gemma:
Unknown (chanting): "Free the food, free the people."
Unknown (chanting): "Border walls trap us all."
Chloé Angelos (focused): "Let's see,"
Yūna Futaba (serious): "The push draws ever nearer,"
Chloé Angelos (commanding): "Yūna, buzz the CDC,"
Unknown (formal): "CDC Emergency Operations Centre. What's your emergency?"
Chloé Angelos (urgent): "Pandora's brew. Populated areas. Releasing soon. Loop in Beale Air Force Base."
I haven't listed all the minor characters, yet, which is why the LLM attributed "unknown" to some quotations.I'm in the process of containerizing the solution. If interested, email me.