Justin Mitchell 40acf515b8 Mark library books as on-device via a persistent metadata cache
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.
2026-06-21 12:34:58 -04:00
2026-02-22 18:43:12 -05:00

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:

  1. make bump-patch (or bump-minor / bump-major)
  2. Commit the version change
  3. 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

License

MIT

S
Description
No description provided
Readme MIT
403 KiB
Languages
Python 98.7%
Makefile 1.3%