Two things that ate most of the time once the TTS itself was good enough, in case they save you some. First, pronunciation of names and invented words: a per-book lexicon helped more than swapping models. Second, chapter-boundary handling for clean M4B chapter markers. Raw generation ended up being maybe 30% of the work; manuscript prep and a human QA pass before delivery were the rest. How are you handling pronunciation overrides?
Content parsing and chapter alignment were also the better part of the work here. Laying out an epub on screen is straightforward. Extracting text by chapter without duplication or elision took a lot of iterations. I could not ultimately follow the epub spec recommendation to traverse the spine, but had to rely on the TOC to drive extraction or fallback to some simple heuristics if none was present. It’s still the biggest risk area in the code and why I added a detailed chapter breakdown before asking for payment. I’ve pushed a lot of content from a wide range of sources through the code for manual and semi-automated inspection and decided it’s good enough to go live.