Skip to content

Releases: lauren-alexandra/duet-xteink

Duet v0.1.0-alpha.8

Duet v0.1.0-alpha.8 Pre-release
Pre-release

Choose a tag to compare

@lauren-alexandra lauren-alexandra released this 31 Jul 01:52

Duet v0.1.0-alpha.8

Duet Alpha.8 is the matched X3/X4 promotion of the physically verified WPM and detailed-statistics synchronization repair, together with achievement sync, safer EPUB preparation, clearer statistics charts, optional spice metadata, faster direct return to Home, and the corrected X3 side-button font-size direction.

Downloads

  • Xteink X3: Duet-X3-v0.1.0-alpha.8.bin
  • Xteink X4: Duet-X4-v0.1.0-alpha.8.bin
  • Complete package: Duet-v0.1.0-alpha.8-firmware.zip
  • Optional 123-family font pack: Duet-Open-Font-Pack-v1.zip
  • Optional WordNet 3.0 dictionary: Duet-WordNet-3.0-StarDict.zip
  • Checksums: SHA256SUMS.txt

Verify the checksum, back up the complete SD card, keep a known-good recovery BIN, and flash only the artifact that names your device.

WPM And Reading Statistics

  • Enriched EPUB word counts are now persisted in each book's stats_v8.bin state. Home, Current Book, Pace Trend, Reader DNA Details, Reading Signature, and Signature Details can reuse that count without reopening the EPUB while drawing a statistics page.
  • Nearby Reading Stats Sync carries the persisted word count in its detailed per-book snapshot, allowing physically tested WPM and current-book statistics to converge across an X3 and X4.
  • WPM still requires compatible META-INF/x-locations.json metadata, measurable progress, and attributable reading time. Duet never relabels Xteink screen pages per minute as words per minute.
  • Pace Trend now uses a labeled, smoothed WPM line. Other statistics charts reserve consistent space for their scale labels.
  • Spice/heat metadata is optional. If a catalog omits it, Duet hides the field, removes the spice card from Reading Taste, and leaves spice achievements inactive.

Run python3 scripts/enrich_epub_locations.py --dry-run "/path/to/epub-or-folder" first, then apply with python3 scripts/enrich_epub_locations.py --backup --backup-dir "/path/to/backup-folder" "/path/to/epub-or-folder". The tool skips existing metadata and macOS ._*.epub sidecars. Use --force only when intentionally regenerating a manifest, and keep backups outside Ready to Load and SD-card book folders.

Two-Reader State

  • Nearby Reading Stats Sync protocol v6 exchanges achievement progress and retains peer ledgers under /.duet/state/synced_achievements/.
  • Achievement milestones merge by strongest unlocked progress without replaying old popup notifications.
  • Complete .cstats backups include achievement ledgers. Importing an older archive preserves achievement data that the older format did not contain.

Both readers must run a protocol-v6-capable release. Alpha.8 does not pair for Nearby Reading Stats Sync with Alpha.7's protocol-v5 implementation.

Reader And Controls

  • Returning directly from a book to Home skips a nonessential timing-file write after committing reading state.
  • On X3, holding the physical right side button increases font size and holding the physical left side button decreases it. On X4, holding Up increases font size and holding Down decreases it.
  • Font-size changes preserve the visible reading position on both devices. A relayout started from the first page of a chapter remains on the true chapter start instead of drifting forward, and explicit chapter selection discards stale pending jumps.
  • The complete public font gallery shows all 123 packaged families in the same type categories used by the device picker, with a separate collection for all 37 e-reader-optimized families.

Verification

  • All 117 host tests pass.
  • All seven desktop-helper tests pass.
  • X3 public firmware: 5,944,672 bytes, with 608,928 bytes free in the OTA app partition; SHA-256 843c2f96ce11aa564d19877e1b9572e5a52a6e2613134da2255090ebbdb77b13.
  • X4 public firmware: 5,807,600 bytes, with 746,000 bytes free in the OTA app partition; SHA-256 a54fe20fa7e8b65afd1a5fa45f7be5448f07c707cf68a7e7e9a6d7659eef6e4e.
  • Matched private Alpha.7.1 builds physically passed current-book WPM and detailed-statistics convergence on Lauren's X3 and X4 before the accepted changes were promoted into this public release.
  • High-priority exact-artifact checks remain: X3 right must increase and left must decrease, X4 Up must increase and Down must decrease, and neither device may advance the visible text during relayout. The final relayout-anchor guard in this release was built after the last private physical pass and is included for broader alpha testing.

Build and simulator success do not prove physical e-ink refresh, SD-card timing, radio sync, sleep/wake, or long-session stability. Follow the Alpha.8 Device Acceptance route on the actual reader and keep the previous known-good BIN until the new build passes.

Installation And Recovery

For a first Duet installation or recovery, use the CrossPoint web installer's Custom .bin option. For a Duet-to-Duet update, place exactly one device-matched BIN at the SD-card root and choose Settings > System > SD Firmware Update. After flashing, confirm Settings > System reports Duet 0.1.0-alpha.8.

Read Alpha Testing, Installation, and Troubleshooting before flashing.

Credits

Duet descends from CrossPoint Reader through CrossInk and directly credits CrossInk Carousel, CrumBLE, CPR-vCodex, CrossPet, Biscuit, SEEK Reader, aalu's reading-statistics work, CrossPoint Flow, and the bundled font projects. Exact revisions, direct adaptations, design lineage, transitive credit, and licenses are recorded in THIRD_PARTY_NOTICES.md and FONT_SOURCES.md.

Duet is released under the MIT License. Copyright in Duet's original modifications and additions is held by Lauren Landau; upstream copyrights remain with their respective authors.

Duet v0.1.0-alpha.7

Duet v0.1.0-alpha.7 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Jul 20:48
90c6321

Duet v0.1.0-alpha.7

Duet Alpha.7 is a focused statistics, font-management, and public-documentation update for the Xteink X3 and X4. It keeps the Alpha.6 storage, sync, reader, library, and recovery foundation while making the statistics section more responsive and replacing visible screen-page pace labels with estimated words per minute where the book provides enough information.

Downloads

  • Xteink X3: Duet-X3-v0.1.0-alpha.7.bin
  • Xteink X4: Duet-X4-v0.1.0-alpha.7.bin
  • Complete firmware package: Duet-v0.1.0-alpha.7-firmware.zip
  • Optional 123-family font pack: Duet-Open-Font-Pack-v1.zip
  • Optional WordNet 3.0 dictionary: Duet-WordNet-3.0-StarDict.zip
  • Firmware checksums: SHA256SUMS.txt

Verify the checksum, back up the complete SD card, keep a known-good recovery BIN, and flash only the artifact that names your device. The font and dictionary ZIPs are optional SD-card extras, not firmware files.

Statistics

  • Current Book, Pace Trend, Reader DNA details, Reading Signature, and related pace fields use estimated WPM instead of exposing Xteink screen pages per minute as WPM.
  • Plain EPUBs still read normally. True visible WPM and reference-page statistics require compatible META-INF/x-locations.json word-location metadata. Run Duet's one-time EPUB WPM Preparation after adding new books; the tool supports a dry run, skips already enriched EPUBs, and can keep .duetbak copies in a separate backup folder before rewriting. Keep that backup folder outside Ready to Load and outside the SD-card book folder.
  • A dash appears when Duet cannot calculate a defensible WPM. Screen-page pace remains an internal signal for time-left and reading-rhythm estimates.
  • Book, Device, Synced, and Devices sit together at the beginning of the horizontal statistics strip.
  • Fastest Reads, Start/Finish, and Device Split paint their page shell first, then load and cache derived data during the activity loop.
  • The Streaks page chooses the next milestone above the personal longest streak and reports how many consecutive days the current streak still needs.

Font Management

  • Duet-Open-Font-Pack-v1.zip contains 123 reviewed open-source families, 738 validated .cpfont files, and 10, 12, 14, 16, 18, and 20 pt for both X3 and X4.
  • The font archive includes per-file checksums, upstream project links, pinned source revisions, and bundled license notices.
  • People who only want a few families can use the credited 24-family on-device catalog or follow the upstream source links in FONT_PACK_SOURCES.tsv and convert only the fonts they choose.
  • Backing out of the WiFi picker from Manage Fonts no longer unloads and rebuilds the complete SD font registry or restarts the reader.
  • The complete font registry is released only after WiFi connects and the manifest download is actually about to begin, preserving the low-memory download path.

Public Documentation And Media

  • The desktop library-prep guides cover EPUB word-location enrichment and exact-size X3/X4 cover prefill, with a complete copy-ready prompt for Codex, Claude CoWork, Perplexity Computer, or another local computer assistant.
  • A Dictionary Setup guide covers the ready-to-copy WordNet 3.0 asset, third-party StarDict files, first index preparation, in-book lookup, and common failures.
  • The public gallery publishes each shared X3/X4 interface screen once at representative X4 resolution instead of duplicating the same UI twice.
  • The complete gallery contains 69 reviewed PNGs: 43 statistics screens, 22 feature and app images, and four font comparisons.
  • Search, results, and More Info form one accurate sequence: the highlighted Love Theoretically result opens the matching cover, metadata, and description.

Verification

  • All 117 host tests pass.
  • X3 and X4 simulator smoke tests pass.
  • X3 public firmware: 5,941,904 bytes, with 611,696 bytes free in the OTA app partition.
  • X4 public firmware: 5,804,864 bytes, with 748,736 bytes free in the OTA app partition.
  • The font pack contains exactly 123 allowlisted family folders and 738 .cpfont files, has no AppleDouble or .DS_Store sidecars, passes a complete ZIP integrity test, and has SHA-256 1d0b100683e05a3c2f9ad6e1fbf6f24c2c3674c3ee096ddfa32c383ccbf85c7c.

Build and simulator success do not prove physical e-ink refresh, SD-card timing, radio sync, sleep/wake, or long-session stability. Follow the Alpha.7 Device Acceptance route on the actual reader and keep the previous known-good BIN until the new build passes.

Installation And Recovery

For a first Duet installation or recovery, use the CrossPoint web installer's Custom .bin option. For a Duet-to-Duet update, place exactly one device-matched BIN at the SD-card root and choose Settings > System > SD Firmware Update. After flashing, confirm Settings > System reports Duet 0.1.0-alpha.7.

Read Start Here, Alpha Testing, Installation, and Troubleshooting before flashing.

Credits

Duet descends from CrossPoint Reader through CrossInk and directly credits CrossInk Carousel, CrumBLE, CPR-vCodex, CrossPet, Biscuit, SEEK Reader, aalu's reading-statistics work, CrossPoint Flow, and the bundled font projects. Exact revisions, direct adaptations, design lineage, transitive credit, and licenses are recorded in THIRD_PARTY_NOTICES.md and FONT_SOURCES.md.

Duet is released under the MIT License. Copyright in Duet's original modifications and additions is held by Lauren Landau; upstream copyrights remain with their respective authors.

Duet v0.1.0-alpha.6

Duet v0.1.0-alpha.6 Pre-release
Pre-release

Choose a tag to compare

@lauren-alexandra lauren-alexandra released this 29 Jul 00:26

Duet v0.1.0-alpha.6

Duet's first public tester release is a cleanly versioned early alpha for the Xteink X3 and X4. It combines the latest shared device code with the reviewed public documentation, attribution, privacy checks, deterministic packaging, and recovery guidance. Internal development suffixes such as wpm2 and indexing2 are intentionally absent from the public version and filenames.

Downloads

  • Xteink X3: Duet-X3-v0.1.0-alpha.6.bin
  • Xteink X4: Duet-X4-v0.1.0-alpha.6.bin
  • Complete package: Duet-v0.1.0-alpha.6-firmware.zip
  • Checksums: SHA256SUMS.txt

Verify the checksum, back up the complete SD card, keep a known-good recovery BIN, and flash only the artifact that names your device.

Highlights

  • Eight customizable Home themes, including Dashboard and Dashboard Extended.
  • Six book-browser layouts: one-line list, two-line list, 2x2, 3x3, 4x4, and five-cover carousel.
  • Smart title-word, author, and series search; More Info; Favorites; reading-state filters; Library Overview; Reading Taste; and Series Progress.
  • Thirty-three top-level reading-statistics pages, exact session logging, per-date book attribution, complete .cstats archives, and direct X3/X4 Nearby Reading Stats Sync.
  • Explicit Nearby Position Sync inherited from CrossInk plus KOReader Sync inherited from CrossPoint.
  • Categorized SD-card fonts with A/B comparison and synthetic bold/italic fallbacks, StarDict dictionaries, bookmarks, clippings, 108 achievements, Tetris, If Found, Screen Clean, and customizable Home/Apps launchers.
  • Twelve sleep modes, configurable locked-device sleep-image cycling, configurable Power actions, and shared X3/X4 feature behavior with device-specific memory and refresh tuning.

The complete source-verified feature and lineage inventory is in FEATURES.md, and the public-facing walkthrough is in Duet: the complete feature tour.

Clean Alpha.6 Changes

Canonical Duet Storage

New writes use /.duet:

/.duet/
├── state/
├── books/
├── cache/
│   ├── thumbs/
│   ├── layouts/
│   └── fileindex/
├── backups/
│   └── reading-stats/
└── migration/

Inherited /.crossink, /.crosspoint, and /.crossink-stats-backup data remains untouched as a migration and recovery source. Bounded global state imports on first boot; large per-book records migrate lazily as their books are opened. Canonical files always win, interrupted imports retry, and the completion marker is written only after the bounded import succeeds.

Reader And Chapter Indexing

  • The temporary first-pages chapter preview now starts full completion immediately when the reader reaches its boundary instead of repainting the same page indefinitely.
  • New-chapter completion begins sooner while typography relayout remains cooperatively guarded.
  • EPUB extraction, HTML parsing, and page layout use smaller interruptible chunks and safe cancellation checkpoints.
  • Chapter-index timing records completion, cancellation, low-memory deferral, failure, last duration, and worst duration under /.duet/state/reader_timing.txt.
  • Current-book and Home speed fields show estimated WPM after at least ten seconds of reading and measurable progress. Historical aggregate trend records retain relative screen-page pace internally because old journals do not include per-book word totals.

Covers And Library Responsiveness

  • Exact high-quality 1-bit thumbnails persist in sharded /.duet/cache/thumbs paths.
  • The five-cover carousel keeps the visible window plus one hidden lookahead cover in each direction and reuses overlapping artwork during ordinary movement.
  • Cover grids can prefetch the immediately previous and next pages inside a guarded memory budget.
  • Picker input remains on the storage-owning input task; cover generation is cooperatively cancellable instead of moving open SD file handles across tasks.
  • The desktop cover-prefill script creates every X3/X4 grid and carousel size in one incremental computer-side pass while the firmware still handles genuinely new books.
  • Clean Library Cache moves confirmed orphaned per-book records into recoverable /.duet/books/.attic batches and refuses cleanup after an incomplete scan.

Reading Statistics And Sync

  • Nearby Reading Stats Sync exchanges global totals, per-book summaries and detail, journal, attribution ledger, Stats Date, device identity, and retained peer snapshots.
  • Duplicate tail acknowledgements, progress reporting, idle timeouts, and repeated bidirectional convergence are hardened.
  • Started Books uses merged records, dates are library-wide and scrollable, redundant summary navigation is removed, and chart spacing is corrected.
  • All active reading time is retained, while a counted session requires at least one page turn.
  • Complete .cstats export and guarded restore use canonical paths, map recognized legacy records, validate structure and CRCs, and create a safety export before replacement.

Public Release Engineering

  • Public X3/X4 build profiles retain all ten bundled hyphenation languages and use deterministic Duet artifact names.
  • The release audit blocks local home paths, phone-number-shaped text, private device state, unapproved ebooks, version drift, and missing release records.
  • The firmware ZIP now includes the feature catalog, user guide, current tester documents, cover-prefill scripts, font source ledger, bundled third-party notices, and every redistributed built-in font license it references.
  • The project is presented as an independent one-person project created and maintained by Lauren Landau, with AI-assisted implementation identified separately and every upstream code or design lineage credited.

Known Alpha Risks

  • On-device cover generation can still be slow in a very large unprefilled library. Run the included desktop prefill after loading a large or multiply organized card.
  • A complex or image-heavy EPUB chapter can still require visible indexing when guarded background work cannot finish safely.
  • X3 and X4 can behave differently under the same card and library load.
  • Nearby sync is designed to converge idempotently, but repeated real-device sync in both directions remains a high-value tester target.
  • The locked three-click sleep-image gesture can feel like one wake press followed by three deliberate taps on current hardware.
  • The achievement unlock ledger is not included in .cstats, although restored reading history can re-derive many milestones.
  • The private 130-family development font collection is not bundled. Only licensed built-in fonts and their notices ship with this firmware package.

Installation And Recovery

For a first Duet installation or recovery, use the CrossPoint web installer's Custom .bin option. For a Duet-to-Duet update, place exactly one device-matched BIN at the SD-card root and choose Settings > System > SD Firmware Update. After flashing, confirm Settings > System reports Duet 0.1.0-alpha.6.

Follow Alpha Testing and the short Alpha.6 Device Acceptance route. Keep the complete SD-card backup and previous known-good firmware until the exact X3 or X4 artifact has passed your own open, read, Home, sleep, wake, library, and recovery checks.

Credits

Duet descends from CrossPoint Reader through CrossInk and directly credits CrossInk Carousel, CrumBLE, CPR-vCodex, CrossPet, Biscuit, SEEK Reader, aalu's reading-statistics work, CrossPoint Flow, and the bundled font projects. Exact revisions, direct adaptations, design lineage, transitive credit, and licenses are recorded in THIRD_PARTY_NOTICES.md and FONT_SOURCES.md.

Duet is released under the MIT License. Copyright in Duet's original modifications and additions is held by Lauren Landau; upstream copyrights remain with their respective authors.