Qt based ebook reader

Overview

Lector

Qt based ebook reader

Currently supports:

  • pdf
  • epub
  • djvu
  • fb2
  • mobi
  • azw / azw3 / azw4
  • cbr / cbz
  • md

Contribute

Paypal

Bitcoin: 17jaxj26vFJNqQ2hEVerbBV5fpTusfqFro

Requirements

Needed

Package Version tested
Python 3.6
PyQt5 5.10.1
python-lxml 4.3.0
python-beautifulsoup4 4.6.0
python-xmltodict 0.11.0

Optional

Package Version tested Required for
python-pymupdf 1.14.5 PDF support
python-djvulibre 0.8.4 DjVu support
python-markdown 3.0.1 Markdown support
textile 3.0.4 TXT support

Support

When reporting issues:

  • Make sure you're at the latest commit.
  • Run with $EXECUTABLEPATH debug.
  • Include the log ~/.local/share/Lector/Lector.log AND terminal output.
  • If you're having trouble with a book while the rest of the application / other books work, please link to a copy of the book itself.
  • If nothing is working, please make sure the requirements mentioned above are all installed, and are at least at the version mentioned.

Installation

Manual

  1. Install dependencies - I recommend using your package manager for this.

  2. Clone repository

  3. Type the following in the root directory:

     $ python setup.py build
     # python setup.py install
    
  4. OR launch with lector/__main__.py

Available packages

Translations

  1. There is a SAMPLE.ts file here. Open it in Qt Linguist.
  2. Pick the language you wish to translate to.
  3. Translate relevant strings.
  4. Try to resist the urge to include profanity.
  5. Save the file as Lector_<language> and send it to me, preferably as a pull request.

Please keep the translations short. There's only so much space for UI elements.

Screenshots

Main window

alt tag

Table view

alt tag

Book reading view

alt tag

Distraction free view

alt tag

Annotation support

alt tag

Comic reading view

alt tag

Bookmark support

alt tag

View profiles

alt tag

Metadata editor

alt tag

In program dictionary

alt tag

Settings window

alt tag

Attributions

License

Lector is released under the GNU General Public License v3.0 or any later version. See the LICENSE file for details.

Comments
  • Can't add new epub file

    Can't add new epub file

    Database returned no paths for settings...
    Available parsers: *.epub *.mobi *.azw *.azw3 *.azw4 *.prc *.cbz *.cbr
    Database returned nothing
    Exception in thread Thread-1:
    multiprocessing.pool.RemoteTraceback:
    """
    Traceback (most recent call last):
      File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker
        result = (True, func(*args, **kwds))
      File "/usr/lib/python3.6/multiprocessing/pool.py", line 44, in mapstar
        return list(map(*args))
      File "/home/delfino/python/Lector/sorter.py", line 165, in read_book
        book_ref.read_book()
      File "/home/delfino/python/Lector/parsers/epub.py", line 37, in read_book
        contents_found = self.book_ref.read_epub()
      File "/home/delfino/python/Lector/ePub/read_epub.py", line 38, in read_epub
        None, True)
      File "/home/delfino/python/Lector/ePub/read_epub.py", line 74, in get_file_path
        xml = self.parse_xml(container_location, 'xml')
      File "/home/delfino/python/Lector/ePub/read_epub.py", line 63, in parse_xml
        root = BeautifulSoup(this_xml, parser)
      File "/home/delfino/.local/share/virtualenvs/Lector-qOw1XMLY/lib/python3.6/site-packages/bs4/__init__.py", line 165, in __init__
        % ",".join(features))
    bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: xml. Do you need to install a parser library?
    """
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
        self.run()
      File "/usr/lib/python3.6/threading.py", line 864, in run
        self._target(*self._args, **self._kwargs)
      File "/home/delfino/python/Lector/sorter.py", line 253, in pool_creator
        self.read_book, self.file_list)
      File "/usr/lib/python3.6/multiprocessing/pool.py", line 266, in map
        return self._map_async(func, iterable, mapstar, chunksize).get()
      File "/usr/lib/python3.6/multiprocessing/pool.py", line 644, in get
        raise self._value
    bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: xml. Do you need to install a parser library?
    
    Finished processing in 0.01865553855895996
    Saving settings...
    
    opened by delfino-nunez 15
  • TypeError: 'NoneType' object is not iterable

    TypeError: 'NoneType' object is not iterable

    On arch I get the following errors after installing through AUR:

    $ lector                                                                                                                                                   
    Locale: en_DK (No translations found)
    Database returned no paths for settings...
    Available parsers: *.pdf *.epub *.mobi *.azw *.azw3 *.azw4 *.prc *.cbz *.cbr
    Database returned nothing
    Traceback (most recent call last):
      File "/usr/bin/lector", line 11, in <module>
        load_entry_point('lector==0.3.0', 'gui_scripts', 'lector')()
      File "/usr/lib/python3.6/site-packages/lector/__main__.py", line 1260, in main
        form = MainUI()
      File "/usr/lib/python3.6/site-packages/lector/__main__.py", line 226, in __init__
        self.lib_ref.generate_library_tags()
      File "/usr/lib/python3.6/site-packages/lector/library.py", line 259, in generate_library_tags
        i[0]: (None, None) for i in db_library_directories}
    TypeError: 'NoneType' object is not iterable
    
    opened by jnor 9
  • Pyqt5 error

    Pyqt5 error

    I installed the application from the aur into my desktop. When I launch it gives me this error: pkg_resources.DistributionNotFound:The 'PyQt5>=5.10.1' distribution was not found and is required by lector However, I have this package installed already: sudo pacman -Ss pyqt5 extra/pyqt5-common 5.10.1-1 [installed] Common PyQt files shared between python-pyqt5 and python2-pyqt5 extra/python-pyqt5 5.10.1-1 [installed] A set of Python 3.x bindings for the Qt5 toolkit

    opened by DukeValentine 9
  • Build for Windows?

    Build for Windows?

    As one of the computer illiterates I'm lost here,I dont really know how to run it but I like it very much compared let's say sumatra.So it would be great to be able to run it on Windows

    opened by GoHoo 7
  • Can't add books to library

    Can't add books to library

    When trying to add a book to my library, I get the following error:

    Database returned no paths for settings...
    Available parsers: *.pdf *.epub *.mobi *.azw *.azw3 *.azw4 *.prc *.cbz *.cbr
    Database returned nothing
    Finished processing in 0.17900586128234863
    Traceback (most recent call last):
      File "/usr/lib/python3.6/site-packages/lector/models.py", line 91, in headerData
        return self.header_data[column]
    IndexError: list index out of range
    zsh: abort (core dumped)  lector
    
    

    This seems to happen most of the time. There have been a couple of times that I managed to actually add books, but they didn't appear even though the library didn't throw an error. Happy to try and debug it.

    opened by ConorIA 7
  • Can't open .epub files

    Can't open .epub files

    Linux br0nde 4.19.24-1-MANJARO #1 SMP PREEMPT Wed Feb 20 22:59:23 UTC 2019 x86_64 GNU/Linux Python 3.7.2 Lector A Qt Based ebook reader v0.5.1

    Lector was installed from AUR

    When i trying to open epub book nothing happens

    Log 2019/03/11 00:23:07,125 lector.sorter ERROR Content generation error: /home/br0nde/books/richard_k_morgan-vidoizmenennij_uglerod-1518106530.epub AttributeError Arguments: ("'NoneType' object has no attribute 'lower'",) Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/lector/sorter.py", line 262, in read_book book_breakdown = book_ref.generate_content() File "/usr/lib/python3.7/site-packages/lector/parsers/epub.py", line 47, in generate_content self.book.generate_content() File "/usr/lib/python3.7/site-packages/lector/readers/read_epub.py", line 351, in generate_content self.cover_image_name.lower() + '.jpg' in self.content[0][2].lower(), AttributeError: 'NoneType' object has no attribute 'lower' 2019/03/11 00:23:07,218 lector.main ERROR No parseable files found

    opened by br0nde 6
  • Exception trhown at the end of scan library

    Exception trhown at the end of scan library

    I'm getting an exception thrown at the end of scan library. Here is the stacktrace:

    Available parsers: *.pdf *.epub *.mobi *.azw *.azw3 *.azw4 *.prc *.cbz *.cbr
    Database returned nothing
    357 books found
    No cover found for: /home/ryogi/drive/Books/Literature/Cassandra Clare/The Infernal Devices/Book 1 - Clockwork Angel by Cassandra Clare.epub
    "Error: Non conformant codestream TPsot==TNsot.<0a>"
    "Error: Non conformant codestream TPsot==TNsot.<0a>"
    Corrupt JPEG data: 310222 extraneous bytes before marker 0xd9
    Exception in thread Thread-10:
    multiprocessing.pool.RemoteTraceback: 
    """
    Traceback (most recent call last):
      File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker
        result = (True, func(*args, **kwds))
      File "/usr/lib/python3.6/multiprocessing/pool.py", line 44, in mapstar
        return list(map(*args))
      File "/usr/lib/python3.6/site-packages/lector/sorter.py", line 168, in read_book
        book_ref.read_book()
      File "/usr/lib/python3.6/site-packages/parsers/epub.py", line 36, in read_book
        contents_found = self.book_ref.read_epub()
      File "/usr/lib/python3.6/site-packages/ePub/read_epub.py", line 38, in read_epub
        None, True)
      File "/usr/lib/python3.6/site-packages/ePub/read_epub.py", line 79, in get_file_path
        return root_item.get('full-path')
    AttributeError: 'NoneType' object has no attribute 'get'
    """
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
        self.run()
      File "/usr/lib/python3.6/threading.py", line 864, in run
        self._target(*self._args, **self._kwargs)
      File "/usr/lib/python3.6/site-packages/lector/sorter.py", line 259, in pool_creator
        self.read_book, self.file_list)
      File "/usr/lib/python3.6/multiprocessing/pool.py", line 266, in map
        return self._map_async(func, iterable, mapstar, chunksize).get()
      File "/usr/lib/python3.6/multiprocessing/pool.py", line 644, in get
        raise self._value
    AttributeError: 'NoneType' object has no attribute 'get'
    
    Finished processing in 35.2248158454895
    
    

    I'm not sure exactly what book caused the issue, Is there an option to increase the ammount of verbosity?

    Regards.

    opened by ZeroRyogi 6
  • [Feature Request]Want a TreeView for bookmarks

    [Feature Request]Want a TreeView for bookmarks

    Now Lector shows bookmarks in a ComboBox on the toolbar. I think it would be more convenient if a TreeView containing bookmarks was placed on the left side of book texts.


    toolbar


    |Cover    | |Copyright  | |Contents   | |-Chapter1  | | 1.1 ...    |           book texts | 1.2 ...    | |+Chapter2  | |+Chapter3   | |...       |

    opened by yinkaisheng 5
  • Lector doesn't show books after adding books on Windows

    Lector doesn't show books after adding books on Windows

    Hi I added two books. Lector showed the progress of adding books at the bottom of UI. But Lector didn't show the books after the progress reached 100% and disappeared. I opened Lector.db. The books existed in the db. My OS is Windows 7 sp1 x64. The same issue occured on Ubuntu 16.04 too with an exception. default

    ` [email protected]:/mnt/hgfs/Python/LectorReader/lector# python3.6 main.py python-poppler-qt5 is not installed. Pdf files will not work. QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root' Locale: en_US (No translations found) Available parsers: *.epub *.mobi *.azw *.azw3 *.azw4 *.prc *.cbz *.cbr Database returned nothing Exception in thread Thread-1: multiprocessing.pool.RemoteTraceback: """ Traceback (most recent call last): File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker result = (True, func(*args, **kwds)) File "/usr/lib/python3.6/multiprocessing/pool.py", line 44, in mapstar return list(map(*args)) File "/mnt/hgfs/Python/LectorReader/lector/sorter.py", line 185, in read_book book_ref.read_book() File "/mnt/hgfs/Python/LectorReader/lector/parsers/epub.py", line 36, in read_book contents_found = self.book_ref.read_epub() File "/mnt/hgfs/Python/LectorReader/lector/ePub/read_epub.py", line 38, in read_epub None, True) File "/mnt/hgfs/Python/LectorReader/lector/ePub/read_epub.py", line 75, in get_file_path xml = self.parse_xml(container_location, 'xml') File "/mnt/hgfs/Python/LectorReader/lector/ePub/read_epub.py", line 64, in parse_xml root = BeautifulSoup(this_xml, parser) File "/usr/local/lib/python3.6/dist-packages/bs4/init.py", line 165, in init % ",".join(features)) bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: xml. Do you need to install a parser library? """

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last): File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner self.run() File "/usr/lib/python3.6/threading.py", line 864, in run self._target(*self._args, **self._kwargs) File "/mnt/hgfs/Python/LectorReader/lector/sorter.py", line 277, in pool_creator self.read_book, self.file_list) File "/usr/lib/python3.6/multiprocessing/pool.py", line 266, in map return self._map_async(func, iterable, mapstar, chunksize).get() File "/usr/lib/python3.6/multiprocessing/pool.py", line 644, in get raise self._value bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: xml. Do you need to install a parser library?

    Finished processing in 0.08451461791992188 `

    opened by yinkaisheng 5
  • RecursionError: maximum recursion depth exceeded

    RecursionError: maximum recursion depth exceeded

    Hi,

    I am trying to build an RPM package. But when building the package, I got this message:

    [    9s]   File "/home/abuild/rpmbuild/BUILD/Lector-0.3.1/lector/KindleUnpack/kindleunpack.py", line 183, in <module>
    [    9s]     from .unpack_structure import fileNames
    [    9s]   File "/home/abuild/rpmbuild/BUILD/Lector-0.3.1/lector/KindleUnpack/unpack_structure.py", line 23, in <module>
    [    9s]     from .mobi_utils import mangle_fonts
    [    9s]   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
    [    9s]   File "<frozen importlib._bootstrap>", line 951, in _find_and_load_unlocked
    [    9s]   File "<frozen importlib._bootstrap>", line 894, in _find_spec
    [    9s]   File "<frozen importlib._bootstrap_external>", line 1157, in find_spec
    [    9s]   File "<frozen importlib._bootstrap_external>", line 1129, in _get_spec
    [    9s]   File "<frozen importlib._bootstrap_external>", line 1273, in find_spec
    [    9s]   File "<frozen importlib._bootstrap_external>", line 1231, in _get_spec
    [    9s]   File "<frozen importlib._bootstrap_external>", line 556, in spec_from_file_location
    [    9s] RecursionError: maximum recursion depth exceeded
    [   10s] error: Bad exit status from /var/tmp/rpm-tmp.hWB5yf (%check)
    

    Is here anything wrong with my configuration or I need to modify the code?

    opened by guoyunhe 5
  • Can't open book

    Can't open book

    There's a book that I've added to my library that lector is not able to open. It gives this error:

    Traceback (most recent call last):
      File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker
        result = (True, func(*args, **kwds))
      File "/usr/lib/python3.6/multiprocessing/pool.py", line 44, in mapstar
        return list(map(*args))
      File "/usr/lib/python3.6/site-packages/lector/sorter.py", line 210, in read_book
        all_content = book_ref.get_contents()
      File "/usr/lib/python3.6/site-packages/parsers/epub.py", line 63, in get_contents
        self.book_ref.parse_chapters(temp_dir=self.extract_path)
      File "/usr/lib/python3.6/site-packages/ePub/read_epub.py", line 246, in parse_chapters
        chapter_data, self.book['split_chapters'][i])
      File "/usr/lib/python3.6/site-packages/ePub/read_epub.py", line 317, in get_split_content
        xml_string = this_split[1]
    IndexError: list index out of range
    """
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
        self.run()
      File "/usr/lib/python3.6/threading.py", line 864, in run
        self._target(*self._args, **self._kwargs)
      File "/usr/lib/python3.6/site-packages/lector/sorter.py", line 268, in pool_creator
        self.read_book, self.file_list)
      File "/usr/lib/python3.6/multiprocessing/pool.py", line 266, in map
        return self._map_async(func, iterable, mapstar, chunksize).get()
      File "/usr/lib/python3.6/multiprocessing/pool.py", line 644, in get
        raise self._value
    IndexError: list index out of range
    
    opened by DukeValentine 5
  • Error in sizeHint, bad arguments

    Error in sizeHint, bad arguments

    https://github.com/BasioMeusPuga/Lector/blob/1b1d87739a8c14e0e22009435350b155fc3e3b77/lector/toolbars.py#L514

    Traceback (most recent call last):
      File "/usr/lib/python3.10/site-packages/lector/toolbars.py", line 514, in sizeHint
        return QtCore.QSize(self.adjusted_size, 22)
    TypeError: arguments did not match any overloaded call:
      QSize(): too many arguments
      QSize(int, int): argument 1 has unexpected type 'float'
      QSize(QSize): argument 1 has unexpected type 'float'
    fish: Job 1, 'lector' terminated by signal SIGABRT (Abort)
    

    I'm using lector-0.5.1-1 with Arch Linux.

    opened by J053Fabi0 2
  • Bump lxml from 4.6.5 to 4.9.1

    Bump lxml from 4.6.5 to 4.9.1

    Bumps lxml from 4.6.5 to 4.9.1.

    Changelog

    Sourced from lxml's changelog.

    4.9.1 (2022-07-01)

    Bugs fixed

    • A crash was resolved when using iterwalk() (or canonicalize()) after parsing certain incorrect input. Note that iterwalk() can crash on valid input parsed with the same parser after failing to parse the incorrect input.

    4.9.0 (2022-06-01)

    Bugs fixed

    • GH#341: The mixin inheritance order in lxml.html was corrected. Patch by xmo-odoo.

    Other changes

    • Built with Cython 0.29.30 to adapt to changes in Python 3.11 and 3.12.

    • Wheels include zlib 1.2.12, libxml2 2.9.14 and libxslt 1.1.35 (libxml2 2.9.12+ and libxslt 1.1.34 on Windows).

    • GH#343: Windows-AArch64 build support in Visual Studio. Patch by Steve Dower.

    4.8.0 (2022-02-17)

    Features added

    • GH#337: Path-like objects are now supported throughout the API instead of just strings. Patch by Henning Janssen.

    • The ElementMaker now supports QName values as tags, which always override the default namespace of the factory.

    Bugs fixed

    • GH#338: In lxml.objectify, the XSI float annotation "nan" and "inf" were spelled in lower case, whereas XML Schema datatypes define them as "NaN" and "INF" respectively.

    ... (truncated)

    Commits
    • d01872c Prevent parse failure in new test from leaking into later test runs.
    • d65e632 Prepare release of lxml 4.9.1.
    • 86368e9 Fix a crash when incorrect parser input occurs together with usages of iterwa...
    • 50c2764 Delete unused Travis CI config and reference in docs (GH-345)
    • 8f0bf2d Try to speed up the musllinux AArch64 build by splitting the different CPytho...
    • b9f7074 Remove debug print from test.
    • b224e0f Try to install 'xz' in wheel builds, if available, since it's now needed to e...
    • 897ebfa Update macOS deployment target version from 10.14 to 10.15 since 10.14 starts...
    • 853c9e9 Prepare release of 4.9.0.
    • d3f77e6 Add a test for https://bugs.launchpad.net/lxml/+bug/1965070 leaving out the a...
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Flash back occurs when reading PDF

    Flash back occurs when reading PDF

    If you click to go to full-screen mode or open the Reading Settings bar while reading a PDF, the BookToolBar returns with a button that doesn't exist, and when you click it, the BookToolBar automatically flashes back with an error. image

    opened by PaperPlane7 0
  • /usr/lib/python3.8/site-packages/fitz/_fitz.cpython-38-x86_64-linux-gnu.so: undefined symbol: jbig2_page_out

    /usr/lib/python3.8/site-packages/fitz/_fitz.cpython-38-x86_64-linux-gnu.so: undefined symbol: jbig2_page_out

    It appear this error when i run

    Traceback (most recent call last): File "/usr/bin/lector", line 33, in sys.exit(load_entry_point('lector==0.5.1', 'gui_scripts', 'lector')()) File "/usr/bin/lector", line 25, in importlib_load_entry_point return next(matches).load() File "/usr/lib/python3.8/importlib/metadata.py", line 77, in load module = import_module(match.group('module')) File "/usr/lib/python3.8/importlib/init.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "", line 1014, in _gcd_import File "", line 991, in _find_and_load File "", line 975, in _find_and_load_unlocked File "", line 671, in _load_unlocked File "", line 783, in exec_module File "", line 219, in _call_with_frames_removed File "/usr/lib/python3.8/site-packages/lector/main.py", line 42, in from lector import sorter File "/usr/lib/python3.8/site-packages/lector/sorter.py", line 58, in from lector.parsers.pdf import ParsePDF File "/usr/lib/python3.8/site-packages/lector/parsers/pdf.py", line 20, in import fitz File "/usr/lib/python3.8/site-packages/fitz/init.py", line 3, in from fitz.fitz import * File "/usr/lib/python3.8/site-packages/fitz/fitz.py", line 18, in from . import _fitz ImportError: /usr/lib/python3.8/site-packages/fitz/_fitz.cpython-38-x86_64-linux-gnu.so: undefined symbol: jbig2_page_out

    opened by Ripo-za 1
Releases(0.5.1)
  • 0.5.1(Mar 9, 2019)

  • 0.5(Mar 2, 2019)

    I have no idea how to write email subjects. Apart from "Sexy shingles in your area". That one was classic.

    • fb2 support
    • Comicbooks / PDFs: Double page mode, Manga mode, Image color inversion
    • Search functionality
    • Way better sidedock
    • Seriously overhauled ToC generation for all filetypes. Now with more tree view
    • Error logging - Error notifications
    • Much better error handling
    • UI improvements
    • Bugfixes

    Contribute: Paypal: https://www.paypal.me/supportlector Bitcoin: 17jaxj26vFJNqQ2hEVerbBV5fpTusfqFro

    Source code(tar.gz)
    Source code(zip)
  • 0.4(May 13, 2018)

    Haircuts are just karma normalization events.

    • Text annotations
    • Drag and drop support
    • Better spacebar navigation
    • More granular progress measurement
    • Remove dependency on requests
    • Redesign settings dialog
    • In-built internet searching
    • Miscellaneous UI Improvements
    • Bugfixes
    • Chinese (simplified) translation by jaccsr
    Source code(tar.gz)
    Source code(zip)
  • 0.3.1(Mar 22, 2018)

    I'm a nihilist. That means I'm pathologically lazy but still morally defensible.

    • Application icon and .desktop file
    • Distraction free mode
    • Internationalization support
    • Context menus for reading views
    • UI Improvements
    • Bug fixes
    Source code(tar.gz)
    Source code(zip)
  • 0.2(Mar 16, 2018)

    Everything I fix today is to fix everything I fixed yesterday.

    • Preliminary pdf support
    • Ludicrous speed™ caching of image files in comics
    • Included icon theme
    • GUI improvements
    • Bug fixes
    Source code(tar.gz)
    Source code(zip)
  • 0.1(Mar 10, 2018)

    There's still plenty in the TODO (not to mention the TODOs I've left scattered in the code), but I believe it's about time for a first release.

    Source code(tar.gz)
    Source code(zip)
A python program to generate ANSI art from images and videos

ANSI Art Generator A python program that creates ASCII art (with true color support if enabled) from images and videos Dependencies The program runs u

Pratyush Kumar 12 Nov 08, 2022
Manipulate EXIF and IFD metadata.

Tyf Copyright Distribution Support this project Buy Ѧ and: Send Ѧ to AUahWfkfr5J4tYakugRbfow7RWVTK35GPW Vote arky on Ark blockchain and earn Ѧ weekly

16 Jan 21, 2022
TRREASURE_IMAGE is python lib by which you can hide anything in a .jpg image with Command-Line Interface[cli] feature

TRREASURE_IMAGE TRREASURE_IMAGE is a python third-party library with Command-Line Interface[cli] feature. Table of Contents General Info Python librar

Fatin Shadab 3 Jun 07, 2022
Me cleaner - Tool for partial deblobbing of Intel ME/TXE firmware images

me_cleaner me_cleaner is a Python script able to modify an Intel ME firmware image with the final purpose of reducing its ability to interact with the

Nicola Corna 4.1k Jan 08, 2023
SALaD (Semi-Automatic Landslide Detection) is a landslide mapping system

SALaD (Semi-Automatic Landslide Detection) is a landslide mapping system. SALaD utilizes Object-based Image Analysis and Random Forest to map landslides.

NASA 14 Jan 04, 2023
An ascii art generator that's actually good. Does edge detection and selects the most appropriate characters.

Ascii Artist An ascii art generator that's actually good. Does edge detection and selects the most appropriate characters. Installing Installing with

18 Jan 03, 2023
Rotates your images in the spirit of rot13

Image Rotator (imrot10) Its like rot13 but for images. Calling the algorithm imrot10 for im = image, rot = rotation, 10 = default magnitude. Unfortuna

Sarah 2 Dec 10, 2021
Simple program to easily view Euler parameters in 3D.

Simple program to easily view Euler parameters in 3D.

5 Aug 20, 2021
With this simple py script you will be able to get all the .png from a folder and generate a yml for Oraxen

Oraxen-item-to-yml With this simple py script you will be able to get all the .png from a folder and generate a yml for Oraxen How to use Install the

Akex 1 Dec 29, 2021
Draw a torus passing through three given points.

PyTorusThreePoints Draw a torus passing through three given points. Usage import numpy as np import pyvista as pv from torus_three_points.main import

2 Nov 19, 2021
A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for quickly creating new images from the one assigned to the field.

django-versatileimagefield A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for creat

Jonathan Ellenberger 490 Dec 13, 2022
Simple utility to tinker with OPlus images

OPlus image utilities Prerequisites Linux running kernel 5.4 or up (check with uname -r) Image rebuilding Used to rebuild read-only erofs images into

Wiley Lau 15 Dec 28, 2022
Convert any binary data to a PNG image file and vice versa.

What is PngBin? The name PngBin comes from an image format file extension PNG (Portable Network Graphics) and the word Binary. An image produced by Pn

Nathan Young 87 Dec 22, 2022
Validate arbitrary image uploads from incoming data urls while preserving file integrity but removing EXIF and unwanted artifacts and RCE exploit potential

Validate arbitrary base64-encoded image uploads as incoming data urls while preserving image integrity but removing EXIF and unwanted artifacts and mitigating RCE-exploit potential.

A3R0 1 Jan 10, 2022
Gaphor is the simple modeling tool

Gaphor Gaphor is a UML and SysML modeling application written in Python. It is designed to be easy to use, while still being powerful. Gaphor implemen

Gaphor 1.3k Dec 31, 2022
Fixes 500+ mislabeled MURA images

In this repository, new csv files are provided that fixes 500+ mislabeled MURA x-rays for all categories. The mislabeled x-rays mainly had hardware in them. This project only fixes the false negative

Pieter Zeilstra 4 May 18, 2022
missing-pixel-filler is a python package that, given images that may contain missing data regions (like satellite imagery with swath gaps), returns these images with the regions filled.

Missing Pixel Filler This is the official code repository for the Missing Pixel Filler by SpaceML. missing-pixel-filler is a python package that, give

SpaceML 11 Jul 19, 2022
Generate your own QR Code and scan it to see the results! Never use it for malicious purposes.

QR-Code-Generator-Python Choose the name of your generated QR .png file. If it happens to open the .py file (the application), there are specific comm

1 Dec 23, 2021
A tool and a library for SVG path data transformations.

SVG path data transformation toolkit A tool and a library for SVG path data transformations. Currently it supports a translation and a scaling. Usage

Igor Mikushkin 2 Mar 07, 2022
Convert Image to ASCII Art

Convert Image to ASCII Art Persiapan aplikasi ini menggunakan bahasa python dan beberapa package python. oleh karena itu harus menginstall python dan

Huda Damar 48 Dec 20, 2022