Giter Club home page Giter Club logo

seeneva-reader-android's Introduction

A libre smart powered comic book reader for Android.

Get it on Google Play Get it on F-Droid


Note: Current release should be considered as public beta.

Features

  • Smart speech balloons zooming. 💬
  • Speech balloons OCR and TTS. 👀
  • Supports CBZ (.zip), CBR (.rar) with limitations, CB7 (.7z), CBT (.tar) and PDF comic book archives.
  • Supports different image formats on any Android device.
  • View ComicRack metadata (from ComicInfo.xml file).
  • Supports Left-to-Right (LTR) and Right-to-Left (RTL) read directions.
  • Supports Android 4.1+ and all available Android ABIs arm64-v8a, armeabi-v7a, x86_64 and x86.
  • Smart functionality performs locally on the device.
  • Libre application under GPLv3 or later license.
  • No ads, no personal data collection.
  • Is it not enough? Hey, there is a bubble-whale on the icon! 🐋

Speech balloons zooming

Every time you add a new comic book into the app's library, it will scan each page to find all speech balloons on them using Machine Learning object detection model (based on YOLOv4-tiny).

Now you can easily zooming and navigate through comic book speech balloons no matter how small your screen:

Speech balloons zooming

Note:

  • Use high res page images for better recognition.
  • ML model was trained on ~10K speech balloons from modern comic books and manga. The result is really nice but sometimes you may encounter some issues with speech balloons order.

OCR and TTS

Seeneva comic book reader make it possible to use Optical Character Recognition (based on Tesseract) on all found speech balloons to extract text from them. This will allow you to easily copy speech balloon's text and for example translate it using any available translator.

OCR

After every success OCR you can also use Text-To-Speech to convert speech balloon's text into synthesized human speech. You can use Seeneva like audio comic book reader.

Note:

  • Only English language is supported right now.
  • Any Android TTS engine should be installed on the device to use in-app TTS.
  • OCR was trained on ~2K of text lines primarily by Big Two Comics. The result is pretty good but different text fonts may be recognized worse or better than others (or not recognize at all).

Performance

Smart adding new comic book into the library might take a while. It is depends on your device CPU specifications, comic book archive type, pages count and their size. Here are some examples on real devices.

Device CBR (44 MB, 24 pages) CBR (103 MB, 78 pages)
Pixel 2 XL ~15s ~75s
Nexus 5 ~60s ~190s
Ainol Novo 7 Aurora II ~180s ~600s

Permissions

Seeneva requires some Android permissions to run properly:

  • android.permission.READ_EXTERNAL_STORAGE: required on Android up to 4.3. This permission allows to add into the library comic book files located on device external storage (like SD card).
  • android.permission.FOREGROUND_SERVICE: required to process comic book adding inside a foreground Service. Each comic book goes through a ML model which can take up to a few minutes. The foreground Service allows Seeneva to keep adding comics without the risk of being killed by the OS when the user has placed the app in the background.
  • android.permission.WAKE_LOCK, android.permission.RECEIVE_BOOT_COMPLETED: required by AndroidX WorkManager library. Seeneva uses that library to periodically sync added comic book files to determine their status (e.g. comic book file was removed, renamed or corrupted) and display that status to the user. These permissions allow to start that periodical task after the device has been rebooted.
  • android.permission.POST_NOTIFICATIONS: required to display notifications on Android 13 and up. Notifications are displayed for example when adding a comic book into the library.

Screenshots

What's next?

More smart features, new supported by OCR languages. Where are a lot of ideas to implement.

Here are some of them:

  • Tools for contributors to improve ML features.
  • Smart speech balloon text translation to another language.

Stay tuned!

Seeneva is a non-profit project, so there is no strong road map.

Contribution

  • Open an issue if you catch a bug.
  • Code contribution using Pull Request.
  • Help translate the app into new languages or correct current localization mistakes using Weblate.
  • Tell your friends about the app.
  • Also you can support the app by donation.

Translation

Translation status

Donate

Seeneva is a free and open source comic book reader without any income other than donations from users of the app.

If you like Seeneva comic book reader, you can donate to its future development. It will help to upgrade developer's dev machine to faster implement new features or rent cloud services required to train ML models.

So Seeneva will be smarter than ever! 🧠

Please remember that donations are totally voluntary. There is no any bonuses right now, except the developer appreciation. 😻

FAQ

Q: What does Seeneva mean?

A: It is a modified Russian word "синева". Or this is a strange reference to Evangelion.

Q: Where can I download the ML dataset?

A: You can't because of legal issues. Maybe there will be a way in the future.

Q: Why are the results of my comic book speech balloons zooming and OCR recognition so poor?

A: Please try to use high resolution images. If it doesn't help then your comic book has unsupported speech balloon shapes or fonts. This usually can be fixed by adding this comic book into the ML training process. Also manga recognition is worse than that of comic books right now.

Q: What is the difference between the Import and Link adding options?

A: Current adding process is not very clear and can be confusing. It should be improved in future versions.

To clarify the difference:

  • Import - a comic book will be copied into the app's internal folder. If you have a 100MB comic book and import it, you will have two identical files of 100MB each. The imported comic book is always available for the app.

  • Link - the app will request a permanent read link to a comic book using Android's storage access framework. The requested comic book will be read from its source folder without any copying. This will help to save free space on a device. But. If you uninstall your file manager app which provided this permanent link, Seeneva will lose that link as a result. Your comic book file won't be corrupted or moved by Seeneva.

Q: Where can I get digital comic books?

A: You can buy them, some comic books like Pepper&Carrot are libre. You can open any comic book with the app, no matter its provenance, as long as its format is supported. Sorry, but the Seeneva app ships without any prebuilt comic books.

Privacy Policy

Please read the PRIVACY document for more information.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.

Third party dependencies

List of used dependencies and their licenses can be found in the dependencies.json file. Full text of a license can be found in the license directory. Also you can view them in the "About app" screen.

Please let me know if any of a licenses has invalid information.

Other

  • Some examples and tests use pages from the great webcomic Pepper&Carrot licensed under CC BY 4.0.

  • Google Play and the Google Play logo are trademarks of Google LLC.

seeneva-reader-android's People

Contributors

adiloguz avatar aivar0 avatar blueberryy avatar clach04 avatar comradekingu avatar herobrine7gamer avatar kraus98772 avatar kuragehimekurara1 avatar luiz-bro avatar milotype avatar poipoipoipoipoipoipoipoipoi avatar precondition avatar santossi avatar thyrithsor avatar zellius avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

seeneva-reader-android's Issues

Possible integration with manga-ocr project?

There is project for OCR in manga at https://github.com/kha-white/manga-ocr. It seems to perform much better than (for instance) google lens in recognizing some of the weirdest speech bubbles (which are often not bubbles) you can find in manga. I have no idea how troublesome it would be to integrate such a model trained using PyTorch in an android app (but it seems to be possible); if preferable, the project also links to two datasets that could be used to train a custom model for Japanese manga. Of course this must be a lot of work so I understand if it's not a priority right now :) Thank you for the app!

Feature request: show loading progress

Feature request: "Loading. May take a minute or two while we process the comic for speech bubbles!" I love the app but until I looked at the GitHub website I thought that it was crashing/glitching due to the over 5-10 second loading time. I would have been patient and waited if I had a visual indication that it was in fact still loading. Comic trim will state "processing page 34/231" when converting cbr to cbz, perhaps Seeneva could add a similar "now processing page x of y pages".

Bubbles zoomed in the top left sometimes truncated

While zoomed bubbles usually display completely even if they contain a lot of lines, they can sometimes appear truncated. For what I noticed, the problem is on the top left of the page, but maybe it's a coincidence.

image20221226_115017018
image20221226_115050293

Add OPDS Protocol support

Description of Suggestion

Komga is a free and open source comics/manga media server. This can be used to host and read comics/manga in a network and read on supported devices. Komga makes use of the OPDS protocol.

OPDS refers to Open Publication Distribution System and afaik it is an established standard. However, while many apps in Android do support OPDS they have few limitations (as shown here). It'd be nice if Seeneva reader can support OPDS. Apart from Komga, there is Mango which also supports OPDS.
The spec for OPDS is listed on their website - https://opds.io/ and https://specs.opds.io/

Other Details

I happened to find the app on F-Droid purely by chance :) Right now, the app worked well for the few zips that I tried it on. As I understand, the project is relatively new; if it can support all features of OPDS from the start and continue doing so, it'd be really useful. Wish you all the best!

Crash while opening big comics files

I received feedback from a user who experienced crashes when opening large comics files (larger than 100 - 200 MB).

I need to find such big comics or create a new one from multiple books and test this issue.

Reporting a vulnerability

Hello!

I hope you are doing well!

We are a security research team. Our tool automatically detected a vulnerability in this repository. We want to disclose it responsibly. GitHub has a feature called Private vulnerability reporting, which enables security research to privately disclose a vulnerability. Unfortunately, it is not enabled for this repository.

Can you enable it, so that we can report it?

Thanks in advance!

PS: you can read about how to enable private vulnerability reporting here: https://docs.github.com/en/code-security/security-advisories/repository-security-advisories/configuring-private-vulnerability-reporting-for-a-repository

Cannot import Invincible Compendium

Version: 0.1.1-Fdroid

Types: CBR and CBZ

Detail

Doesn't import. App says processing, but it never goes anywhere. All 3 books the same.

If it matters, each book is ~1.8GB a piece.

User Controls

Hi, i just discovered this awesome app and I like it a lot. However the way the user has to navigate still is somewhat of a mistery to me. Does one have to tap a certain panel to enlarge bubbles? Will enlarged mode start automatically if bubbles were found? In which order will bubbles be enlarged and does the order change by tapping? How long does it take for bubbles to be found, have bubbles already been found on my current page? This all remains rather unclear and it would be awesome to have a little walkthrough when opening the app the first time / show the progress of "bubble finding" in a visual way.

Other than that your app is beautiful and I can only hope its gonna be maintained for a long time!

Android 9 crash after touch event

How to reproduce:

  1. Open Seeneva app.
  2. Open any comic book.
  3. Close it.
  4. Reopen it quickly.
2021-05-26 11:48:48.309 6923-6923/app.seeneva.reader.debug E/AndroidRuntime: FATAL EXCEPTION: main
    Process: app.seeneva.reader.debug, PID: 6923
    java.lang.IllegalStateException: Can't init view binding. Destroyed state
        at app.seeneva.reader.binding.LifecycleBindingDelegate.initializeViewBinding(Binding.kt:75)
        at app.seeneva.reader.binding.LifecycleBindingDelegate.getBinding(Binding.kt:54)
        at app.seeneva.reader.binding.BindingKt.getValue(Binding.kt:42)
        at app.seeneva.reader.screen.viewer.BookViewerActivity.getViewBinding(BookViewerActivity.kt:117)
        at app.seeneva.reader.screen.viewer.BookViewerActivity.access$getViewBinding(BookViewerActivity.kt:112)
        at app.seeneva.reader.screen.viewer.BookViewerActivity$gestureDetector$2$1.onSingleTapConfirmed(BookViewerActivity.kt:219)
        at android.view.GestureDetector$GestureHandler.handleMessage(GestureDetector.java:300)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
2021-05-26 11:48:48.312 6923-6923/app.seeneva.reader.debug I/Process: Sending signal. PID: 6923 SIG: 9

For some reason the BookViewerActivity receives touches event after it was closed.

override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        gestureDetector.onTouchEvent(ev)
        return super.dispatchTouchEvent(ev)
}

I can reproduce this on Android 9 only.

FileNotFoundException while link comic book without network

  1. Disconnect from a network.
  2. Use link adding option and select any cloud service app (like Nextcloud).
  3. Select any non cached comic book.
  4. Here you go the FileNotFoundException.

I should catch it then open a new file descriptor using ContentResolver.openFileDescriptor.

It is also related to #27

Slider exception while trying to open settings

While reading any comic book (tested CBR, PDF and CBZ formats) with system brightness more than 20% and trying to open comic settings (tapping on gear icon), JVM trowing an exception:
Seeneva_slider_exception.txt

Because of system brightness slider value can be greater than the upper threshold, and this causes the problem.

If one tries to use app brightness, it crashes:
Seeneva_brightness_crash.txt

App version: Seeneva 0.1.0-fdroid
OS: Android 9, MIUI 11

Dark Mode

Please add the dark mode. (Like picture below)

Screenshot_2022-11-14-13-23-05-397_app.seeneva.reader.jpg

Translate readme to Japanese

I would like to translate Seeneva's readme into Japanese, what should I do? Also, I translated the Seeeneva app into Japanese on weblate, so please add it.

Tap Bubbles to zoom

Tere are some times when i want to only zoom an specific Bubble and I have to cycle through every bubble to get to it. I guess it would be nice to have a mode where you can tap on a bubble to enlarge it and a tap on the edges will change to the next page.

Make the donation process easier (to support development)

Please add direct cryptocurrency addresses within the app. Easy tap and donate without leaving the app: I don't want going around to websites. I don't want support FIAT economy.

TRX, AVAX, LTC, BTC, XEC, BNB, SOL, BCH, ALGO, XTZ, DASH, FTM, XMR addresses available for donations (addresses have to be copyable).

1000092943

Comic page panels zooming

Seeneva already detects page panels to properly order detected speech balloons. It seems like a good idea to allow user zoom in on them. Or make other panels translucent? I should think about better implementation.

Huawei: Adding comic book crash

It seems that some file managers doesn't provide file name using _display_name Cursor column. App should try to get a file name from title column too.

Reproduced on Huawei devices.

Could not build the project

App version: 0.1.1 (master branch)

Error description

  • clone repo
  • open project with android studio flamingo
  • try to run it in a virtual android machine API31
  • got error

Detail

Error is: error: failed to run custom build command for lzma-sys v0.1.1 (https://github.com/Seeneva/lzma-sys.git?branch=main#d382dc85)

Feature request: Save the zoom from one page to another

Would it be possible that when changing the page the zoom was preserved? It would also be nice to include the typical options to fit the width or length of the screen or always open the comic horizontally or vertically, regardless of the orientation of the device.

pdf : pages are not read in order

Hello.
First, thank you for your work on this great app.
I just discovered and installed your reader today version 0.1.1 and i made some tests.
For me, with two pdf comics, the pages are not displayed in order.
Goes from page 1 to 11, then continues until the end of the book, then resumes on page 5...
What about you?

Works normally with a cbr file
Regards

Feature request: transferable data or 'sidecar' file

I have installed Seeneva on my 2018 Samsung Tab and also managed to install it on Windows 11 Subsystem for Android on my 2021 laptop. As an example, Pepper & Carrot episode 3 CBZ file (9 pages, from archive.org), approximate loading time:
WSA - 8 seconds
Samsung Tab - 33 seconds

It would be ideal if the app could transfer the detection data from one device to another device so time can be saved. Possibly a 'sidecar' file with the extension '.seeneva' e.g. peppercarrot_episode03.seeneva to go along with peppercarrot_episode03.cbz. That means, if the sidecar file is available, Seeneva doesn't need to do any more detection.

(Thank you by the way for an excellent app!)

How to guide?

Looked every where and cant work out how to import a comic to this app :(

Your website uses the Pepper & Carrot web comic as an example, but can only find JPG files on: https://www.peppercarrot.com/en/

Do you have a How-To setup guide with pictures for Pepper & Carrot please?

Scene by scene zooming

Last year I used Comixology app and it has a scene based zoom, that automatically turn the image to big according with the proper size of the screen.

Might you implement the same in Seeneva?

Feature request: 'keyboard' input

As mention in #78 , I managed to install Seeneva on Windows 11. The only input that the app can detect is mouse clicks which is equivalent to touch on regular Android devices.

It would be nice if it could recognise left and right arrow inputs from the keyboard to move through the speech bubbles.

However, WSA does have a setting (under Compatibility) where left and right arrows are used as left and right swipe. If I activate this, the arrows will scroll page by page, but I still need to use the mouse to move through the speech bubbles.

Other issues with Seeneva on WSA is that I cannot open the settings (down swipe doesn't work). Other than that, the app, even TTS, works superbly.

(Once again, thank you for the app!)

Files flagged as corrupted on various SAF Document Providers

App version: 0.1.0-fdroid

Comic book file description

  • Type: Any
  • Images formats: Any
  • Has subfolders: Don't know
  • Link: N/A

Detail

I've been testing various SAF Document Providers in order to set on one to store all my comics (I don't want to have all my comics stored on all my devices) and found some of them always get all the comics marked as corrupted after some time no matter if I don't do any operation on it on the backend.

Here are my results:

  • Google Drive : Official SAF from the Drive app -> KO (Although the SAF works perfectly for everything else)

  • Dropbox : Official SAF from the Dropbox app -> OK (Although the SAF is not really complete for some operations/feature)

  • Microsoft OneDrive: Official SAF from the OneDrive app -> OK

  • Samba/Windows shared: CIFS Document provider from Google Play -> KO (Although the SAF works perfectly for everything else)

  • SFTP : From FileManagerUtils on github (https://github.com/RikyIsola/FileManagerUtils) -> OK (Although the Document Provider is not stable, if I remount it before using Seeneva it will never flag the comics as corrupt)

Tests pending:

I don't know if the problem is on the Providers or Seeneva but the fact that Google Drive is not working makes me think on Seeneva.

I'm open for testing or contacting the other developers to do the tests as I'm really interested on this.

Add a dark mode

All it needs is a dark mode
It's the perfect app for reading comics

Android Compose + Kotlin Multiplatform

From the start of the project I was thinking about make it available on different platforms (Android and desktops at least). Now that it is possible using Compose Multiplatform and Kotlin. All ML processing is already cross platform thanks to Rust.

The idea is:

  1. Completely rewrite Android UI using Android Compose.
  2. Implement UI and logic for Desktop platforms. I can start from Linux and MacOS implementations.

Also the adding process should be rewritten.

Provided comic book file doesn't have any pages

App version: 0.1.1

Comic book file description

  • Type: CBR
  • Images formats: JPG
  • Has subfolders: I don't know
  • Link: not sure if it's legal to share

Detail

Whenever I try to import/link this particular comic (The Ring of the Nibelung - 1991) I get the aforementioned error message. Evince opens it just fine though.

Using split screen, the app shows the pages overview

I tried reading a comic in split screen (see screenshot below), but the app then shows the pages overview and I can't read the comic anymore (I don't seem to be able to exit the overview).

PS: great app, btw!

Screenshot_20230314_163610_Japanese Dictionary Takoboto

Libarchive and CBR

I checked the issue #11. It seems there is a Libarchive RAR archive limitation described here libarchive/libarchive#373. That means that some CBR comic books are not fully supported by Seeneva right now. Some comic book pages can be silently ignored by the app. The error of ignored pages is Parsing filters is unsupported.

As a simple workaround for current app version is to repack corrupted CBR files into CBZ and add it to the app.

I should think how to fix this in future versions. It seems that Linux viewers (like Okular) use the unrar library to open CBR books. I should check its license because I have no other way but static link it into the libseeneva.so.

Issues with webp images

I'd like to use webp images in my cbz files due to their superior compression. However Seeneva doesn't seem to support them very well.

Here are two comic zips I've made (kept the zip suffix because GitHub whitelists file extensions). Both contain the first 10 pages of the webcomic Eight Bit Theater, converted to both lossy and lossless webp images:

8bt-lossless.zip
8bt-lossy.zip

When importing the lossless archive, Seeneva returns an error that it could not find any pages in the archive. Seeneva will import the lossy archive, with all 10 pages, but will show them in grayscale, even though the files are in color.

(I haven't tested animated webp files, though I don't expect Seeneva to implement displaying them)

Is proper handling of webp images something that Seeneva can implement?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.