{"id":28188285,"url":"https://github.com/devnoname120/epubviewer","last_synced_at":"2025-07-22T13:34:05.065Z","repository":{"id":184818051,"uuid":"672487392","full_name":"devnoname120/epubviewer","owner":"devnoname120","description":"EPUB/CBR/PDF reader app for Nextcloud","archived":false,"fork":false,"pushed_at":"2025-06-23T19:45:25.000Z","size":12697,"stargazers_count":26,"open_issues_count":0,"forks_count":8,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-21T17:20:57.542Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://apps.nextcloud.com/apps/epubviewer","language":"JavaScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"e-alfred/epubreader","license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devnoname120.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-07-30T08:54:35.000Z","updated_at":"2025-07-14T02:40:13.000Z","dependencies_parsed_at":"2023-10-01T16:38:43.433Z","dependency_job_id":null,"html_url":"https://github.com/devnoname120/epubviewer","commit_stats":null,"previous_names":["devnoname120/epubreader","devnoname120/epubviewer"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/devnoname120/epubviewer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devnoname120%2Fepubviewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devnoname120%2Fepubviewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devnoname120%2Fepubviewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devnoname120%2Fepubviewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devnoname120","download_url":"https://codeload.github.com/devnoname120/epubviewer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devnoname120%2Fepubviewer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266506175,"owners_count":23940019,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-16T08:12:29.253Z","updated_at":"2025-07-22T13:34:05.043Z","avatar_url":"https://github.com/devnoname120.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## epubviewer\n\nReader is an ebook reader based on pure javascript renderers. It works for publications formatted according to the\nfollowing standards:\n\n- [Epub]\n- [PDF]\n- [CBR and CBZ] (\"comics\")\n\nFor Epub Reader uses the `futurepress` [epub.js] renderer to provide near-native looks, especially when used\nfull-screen.\nTurn pages by pressing the left/right hand side of the screen/window or using the cursor keys (if you have those), use\nthe sidebar to browse through chapters or bookmarks and add annotations.\n\nPDF is handled by Mozilla's [pdf.js] renderer in combination with a custom reader app to enable side-by-side display,\nbatch search and more. Controls are like those used in the Epub renderer with a few exceptions, e.g. night mode has not\nbeen implemented yet.\n\nCBR and CBZ are supported using a custom renderer inspired by [balaclark]'s work. As with Epub, books can be navigated\nusing the keyboard as well as mouse or touch navigation. Reader generates a visual index of all pages, show in the\nsidebar (thumbnail generation can be disabled for low-memory and/or -speed devices). As CBx files are often of varying\nquality, a set of image enhancement filters are provided.\n\n# Development\n\n## GitHub codespaces\n\n- Go to https://codespaces.new/nextcloud/server and use the default settings. You can also change the branch to\n  e.g. `stable28` if you want to use a specific version of Nextcloud. It takes around 5 minutes to initialize. Then it\n  starts automatically.\n- In the Codespace vscode interface, click on the burger menu in the upper left corner → `Terminal` → `New Terminal` and\n  then run the following in the newly-open terminal:\n\n```shell\ncd /var/www/html/apps\ngit clone https://github.com/devnoname120/epubviewer\n```\n\n- Follow the instructions in the section `Building the app` in order to build the app.\n- Click on the `PORTS` tab, then right-click on port 80 and then `Open in Browser`.\n- Log in (username: `admin`, password: `admin`).\n- Enable the `EPUB viewer` app from `Apps` → `Your Apps` → `EPUB Viewer`.\n\n## Local\n\n- Download and run Nextcloud:\n\n```shell\ngit clone https://github.com/juliushaertl/nextcloud-docker-dev\ncd nextcloud-docker-dev\n./bootstrap.sh\n\ndocker compose up -d nextcloud\n\ncd workspace/server/apps-extra\ngit clone https://github.com/devnoname120/epubviewer\ncd epubviewer\n```\n\n- Follow the instructions in the section `Building the app` in order to build the app.\n- Open http://nextcloud.local and log in (username: `admin`, password: `admin`)\n- Enable the [`EPUB viewer`](http://nextcloud.local/index.php/settings/apps/installed/epubviewer) app\n  from `Apps` → `Your Apps` → `EPUB Viewer`.\n\n**Note**: see\nthe [documentation](https://github.com/juliushaertl/nextcloud-docker-dev/blob/master/docs/basics/stable-versions.md) if\nyou want to run a specific version of Nextcloud.\n\n## Building the app\n\nThe app can be built by using the provided Makefile by running:\n\n```shell\nmake build\n```\n\nThis requires the following things to be present:\n\n- `make`\n- `which`\n- `tar`: for building the archive\n- `curl`: used if phpunit and composer are not installed to fetch them from the web\n- `npm`: for building and testing everything JS\n\n## Publish to App Store\n\nRun the following in order to prepare a tarball that can be uploaded\nto [Nextcloud's App Store](http://apps.nextcloud.com/):\n\n```shell\nmake dist\n```\n\nThe `.tar.gz` archive is located in `build/artifacts` and you can create a new GitHub release.\n\nBefore uploading it to Nextcloud's App Store you also need to create a signature of the tarball:\n\n```shell\nopenssl dgst -sha512 -sign ~/.nextcloud/certificates/epubviewer.key build/artifacts/epubviewer-appstore.tar.gz | openssl base64\n```\n\nYou can then create a [new app release](https://apps.nextcloud.com/developer/apps/releases/new) specifying the direct\nlink to the `.tar.gz` file from the GitHub release as well as the signature that was computed above.\n\n# Features\n\nReader remembers the last-visited page in a book and returns to that page when the book is re-opened. As all settings\nare stored on the server these features are device-independent, i.e. you can start reading on a mobile device, continue\non a PC to finish the book on a tablet.\n\n### Text-based formats incl. PDF\n\n- seamless full-screen mode supported on browsers which allow full user-control, i.e. not on Apple\n- single- and double-page viewing mode\n- user-configurable font and colour settings\n- night mode, toggled by clicking the book title/author on top of the viewer or the night mode button (PDF)\n- full-text search with keyword highlighting\n- bookmarks (with automatic snippet generation)\n- annotations (not yet implemented for PDF)\n- keyboard and pointer/touch-based navigation\n\n### CBR/CBZ ('Comics')\n\n- seamless full-screen mode supported on browsers which allow full user-control, i.e. not on Apple\n- single- and double-page viewing mode\n- optional image enhancement filters\n- Left-to-right and right-to-left (_manga_) modes\n- visual index (thumbnail size user-configurable, can be disabled for low-memory or -cpu devices)\n- keyboard and pointer/touch-based navigation\n\nPDF support is still somewhat rough around the edges, not all features have been implemented yet. There is a known\ncosmetic issue in that in spread mode the (invisible but selectable) text layer for the left page is offset from the\nleft when opening a document. As soon as a page is turned this problem disappears.\n\n### Keyboard navigation\n\nReader supports both pointer/touch-based and keyboard-based navigation. Pointer/touch based is mostly\nself-explanatory,\n\n|                           key | function                                                       |\n|------------------------------:|----------------------------------------------------------------|\n|             _left_, _page-up_ | move to previous page; move to next page in RTL(_manga_) mode  |\n| _right_, _page-down_, _space_ | move to next page; move to previous page in RTL (_mange_) mode |\n|                        _home_ | move to first page                                             |\n|                         _end_ | move to last page                                              |\n|                             s | toggle side bar                                                |\n|                         _esc_ | close sidebar                                                  |\n|                             f | toggle full screen                                             |\n|                             t | toggle toolbar                                                 |\n|                             l | _CBR_: toggle layout                                           |\n|                             a | _EPUB_: annotate                                               |\n|                             b | _EPUB_: bookmark                                               |\n|                             r | _EPUB_: reflow text when sidebar is open                       |\n|                             d | _EPUB_: toggle day (custom colour) mode                        |\n|                             n | _EPUB_: toggle night mode                                      |\n\n### Defaults and Preferences\n\nReader stores **defaults** - settings which are independent of _fileId_ (i.e. independent of the book currently open) -\nand **preferences** - _fileId_-dependent (i.e. different for every book) - on the server. Defaults are not shared\nbetween\nrenderers, ie. the CBR renderer does not share defaults with the EPUB or PDF renderer. Defaults and preferences are\nremoved from the server when the associated book or user is deleted.\n\n### Annotations and Bookmarks\n\nReader supports _annotations_ (notes linked to a given position in a book) and _bookmarks_ (position markers with\nautomatically generated text snippets). An automatically generated bookmark (called '** CURSOR **', not visible in the\nbookmarks list) is used to keep track of the current reading position. Annotations and bookmark snippets can be edited\nor deleted in the sidebar.\n\n# Screenshots\n\n### Epub\n\n|                                                             |                                                                      |\n|-------------------------------------------------------------|----------------------------------------------------------------------|\n| Reader showing page spread in 'night mode'                  | ![Reader showing page spread in 'night mode'][SS01]                  |\n| Epub single page, full screen on a small-screen device      | ![Epub single page, full screen][SS02]                               |\n| Day mode color selector                                     | ![Day mode color selector][SS03]                                     |\n| Longing for that old-time terminal feeling...               | ![Longing for that old-time terminal feeling...][SS04]               |\n| Full-text search                                            | ![Full-text search][SS05]                                            |\n| Small screen device, **maximize text area** enabled         | ![Small screen device, maximize text area enabled][SS06]             |\n| Search on small-screen device                               | ![Search on small-screen device][SS07]                               |\n| As close to full-screen as you can get on iOS               | ![As close to full-screen as you can get on iOS][SS08]               |\n| Android supports true fullscreen (as do most other systems) | ![Android supports true fullscreen (as do most other systems)][SS09] |\n\n### PDF\n\n|                                                                                         |                                                                                                  |\n|-----------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|\n| Reader showing PDF Reference document in spread mode (pages side by side)               | ![Reader showing PDF Reference document in spread mode (pages side by side)][SS20]               |\n| Search through a document, showing all results in the sidebar                           | ![Search through a document, showing all results in the sidebar][SS19]                           |\n| Dropdown showing page format options - spread, single page, page width and zoom options | ![Dropdown showing page format options - spread, single page, page width and zoom options][SS21] |\n| Reader showing PDF in spread mode, thumbnails in the sidebar                            | ![Reader showing PDF in spread mode, thumbnails in the sidebar][SS22]                            |\n\n### CBR/CBZ\n\n|                                                                            |                                                                                     |\n|----------------------------------------------------------------------------|-------------------------------------------------------------------------------------|\n| iOS approximation of full screen, CBR                                      | ![iOS approximation of full screen, CBR][SS10]                                      |\n| The same book, now in landscape mode, switch to 2-page spread is automatic | ![The same book, now in landscape mode, switch to 2-page spread is automatic][SS11] |\n| Sidebar open, showing index, landscape mode                                | ![Sidebar open, showing index, landscape mode][SS12]                                |\n| Sidebar open, showing index, portrait mode                                 | ![Sidebar open, showing index, portrait mode][SS13]                                 |\n| Image enhancement filters, desaturate (grayscale) active                   | ![Image enhancement filters, desaturate (grayscale) active][SS14]                   |\n| full screen (apart from iOS restrictions), controls hidden                 | ![full screen (apart from iOS restrictions), controls hidden][SS15]                 |\n| Same page, zoomed in                                                       | ![Same page, zoomed in][SS16]                                                       |\n| Small-screen, low memory (Android) device showing full-page book cover     | ![Small-screen, low memory Android device showing full-page book cover][SS17]       |\n| The same Android device showing a zoomed-in part of a page                 | ![The same Android device showing a zoomed-in part of a page][SS18]                 |\n\n[epub.js]: https://github.com/futurepress/epub.js\n\n[Epub]: http://idpf.org/epub\n\n[CBR and CBZ]: https://wiki.mobileread.com/wiki/CBR_and_CBZ\n\n[balaclark]: https://github.com/balaclark/HTML5-Comic-Book-Reader\n\n[PDF]: https://en.wikipedia.org/wiki/Portable_Document_Format\n\n[pdf.js]: https://github.com/mozilla/pdf.js\n\n[SS01]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/epubviewer-1.png?raw=true 'Reader showing day/night mode'\n\n[SS02]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/epubviewer-3.png?raw=true 'Single page full screen on a small-screen device'\n\n[SS03]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_17-21-39.jpg 'Day mode color selector'\n\n[SS04]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/screenshots/photo_2017-03-15_17-21-41.jpg?raw=true 'Longing For that olde-time terminal feeling...'\n\n[SS05]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_17-21-53.jpg 'Full-text search'\n\n[SS06]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_18-28-46.jpg 'Small screen device, __maximize text area__ enabled'\n\n[SS07]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_18-28-49.jpg?raw=true 'Search on small-screen device'\n\n[SS08]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_17-21-52.jpg?raw=true 'As close to full-screen as you can get on iOS'\n\n[SS09]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/Screenshot_2014-09-29-20-21-50.png?raw=true 'Android supports true fullscreen (as do most other systems)'\n\n[SS10]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_17-21-59.jpg?raw=true 'iOS approximation of full screen, CBR'\n\n[SS11]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_17-22-00.jpg?raw=true 'The same book, now in landscape mode, switch to 2-page spread is automatic'\n\n[SS12]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_17-22-01.jpg?raw=true 'Sidebar open, showing index, landscape mode'\n\n[SS13]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_17-22-02.jpg?raw=true 'Sidebar open, showing index, portrait mode'\n\n[SS14]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_17-22-05.jpg?raw=true 'Image enhancement filters, desaturate (grayscale) active'\n\n[SS15]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_17-22-08.jpg?raw=true 'full screen (apart from iOS restrictions), controls hidden'\n\n[SS16]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_17-22-10.jpg?raw=true 'Same page, zoomed in'\n\n[SS17]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_18-28-54.jpg?raw=true 'Small-screen, low memory (Android) device showing full-page book cover'\n\n[SS18]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/photo_2017-03-15_18-28-56.jpg?raw=true 'The same Android device showing a zoomed-in part of a page'\n\n[SS19]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/epubviewer_PDF_001.png?raw=true 'Search through a document, showing all results in the sidebar'\n\n[SS20]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/epubviewer_PDF_002.png?raw=true 'Reader showing PDF Reference document in spread mode (pages side by side)'\n\n[SS21]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/epubviewer_PDF_005.png?raw=true 'Dropdown showing page format options - spread, single page, page width and zoom options'\n\n[SS22]: https://github.com/devnoname120/epubviewer/blob/master/screenshots/epubviewer_PDF_006.png?raw=true 'Reader showing PDF in spread mode, thumbnails in the sidebar'\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevnoname120%2Fepubviewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevnoname120%2Fepubviewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevnoname120%2Fepubviewer/lists"}