Skip to content

Releases: cidy02/kudos-ao3-reader

Unsigned build — claude/redesign-screens-completion-acd422 (6217a9f)

Choose a tag to compare

Unsigned build of claude/redesign-screens-completion-acd422 at 6217a9f.

This IPA is not signed and will not install as-is. Sign it with AltStore, Sideloadly or SideStore using your own certificate.

Nothing in this repository carries an Apple DEVELOPMENT_TEAM — that is a deliberate rule (see AGENTS.md), so there is no signed build to hand out.

This tag is rolling: the next successful build of this branch replaces it. For an older commit, take the .ipa artifact from that run of the workflow.

Built from 6217a9f.

Unsigned build — codex/kudos-redesign (77d8435)

Choose a tag to compare

Unsigned build of codex/kudos-redesign at 77d8435.

This IPA is not signed and will not install as-is. Sign it with AltStore, Sideloadly or SideStore using your own certificate.

Nothing in this repository carries an Apple DEVELOPMENT_TEAM — that is a deliberate rule (see AGENTS.md), so there is no signed build to hand out.

This tag is rolling: the next successful build of this branch replaces it. For an older commit, take the .ipa artifact from that run of the workflow.

Built from 77d8435.

Kokoro Neural Engine pack — 28 English voices

Choose a tag to compare

@cidy02 cidy02 released this 23 Aug 12:41

Core ML Kokoro pack for Kudos Read Aloud, English.

28 voices (was 1). A voice pack is a flat [510, 256] fp32 style-vector
blob and is not precision-dependent — fp16 vs int8 describes the model
weights, not these vectors — so the fp16 pack carries the full American and
British voice set: af_*, am_*, bf_*, bm_*.

Voices are converted from hexgrad/Kokoro-82M, whose .pt files contain
exactly that raw payload in their <name>/data/0 zip member. Verified
byte-identical to FluidInference's published af_heart.bin.

Model source is now pinned to FluidInference/kokoro-82m-coreml revision
acac8811a9acefe8bf7a5e3fcba99bd8fc50dcd6. The previous pack was built from
an unpinned main and its weights no longer match what upstream serves —
KokoroAlbert is 5,718,848 bytes here against 11,405,312 there, a recompile
rather than a truncation, with model.mil and metadata.json differing too.
Pinning makes the pack reproducible; without it the app's expectedSHA256
silently starts describing different weights.

Built by Scripts/pack-kokoro-ane-github-release.sh.

Kokoro Neural Engine pack (dense FP16)

Pre-release

Choose a tag to compare

@cidy02 cidy02 released this 21 Aug 03:52

English 7-stage Kokoro Core ML without 8-bit palettization. ANE stages store dense Float16; Noise and Tail store dense Float32. Same I/O as FluidAudio 0.15.6 (Noise named KokoroNoise_v2). G2P encoder/decoder remain FP16. SHA-256: 44705ed4708d703b18e56f5761d000e183eae883db0ac0aac2d5a701bcf6f6f4

Kokoro Neural Engine pack

Pre-release

Choose a tag to compare

@cidy02 cidy02 released this 21 Aug 03:29

English Neural Engine Kokoro Core ML graphs (7 stages) plus G2P encoder/decoder, vocab, and the English lexicon cache. Apache-2.0, mirrored from FluidInference/kokoro-82m-coreml for Kudos TTS. SHA-256: 7e2dcc97a9d132db6ce71eb80d8394961da754960f8cd6b1c8702c399bd7dc0f

Kudos Android v0.2.2-alpha

Pre-release

Choose a tag to compare

@cidy02 cidy02 released this 20 Aug 03:37

Native PDF import — reads real text out of PDFs instead of best-effort guessing.

New

  • Importing a PDF now uses MuPDF's structured-text engine (same library the iPhone app already uses), reading the document's own text/layout data instead of a regex scanning raw bytes for readable-looking characters. The old approach measured 10 of 18 "paragraphs" as decompressed binary noise on a real PDF — every ordinary PDF (anything with a /FlateDecode content stream, which is nearly all of them) silently refused to import at all. Regular PDFs should now actually import.
  • The engine also powers metadata recovery: a PDF exported from calibre/FanFicFare (with its Label: value header block) now has that block read correctly, so an imported work keeps its real title, tags, and source URL instead of losing its origin.

Fixed (found and fixed before this reached you)

Grok reviewed the new native code adversarially before this build shipped. Two of its findings would have caused real crashes on real devices:

  • A page containing a character outside the Basic Multilingual Plane (emoji, some CJK, plenty of things that show up in author's notes) could abort the app's native layer outright — the text-encoding conversion at the JNI boundary was subtly wrong.
  • A densely-formatted page (lots of short lines) could overflow Android's JNI local-reference table and crash the app.
  • A malformed/partially-unreadable PDF page could leak native memory or silently drop text it had already extracted, instead of keeping what it read (which matters for a long, imperfect scan).
  • PDF import now runs off the main thread — a large document (100+ pages) previously risked freezing the UI (ANR) while it extracted text.
  • A failed import (e.g. disk full) could leave an orphaned temp file behind; now cleaned up on every path.

Also

  • Fixed a compile-time-only bug in Reading Queue's "Add to Queue" (unrelated leftover from other in-progress work) and wired up missing test dependencies for an existing Account crash-repro test.

Native library is built locally from a pinned MuPDF commit (AGPL-3.0, not bundled in prior builds either) — nothing about the update mechanism itself changed.

Kudos Android v0.2.1-alpha

Pre-release

Choose a tag to compare

@cidy02 cidy02 released this 10 Aug 13:02

iOS ↔ Android parity pass — every item from a twice-validated cross-platform review, plus five defects the review itself missed.

Fixed — your data

  • Library sync could permanently wedge your sync folder. The manifest — the only index of what the folder holds — was written by truncating it to zero first, so an interrupted write left it unreadable. Worse, sync-down runs before sync-up, so a damaged manifest failed every later sync and the write that would have repaired it never ran. Writes now stage and swap atomically, keep a .bak, and recover from a damaged manifest instead of failing forever.
  • A changed EPUB could be silently reverted. Sync restored the older copy from your folder over the newer one on the device, then pushed the old copy back out. The file was destroyed, not just skipped.
  • An edit that didn't change a file's size never synced at all. Files were compared by byte count alone.
  • Deleting a reading queue or a highlight on iPhone didn't delete it here. The deletion was dropped on restore, so it came straight back.
  • Restoring an iPhone backup created a second "Saved for Later" that could not be renamed or deleted, quietly splitting the shelf in two. System queues are now matched properly.
  • Queued works no longer get promoted to saved on restore, so a work you queued but chose not to save stays out of your library.
  • Orphaned files were pruned before the manifest was written, so an interruption could delete files the folder still listed.

Fixed — things that looked like they worked

  • "Reveal all" did nothing in Hide mode. The eye button flipped its icon and left every shelf empty.
  • Logging out could be undone. Tapping "Verify Session" and then "Log out" while it was still working re-installed your AO3 cookies after the logout — you looked signed out and were not.
  • Reading Insights counted the wrong works, excluding anything you had read and later un-saved. All nine statistics were affected.
  • The series row on a work did nothing. It now opens the series.
  • A commenter's name is now tappable and opens their profile. The link was already being read, just never used.
  • Account → Writing "Series" and "Drafts" were placeholders announcing their own absence. Series is now real; Drafts opens AO3, as on iPhone.
  • Errors showed raw code (Validation(message=…)) instead of a sentence. Being offline now says so, rather than looking like a server fault.
  • AO3 preference help links were parsed into a field that was never filled in.

Fixed — reading

  • The OLED theme was discarded on restore, silently putting you back in Light mode — and the reader had no OLED theme at all, so the app went black and the page didn't.
  • Imported HTML works produced malformed chapters. Line breaks were left unclosed inside files declared as strict XHTML.
  • Author's notes in works Kudos converts itself are now marked and styled, as on iPhone.
  • A reading position saved on iPhone could be applied here, landing you at a position meant for a different layout.
  • Letter and word spacing sliders went past what a restore would accept, so extreme values were silently thrown away.

Politeness

Kudos ran two unattended full-library sweeps against AO3 — a weekly availability check and a daily tag refresh — with no cap, no battery or network conditions, and no skip for works checked recently. One failure re-ran the entire library. The availability sweep is now manual only, matching iPhone, and both are capped, spaced, and interruptible. This app's networking policy forbids periodic full-library sweeps; it now honours that.

Also

Release notes are shown before an update installs (you are reading them in the app if it offered you this). Bug reports now identify the exact build. The User-Agent version no longer drifts from the app version.


Test coverage: 199 → 212 suites, 660 → 721 tests, zero failures. The folder-sync code had no tests at all before this release; it now has seven, and writing them is what uncovered the EPUB data-loss bug above.

Kudos Android v0.2.0-alpha

Pre-release

Choose a tag to compare

@cidy02 cidy02 released this 05 Aug 02:22

Android parity sweep — 119 of 121 checklist items resolved, zero failing.

Fixed

  • Account tab crash, at the root. The previous fix guarded a null; the real cause was hubEntries being built during class initialisation, which left the hub silently missing counts even after the crash stopped.
  • "Open with Kudos" and Share now work. The manifest advertised EPUB/PDF but nothing read the incoming intent, so shared files were silently discarded.
  • PDF import no longer produces garbage. It emitted decompressed binary as paragraphs; it now refuses honestly when it can't read a PDF.
  • First-launch users are no longer trapped on the sync-folder screen — "Not Now" didn't dismiss.
  • Debug logging that wrote comment content to logcat in release builds.

Added

  • Import handles nested ZIPs, non-UTF-8 text, and calibre/FanFicFare metadata — including recovering the original source URL.
  • Rebuild from Original for converted works.
  • Reading-queue series preservation and a Queue Storage screen.
  • Reader Comments opens on the chapter you're reading.
  • Home "See all" per section; multi-select across Search, Browse and Author.
  • Pull-to-refresh everywhere; shared-element zoom into work detail and the reader.
  • Folder sync: delta export, pending-change tracking, and conflict merging that keeps every version.

Known gaps

  • PDF text extraction is deliberately minimal pending MuPDF.
  • Reader layout is wrong in landscape (it does not crash).
  • Authenticated AO3 write paths are verified by code review, not against a live session.

Kudos Android v0.1.9-alpha

Pre-release

Choose a tag to compare

@cidy02 cidy02 released this 04 Aug 21:09
  • Fix Account tab crash (NPE in AO3AccountListCountsCache.get)
  • Fix Reader crash on device rotation (EpubNavigatorFragment no-arg constructor)

Kudos Android v0.1.8-alpha

Pre-release

Choose a tag to compare

@cidy02 cidy02 released this 04 Aug 19:45

Merged Phase 10-11 parity, fixed Play Protect, fixed Account Tab crash, bumped version.