# Picture Book Desk > Paste a picture-book manuscript page by page - blank lines, dashes or `Page N` markers between pages - say which age band it is for, and the browser computes everything a reading teacher would count: words, sentences and syllables per page, the revised Spache grade, Flesch-Kincaid grade and Flesch reading ease, New Dale-Chall, Dolch sight-word coverage, the rhyme scheme and syllables per line of every page, refrains, page-turn cues and the phonics spelling patterns the text happens to teach - free, before you sign in. Then a reading teacher judges whether the book fits the children it is for, and rewrites it to the band if you ask. Live at https://picture-book-desk.skillsafe.ai/ · API tutorial at https://picture-book-desk.skillsafe.ai/api.html · Tokens at https://picture-book-desk.skillsafe.ai/tokens.html ## What it does One work object: one manuscript, pasted as text, plus the age band it is written for and a short brief saying who it is for and what you want checked or changed. Pages are separated by blank lines, dashes or `Page N` markers; line breaks inside a page are kept, because they are what the rhyme scheme and the syllable count per line are measured on. The free engine (no account, no model) ships as three plain scripts - `/wordlists.js`, `/dict.js`, `/leveler.js`, loadable in node in that order with `global.window = {}`, then `window.Leveler.analyze(text, {target})`. Each definition from its source: - Flesch reading ease = 206.835 - 1.015 x (words / sentences) - 84.6 x (syllables / words) - Flesch 1948 - Flesch-Kincaid grade level = 0.39 x (words / sentences) + 11.8 x (syllables / words) - 15.59 - Kincaid et al. 1975 - revised Spache grade = 0.121 x average sentence length + 0.082 x percentage of unfamiliar words + 0.659, against the revised Spache word list - Spache 1974 (the 1953 original, with different coefficients and a different list, is not used and the desk says so) - New Dale-Chall = 0.1579 x percentage of words outside the Dale-Chall 3000 x 100 + 0.0496 x average sentence length, plus 3.6365 when that percentage exceeds 5, reported with its grade band - Chall and Dale 1995 - Dolch sight-word coverage as a percentage of tokens, by list level (pre-primer, primer, first, second, third) and the Dolch nouns separately - Dolch 1936 - reading age = Spache grade + 5, the age at which a child typically reads that grade alone - per page: words, sentences, syllables, longest sentence, syllables per line, rhyme scheme (`AABB`, with `?` for a line whose last word the pronunciation dictionary does not know), rhymed lines, dialogue lines, whether the page ends on a question or a page-turn cue - refrains: lines repeated across pages, with the pages they appear on - phonics patterns present in the text: CVC words, digraphs, blends, magic-e (silent e), vowel teams, r-controlled vowels, each with example words from the manuscript - flags against the desk's age bands: `too_long`, `too_short`, `level_high`, `long_sentences`, `low_sight_words`, `hard_words`, `rhyme_uneven`, `meter_uneven`, `many_pages`, `few_pages` The bands are the desk's own trade guidance, not a rule of the trade: 2-3 board book, 0-150 words, revised Spache 1.9 or under; 3-5 picture book, 100-700 words, Spache 2.9 or under; 5-7 early reader, 200-1200 words, Spache 3.5 or under and Dolch coverage 50% or more; 7-9 early chapter, 800-6000 words, Spache 4.5 or under. State this plainly wherever a grade is quoted: a readability grade measures independent decoding - the level at which a child could read the text alone. A picture book is normally read aloud to a child two to four years younger than the grade implies, which is why the bands sit well below the grades they allow. Two metered lanes (gpt-terra, one system prompt with a task router): - `level` (from @jamesrochabrun/reading-teacher for the reading-level and phonics judgement, @jamesrochabrun/kids-book-writer for the craft) - a reading teacher judges the fit: the level against the band, the length, the read-aloud craft (rhyme, rhythm, refrain, page turns), the words a child would stumble on, and the phonics a lesson could draw on. Verdict: fits / too_hard / too_easy / too_long / mixed / insufficient_text. Body: reading, fit, page_notes, craft, vocabulary, phonics_focus, suggestions. - `revise` (from @jamesrochabrun/kids-book-writer) - the model rewrites the pages to the band in `target`, keeping the story, the characters, the voice and, where the pages rhyme, the rhyme. Every page comes back in order, an unchanged page repeated verbatim, so the author always holds a complete manuscript. Verdict: light_touch / revised / restructured / declined. Body: rationale, pages, changes, kept, read_aloud_note. Handoff: "Revise this to the band" carries the level lane's flagged words and its target into the revise lane. The browser then re-levels the revision with the same engine and shows the before and after side by side - which is why the model is forbidden to state a word count, grade, age or percentage for text it just wrote. Every other figure the model writes is read back against the engine and each disagreement is shown to the author. History is saved to the author's SkillSafe account (a declared `records` collection: lane, title, target, pages, words, spache_grade, dolch_pct, verdict, disagreements) and mirrored in the browser. Exports: the numbers as Markdown, the per-page table as CSV, the revised manuscript as text, the result as Markdown and JSON. ## The contract Run body: `{ "task": "level" | "revise", "brief": string, "manuscript": string, "target": "2-3" | "3-5" | "5-7" | "7-9", "facts": string }` where `facts` is the JSON string the browser engine computed (`JSON.stringify(Leveler.analyze(manuscript, {target}))`). All fields are scalar strings and all five are required; an optional `retry_note` is sent only on the automatic reformat retry. The reply is one JSON object with `lane`, `title`, `headline`, `verdict`, `summary`, `notes_on_input`, `risks`, `next_steps` and the lane body. ## Sources Derived from two agent skills by jamesrochabrun (https://github.com/jamesrochabrun/skills): @jamesrochabrun/kids-book-writer (https://skillsafe.ai/skill/@jamesrochabrun/kids-book-writer/) for age-appropriate language, rhyme and read-aloud craft for ages 2-9, and @jamesrochabrun/reading-teacher (https://skillsafe.ai/skill/@jamesrochabrun/reading-teacher/) for the progression from letter recognition through phonics to comprehension. Formula sources: Flesch R. (1948) J Appl Psychol 32(3):221-233; Kincaid J.P. et al. (1975) Naval Technical Training Command Research Branch Report 8-75; Spache G. (1974) Good Reading for Poor Readers, revised formula (the 1953 original is noted and not used); Chall J.S., Dale E. (1995) Readability Revisited: The New Dale-Chall Readability Formula; Dolch E.W. (1936) Elementary School Journal 36(6):456-460. Word lists: the revised Spache list and the Dale-Chall 3000 as published in cdimascio/py-readability-metrics (MIT); syllable counts and rhymes from the CMU Pronouncing Dictionary, cmusphinx/cmudict (BSD); the Dolch sight-word list and Dolch nouns from Wikipedia. Full licence texts: https://picture-book-desk.skillsafe.ai/LICENSE.txt (CMU Pronouncing Dictionary BSD, py-readability-metrics MIT, jamesrochabrun/skills MIT). Not affiliated with the skills' author.