Lulu Spec Verification
Date: 2026-08-02
Source of truth: lulu-book-creation-guide.pdf (Lulu's official 25-page Book Creation
Guide, kept locally, untracked) and m2gkmey-cover-template.pdf (a cover template Lulu
generated for a real job). Lulu's help-centre URLs 404 and their API docs are
JS-rendered, so these local artifacts are the authoritative reference.
Verified by running the real book-sizes.ts / lulu-cover.ts code against the
guide's published tables (tmp/verify-lulu.ts, re-runnable with
node --experimental-strip-types).
Result: everything matches
| Check | Lulu's spec | Ours | Status |
|---|---|---|---|
| Trim sizes (16) | Guide p11–12 table | LULU_SIZES |
Match |
| 6 featured sizes | 6×9, 7.5×7.5, 7×10, 8.5×8.5, 8.5×11, 9×7 | same | Match |
| Paperback spine | (pages / 444) + 0.06 in |
same formula | Match |
| Hardcover spine | Guide p14 table, 28 rows | HARDCOVER_SPINE_TABLE |
Match (all thresholds) |
| Paperback minimum | 32 interior pages | minPages('softcover') |
Match |
| Hardcover minimum | 24 interior pages | minPages('hardcover') |
Match |
| Interior file | Trim size, no bleed, if no content runs to the edge | trim size | Correct |
| Cover bleed | 0.125 in per edge | BLEED |
Match |
| Softcover spread height | trim + 0.25 in (6×9 → 9.25) | 9.25 | Match (equals Lulu's own template) |
Two cosmetic differences, neither a problem:
- Lulu calls it "Pocketbook", we call it "Pocket Book". Dimensions identical.
- Lulu prints Comic Book as 6.63 in; we use 6.625 in (the standard comic trim). Difference is 0.005 in and Comic Book is not a featured/orderable size.
Interior bleed — the condition to watch
Lulu: "If your file does not include graphics, fills, or content that extends to the edge of the page, you can prepare your file at the book's final trim size and our system will automatically add the 0.125 in bleed."
Our interiors are white with inset photos and margins, so trim size is right. If we ever add a full-bleed photo page or a coloured page background, interiors must switch to trim + 0.25 in (0.125 per edge) or the edge content will be trimmed off.
Hardcover casewrap — the one number not in the guide
The guide gives no casewrap total-document formula; Lulu issues a per-book template
instead. Our edgeMargin for hardcover is 0.875 in per edge (0.125 bleed + 0.75
board wrap/hinge), reverse-engineered and validated empirically: a 6×9 hardcover
casewrap, 33pp (padded to 34) produced a 14.000 × 10.750 in spread that Lulu
accepted (Session 17, print cost $14.67).
That is one data point at one trim size. It follows the same additive shape as the softcover case, so it should generalise, but the honest status is validated for 6×9, assumed elsewhere. Confirm against a downloaded Lulu template before the first hardcover order at a different trim size.
Still unverified: pod_package_id
book-sizes.ts carries constructed pod_package_id values (e.g.
0600X0900FCSTDPB060UW444MXX). These follow Lulu's documented SKU shape but have
never been checked against Lulu's API. They are unused today (fulfilment is manual
via the admin Download PDFs tool). Before any automated print job, validate each one
against POST /print-job-cost-calculations/ and confirm it returns a price.