Calibre stores a just-sent book's device path using the local os.sep, so on Windows delete_books received backslash paths (e.g. /\Author\Title.epub) and sent them verbatim to the device, which only knows forward-slash paths -> 500 "not found". Add a shared _normalize_device_path helper (backslash -> '/', collapse '//', ensure leading '/') used by delete_books and remove_books_from_metadata. Bump to 0.2.2. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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. 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