| 2026-10-05 02:20 | Revert CCAI clause: F-Droid app keeps AGPL-3.0-only | equwal |
| 2026-10-05 00:08 | Add ccai-2507.12713.pdf: the CCAI paper, arXiv:2507.12713 (CC BY-NC-SA 4.0) | Spenser Truex |
| 2026-10-05 00:08 | LICENSE: add the Contextual Copyleft AI (CCAI) clause, 2026-10-04 | Spenser Truex |
| 2026-10-04 21:17 | Give the F-Droid recipe the 0.1.2 build | equwal |
| 2026-10-04 21:11 | Set the version to 0.1.2 | equwal |
| 2026-10-04 21:11 | Turn on R8 | equwal |
| 2026-09-27 00:37 | Tell gitleaks that the certificate hash in the F-Droid recipe is not a secret | equwal |
| 2026-09-27 00:37 | Give the F-Droid recipe the full commit hash of v0.1.1 | equwal |
| 2026-09-27 00:33 | Tell gitleaks that the certificate hash in the F-Droid recipe is not a secret | equwal |
| 2026-09-27 00:33 | Take the Node tar.gz in the F-Droid recipe, and write Binaries on one line | equwal |
| 2026-09-27 00:30 | Tell gitleaks that the certificate hash in the F-Droid recipe is not a secret | equwal |
| 2026-09-27 00:30 | Write the F-Droid recipe in the format of fdroid rewritemeta | equwal |
| 2026-09-27 00:23 | Tell gitleaks that the certificate hash in the F-Droid recipe is not a secret | equwal |
| 2026-09-27 00:23 | Prepare release 0.1.1 for F-Droid and Google Play | equwal |
| 2026-09-27 00:23 | Replace the Capacitor icon and splash with an icon of the app | equwal |
| 2026-09-26 23:57 | Merge the fixes from the code review of the wiring | truex |
| 2026-09-26 23:47 | Describe book-open.ts and book-subtitles.ts in the README layout | truex |
| 2026-09-26 23:44 | Make each status message readable on a phone | truex |
| 2026-09-26 23:41 | Cut off the OCR start with its own error, not AbortSignal.reason | truex |
| 2026-09-26 23:40 | Offer a SubRead result for a closed book when that book opens | truex |
| 2026-09-26 23:32 | Tell when SubRead waits for pages that could not be read | truex |
| 2026-09-26 23:23 | Do not let late meta data undo a change of the user | truex |
| 2026-09-26 23:21 | Do not show old status texts over the new book | truex |
| 2026-09-26 23:18 | Let a book that the user opens win over the restore of the last book | truex |
| 2026-09-26 23:15 | Keep a subtitle file for the book that loads, not the book before | truex |
| 2026-09-26 23:11 | Give the start of OCR a time limit | truex |
| 2026-09-26 23:03 | Sign the release build with the SubRead key, and set the version to 0.1.0 | truex |
| 2026-09-26 23:02 | Show phone screenshots and the install steps in the README | truex |
| 2026-09-26 21:37 | Stop the OCR worker when its start fails | truex |
| 2026-09-26 21:35 | Keep the spans on their tokens when an earlier page is read | truex |
| 2026-09-26 20:09 | Remove four functions that the app no longer uses | truex |
| 2026-09-26 19:58 | Stop the OCR of a page after a time limit or a worker error | truex |
| 2026-09-26 19:53 | Give tesseract.js a PPM image of the page, not the canvas | truex |
| 2026-09-26 19:26 | Render the page again at the pinch zoom | truex |
| 2026-09-26 19:22 | Say a player problem once in the strip | truex |
| 2026-09-26 19:21 | Keep the status strip one line high, so the page does not move | truex |
| 2026-09-26 19:19 | Show the hover color of the top bar only where a pointer can hover | truex |
| 2026-09-26 19:18 | Make the buttons of the top bar 48 px | truex |
| 2026-09-26 19:17 | Move the Follow button over the page, out of the top bar | truex |
| 2026-09-26 19:03 | Describe the kept book, Back, the long press and the suite in the README | truex |
| 2026-09-26 19:01 | Make an Anki card from a long press on a word | truex |
| 2026-09-26 18:56 | Show the SubRead suite checklist on the start card and in the menu | truex |
| 2026-09-26 18:53 | Handle Back, the app state, the screen and player problems on Android | truex |
| 2026-09-26 18:49 | Make subtitles with SubRead after all pages are read | truex |
| 2026-09-26 18:43 | Go on after a page that OCR cannot read, and keep Force OCR per book | truex |
| 2026-09-26 18:33 | Open the last book at its page with its subtitles | truex |
| 2026-09-26 18:25 | Keep the open book when a file does not load | truex |
| 2026-09-26 18:20 | Share the .srt with a clip, and find the debug build of SubRead Anki | truex |
| 2026-09-26 18:14 | Grow the side padding of the mark with the line height | truex |
| 2026-09-26 17:48 | Give the timed tests room for a busy machine | truex |
| 2026-09-26 17:48 | Merge the reading view fixes: top bar, status strip, start card, fit width, page turns, follow hold, crossing cues, drawer | truex |
| 2026-09-26 15:14 | Remove the old style rules of the top bar buttons | truex |
| 2026-09-26 15:02 | Grow the box over CJK punctuation in its own OCR word | truex |
| 2026-09-26 14:54 | Load pdf.js and tesseract.js when the app needs them | truex |
| 2026-09-26 14:51 | Mark only one cue in the list, and scroll a new page after a resize | truex |
| 2026-09-26 14:49 | Describe the strip, the page turns and the follow hold in the README | truex |
| 2026-09-26 14:46 | Close the drawer with a tap outside it, and scroll only the cue list | truex |
| 2026-09-26 14:41 | Turn the page inside a cue that crosses a page break | truex |
| 2026-09-26 14:38 | Add the Capacitor App plugin | truex |
| 2026-09-26 14:35 | Hold the follow after a page turn by the user | truex |
| 2026-09-26 14:33 | Stop the app crash when Android cannot start an activity | truex |
| 2026-09-26 14:30 | Turn pages with keys and swipes, and go to a page | truex |
| 2026-09-26 14:30 | Serve the OCR worker and core from the app | truex |
| 2026-09-26 14:25 | Fit the page to the width, and keep the mark in view | truex |
| 2026-09-26 14:19 | Keep the last book, its page and its subtitles in IndexedDB | truex |
| 2026-09-26 14:18 | Fit the top bar to a phone, and show a start card | truex |
| 2026-09-26 14:15 | Decode subtitle files in UTF-8, UTF-16 or Shift_JIS | truex |
| 2026-09-26 14:15 | Make a tap on the page work like a finger | truex |
| 2026-09-26 14:12 | Show the status in a strip under the top bar | truex |
| 2026-09-26 14:08 | Extend the cue box to the edges of its words | truex |
| 2026-09-26 14:03 | Merge the native plugin methods: keep awake, lookup return watch, Anki card, suite status, overlay opener, SubRead result file | truex |
| 2026-09-26 13:59 | Let SubRead write the subtitles into a result file | truex |
| 2026-09-26 13:55 | Keep the book text out of the saved state of the reader | truex |
| 2026-09-26 13:53 | Open SubRead Overlay from the reader | truex |
| 2026-09-26 13:52 | Tell which apps of the SubRead suite are installed | truex |
| 2026-09-26 13:49 | Make a card in SubRead Anki from the plugin | truex |
| 2026-09-26 13:49 | Make normalizeText stable when case folding moves marks | truex |
| 2026-09-26 13:47 | Wait for a dictionary in its own task to close | truex |
| 2026-09-26 13:44 | Merge the module fixes: cache upgrade, lookup text, hidden rows, player errors, dev watch | truex |
| 2026-09-26 13:43 | Keep the screen on during read-along | truex |
| 2026-09-26 13:42 | Do not watch android/ in the dev server | truex |
| 2026-09-26 13:41 | Find the sentence around a tapped token | truex |
| 2026-09-26 13:40 | Reject a player command that the player did not do | truex |
| 2026-09-26 13:38 | Hide the elements that have the hidden attribute | truex |
| 2026-09-26 13:38 | Read the pages after the current page first | truex |
| 2026-09-26 13:36 | Start a lookup at the word, and skip punctuation | truex |
| 2026-09-26 13:36 | Follow again after an alignment only when the cue moves | truex |
| 2026-09-26 13:32 | Remove the spans when the pages are read again | truex |
| 2026-09-26 13:31 | Keep one aligner for each subtitle file | truex |
| 2026-09-26 13:29 | Put no space around ー and the other shared kana marks | truex |
| 2026-09-26 13:28 | Align each page on its own with unique 8-character runs | truex |
| 2026-09-26 13:27 | Upgrade the page cache database and make the cache optional | truex |
| 2026-09-25 02:15 | Follow the audiobook through the SubRead suite | truex |
| 2026-09-25 02:14 | Add the SubRead plugin, the clock sources and the page cache | truex |
| 2026-09-25 01:59 | Read the text layer of a PDF page as tokens | truex |
| 2026-09-25 01:54 | Add the player state parser, the play clock and the follower | truex |
| 2026-09-25 01:52 | Remove the dictionary, local audio and subtitle making | truex |
| 2026-09-24 12:21 | Make subtitles from the audiobook and the OCR text | truex |
| 2026-09-24 12:21 | Copy the SubPlz browser engine from subplz-web | truex |
| 2026-09-24 12:21 | Add word ids to OCR tokens and build the book text from them | truex |
| 2026-09-24 11:49 | Play local audio pronunciations from the lookup popup | truex |
| 2026-09-24 11:49 | Add the LocalAudio Capacitor plugin | truex |
| 2026-09-24 11:07 | Add tap-to-look-up and a phone layout | truex |
| 2026-09-24 11:07 | Read Yomitan dictionary zips | truex |
| 2026-09-24 11:06 | Add Japanese deinflection rules | truex |
| 2026-09-24 00:52 | Keep CRLF line endings in batch files | truex |
| 2026-09-24 00:52 | Document the Android build | truex |
| 2026-09-24 00:52 | Add Capacitor Android project | truex |
| 2026-09-24 00:43 | Render PDF pages with the print intent | truex |
| 2026-09-24 00:38 | Add web UI, synthetic fixtures and OCR end-to-end test | truex |
| 2026-09-24 00:32 | Add alignment core and subtitle parser with tests | truex |