Introducing Wukong & Friends

The site is live at phg1024.github.io/wukong-and-friends: five free English bedtime picture books, a bilingual website, and printable booklets.

This started as a bedtime problem, not an AI project. The parts that took real engineering — making a drawn character stay the same character across a dozen illustrations, and building a publishing path where a private repository produces a public site without either repository being able to wreck the other — are further down. First, why any of this exists.

Bedtime was the thing to fix

Getting our four-year-old to sleep smoothly was the least calm part of our day. We tried the obvious list: earlier bath, dimmer light, less screen, a shorter round of "one more". The single best thing we found was reading a bedtime story together. It gives the evening a fixed shape — lights down, one book, two of our voices — and once that shape was in place, the day was allowed to end quietly and bedtime stopped being a negotiation.

The catch is that the shape has to be filled every single night, and the supply side is not free. We go through books, we buy books, and after a few months of nightly reading I had a short list of complaints about the pile on the shelf.

Wukong, Pigsy and the little rabbit walking home under a crayon night sky.

Why not just buy the books?

We did buy them, and we keep buying them. None of these complaints are the publishers' fault:

  • A picture book carries its author's style, whether or not it suits our kid. The popular ones are drawn by artists with strong, deliberate looks. A strong look is not always something a tired four-year-old can read at 7:40 in the evening, and not always something we want to look at for the three-hundredth time.
  • The vocabulary rarely sits where he is. Some books are a step below him and he is bored by page three. Others lean on words he has no chance with, which turns read-aloud into a lecture with pictures. The band that actually helps him sits just above his head, and it is narrower than the market pretends.
  • A big pile of books is a pile you maintain. Every new title is another object to shelve, to rescue from a sticky hand, to pick up off the floor. He is four and still learning to keep anything organized, so a bigger library mostly means more tidying — for books we each read a handful of times.
  • We wanted some of our own culture in there. Sun Wukong, Nezha, Ao Bing, the Bull King, a dumpling kitchen, a night market, a dragon boat. We would rather those arrive as fun rather than as homework, and the good versions are not always the ones already on the shelf next to the truck books.

None of that is an argument that published picture books are bad. It is an argument that a personal printing press changes the economics: a story pitched exactly at his level, in a style he recognizes, with a character he already loves, costs nothing to add to the pile, because it is a file rather than another book to tidy up after.

The spec is a four-year-old

Everything about the books follows from what actually works at bedtime:

  • Sixteen pages including the cover, so a story fits one read-aloud sitting and four sheets of paper.
  • Large, separate hand-printed letters — Chalkboard SE at 36 pt on reading pages, not cursive. A four-year-old sounding out slip needs the letters to stay apart.
  • Short sentences, one silly moment, calm ending. The stories end quietly on purpose. The last page is not a cliffhanger; it is a bedroom.
  • Free. Read it, download it, print it for your family or classroom. No account, no checkout, no email capture.

The print side is a real constraint too. Each book ships two PDFs: a reading version and a booklet version already imposed two-up on US Letter landscape, double-sided short-edge, one PDF page per sheet. Print four sheets, nest them, fold, staple the fold, and you have a stapled little book a kid can hold and wreck. Books with 10 or 14 pages get blank pages padded to a multiple of four, and the exact sheet count is listed on each book's page.

Five books are on the shelf — Slippy-Slide Skates, The Big Red Truck, Wibble-Wobble Ride, Noisy Nap and One Little Bite. Two earlier Bear and Bumble books stay in the repository and remain reachable by URL, but they are off the public shelf because they don't look like the rest of the set.

The hard part is not drawing, it is drawing the same monkey

An image model will happily draw a charming little Monkey King: big head, golden-brown fur, cream heart-shaped face, gold circlet, yellow tunic, red scarf, red sneakers. Ask for him again from a lower angle on the next page and you get a near Wukong — circlet with no bead, tunic gone orange, sneakers gone brown, tail on the wrong side — and by page nine a different monkey wearing his clothes. Four-year-olds notice. They are the strictest continuity department I have ever worked with.

So every main character has a model sheet in the format a studio would use — a large front three-quarter view, a rear three-quarter view, three close-up heads (happy, puzzled, quietly determined), name hand-printed at the top. The friends page publishes each sheet exactly as it was approved, Wukong's included:

Wukong's approved model sheet: full-body views and head studies in wax crayon on cream paper, with his name hand-printed at the top.

Every new illustration is then built from three deliberately separated layers:

Layer Carried by Example
Identity one reference image that character's own approved model sheet
Style the same reference plus a short paragraph wobbly pencil outlines, patchy wax-crayon fills, cream paper showing through
Composition words only low angle up the slide, Wukong small at the bottom, big empty sky

That separation cost me a wasted session to learn. Generating Wukong's sheet, I passed the Bull King sheet as a second reference, meaning it purely as a layout example. He came back with a teal cast and the hint of a crown. The model does not know which image is "the style hint" and which is "the character" — it blends everything you hand it. One identity reference per character, and layout lives in words.

The style is kept rough on purpose: outlines that overshoot their corners, fills with white paper gaps in them. The temptation with any image model is to smooth a kid's drawing into something prettier and completely generic. As a crude texture check I compare each image with a blurred copy of itself — approved art lands around 13–14, and a candidate near 9 is a laminated version of the style however good it looks at thumbnail size.

Technical details

How the pictures are made

Illustrations are generated locally when I want control — ComfyUI with a Qwen-Image-Edit checkpoint on a machine under my desk, four-step Lightning for speed — and with a hosted image model when identity fidelity matters more than provenance purity. Every accepted image keeps a receipt: model, aspect ratio, the reference assets used and their SHA-256 hashes, and the full prompt. Those receipts are the reason a character drawn three months ago can still be drawn again today.

Provenance you can check without trusting me

Every published book is committed with its complete prompts including refinements, its selected art, its text and its layout plan, and the PDFs are watermarked with a subtle attribution line. On top of that, provenance/ holds a SHA-256 manifest of every published PDF plus an Ed25519 detached signature over it, with the public key in the repository.

There is a verify page where you drop a PDF and it recomputes the hash and checks it against the signed manifest in the browser.

Two honest limits, because overclaiming here would be silly: the signature proves the file matches what this project published under this key. It is not a certificate-based PDF signature and not a third-party identity attestation. And the watermark is attribution, not copy protection — anyone determined can crop it. The private signing key lives outside the repository, in a backed-up private location, which is also the failure mode to remember: if that key is lost while a publication exists, it cannot be silently swapped for a new one.

A private repository that publishes into someone else's Pages

GitHub Pages cannot serve a private repository, and I did not want the source public either — it holds every prompt, every rejected draft and the full character library. So pushing main in the private story repository runs a GitHub Actions workflow that builds the bilingual site, verifies it (signed manifest, per-PDF hashes, watermarks, translations), and rsyncs the result into wukong-and-friends/ on the public phg1024.github.io repository. The last step fetches the live URL and fails if the new content did not actually arrive.

Three details hold the arrangement together: a write-scoped deploy key whose private half exists only as an Actions secret; --exclude wukong-and-friends/ in the personal site's own deploys, because without it a routine deploy would delete the entire bookshelf with a completely straight face; and keeping the roughly 250 MB of build artifacts in the disposable output repository rather than in anyone's source history.

The thirty-second thank-you

Every download button opens a short page first: two support links — Buy Me a Coffee and GitHub Sponsors — a countdown, and then it continues to the PDF by itself. Anyone who wants the PDF just waits half a minute or taps the direct link. It is a courtesy, not a lock: nothing is paywalled, nothing is registered, and the stories stay free. I would rather ask honestly for thirty seconds of attention than put a wall in front of a bedtime story.

Next

Bull King, Nezha and Ao Bing have model sheets and profiles and are badged Coming up on the friends page — they are drawn and waiting for their first story, and the friends page says so plainly rather than implying they are already in a book. After that: more stories, more camera angles, and a proper locally licensed children's face font so the reading typography can be locked down rather than inherited from system fonts.

The whole thing exists so that "one more story" takes about four seconds and ends with a pig going to sleep.