{"id":17554,"date":"2026-08-31T01:05:00","date_gmt":"2026-08-31T07:05:00","guid":{"rendered":"https:\/\/www.zmetro.com\/?p=17554"},"modified":"2026-08-30T20:36:06","modified_gmt":"2026-08-31T02:36:06","slug":"automating-immersive-reading","status":"publish","type":"post","link":"https:\/\/www.zmetro.com\/?p=17554","title":{"rendered":"Automating immersive reading"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/smoores.dev\/post\/automating_immersive_reading\/\">JM Barrie:<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But at the core of Storyteller is its alignment algorithm. Storyteller can take an ebook and an audiobook that you provide it and&nbsp;<em>align<\/em>&nbsp;them, finding where each word of the ebook is spoken in the audiobook. It does this automatically, without any input from you. Then it uses the EPUB specification&#8217;s built-in audio synchronization system, called Media Overlays, to embed the audio and synchronization info into the EPUB. That lets you read your book&nbsp;<em>immersively<\/em>, with your reader app highlighting each sentence as it&#8217;s narrated by the narrator, just like in the demo above (which is using real Storyteller alignments!).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Initially, that&#8217;s all Storyteller was: one Python script. It took one audiobook file and one ebook file, and it output a new ebook file with audio synchronization metadata. At the time, there were a very small number of ereader apps (and zero ereader devices) that could consume these files, which used the EPUB Media Overlay specification for their functionality. I would run the script on my computer, copy the resulting EPUB to my phone, and then use BookFusion&#8217;s fledging Media Overlay support to read and listen to my books.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>JM Barrie: But at the core of Storyteller is its alignment algorithm. Storyteller can take an ebook and an audiobook that you provide it and&nbsp;align&nbsp;them, finding where each word of the ebook is spoken in the audiobook. It does this automatically, without any input from you. Then it uses the EPUB specification&#8217;s built-in audio synchronization [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-17554","post","type-post","status-publish","format-standard","hentry","category-uncategorized","entry"],"_links":{"self":[{"href":"https:\/\/www.zmetro.com\/index.php?rest_route=\/wp\/v2\/posts\/17554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zmetro.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zmetro.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zmetro.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zmetro.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17554"}],"version-history":[{"count":1,"href":"https:\/\/www.zmetro.com\/index.php?rest_route=\/wp\/v2\/posts\/17554\/revisions"}],"predecessor-version":[{"id":17555,"href":"https:\/\/www.zmetro.com\/index.php?rest_route=\/wp\/v2\/posts\/17554\/revisions\/17555"}],"wp:attachment":[{"href":"https:\/\/www.zmetro.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zmetro.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zmetro.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}