<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>#epub posts — Ben Crowder</title>
    <link>https://bencrowder.net/blog/tag/epub/</link>
    <atom:link href="https://bencrowder.net/blog/tag/epub/feed/" rel="self" />
    <description>Feed for blog posts tagged with #epub.</description>
    <lastBuildDate>Thu, 23 Apr 2026 01:46:23 GMT</lastBuildDate>
    <language>en-US</language>
    <generator>https://bencrowder.net/</generator>

    <item>
      <title>The Dig Unsettling</title>
      <link>https://bencrowder.net/blog/2026/the-dig-unsettling/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2026/the-dig-unsettling/</guid>
      <pubDate>Fri, 23 Jan 2026 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Introducing <cite><a href="https://bencrowder.net/the-dig-unsettling/">The Dig Unsettling</a></cite>, a twenty-page digital chapbook available for free in EPUB and PDF. It contains five new short stories I wrote in 2025, all more or less in the horror genre.</p>
<p><figure>
        <a href="https://bencrowder.net/the-dig-unsettling/"><img src="https://cdn.bencrowder.net/blog/2026/01/the-dig-unsettling.jpg" alt="the-dig-unsettling.jpg" title="the-dig-unsettling.jpg" /></a>
        
      </figure></p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20The Dig Unsettling">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Bag Field &amp; Other Stories</title>
      <link>https://bencrowder.net/blog/2026/bag-field-and-other-stories/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2026/bag-field-and-other-stories/</guid>
      <pubDate>Sat, 17 Jan 2026 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>I’ve collected the fiction and poems I’ve published (well, self-published) into a new book, <cite><a href="https://bencrowder.net/bag-field-and-other-stories/">Bag Field &amp; Other Stories</a></cite>, available for free in EPUB and PDF. No new work in this volume, though I’m publishing this in the hope that it will motivate me to write more.</p>
<p><figure>
        <a href="https://bencrowder.net/bag-field-and-other-stories/"><img src="https://cdn.bencrowder.net/blog/2026/01/bag-field.jpg" alt="bag-field.jpg" title="bag-field.jpg" /></a>
        
      </figure></p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Bag Field &amp; Other Stories">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Scroll</title>
      <link>https://bencrowder.net/blog/2024/scroll/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2024/scroll/</guid>
      <pubDate>Tue, 15 Oct 2024 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>A couple weeks ago I built my own EPUB reader called Scroll, and since then have pretty much <a href="https://bencrowder.net/blog/2024/1665/">moved off Marvin</a>. Here’s what Scroll looks like (light and dark themes):</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2024/10/scroll.png" alt="scroll.png" title="scroll.png" />
        
      </figure></p>
<p>Thus far I’ve read two books using it, and while there are still a few small issues, overall I’m very happy with it. I don’t plan to release it anytime soon, but as a not-even-close-to-the-same-thing substitute, here are some notes:</p>
<ul>
<li>I’d made decent enough progress with epub2pdf that it was usable, but reflowability and theme-changing are nice, and having quick navigation between books is even nicer, and printing a book to PDF in Firefox is slow, and browsers already natively support the HTML that’s inside EPUBs, so I abandoned the PDF route.</li>
<li>Scroll (after both the noun and the verb) is a PWA without a backend. It’s actually just static HTML files: I wrote a script that concatenates all the HTML in an EPUB into one long HTML file, with some processing to fix links and wrap things and bake the table of contents out. Then there’s a little bit of vanilla JS for the reader functionality (saving the debounced current scroll location to localStorage (I wish Safari supported <code>scrollend</code>), restoring it on the <code>pageshow</code> event, calculating pagination, jumping to pages, switching themes, etc.), and another vanilla JS file listing the current books (so that I don’t have to re-build all the other book files when I start reading a new book).</li>
<li>While I said “pagination” above, I’m not actually chunking the book into pages; I’ve chosen to stick with vertical scrolling for now instead of horizontal paging, primarily because being able to make sub-page progress is nicer than I realized. That said, I still want to know how many “pages” I’ve read, so I use the scroll percentage (<code>scrollTop</code> divided by <code>scrollHeight</code>, super simple) multiplied by a rough heuristic of 1,200 characters per page, ignoring whitespace. It’s not perfect but it’s good enough for my needs.</li>
<li>I added a slight blur to the text so that it feels a little less digital. For now I’ve opted against a background image, but I may change my mind about that.</li>
<li>Whenever I add/remove a book, I copy the baked files to a private directory on my server</li>
<li>I’ve saved the root HTML file (which is just a list of the current books, loaded via JS) to my home screen as a PWA</li>
</ul><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Scroll">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>With Marvin’s recent disappearance from the iOS app store, I’ve started feeling an itch to get my ow...</title>
      <link>https://bencrowder.net/blog/2024/1665/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2024/1665/</guid>
      <pubDate>Fri, 16 Feb 2024 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>With Marvin’s recent disappearance from the iOS app store, I’ve started feeling an itch to get my own ebook reading system set up sooner than later — ideally before the sad day comes when I can’t get Marvin to work on my phone anymore.</p>
<p>I’ve tried other iOS ereader apps and they don’t yet meet my needs (and let’s be clear, by “needs” I mean high-maintenance wishes), such as custom fonts, good design, configurable typography, and nice page numbers (ideally the 1,024 characters per page rule that Adobe Digital Editions and Marvin use).</p>
<p>Also, I want to use my phone since I have it with me all the time and can read more often, thus I’m not considering a dedicated ereader like a Kobo or a Kindle. And I have a large collection of ebooks I want to read, so print books don’t meet the need.</p>
<p>The default for me here would be a web app (PWA), with a backend built in Django or FastAPI or Go. That’s probably where I’ll land, but from a research angle I see this as a good time to explore possibilities I wouldn’t normally consider. Some ideas along those lines:</p>
<ul>
<li>PDF — convert EPUBs to phone-sized PDFs automatically and then use a PDF reader like Documents instead of a dedicated EPUB app, possibly with the analog filters I recently posted about</li>
<li>Images — convert EPUBs to images (one page per image) and then read via an album in the system photos viewer, deleting each page as I read it (half joking here)</li>
<li>HTML — splat the ebooks out into all their HTML files and then put those up on a server behind authentication, reading them in a browser like normal web pages</li>
<li>Retro ebook reader — web-based app that feels like a Game Boy or one of those tiny consoles, with a chonky pixel font, possibly using game mechanics for page navigation (I’m intrigued by this idea but in reality it would probably feel super gimmicky)</li>
<li>3D app — deboss the type, procedurally generated paper texture, etc. (also feels gimmicky)</li>
<li>Email — export each chapter of the EPUB and then email it to myself (fully joking here) (it would work, sure, but I don’t want to read books in my email)</li>
</ul>
<p>The PDF and HTML options hold some promise, so I plan to continue exploring them for a bit before I cave and write a PWA.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20With Marvin’s recent disappearance from the iOS app store, I’ve started feeling an itch to get my ow...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>I’ve been playing around with making EPUBs look more like print: Why the madness: ebooks feel kind o...</title>
      <link>https://bencrowder.net/blog/2024/1650/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2024/1650/</guid>
      <pubDate>Fri, 12 Jan 2024 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>I’ve been playing around with making EPUBs look more like print:</p>
<p><figure class="border">
        <img src="https://cdn.bencrowder.net/blog/2024/01/epub2analog.jpg" alt="Two book pages. At left is a page from a digital PDF. At right is the same page but modified to look less digital." title="Two book pages. At left is a page from a digital PDF. At right is the same page but modified to look less digital." />
        
      </figure></p>
<p>Why the madness: ebooks feel kind of sterile to me, and I’m intrigued by the idea of giving them a more analog feel.</p>
<p>The experiment is still early on (I’ve only automated the first step so far), but at this point the process involves:</p>
<ol>
<li>Turning the EPUB into a PDF (concatenating each file in the EPUB into a single HTML file, setting some print CSS rules, and printing from HTML to PDF in a browser)</li>
<li>Turning each page into an image (at left in the above image)</li>
<li>Eroding/dilating the image to simulate ink spread</li>
<li>Adding a very slight ripple</li>
<li>Blurring the next page, flipping it backwards, and compositing it at a low opacity</li>
<li>Adding some paper texture (at right in the above image)</li>
<li>Compiling all the page images back into a PDF</li>
</ol>
<p>Other notes:</p>
<ul>
<li>This does mean larger file sizes, but not prohibitively so. (For me, anyway.)</li>
<li>Right now I’m experimenting with doing this statically, in PDF but I imagine most if not all of it could be done dynamically in-browser. (<code>filter: blur(0.25px) contrast(3)</code> in CSS applied twice to text can give a roughly similar effect to erosion/dilation, for example.)</li>
<li>The current erosion/dilation method is acceptable, but I feel like there’s more room for improvement here.</li>
<li>A shortcut to doing the full process is to export a blurred backwards page image, composite it onto the paper texture, and then use that as the background image on each page. You lose the variety, but it’s probably not noticeable.</li>
</ul><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20I’ve been playing around with making EPUBs look more like print: Why the madness: ebooks feel kind o...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Robin Rendle: I’ve always seen the browser as a printing press. Because of that, I’ve always seen my...</title>
      <link>https://bencrowder.net/blog/2023/1582/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2023/1582/</guid>
      <pubDate>Sat, 30 Sep 2023 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><a href="https://buttondown.email/robinrendle/archive/the-browser-is-a-printing-press/">Robin Rendle</a>:</p>
<blockquote>
  <ol>
  <li>I’ve always seen the browser as a printing press.</li>
  <li>Because of that, I’ve always seen myself as a publisher first and then everything else second.</li>
  </ol>
</blockquote>
<p>This, particularly the second point. I’ve seen myself as a publisher for a long time now as well, with all the books and language charts and magazines and even the art. And the web makes publishing so, so easy. It’s magical. Instant worldwide distribution. (Well, instant for the digital things I make.)</p>
<p>His first point has stuck with me as well — I’ve tended to think of my site mostly as a place to publish PDFs and EPUBs and images and other files I’ve made, but I like the idea of the web as the actual delivery mechanism, for more than just blog posts. This isn’t a new idea, of course; it’s just something I haven’t been thinking about as much till now. I’m looking over the type of things I’ve made — books, languages charts, etc. — and thinking what it would be like if the end product were a web page instead of a PDF or an EPUB. And of course nowadays I’m using HTML/CSS as the source for all three main formats for books (web, EPUB, PDF), so it doesn’t necessarily have to be either/or.</p>
<p>Anyway, nothing specific in mind yet. We’ll see what comes of it.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Robin Rendle: I’ve always seen the browser as a printing press. Because of that, I’ve always seen my...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Lector intro</title>
      <link>https://bencrowder.net/blog/2020/lector-intro/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2020/lector-intro/</guid>
      <pubDate>Thu, 13 Aug 2020 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><em>Yet another entry in the <a href="https://bencrowder.net/blog/2020/910/">ignominious series</a> talking about my personal productivity tools.</em></p>
<p>Lector is a reading app for macOS. It’s an Electron app for now. The name comes from the Latin (for someone who reads), with a homophonic hat tip to Hannibal. It came about from wanting a minimalist app that would let me read PDFs and scanned books in dark mode and keep track of my spot across multiple books.</p>
<h2 id="overview">Overview</h2>
<p>A Lector book is just a directory full of images. (PDFs have to be split up into image files first, so I have a small script to do that.) When the app starts up, it looks at the book list directory to see what books are available. It also has a JSON file to track where I’m at on each book (which page and which part of the page), what size the window is, which book I last had open, etc.</p>
<p>The app itself looks like this, on an empty desktop to show how I usually use it:</p>
<p><figure>
        <img src="https://cdn.bencrowder.net/blog/2020/08/lector.png" alt="lector.png" title="lector.png" />
        
      </figure></p>
<p>No title bar, since I find that distracting. And the page images are scaled by default to fit the window width.</p>
<p>Hitting <code>g /</code> brings up a brief panel showing the books that are in the system, with alphabetized keys to get to them (so <code>g a</code> to go to the first, <code>g b</code> for the second, etc.). When I’m done reading a book, I delete its directory, so these mappings change fairly regularly.</p>
<p><code>j</code> and <code>f</code> and double-clicking all go to the next page; <code>k</code> and <code>d</code> both go back to the previous page. <code>J</code> and <code>K</code> move up and down the page (in larger jumps), and the mouse can also be used to scroll. (I find that I mostly use the mouse for scrolling and <code>f</code>/<code>d</code> for page navigation, but every once in a while I’ll use the other keys.)</p>
<p>As you can see in the screenshot, it defaults to dark mode, with slightly lowered contrast for easier reading. <code>i</code> inverts the colors and <code>s</code> toggles the higher contrast view.</p>
<h2 id="howiuselector">How I use Lector</h2>
<p>I use it when I want to read a book I’ve scanned (usually with <a href="https://bencrowder.net/scanbook/">Scanbook</a>). I haven’t used it as often lately, but I fully expect that to change soon. (It’s been very handy for reading textbooks.)</p>
<p>I’ve found that I prefer the window size shown in the screenshot, wide (so that the text is large enough) with just enough vertical room for a paragraph or so (since reading in smaller chunks is easier).</p>
<h2 id="thefuture">The future</h2>
<p>I’d like to move off Electron at some point, probably to a native Swift app. Having it support PDFs directly (or splitting them up itself) would be nice, and having a way within the app to remove books would also be good.</p>
<p>Finally, I’d love to add EPUB support at some point. (I haven’t yet found a desktop EPUB reader I like. Marvin’s great on iOS, though.)</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Lector intro">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Greek New Testament reader&#39;s edition</title>
      <link>https://bencrowder.net/blog/2019/greek-new-testament-readers-edition/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2019/greek-new-testament-readers-edition/</guid>
      <pubDate>Sat, 31 Aug 2019 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Just posted a verseless, paragraphed reader’s edition of the Greek New Testament, <a href="https://bencrowder.net/languages/greek-new-testament-readers-edition/">available for free download as an EPUB</a>. It uses the paragraphing from the Nestle 1904 source edition.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Greek New Testament reader&amp;#8217;s edition">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>epubdiff</title>
      <link>https://bencrowder.net/blog/2019/epubdiff/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2019/epubdiff/</guid>
      <pubDate>Tue, 25 Jun 2019 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>I’ve released <a href="https://bencrowder.net/coding/epubdiff/">epubdiff</a>, a Python script for diffing EPUBs.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20epubdiff">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Scrub</title>
      <link>https://bencrowder.net/blog/2019/scrub/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2019/scrub/</guid>
      <pubDate>Sun, 06 Jan 2019 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Just released <a href="https://github.com/bencrowder/scrub/">Scrub</a>, that Python script for bleeping profanity out of EPUBs that I mentioned <a href="https://bencrowder.net/blog/2018/on-ebooks/">a couple months ago</a>.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Scrub">Reply via email</a></p>]]></description>
    </item>
    
  </channel>
</rss>
