Calibre marks a library book on-device by matching the device book list, primarily by uuid. Until now books() returned only a filename-derived title (no uuid/authors) unless the slow Fetch-metadata option was on, so the on-device indicator only appeared right after sending. Add a small persistent per-device cache (lpath -> uuid/title/authors) populated when books are sent and read back on connect, so a book sent from this machine is recognized instantly — and marked on-device — without re-downloading the EPUB. Entries are pruned on delete and when files vanish from the device. Cache keys are normalized to the device's forward-slash path form for cross-platform consistency. Fetch-metadata still covers files never sent from this machine.
Calibre Plugins
Calibre plugins for CrossPoint Reader.
Plugins
CrossPoint Reader
A wireless device plugin that uploads EPUB files to CrossPoint Reader over WebSocket. The plugin auto-discovers devices on the local network via UDP broadcast.
It can also optimize EPUBs before transfer — mirroring the optimizer built into the CrossPoint web server — by resizing images to the device screen (X4 480×800 / X3 528×792, auto-detected), converting them to grayscale JPEG, and rewriting the container. The optimizer is based on the initial work by @zgredex, ported here from the firmware. Enable it in the plugin's settings; see the usage instructions.
See crosspoint_reader/README.md for protocol details, the optimizer, and configuration.
Installation
Download the latest release from the releases page, then in Calibre: Preferences > Plugins > Load plugin from file.
Development
Setup
# Build and install the plugin into Calibre
make install
# List all installed plugins
make list
# Remove the plugin
make remove
See calibre-customize docs for more options.
Releasing
The version is read from the version tuple in crosspoint_reader/driver.py.
# Bump the version (updates driver.py in place)
make bump-patch # 1.0.0 -> 1.0.1
make bump-minor # 1.0.0 -> 1.1.0
make bump-major # 1.0.0 -> 2.0.0
# Package the plugin into a zip (crosspoint_reader-vX.Y.Z.zip)
make zip
# Create a GitHub release with the zip attached (runs `make zip` first)
make release
make release uses the GitHub CLI (gh) to create a tagged release with auto-generated notes.
Typical workflow:
make bump-patch(orbump-minor/bump-major)- Commit the version change
make release
Project structure
crosspoint_reader/
__init__.py # Plugin entry point
driver.py # Device driver (discovery, upload, delete)
ws_client.py # WebSocket client and UDP discovery
config.py # Settings UI and preferences
log.py # Logging utilities