{"id":85,"date":"2026-06-07T03:04:07","date_gmt":"2026-06-07T03:04:07","guid":{"rendered":"https:\/\/pengyaochen.com\/?page_id=85"},"modified":"2026-06-07T03:04:07","modified_gmt":"2026-06-07T03:04:07","slug":"storytime-ai-reader","status":"publish","type":"page","link":"https:\/\/pengyaochen.com\/?page_id=85","title":{"rendered":"Storytime AI Reader"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/pengyaoc\/storytime\/main\/docs\/screenshot-reader.jpeg\" alt=\"Storytime reader showing full-bleed picture \n  book page with play button\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/pengyaoc\/storytime\">github.com\/pengyaoc\/storytime<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Your voice. Your kid&#8217;s favorite book. Even when you&#8217;re not there.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">The Problem<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Parents read the same picture books to their kids every night \u2014 the same stories, in the same voice, over and over. That voice becomes part of the memory. But parents travel, work late, or simply can&#8217;t always be there. Existing audiobook apps use professional narrators. Text-to-speech sounds robotic. Neither is the voice your child actually knows and loves.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">The Solution: Storytime<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/pengyaoc\/storytime\/main\/docs\/screenshot-parent.png\" alt=\"Parent portal showing book pages with OCR text \n  and audio ready to generate\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Storytime lets any parent digitize a physical picture book and generate audio in their own cloned voice in under 10 minutes. Photograph the pages, upload them, record 5\u201310 seconds of yourself reading aloud, and hit Generate. The app clones your voice locally and produces audio for every page. Hand the tablet to your child \u2014 they tap play and hear the whole book in your voice, page by page, with auto-play carrying them through to the end.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">How It Works<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Photograph the pages<\/strong> \u2014 take a photo of each page with your phone and upload them to the parent portal. Apple Vision OCR extracts the text automatically.<\/li>\n\n\n\n<li><strong>Record 5\u201310 seconds of your voice<\/strong> \u2014 read any sentence aloud and save the clip. No special equipment needed.<\/li>\n\n\n\n<li><strong>Hit Generate<\/strong> \u2014 Storytime clones your voice using on-device AI and produces audio for every page. Processing takes a few minutes on Apple Silicon.<\/li>\n\n\n\n<li><strong>Hand it to your kid<\/strong> \u2014 they tap \u25b6 and the book reads itself in your voice, page by page. Enable Auto-play and it runs through the whole book without any taps.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Features<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Full-bleed picture display with swipe-to-turn and tap-to-play \u2014 designed for kids aged 3\u20138 who can&#8217;t read yet<\/li>\n\n\n\n<li>Voice cloning from a 5\u201310 second reference clip \u2014 no studio recording required<\/li>\n\n\n\n<li>Auto-play mode: audio ends \u2192 600ms pause \u2192 next page plays automatically<\/li>\n\n\n\n<li>OCR supports English, Simplified Chinese, Traditional Chinese, and more<\/li>\n\n\n\n<li>Works on any device on your home network \u2014 bookmark it on a tablet<\/li>\n\n\n\n<li>No accounts, no subscriptions, no data leaving your home<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">How It&#8217;s Built<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Backend:<\/strong> FastAPI + Uvicorn serving a REST API. No database \u2014 books are JSON files, media is stored on disk. Audio generation streams progress page-by-page via NDJSON so the UI updates live as each page completes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>OCR:<\/strong> Apple Vision Framework (<code>VNRecognizeTextRequest<\/code>) runs entirely on-device with no API key. For Chinese books, a post-processing pass strips the inter-line spaces that OCR introduces between CJK characters \u2014 otherwise they cause unnatural pauses during playback.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Voice cloning:<\/strong> <a href=\"https:\/\/github.com\/Blaizzy\/mlx-audio\">mlx-audio<\/a> runs Qwen3-TTS on Apple Silicon via MLX. The model (~4 GB, downloaded once) generates natural-sounding speech from a short reference clip and its transcript. All inference happens locally \u2014 no audio is sent anywhere.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Reader UI:<\/strong> Vanilla JS, no framework. CSS translateX slide transitions, touch swipe detection, and a pulsing play button built in pure CSS. The parent portal is a utilitarian admin view; the kids reader uses Nunito, pastel backgrounds, and large tap targets designed for small hands.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">The Hardest Part<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Voice cloning quality depends entirely on the reference clip. Too short and the model loses prosody. Too noisy and it picks up the room. The sweet spot \u2014 5\u201310 seconds of clean speech with an exact transcript \u2014 took trial and error to establish. Getting Chinese OCR to produce clean, pauseless text also required custom post-processing: Apple Vision inserts line breaks between OCR observations, and those translate directly to unnatural audio gaps without stripping.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Storytime is <a href=\"https:\/\/github.com\/pengyaoc\/storytime\">open source on GitHub<\/a>. If you have kids and a Mac, you can set up your first book in under 10 minutes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>github.com\/pengyaoc\/storytime Your voice. Your kid&#8217;s favorite book. Even when you&#8217;re not there. The Problem Parents read the same picture books to their kids every night \u2014 the same stories, in the same voice, over and over. That voice becomes part of the memory. But parents travel, work late, or simply can&#8217;t always be there. Existing [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-85","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/pengyaochen.com\/index.php?rest_route=\/wp\/v2\/pages\/85","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pengyaochen.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pengyaochen.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pengyaochen.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pengyaochen.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=85"}],"version-history":[{"count":1,"href":"https:\/\/pengyaochen.com\/index.php?rest_route=\/wp\/v2\/pages\/85\/revisions"}],"predecessor-version":[{"id":86,"href":"https:\/\/pengyaochen.com\/index.php?rest_route=\/wp\/v2\/pages\/85\/revisions\/86"}],"wp:attachment":[{"href":"https:\/\/pengyaochen.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=85"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}