Reader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the following standards:
- Epub
- CBR and CBZ ("comics")
For Epub Reader uses the futurepress
epub.js renderer to provide near-native looks, especially when used
full-screen.
Turn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use
the sidebar to browse through chapters or bookmarks and add annotations.
PDF is handled by Mozilla's pdf.js renderer in combination with a custom reader app to enable side-by-side display, batch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not been implemented yet.
CBR and CBZ are supported using a custom renderer inspired by balaclark's work. As with Epub, books can be navigated using the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the sidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying quality, a set of image enhancement filters are provided.
- Go to https://codespaces.new/nextcloud/server and use the default settings. You can also change the branch to
e.g.
stable28
if you want to use a specific version of Nextcloud. It takes around 5 minutes to initialize. Then it starts automatically. - In the Codespace vscode interface, click on the burger menu in the upper left corner →
Terminal
→New Terminal
and then run the following in the newly-open terminal:
cd /var/www/html/apps
git clone https://github.com/devnoname120/epubviewer
- Follow the instructions in the section
Building the app
in order to build the app. - Click on the
PORTS
tab, then right-click on port 80 and thenOpen in Browser
. - Log in (username:
admin
, password:admin
). - Enable the
EPUB viewer
app fromApps
→Your Apps
→EPUB Viewer
.
- Download and run Nextcloud:
git clone https://github.com/juliushaertl/nextcloud-docker-dev
cd nextcloud-docker-dev
./bootstrap.sh
docker compose up -d nextcloud
cd workspace/server/apps-extra
git clone https://github.com/devnoname120/epubviewer
cd epubviewer
- Follow the instructions in the section
Building the app
in order to build the app. - Open http://nextcloud.local and log in (username:
admin
, password:admin
) - Enable the
EPUB viewer
app fromApps
→Your Apps
→EPUB Viewer
.
Note: see the documentation if you want to run a specific version of Nextcloud.
The app can be built by using the provided Makefile by running:
make build
This requires the following things to be present:
make
which
tar
: for building the archivecurl
: used if phpunit and composer are not installed to fetch them from the webnpm
: for building and testing everything JS
Run the following in order to prepare a tarball that can be uploaded to Nextcloud's App Store:
make dist
The .tar.gz
archive is located in build/artifacts
and you can create a new GitHub release.
Before uploading it to Nextcloud's App Store you also need to create a signature of the tarball:
openssl dgst -sha512 -sign ~/.nextcloud/certificates/epubviewer.key build/artifacts/epubviewer-appstore.tar.gz | openssl base64
You can then create a new app release specifying the direct
link to the .tar.gz
file from the GitHub release as well as the signature that was computed above.
Reader remembers the last-visited page in a book and returns to that page when the book is re-opened. As all settings are stored on the server these features are device-independent, i.e. you can start reading on a mobile device, continue on a PC to finish the book on a tablet.
- seamless full-screen mode supported on browsers which allow full user-control, i.e. not on Apple
- single- and double-page viewing mode
- user-configurable font and colour settings
- night mode, toggled by clicking the book title/author on top of the viewer or the night mode button (PDF)
- full-text search with keyword highlighting
- bookmarks (with automatic snippet generation)
- annotations (not yet implemented for PDF)
- keyboard and pointer/touch-based navigation
- seamless full-screen mode supported on browsers which allow full user-control, i.e. not on Apple
- single- and double-page viewing mode
- optional image enhancement filters
- Left-to-right and right-to-left (manga) modes
- visual index (thumbnail size user-configurable, can be disabled for low-memory or -cpu devices)
- keyboard and pointer/touch-based navigation
PDF support is still somewhat rough around the edges, not all features have been implemented yet. There is a known cosmetic issue in that in spread mode the (invisible but selectable) text layer for the left page is offset from the left when opening a document. As soon as a page is turned this problem disappears.
Reader supports both pointer/touch-based and keyboard-based navigation. Pointer/touch based is mostly self-explanatory,
key | function |
---|---|
left, page-up | move to previous page; move to next page in RTL(manga) mode |
right, page-down, space | move to next page; move to previous page in RTL (mange) mode |
home | move to first page |
end | move to last page |
s | toggle side bar |
esc | close sidebar |
f | toggle full screen |
t | toggle toolbar |
l | CBR: toggle layout |
a | EPUB: annotate |
b | EPUB: bookmark |
r | EPUB: reflow text when sidebar is open |
d | EPUB: toggle day (custom colour) mode |
n | EPUB: toggle night mode |
Reader stores defaults - settings which are independent of fileId (i.e. independent of the book currently open) - and preferences - fileId-dependent (i.e. different for every book) - on the server. Defaults are not shared between renderers, ie. the CBR renderer does not share defaults with the EPUB or PDF renderer. Defaults and preferences are removed from the server when the associated book or user is deleted.
Reader supports annotations (notes linked to a given position in a book) and bookmarks (position markers with automatically generated text snippets). An automatically generated bookmark (called '** CURSOR **', not visible in the bookmarks list) is used to keep track of the current reading position. Annotations and bookmark snippets can be edited or deleted in the sidebar.