Skip to content

YACP 1.5.0-yacp

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Aug 23:19

This release focuses on practical e-ink R&D rather than feature volume. Its main visible improvement is a new adaptive
grayscale path that preserves substantially more detail in images displayed on the reader.

Highlights

Better e-ink image rendering

YACP now uses adaptive tonal analysis for grayscale BMP sleep images. The previous path could push too much useful
image detail into white or black, especially on images with narrow or uneven tonal ranges. The new path analyzes the
image before dithering and maps tones more effectively onto the four e-ink grayscale levels.

This is easiest to see on sleep screens, but the implementation is a rendering improvement first, not just a cosmetic
sleep-screen feature.

Real-device before and after comparisons

Per-book sleep-image galleries

Images can now be associated with a specific book. When the reader sleeps from that book, YACP can use a prepared BMP
from that book's gallery before falling back to the normal cover/custom sleep-screen behavior.

The selection is randomized and avoids immediately repeating the previous image when several prepared BMPs are
available.

Browser-side image preparation

The File Transfer page can prepare images before upload:

  • crop visually in the browser;
  • target X3/X4 dimensions;
  • preview four-level grayscale output;
  • tune grayscale thresholds;
  • generate a reader-ready BMP before upload.

This keeps expensive image preparation mostly off the ESP32-C3 and makes the feature usable without a separate desktop
conversion tool.

YACP-sleep-images-overview-inline-reader-first.mp4

Complete phone-to-reader demonstration. Download the original-quality video.

Cleaner sleep and wake behavior

YACP now restores the pre-sleep framebuffer after image-based sleep screens, avoiding the normal boot splash on wake.
On X3, the no-flash wake indicator remains reserved for true Quick Resume sleep screens, while image-based sleep
screens use a conservative half refresh.

The Waking up label is shown only when it helps avoid a confusing Home-screen state. Direct resumes into the reader
stay visually quiet.

More reliable reading history

Finished-book tracking is more robust:

  • crossing the real EPUB/XTC end completes the book automatically;
  • leaving from the final page or rounded 100 percent asks for confirmation;
  • first completion dates remain stable across rereads;
  • pending achievement screens survive reader replacement or restart;
  • Finished Books groups titles by finish month and includes authors when known.

Reader ergonomics

Side-button long press can now be mapped to Previous Page in EPUB, TXT, and XTC readers. It triggers once when the
hold threshold is reached, while short presses keep their configured page-turn direction.

Remote firmware installation API

For developer workflows, a firmware uploaded through File Transfer can now be installed with
POST /api/firmware/install. The endpoint requires explicit confirmation, validates the ESP image structure, checksum,
optional SHA trailer, and OTA partition size, then writes the inactive OTA partition and restarts the reader.

Notes

YACP remains a reading-first firmware. The goal is not to accumulate menu items, but to reduce incidental work, improve
comfort, and use the Xteink hardware more effectively.

Major technical findings and broadly useful improvements are submitted back to CrossPoint as focused PRs when practical.
CrossPoint remains the reference project, and adoption is up to its maintainers. The cleaner image-sleep wake path in
this release was inspired by CrossPoint PR #2731 by Marek Vesely (notmarek).

GitHub Issues are open for reproducible bug reports and hardware feedback:
https://github.com/Sichroteph/YACP/issues

Validation

  • X3 Tiny: tested on hardware during development by the project author.
  • X4 Tiny: release build validated; hardware validation pending.
  • XLarge: release build validated; hardware validation pending.
  • X3 simulator: not rebuilt locally for this release because SDL2 tooling is unavailable in the Windows build
    environment; the failure occurred during environment setup, before native compilation.