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)
CadQuery is an intuitive, easy-to-use Python module for building parametric 3D CAD models.

A python parametric CAD scripting framework based on OCCT

1.9k Dec 30, 2022
ModernGL is a python wrapper over OpenGL 3.3+ core

ModernGL is a python wrapper over OpenGL 3.3+ core that simplifies the creation of simple graphics applications like scientific simulations, games or user interface

ModernGL 1.4k Jan 01, 2023
This piece of code is a User Welcomer with Image Manipulation using Python and Pillow (PIL).

This piece of code is a User Welcomer with Image Manipulation using Python and Pillow (PIL).

Bero 4 Jan 11, 2022
A simple image-level annotation tool supporting multi-channel images for napari.

napari-labelimg4classification A simple image-level annotation tool supporting multi-channel images for napari. This napari plugin was generated with

4 May 16, 2022
Pixel art as well as various sets for hand crafting

Pixel art as well as various sets for hand crafting

1 Nov 09, 2021
Random collage/montage generator with drop-shadow

Random Collage Example Usage These are the sample input files in $PWD for the below examples: 1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10

M B 1 Dec 07, 2021
Raven is a tool written in Python3 allowing you to generate an unique image with some text.

🐦 Raven is a tool written in Python3 allowing you to generate an unique image with some text. It does it by searching the text on Google, do

Billy 39 Dec 20, 2022
Optimize/Compress images using python

Image Optimization Using Python steps to run the script run the command to install the required libraries pip install -r requirements.txt create a dir

Shekhar Gupta 1 Oct 15, 2021
imgAnalyser - Un script pour obtenir la liste des pixels d'une image correspondant à plusieurs couleurs

imgAnalyser - Un script pour obtenir la liste des pixels d'une image correspondant à plusieurs couleurs Ce script à pour but, à partir d'une image, de

Théo Migeat 1 Nov 15, 2021
PSD (Photoshop, Krita, Gimp...) -> Godot.

limage v0.2.2 Features Getting Started Tags Settings Todo Customizer Changes Solutions WARNING: Requires Python to be installed PSD (Photoshop, Krita,

21 Nov 10, 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
Fixed Version Of Blender Low Poly Rock Generator For Blender 3.0.0

Blender (3.0.0) - Low Poly Rock Generator This is an addon for Blender 3.0.0 to generate low poly rocks. It was based on an addon that unfortunately h

3 Mar 24, 2022
A procedural Blender pipeline for photorealistic training image generation

BlenderProc2 A procedural Blender pipeline for photorealistic rendering. Documentation | Tutorials | Examples | ArXiv paper | Workshop paper Features

DLR-RM 1.8k Jan 02, 2023
Python Digital Art Generator

Python Digital Art Generator The main goal of this repository is to generate all possible layers permutations given by the user in order to get unique

David Cuentas Mar 3 Mar 12, 2022
Unique image & metadata generation using weighted layer collections.

nft-generator-py nft-generator-py is a python based NFT generator which programatically generates unique images using weighted layer files. The progra

Jonathan Becker 243 Dec 31, 2022
将位图转为彩色矢量 svg 图片

一个将位图描摹为彩色矢量 svg 图片的程序,是一个命令行工具,使用 Python 脚本实现,运行环境 Python3.8+。 ✨ 效果 以一个字帖图片为例,这是 png 格式的位图(370KB): 这是颜

Haujet Zhao 104 Dec 30, 2022
Generates images of calendar month tables and can paste them onto suitable photos.

📆 calendizer README Generates images of calendar month tables and can paste them onto suitable photos. A quick way to make your own calendar for prin

Sean Ryan 2 Dec 14, 2022
QR-code Generator with a basic GUI.

Qr_generator_python Qr code generator with a basic GUI. ❔ About the QR-Code-Generator This project Generates QR codes to sites, e-mails and plain text

Tecixck 2 Oct 11, 2021
Simple Python / ImageMagick script to package images into WAD3s for use as GoldSrc textures.

WADs Out For [The] Ladies Simple Python / ImageMagick script to package images into WAD3s for use as GoldSrc textures. Development mostly focused on L

5 Apr 09, 2022
A Python package implementing various HDRI / Radiance image processing algorithms.

Colour - HDRI A Python package implementing various HDRI / Radiance image processing algorithms. It is open source and freely available under the New

colour-science 111 Dec 06, 2022