- Fragment-only refs (href="#note1") are relative to the file they sit in; after a file split the anchor may live in a sibling chunk. Track each chunk's original filename and rewrite such refs to the chunk that owns the anchor (verified with a synthetic EPUB: 25 local footnote links across 3 chunks plus one cross-file ref all resolve). - Drop the dead `or True` condition; page-list nav removal always runs, link remapping only when anchors moved. - List the new split checkbox in the README's step-by-step options. Co-Authored-By: Claude Fable 5 <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. 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