“I know”, I thought one day, “I could write a book for my daughter!” She was three and a half, so the prose shouldn’t be all that challenging, right? There was the small matter of illustrations — my art skills plateaued shortly after Reception — but AI image generation had advanced to the point where people usually have the right number of fingers.
Problem solved.
As for actually printing the thing? Honestly, I didn’t think that far ahead.
Press enter or click to view image in full size
A word problem
Much as I’ve loved reading to my daughter from an early age, I must admit to zoning out on occasion. Even the best books bear no surprises on the hundredth reading. And therein lay temptation: I was already inventing silly stories at bedtime, why not jot them down? Ideas would pop into my head while playing together, notes surreptitiously tapped into my phone. An overall premise would form while out walking; random characters would visit at bedtime.
I resolved to press ahead, and presenting it as a fourth birthday gift created a natural deadline.
It’s one thing imagining a story; putting it coherently on paper is quite another. I enlisted help from Claude, not to write the story but to be a guide and editor.
Even with help, where to begin? I took an overly thorough approach, compiling a list of my daughter’s books sorted into hits, so-so and misses, then asked Claude to analyse. As procrastination strategies go, I’d say this is as good as any.
The insights were useful though. I learned about the importance of a refrain, repeated several times like the chorus of a song — surprisingly common once you notice it. Unfortunately, the obvious example, Michael Rosen’s We’re Going on a Bear Hunt, was so good that it took weeks to stop my brain from trying to bend everything into its shape, creating a shallow clone.
Claude also advised against making the moral prominent, which tied in with books lower down my daughter’s list, so I left it out entirely. With this, and some critiquing of my plot ideas, I decided the book would be about the character Ada — modelled on my daughter, and the mainstay of my made-up stories — and a purple panda. And, just to be sure, I searched online and found a purple plush toy that I could base the character on. It doubled up as a companion gift.
This is how I came to be writing an amoral kids’ story based on a plush toy I’d bought to base a story on.
It didn’t all go the AI’s way though. Many sensible names were considered for the panda, and I was initially pushing for alliteration. We nearly had Patrick the Purple Panda, but it was a bit icky, so I went with Xing, named after Xing Er, a panda at Copenhagen Zoo. Claude said the pronunciation would be tricky, but I decided that was a feature, not a bug. Children rise to the challenge and grown-ups can debate it. I say it like “shing”, by the way.
The story was to be grounded in visceral, specific things that a child can relate to. We had near misses when Ada’s attempts to hide him nearly failed — young children are comically bad at hide-and-seek — and an emotional beat when the panda missed his parents. And we had a panda who doesn’t like bamboo, preferring the “fat” (udon) noodles my daughter is fond of. Which is where the refrain came in, because now every time Ada offers him something there’s a real question to ask:
Will he nibble it? Will he gobble it?
YES — gulp — GONE!
By now I knew roughly how the story should flow, but my experience from blog posts is that it’s very painful to get an LLM chatbot to write down what I have in mind. So I had a radical idea. “I know”, I thought, “I’ll write down what I have in mind.” One session in a Google Doc later, I had a first draft: the kind of story I’d have made up on the spot at bedtime, albeit a bit less ridiculous for having had time to think about it.
Press enter or click to view image in full size
After that, the AI review process involved painstaking debate about every paragraph, and every word, until improvement gave way to churn. There were numerous drafts, meticulously filed in a project folder that eventually ballooned to more than a hundred text files. For just shy of 800 words.
An image problem
With text in hand, now we just needed to illustrate. By then I had a simple plan in mind: ask ChatGPT Images to produce reference sheets of characters and props, then prompt it to produce each scene in turn. Even better, it could use photos of my daughter’s teddies and the new plush panda to bring their approximate likeness into the story.
I came to a style I was happy with: not too AI bling, Ada’s dress painted imperfectly with gaps inside the edges. The panda brighter than his surroundings, and deliberately not too close to the real toy — I dialled the likeness down to make Xing more panda than plush. Ada, meanwhile, was prompted to avoid stepping on the live rail of freaky resemblance, but the hair remains a giveaway.
Press enter or click to view image in full size
Of course, Claude wrote the actual image prompts: you don’t have a dog and then bark yourself. Fate got the last laugh though, as I ended up running back and forth in a game of fetch. No matter what Claude advised, images just turned out frustratingly wrong so I’d paste them into Claude demanding a better prompt, which I’d paste into ChatGPT, and back to Claude with the result.
At this rate I’d have to rewrite the story, aiming it at a ten-year-old instead, so I came up with another great wheeze: let’s get Claude talking to ChatGPT Images directly! So I got Codex to cook up an API client, which it did without much fuss — having one AI delegate to another felt oddly satisfying. From there we (it felt more “we” than “I”) established a workflow. Claude would call the ChatGPT Images API directly with its prompt, ChatGPT would provide a batch of three variants, and Claude would assess the results. It could ask for more batches, and would only surface its final picks to me. I’d gone from courier to reviewer, and I doubt the book would have made it to print otherwise.
I told it not to worry so much about cost, as we were well short of the $200 or so I was willing to sink in API credits. Just as well, because the offcuts were piling up. AI image generation opens up a whole weird world of screw-ups that I’d never imagined.
Take the bed. I wanted something like my daughter’s house bed. If you’ve not seen one before, it’s a cute four-poster with an open slanted roof, and approximately zero of them appear to have entered ChatGPT’s training data. Wooden slats would protrude at the most disturbing angles, and at some point I just had to settle for a standard bed. Even that defeated it in the final bedtime scene: five rounds of foot posts a pillow’s width from the head posts, pillows on the diagonal and one bed with two rails down the same side. Claude’s verdict on one of them: “strong”.
That was when I realised Claude was massively overconfident in its ability to interpret images, missing obvious flaws and making false claims — and that I’d been just as overconfident in trusting it. From then on it had to inspect every image crop by crop, with a separate pass for whether the furniture could exist in three dimensions. As for the bed, I gave up and changed the scene to a night view of the house from outside.
An admission of defeat beats a pyrrhic victory.
Press enter or click to view image in full size
Fingers were usually all there. Although once I asked for a missing finger to be restored, even though I know that a thumb is often naturally hidden. Two rounds of fixes later, it dawned on me that the finger was a thumb tucked out of sight in a shush, and the hand had been fine all along.
Which brings me to a new enemy: grain. Consistency is achieved largely by including existing images alongside the text prompt, but each pass degraded the quality a little, and a weird grain crept in like an old film. Claude tweaked its prompts to fight it, which worked so “well” that Ada’s dress came out flat and plasticky — the watercolour texture stripped out along with the grain — and three pages had to have theirs put back.
I rejected many batches and each time had to wait for another. It was too slow to watch, so I had to run it in the background and check a few times a day. I’d ask it to do a dozen pages at a time, and each could involve ten or more image generations with no guarantee of a keeper. All told, it took about a month.
AI didn’t make an easy job easier. It made an impossible one merely hard.
A print problem
This was the bit where I’d put off any real thinking. I’ve worked in print, but dare I admit it was a quarter of a century ago. It came back like riding a bicycle: the principles hadn’t changed, though the landscape had. I’d looked through a few online printers and settled on Mixam. It seems very flexible — or complex in other words — with lots of options to click through, but I got a strong impression they know what they’re doing.
Mixam wants a PDF of the book, so how to produce it? It didn’t take me long to realise that Canva wasn’t up to the job. I dug around and found Affinity — only to discover that it’s been bought up by Canva! Never mind: it’s “free” for now, and it has everything I needed, such as facing pages and bleeds.
In case you’re wondering what a “bleed” is, there’s no blood involved. You just add 3mm outside each edge of the page and extend the images into it, making sure there’s nothing out there but boring background. Otherwise a slight misalignment leaves a thin white line down one edge.
Images also had to be at least 300 dots per inch. ChatGPT Images doesn’t give you that many dots, so I used a free program called Upscayl, which uses a local model to upscale to the desired resolution — invoked by Claude for every final image pick. Still, I was worried about how this would look in print because you can’t just invent detail that isn’t there.
Well, actually the whole image was invented, but that’s another matter.
Producing a book, holding down a job and not being too awful a dad means getting up early or staying up at odd times. What helped me get through this was seeing the pages come together on screen — it started to look like an actual book. Tinkering with the layout and text takes time, but it’s a zillion times less frustrating than playing image golf with a disembodied robot.
With the self-imposed birthday deadline looming, I paid £35.52 for a single expedited copy, 36 pages including covers at 21cm square. Mixam provides a “soft proof” (a PDF download of how it should look), but sometimes you just have to hold the real thing to see where you messed up. It looks like a real book, except there’s no barcode on the back.
Fortunately, I didn’t need many tweaks. I increased the inside margin to stop text creeping into the spine. And near the end of the story, when Ada and the panda were supposedly returning to the clump of bamboo where she found him, they were walking the wrong way. I’m not sure how two LLMs and I all missed that, but there’s no way a four-year-old was going to let that slide. I’d never hear the last of it!
With the fix in hand, printing a run of 25 is much more reasonable at £3.32 per copy delivered, cheap enough to include in party bags for my daughter’s fourth birthday.
Problem solved
Ada and the Panda wasn’t painstakingly written out by hand using quill pens wielded by monks, but neither was it one-shot AI slop. That’s not to claim the book is particularly good; only its intended audience can be the judge of that.
So, how did it fare?
My daughter enjoys books, but I tried not to make a particular fuss over this one. She laughed when the panda let out an enormous burp and enjoyed recognising the teddies. She also had questions. Why did the panda need to be quiet when Ada smuggled him into her house? Nothing explained why. And when Mummy’s foot brushed the panda under the bed, why was it Ada who kept still? Both are fair points. When she said “I love that panda, I wish I could go in the book and cuddle him!”, all that effort felt worthwhile. She has the purple plush toy too, though apparently it isn’t quite the same thing.
Press enter or click to view image in full size
We had good feedback from other parents. Being lovely people, they’d hardly say otherwise. Still, reports that it was being read multiple times in some households were heartening.
A great thing about reading with a child is the shared culture, references to characters and phrases from their favourite stories. Remember how Xing has a distinctly un-panda-like distaste for bamboo? So it came to pass that I’d have to say “Will he nibble it? Will he gobble it?” and then she’d gulp down a prawn in the middle of “YES — gulp — GONE!” Of course, if she didn’t like something, we’d hear “No — yuck — NO!”
So, we didn’t instil good eating habits with this one, but that was never the point. If you’re thinking of writing a book for your own child, it needs to be on their terms, not yours.
Burp!