A HEIF/HEIC addon for Pillow using libheif library through CFFI, with binary wheels.

Overview

pillow_heif

A HEIF/HEIC addon for Pillow using libheif library through CFFI, with binary wheels(Python 3.6-3.9, linux/macos - x64,aarch64).

Based mostly on work David's Poirier pyheif
Idea of plugin connect from Christian's Bianciotto pyheif-pillow-opener
Great thanks to them both.

Pull requests are greatly welcome.

Installation

You can install pillow_heif from PyPi:

pip install pillow_heif

or from GitHub:

pip install https://github.com/bigcat88/pillow_heif/archive/master.zip

Installation from source

Linux Ubuntu
sudo add-apt-repository ppa:strukturag/libheif
apt install libffi libheif-dev libde265-dev
pip install git+https://github.com/bigcat88/pillow_heif.git
MacOS
brew install libffi libheif
pip install git+https://github.com/bigcat88/pillow_heif.git

Example of use as opener

from PIL import Image
from pillow_heif import register_heif_opener

register_heif_opener()

image = Image.open('image.heic')
image.load()

Example of use as reader

from PIL import Image
import pillow_heif

heif_file = pillow_heif.read("ABC.HEIC")
image = Image.frombytes(
    heif_file.mode, 
    heif_file.size, 
    heif_file.data,
    "raw",
    heif_file.mode,
    heif_file.stride,
    )

The HeifFile object

The returned HeifFile has the following properties:

  • mode - the image mode, e.g. "RGB" or "RGBA"
  • size - the size of the image as a (width, height) tuple of integers
  • data - the raw decoded file data, as bytes
  • metadata - a list of metadata dictionaries
  • brand - a list of heif_brand constants.
  • color_profile - a color profile dictionary
  • stride - the number of bytes in a row of decoded file data
  • bit_depth - the number of bits in each component of a pixel
Comments
  • Sigal support

    Sigal support

    Describe why it is important and where it will be useful

    Currently investigating if it is needed...

    Describe your proposed solution

    Adding file to pass to register as a plugin with Sigal

    Describe alternatives you've considered, if relevant

    Registration of plugins-modules in Sigal

    
        for plugin in settings['plugins']:
            try:
                if isinstance(plugin, str):
                    mod = importlib.import_module(plugin)
                    mod.register(settings)
                else:
                    plugin.register(settings)
                logger.debug('Registered plugin %s', plugin)
    

    Additional context

    Will be good if someone who uses Sigal, says how to use it in proper way. And when to register module and when a plugin.

    Like @Simon566 for example.

    enhancement fixed 
    opened by bigcat88 15
  • Can't build wheel on ubuntu focal

    Can't build wheel on ubuntu focal

    Hi,

    I was trying to build a wheel for armhf on ubuntu focal and it never completes successfully. Then I tried to build it for amd64 to rule out 32bit related issues and that also fails (with the option --no-binary pillow_heif).

    The official wheels seem to work, but since there are no wheels for armhf, I have to compile.

    I do have the listed build deps libffi, libheif-dev and libde265-dev installed (along with a whole lot of other build deps for other wheels). For reference, I'm using this dockerfile: https://github.com/linuxserver/wheelie/blob/main/Dockerfile

    Here's the output of pip wheel --wheel-dir=/build --no-cache-dir -v --no-binary pillow_heif pillow_heif on ubuntu focal amd64: https://pastebin.com/vngx8kqx

    Am I missing another build dep? Any ideas?

    Thanks

    enhancement fixed 
    opened by aptalca 14
  • Performance, no multithreading for decoding

    Performance, no multithreading for decoding

    Describe the bug

    Hi,

    Thanks for developing this extension to Pillow. I had a question regarding performance converting a .heic to a .jpg file. Running heif-convert is about twice as fast as doing:

    import pillow_heif.HeifImagePlugin
    
    img = Image.open(path_heic)
    img.save(path_jpg)
    

    The command line I used was:

    for file in *.heic; do heif-convert $file ${file/%.heic/.jpg}; done

    Is this expected? For 100 images (of the smaller variety I attached), heif-convert took 42 seconds, pillow_heif took 75 seconds (threaded), and 208 seconds using one thread.

    I've attached two files from two datasets I've observed this on.

    Thanks,

    Steps/Code to Reproduce

    import pillow_heif.HeifImagePlugin
    
    img = Image.open(path_heic)
    img.save(path_jpg)
    

    images.zip

    Expected Results

    Performance should mirror heif-converte

    Actual Results

    About two times slower.

    Versions

    0.8.0
    {'version': {'libheif': '1.14.0', 'x265': 'x265 HEVC encoder (3.5+1-f0c1022b6)', 'aom': 'AOMedia Project AV1 Encoder v3.5.0'}, 'decoders': {'HEVC': 1, 'AV1': 1, 'AVC': 0}, 'encoders': {'HEVC': 1, 'AV1': 1, 'AVC': 0}}
    
    bug good issue fixed in upcoming release 
    opened by jtressle 10
  • DLL load failed while importing libheif

    DLL load failed while importing libheif

    As running the example, there is an error happened while importing ffi, lib form pillow_heif.libheif. Any suggestion, plz?

    from pillow_heif.libheif import ffi, lib # pylint: disable=import-error, no-name-in-module. ImportError: DLL load failed while importing libheif:

    fixed 
    opened by ttjhninn 7
  • HEIF/AVIF file signature (magic number)

    HEIF/AVIF file signature (magic number)

    Hi there!

    Recently I started to use pyheif-pillow-opener for one project to add support for heif/avif files. It was great until I faced with some issue, that I want to share with you, because I can see you start developing your addon a month ago and you hopefully can fix it faster on your side

    So, in as_opener.py you have check_heif_magic method. It checks, if 5-8 bytes of signature is ftyp or 9-12 bytes of signature is one of the listed brands, but I think it should be logical and instead of logical or in return statement and that's why:

    1. Links in function comments https://github.com/strukturag/libheif/issues/83 https://github.com/GNOME/gimp/commit/e4bff4c8016f18195f9a6229f59cbf41740ddb8d shows, that acceptable magic numbers is ftypheic, ftypheix, ftypmif1 etc., not just ftyp or [heic, heix, mif1]
    2. I found out that some other files can have 5-8 bytes as ftyp, for my particular situation it was .m4a, it has ftypM4A magic number, and I found some other files, that is not HEIF/AVIF photos, but have 5-8 bytes as ftyp (here you can find some them, but I bet we can find more: https://www.garykessler.net/library/file_sigs.html) and because of that .m4a files can be validated as HEIF files with this function, but this is not HEIF at all

    I can't find too much info about HEIF/AVIF file signature, so maybe I'm wrong, but from my experience and from discussions above I assume, that this could be a bug

    Thank you for your attention, would be gladful if you fix this, or tell me that I've missed something!

    fixed in upcoming release fixed 
    opened by DimonLavron 7
  • pillow-heif doubling filesize during PyInstaller Build

    pillow-heif doubling filesize during PyInstaller Build

    Describe the bug

    My sv-dlp project started using pillow-heif (0.5.1) on its latest version (2022.07.30). Turns out compiling it with pillow-heif on a (GitHub Actions) Linux environment doubles the size from 26.6MB to 43.7MB. I tried using UPX, installing the required system modules that (libaom, libde265, libx265), but it was still doubling the size for whatever reason.

    Weird thing is, Windows (19.8MB -> 24.7MB) and MacOS (23.4MB -> 31.6MB) builds don't seem seriously affected by this, but still rises.

    Below I'll leave a sample of my build script, requirements file, and the build results comparison using a WSL Arch environment

    Steps/Code to Reproduce

    I honestly don't know what to put here so I'll just put my build.py script

    import PyInstaller.__main__
    import platform
    
    SYS_OS = platform.system()
    SYS_ARCH = platform.architecture()[0][:2]
    suffix = f"{'_macos' if SYS_OS == 'Darwin' else ''}{'_x86' if SYS_ARCH == '32' else ''}{'.exe' if SYS_OS == 'Windows' else ''}"
    
    def main():
        opts = [
            'sv-dlp/__main__.py',
            '--onefile',
            f'--name=sv-dlp{suffix}'
        ]
    
        print(f"Building sv-dlp for platform {SYS_OS} with architecture {SYS_ARCH}")
        PyInstaller.__main__.run(opts)
    
    if __name__ == '__main__':
        main()
    
    altgraph==0.17.2
    certifi==2022.6.15
    charset-normalizer==2.1.0
    colorama==0.4.5
    future==0.18.2
    idna==3.3
    pefile==2021.9.3
    Pillow==9.2.0
    pillow-heif==0.5.1
    pyinstaller==4.10
    pyinstaller-hooks-contrib==2022.3
    pylance==0.0.1
    pyproj==3.3.1
    pywin32-ctypes==0.2.0
    requests==2.28.1
    tqdm==4.64.0
    urllib3==1.26.11
    protobuf==4.21.4
    pycryptodome==3.15.0
    
    sudo apt-get install libaom0 libde265-0 libx265-179 # ubuntu
    sudo pacman -S aom libde265 x265 # arch
    

    Expected Results

    Before installing pillow-heif

    Building sv-dlp for platform Linux with architecture 64
    84 INFO: PyInstaller: 4.10
    84 INFO: Python: 3.10.5
    85 INFO: Platform: Linux-5.10.16.3-microsoft-standard-WSL2-x86_64-with-glibc2.35
    87 INFO: wrote /mnt/f/code/sv-dlp/sv-dlp.spec
    89 INFO: UPX is available.
    96 INFO: Extending PYTHONPATH with paths
    ['/mnt/f/code/sv-dlp/sv-dlp']
    270 INFO: checking Analysis
    271 INFO: Building Analysis because Analysis-00.toc is non existent
    271 INFO: Initializing module dependency graph...
    275 INFO: Caching module graph hooks...
    279 INFO: Analyzing base_library.zip ...
    3053 INFO: Caching module dependency graph...
    3189 INFO: running Analysis Analysis-00.toc
    3204 INFO: Analyzing /mnt/f/code/sv-dlp/sv-dlp/__main__.py
    3271 INFO: Processing pre-safe import module hook urllib3.packages.six.moves from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-urllib3.packages.six.moves.py'.
    5354 INFO: Processing pre-find module path hook distutils from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/pre_find_module_path/hook-distutils.py'.
    5371 INFO: distutils: retargeting to non-venv dir '/usr/lib/python3.10'
    5776 INFO: Processing pre-safe import module hook win32com from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/pre_safe_import_module/hook-win32com.py'.
    6751 INFO: Processing pre-find module path hook site from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/pre_find_module_path/hook-site.py'.
    6752 INFO: site: retargeting to fake-dir '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/fake-modules'
    7233 INFO: Processing module hooks...
    7233 INFO: Loading module hook 'hook-pyproj.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7239 INFO: Loading module hook 'hook-appdirs.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7240 INFO: Loading module hook 'hook-cryptography.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7398 INFO: Loading module hook 'hook-pycparser.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7398 INFO: Loading module hook 'hook-Crypto.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7401 INFO: Loading module hook 'hook-certifi.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7402 INFO: Loading module hook 'hook-jaraco.text.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7403 INFO: Loading module hook 'hook-heapq.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7404 INFO: Loading module hook 'hook-pickle.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7405 INFO: Loading module hook 'hook-distutils.util.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7406 INFO: Loading module hook 'hook-setuptools.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7424 INFO: Loading module hook 'hook-distutils.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7432 INFO: Loading module hook 'hook-multiprocessing.util.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7433 INFO: Loading module hook 'hook-lib2to3.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7444 INFO: Loading module hook 'hook-xml.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7476 INFO: Loading module hook 'hook-difflib.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7477 INFO: Loading module hook 'hook-packaging.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7477 INFO: Loading module hook 'hook-PIL.Image.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7743 INFO: Loading module hook 'hook-PIL.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7750 INFO: Loading module hook 'hook-encodings.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7803 INFO: Loading module hook 'hook-pkg_resources.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7851 WARNING: Hidden import "pkg_resources.py2_warn" not found!
    7852 WARNING: Hidden import "pkg_resources.markers" not found!
    7852 WARNING: Hidden import "pkg_resources._vendor.jaraco.functools" not found!
    7852 WARNING: Hidden import "pkg_resources._vendor.jaraco.context" not found!
    7852 WARNING: Hidden import "pkg_resources._vendor.jaraco.text" not found!
    7853 INFO: Loading module hook 'hook-sysconfig.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7853 INFO: Loading module hook 'hook-PIL.ImageFilter.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7854 INFO: Loading module hook 'hook-PIL.SpiderImagePlugin.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7856 INFO: Loading module hook 'hook-setuptools.msvc.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7856 INFO: Loading module hook 'hook-_tkinter.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/usr/lib/python3.10/tkinter/__init__.py", line 37, in <module>
        import _tkinter # If this fails your Python may not be configured for Tk
    ImportError: libtk8.6.so: cannot open shared object file: No such file or directory
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    ImportError: libtk8.6.so: cannot open shared object file: No such file or directory
    7903 ERROR: Tcl/Tk improperly installed on this system.
    7916 INFO: Looking for ctypes DLLs
    7936 INFO: Analyzing run-time hooks ...
    7940 INFO: Including run-time hook '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/rthooks/pyi_rth_subprocess.py'
    7941 INFO: Including run-time hook '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py'
    7943 INFO: Including run-time hook '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py'
    7945 INFO: Including run-time hook '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py'
    7945 INFO: Including run-time hook '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgres.py'
    7948 INFO: Including run-time hook '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/rthooks/pyi_rth_pyproj.py'
    7955 INFO: Looking for dynamic libraries
    8238 WARNING: Cannot find libmpdec.so.3 (needed by /usr/lib/python3.10/lib-dynload/_decimal.cpython-310-x86_64-linux-gnu.so)
    8477 WARNING: Cannot find libwebp-a2d91712.so.7.1.3 (needed by /home/juan/.local/lib/python3.10/site-packages/PIL/../Pillow.libs/libwebpdemux-df590b8f.so.2.0.9)
    8481 WARNING: Cannot find libwebp-a2d91712.so.7.1.3 (needed by /home/juan/.local/lib/python3.10/site-packages/PIL/../Pillow.libs/libwebpmux-625e1d4a.so.3.0.8)
    8494 WARNING: Cannot find libXau-154567c4.so.6.0.0 (needed by /home/juan/.local/lib/python3.10/site-packages/PIL/../Pillow.libs/libxcb-4971137c.so.1.1.0)
    8512 WARNING: Cannot find liblzma-96284f0d.so.5.2.5 (needed by /home/juan/.local/lib/python3.10/site-packages/PIL/../Pillow.libs/libtiff-f706b4a5.so.5.8.0)
    8512 WARNING: Cannot find libjpeg-a4c3d5e9.so.62.3.0 (needed by /home/juan/.local/lib/python3.10/site-packages/PIL/../Pillow.libs/libtiff-f706b4a5.so.5.8.0)
    ldd: warning: you do not have execution permission for `/usr/lib/libgcc_s.so.1'
    8529 WARNING: Cannot find libsqlite3-e6e8c34c.so.0.8.6 (needed by /home/juan/.local/lib/python3.10/site-packages/pyproj/../pyproj.libs/libproj-3a67288e.so.22.2.0)
    8529 WARNING: Cannot find libtiff-40073f1f.so.5.7.0 (needed by /home/juan/.local/lib/python3.10/site-packages/pyproj/../pyproj.libs/libproj-3a67288e.so.22.2.0)
    8529 WARNING: Cannot find libcurl-c54b2682.so.4.7.0 (needed by /home/juan/.local/lib/python3.10/site-packages/pyproj/../pyproj.libs/libproj-3a67288e.so.22.2.0)
    8538 WARNING: Cannot find libnghttp2-62f02794.so.14.20.1 (needed by /home/juan/.local/lib/python3.10/site-packages/pyproj/../pyproj.libs/libcurl-c54b2682.so.4.7.0)
    8542 INFO: Looking for eggs
    8542 INFO: Using Python library /usr/lib/libpython3.10.so.1.0
    8548 INFO: Warnings written to /mnt/f/code/sv-dlp/build/sv-dlp/warn-sv-dlp.txt
    8608 INFO: Graph cross-reference written to /mnt/f/code/sv-dlp/build/sv-dlp/xref-sv-dlp.html
    8634 INFO: checking PYZ
    8635 INFO: Building PYZ because PYZ-00.toc is non existent
    8635 INFO: Building PYZ (ZlibArchive) /mnt/f/code/sv-dlp/build/sv-dlp/PYZ-00.pyz
    9235 INFO: Building PYZ (ZlibArchive) /mnt/f/code/sv-dlp/build/sv-dlp/PYZ-00.pyz completed successfully.
    9247 INFO: checking PKG
    9248 INFO: Building PKG because PKG-00.toc is non existent
    9248 INFO: Building PKG (CArchive) sv-dlp.pkg
    19969 INFO: Building PKG (CArchive) sv-dlp.pkg completed successfully.
    19975 INFO: Bootloader /home/juan/.local/lib/python3.10/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run
    19975 INFO: checking EXE
    19976 INFO: Building EXE because EXE-00.toc is non existent
    19976 INFO: Building EXE from EXE-00.toc
    19977 INFO: Copying bootloader EXE to /mnt/f/code/sv-dlp/dist/sv-dlp
    19980 INFO: Appending PKG archive to custom ELF section in EXE
    21227 INFO: Building EXE from EXE-00.toc completed successfully.
    

    Actual Results

    After installing pillow-heif

    Building sv-dlp for platform Linux with architecture 64
    84 INFO: PyInstaller: 4.10
    84 INFO: Python: 3.10.5
    84 INFO: Platform: Linux-5.10.16.3-microsoft-standard-WSL2-x86_64-with-glibc2.35
    86 INFO: wrote /mnt/f/code/sv-dlp/sv-dlp.spec
    88 INFO: UPX is available.
    95 INFO: Extending PYTHONPATH with paths
    ['/mnt/f/code/sv-dlp/sv-dlp']
    260 INFO: checking Analysis
    261 INFO: Building Analysis because Analysis-00.toc is non existent
    261 INFO: Initializing module dependency graph...
    264 INFO: Caching module graph hooks...
    269 INFO: Analyzing base_library.zip ...
    2932 INFO: Caching module dependency graph...
    3073 INFO: running Analysis Analysis-00.toc
    3086 INFO: Analyzing /mnt/f/code/sv-dlp/sv-dlp/__main__.py
    3154 INFO: Processing pre-safe import module hook urllib3.packages.six.moves from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-urllib3.packages.six.moves.py'.
    5214 INFO: Processing pre-find module path hook distutils from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/pre_find_module_path/hook-distutils.py'.
    5231 INFO: distutils: retargeting to non-venv dir '/usr/lib/python3.10'
    5628 INFO: Processing pre-safe import module hook win32com from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/pre_safe_import_module/hook-win32com.py'.
    6645 INFO: Processing pre-find module path hook site from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/pre_find_module_path/hook-site.py'.
    6645 INFO: site: retargeting to fake-dir '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/fake-modules'
    7126 INFO: Processing module hooks...
    7126 INFO: Loading module hook 'hook-pyproj.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7131 INFO: Loading module hook 'hook-appdirs.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7132 INFO: Loading module hook 'hook-cryptography.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7292 INFO: Loading module hook 'hook-pycparser.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7292 INFO: Loading module hook 'hook-Crypto.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7295 INFO: Loading module hook 'hook-certifi.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7296 INFO: Loading module hook 'hook-jaraco.text.py' from '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
    7297 INFO: Loading module hook 'hook-heapq.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7298 INFO: Loading module hook 'hook-pickle.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7299 INFO: Loading module hook 'hook-distutils.util.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7300 INFO: Loading module hook 'hook-setuptools.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7318 INFO: Loading module hook 'hook-distutils.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7326 INFO: Loading module hook 'hook-multiprocessing.util.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7327 INFO: Loading module hook 'hook-lib2to3.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7337 INFO: Loading module hook 'hook-xml.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7369 INFO: Loading module hook 'hook-difflib.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7371 INFO: Loading module hook 'hook-packaging.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7371 INFO: Loading module hook 'hook-PIL.Image.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7643 INFO: Loading module hook 'hook-PIL.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7650 INFO: Loading module hook 'hook-encodings.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7703 INFO: Loading module hook 'hook-pkg_resources.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7752 WARNING: Hidden import "pkg_resources.py2_warn" not found!
    7752 WARNING: Hidden import "pkg_resources.markers" not found!
    7752 WARNING: Hidden import "pkg_resources._vendor.jaraco.functools" not found!
    7752 WARNING: Hidden import "pkg_resources._vendor.jaraco.context" not found!
    7752 WARNING: Hidden import "pkg_resources._vendor.jaraco.text" not found!
    7754 INFO: Loading module hook 'hook-sysconfig.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7754 INFO: Loading module hook 'hook-PIL.ImageFilter.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7755 INFO: Loading module hook 'hook-PIL.SpiderImagePlugin.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7756 INFO: Loading module hook 'hook-setuptools.msvc.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    7757 INFO: Loading module hook 'hook-_tkinter.py' from '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks'...
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/usr/lib/python3.10/tkinter/__init__.py", line 37, in <module>
        import _tkinter # If this fails your Python may not be configured for Tk
    ImportError: libtk8.6.so: cannot open shared object file: No such file or directory
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    ImportError: libtk8.6.so: cannot open shared object file: No such file or directory
    7802 ERROR: Tcl/Tk improperly installed on this system.
    7815 INFO: Looking for ctypes DLLs
    7835 INFO: Analyzing run-time hooks ...
    7838 INFO: Including run-time hook '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/rthooks/pyi_rth_subprocess.py'
    7839 INFO: Including run-time hook '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py'
    7842 INFO: Including run-time hook '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py'
    7843 INFO: Including run-time hook '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py'
    7844 INFO: Including run-time hook '/home/juan/.local/lib/python3.10/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgres.py'
    7846 INFO: Including run-time hook '/home/juan/.local/lib/python3.10/site-packages/_pyinstaller_hooks_contrib/hooks/rthooks/pyi_rth_pyproj.py'
    7853 INFO: Looking for dynamic libraries
    8096 WARNING: Cannot find libmpdec.so.3 (needed by /usr/lib/python3.10/lib-dynload/_decimal.cpython-310-x86_64-linux-gnu.so)
    ldd: warning: you do not have execution permission for `/usr/lib/libgcc_s.so.1'
    8345 WARNING: Cannot find libaom-0a65f09e.so.3.4.0 (needed by /home/juan/.local/lib/python3.10/site-packages/pillow_heif.libs/libheif-308f5ff2.so.1.12.0)
    8345 WARNING: Cannot find libde265-f493bf68.so.0.1.1 (needed by /home/juan/.local/lib/python3.10/site-packages/pillow_heif.libs/libheif-308f5ff2.so.1.12.0)
    8345 WARNING: Cannot find libx265-a25050ad.so.204 (needed by /home/juan/.local/lib/python3.10/site-packages/pillow_heif.libs/libheif-308f5ff2.so.1.12.0)
    8370 WARNING: Cannot find libwebp-a2d91712.so.7.1.3 (needed by /home/juan/.local/lib/python3.10/site-packages/PIL/../Pillow.libs/libwebpmux-625e1d4a.so.3.0.8)
    8374 WARNING: Cannot find libwebp-a2d91712.so.7.1.3 (needed by /home/juan/.local/lib/python3.10/site-packages/PIL/../Pillow.libs/libwebpdemux-df590b8f.so.2.0.9)
    8383 WARNING: Cannot find liblzma-96284f0d.so.5.2.5 (needed by /home/juan/.local/lib/python3.10/site-packages/PIL/../Pillow.libs/libtiff-f706b4a5.so.5.8.0)
    8383 WARNING: Cannot find libjpeg-a4c3d5e9.so.62.3.0 (needed by /home/juan/.local/lib/python3.10/site-packages/PIL/../Pillow.libs/libtiff-f706b4a5.so.5.8.0)
    8387 WARNING: Cannot find libXau-154567c4.so.6.0.0 (needed by /home/juan/.local/lib/python3.10/site-packages/PIL/../Pillow.libs/libxcb-4971137c.so.1.1.0)
    8405 WARNING: Cannot find libsqlite3-e6e8c34c.so.0.8.6 (needed by /home/juan/.local/lib/python3.10/site-packages/pyproj/../pyproj.libs/libproj-3a67288e.so.22.2.0)
    8405 WARNING: Cannot find libtiff-40073f1f.so.5.7.0 (needed by /home/juan/.local/lib/python3.10/site-packages/pyproj/../pyproj.libs/libproj-3a67288e.so.22.2.0)
    8405 WARNING: Cannot find libcurl-c54b2682.so.4.7.0 (needed by /home/juan/.local/lib/python3.10/site-packages/pyproj/../pyproj.libs/libproj-3a67288e.so.22.2.0)
    8410 WARNING: Cannot find libnghttp2-62f02794.so.14.20.1 (needed by /home/juan/.local/lib/python3.10/site-packages/pyproj/../pyproj.libs/libcurl-c54b2682.so.4.7.0)
    8422 INFO: Looking for eggs
    8422 INFO: Using Python library /usr/lib/libpython3.10.so.1.0
    8428 INFO: Warnings written to /mnt/f/code/sv-dlp/build/sv-dlp/warn-sv-dlp.txt
    8486 INFO: Graph cross-reference written to /mnt/f/code/sv-dlp/build/sv-dlp/xref-sv-dlp.html
    8517 INFO: checking PYZ
    8517 INFO: Building PYZ because PYZ-00.toc is non existent
    8517 INFO: Building PYZ (ZlibArchive) /mnt/f/code/sv-dlp/build/sv-dlp/PYZ-00.pyz
    9134 INFO: Building PYZ (ZlibArchive) /mnt/f/code/sv-dlp/build/sv-dlp/PYZ-00.pyz completed successfully.
    9148 INFO: checking PKG
    9149 INFO: Building PKG because PKG-00.toc is non existent
    9149 INFO: Building PKG (CArchive) sv-dlp.pkg
    25747 INFO: Building PKG (CArchive) sv-dlp.pkg completed successfully.
    25753 INFO: Bootloader /home/juan/.local/lib/python3.10/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run
    25753 INFO: checking EXE
    25754 INFO: Building EXE because EXE-00.toc is non existent
    25754 INFO: Building EXE from EXE-00.toc
    25755 INFO: Copying bootloader EXE to /mnt/f/code/sv-dlp/dist/sv-dlp
    25758 INFO: Appending PKG archive to custom ELF section in EXE
    27499 INFO: Building EXE from EXE-00.toc completed successfully.
    

    Versions

    3.10.5 (main, Jun  6 2022, 18:49:26) [GCC 12.1.0]
    Linux-5.10.16.3-microsoft-standard-WSL2-x86_64-with-glibc2.35
    0.5.1
    {'version': {'libheif': '1.12.0', 'x265': 'x265 HEVC encoder (3.5+1-f0c1022b6)', 'aom': 'AOMedia Project AV1 Encoder v3.4.0'}, 'decoders': {'HEVC': 1, 'AV1': 1, 'AVC': 0}, 'encoders': {'HEVC': 1, 'AV1': 1, 'AVC': 0}}
    
    enhancement fixed 
    opened by juanpisss 6
  • Issue installing on Arm based Mac OS

    Issue installing on Arm based Mac OS

    Using Python 3.8, Mac OS 12.0.1, M1 Max

    Following the instructions,

    Step One Output

    ➜  appsnacks git:(main) ✗ brew install libffi libheif
    Updating Homebrew...
    ==> Auto-updated Homebrew!
    Updated 1 tap (homebrew/core).
    ==> New Formulae
    atmos                 fisher                luau                  rizin                 tfmigrate
    btop                  git-branchless        mt32emu               rustfmt               tfproviderlint
    cava                  java-service-wrapper  [email protected]               smug                  urlwatch
    cgif                  kubeval               pip-tools             swiftplantuml
    fastfec               libsoup@2             regula                symengine
    ==> Updated Formulae
    Updated 1026 formulae.
    ==> Renamed Formulae
    rt-audio -> rtaudio
    ==> Deleted Formulae
    amap                                                    soundpipe
    
    Warning: libffi 3.4.2 is already installed and up-to-date.
    To reinstall 3.4.2, run:
      brew reinstall libffi
    Warning: libheif 1.12.0_1 is already installed and up-to-date.
    To reinstall 1.12.0_1, run:
      brew reinstall libheif
    

    Step Two Output

    ➜  appsnacks git:(main) ✗ pip3 install --upgrade pillow_heif
    Defaulting to user installation because normal site-packages is not writeable
    Requirement already satisfied: pillow_heif in /Users/bob/Library/Python/3.8/lib/python/site-packages (0.1.3)
    Collecting pillow_heif
      Using cached pillow_heif-0.1.4.tar.gz (19.5 MB)
      WARNING: Value for prefixed-purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
      distutils: /private/var/folders/jp/t829x8110sl6tz4blxxd9_w00000gn/T/pip-build-env-w5pe9h5e/normal/lib/python3.8/site-packages
      sysconfig: /Library/Python/3.8/site-packages
      WARNING: Value for prefixed-platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
      distutils: /private/var/folders/jp/t829x8110sl6tz4blxxd9_w00000gn/T/pip-build-env-w5pe9h5e/normal/lib/python3.8/site-packages
      sysconfig: /Library/Python/3.8/site-packages
      WARNING: Additional context:
      user = False
      home = None
      root = None
      prefix = '/private/var/folders/jp/t829x8110sl6tz4blxxd9_w00000gn/T/pip-build-env-w5pe9h5e/normal'
      WARNING: Value for prefixed-purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
      distutils: /private/var/folders/jp/t829x8110sl6tz4blxxd9_w00000gn/T/pip-build-env-w5pe9h5e/overlay/lib/python3.8/site-packages
      sysconfig: /Library/Python/3.8/site-packages
      WARNING: Value for prefixed-platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
      distutils: /private/var/folders/jp/t829x8110sl6tz4blxxd9_w00000gn/T/pip-build-env-w5pe9h5e/overlay/lib/python3.8/site-packages
      sysconfig: /Library/Python/3.8/site-packages
      WARNING: Additional context:
      user = False
      home = None
      root = None
      prefix = '/private/var/folders/jp/t829x8110sl6tz4blxxd9_w00000gn/T/pip-build-env-w5pe9h5e/overlay'
      Installing build dependencies ... done
      Getting requirements to build wheel ... done
      Installing backend dependencies ... done
      Preparing metadata (pyproject.toml) ... done
    Requirement already satisfied: Pillow in /Users/bob/Library/Python/3.8/lib/python/site-packages (from pillow_heif) (8.4.0)
    Requirement already satisfied: cffi>=1.0.0 in /Users/bob/Library/Python/3.8/lib/python/site-packages (from pillow_heif) (1.15.0)
    Requirement already satisfied: pycparser in /Users/bob/Library/Python/3.8/lib/python/site-packages (from cffi>=1.0.0->pillow_heif) (2.20)
    Building wheels for collected packages: pillow-heif
      Building wheel for pillow-heif (pyproject.toml) ... error
      ERROR: Command errored out with exit status 1:
       command: /Applications/Xcode.app/Contents/Developer/usr/bin/python3 /Users/bob/Library/Python/3.8/lib/python/site-packages/pip/_vendor/pep517/in_process/_in_process.py build_wheel /var/folders/jp/t829x8110sl6tz4blxxd9_w00000gn/T/tmpojyt2acz
           cwd: /private/var/folders/jp/t829x8110sl6tz4blxxd9_w00000gn/T/pip-install-bbaa9mji/pillow-heif_3ee714bb207345d0b75a1aa30b9915f3
      Complete output (24 lines):
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.macosx-10.14-arm64-3.8
      creating build/lib.macosx-10.14-arm64-3.8/pillow_heif
      copying pillow_heif/error.py -> build/lib.macosx-10.14-arm64-3.8/pillow_heif
      copying pillow_heif/as_opener.py -> build/lib.macosx-10.14-arm64-3.8/pillow_heif
      copying pillow_heif/constants.py -> build/lib.macosx-10.14-arm64-3.8/pillow_heif
      copying pillow_heif/__init__.py -> build/lib.macosx-10.14-arm64-3.8/pillow_heif
      copying pillow_heif/reader.py -> build/lib.macosx-10.14-arm64-3.8/pillow_heif
      copying pillow_heif/writer.py -> build/lib.macosx-10.14-arm64-3.8/pillow_heif
      running build_ext
      generating cffi module 'build/temp.macosx-10.14-arm64-3.8/pillow_heif._libheif.c'
      creating build/temp.macosx-10.14-arm64-3.8
      building 'pillow_heif._libheif' extension
      creating build/temp.macosx-10.14-arm64-3.8/build
      creating build/temp.macosx-10.14-arm64-3.8/build/temp.macosx-10.14-arm64-3.8
      clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -iwithsysroot/System/Library/Frameworks/System.framework/PrivateHeaders -iwithsysroot/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/Headers -arch arm64 -arch x86_64 -Werror=implicit-function-declaration -I/usr/local/include -I/usr/include -I/opt/local/include -I/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/include/python3.8 -c build/temp.macosx-10.14-arm64-3.8/pillow_heif._libheif.c -o build/temp.macosx-10.14-arm64-3.8/build/temp.macosx-10.14-arm64-3.8/pillow_heif._libheif.o
      build/temp.macosx-10.14-arm64-3.8/pillow_heif._libheif.c:570:15: fatal error: 'libheif/heif.h' file not found
           #include "libheif/heif.h"
                    ^~~~~~~~~~~~~~~~
      1 error generated.
      error: command 'clang' failed with exit status 1
      ----------------------------------------
      ERROR: Failed building wheel for pillow-heif
    Failed to build pillow-heif
    ERROR: Could not build wheels for pillow-heif, which is required to install pyproject.toml-based projects
    
    bug fixed 
    opened by bajabob 6
  • Created jpg image is skewed diagonally, clearly incorrect

    Created jpg image is skewed diagonally, clearly incorrect

    Describe the bug

    I put in an heic that I know is not weird.

    I run the example code below, and it saves a jpg that looks weird and skewed.

    Steps/Code to Reproduce

    # main.py
    if __name__ == '__main__':
        path = "C:\\Users\\whatever\\myimg.heic"
        heif_file = pillow_heif.open_heif(path)
        image = Image.frombytes(heif_file.mode, heif_file.size, heif_file.data, "raw")
        image.save("hi.jpg")
    

    Expected Results

    image

    Actual Results

    image

    Versions

    Windows 10
    
    
    0.7.0
    {'version': {'libheif': '1.13.0', 'x265': 'x265 HEVC encoder (3.4+31-6722fce1f)', 'aom': 'AOMedia Project AV1 Encoder v3.4.0'}, 'decoders': {'HEVC': 1, 'AV1': 1, 'AVC': 0}, 'encoders': {'HEVC': 1, 'AV1': 1, 'AVC': 0}}
    
    invalid Stale 
    opened by kevinlinxc 4
  • Armv7 support

    Armv7 support

    Describe why it is important and where it will be useful

    Needed for install on Raspberry Pi OS 32bit (Debian 11)

    Describe your proposed solution

    Wheels for arm 32bit architecture.

    Describe alternatives you've considered, if relevant

    No response

    Additional context

    No response

    enhancement fixed wheels 
    opened by Nelfimov 4
  • fix L and LA color modes

    fix L and LA color modes

    Fixes L and LA color modes conversion. I'm not sure that this is the correct fix, but it works.

    Here are the examples of images, that produce incorrect output 1138-4b43bb5f-4ac6-4227-9481-ab358f1c0617 1138-421481acb9c54563a04b1a9a7ac7d683

    opened by Jarikf 4
  • Add ubuntu to source build test, run on pushes and PRs

    Add ubuntu to source build test, run on pushes and PRs

    On ubuntu, there are no prebuilt wheels for the dependencies on armhf (just like alpine) so I had to add the deps for those as well, including aom. On armhf, pillow_heif and its dependencies are all built from source.

    With this PR, pillow_heif builds from source successfully, however the tests fail on ubuntu (they pass on alpine). I have no idea why, but you're the expert on that ;)

    Here's the last action log based on these commits: https://github.com/aptalca/pillow_heif/runs/5454210643?check_suite_focus=true

    opened by aptalca 4
  • Reworked `options()` from `0.9.0` version

    Reworked `options()` from `0.9.0` version

    As we come closer to 1.0.0 version we need more consistent API for setting options. Was looking how it is done in Pillow and liked it.

    Current code:

    pillow_heif.options().thumbnails = False
    

    in new version will be changed to:

    pillow_heif.options.THUMBNAILS= False
    

    Usage when it is used a plugin will not be changed, old code will work the same way:

    from pillow_heif import register_heif_opener
    register_heif_opener(thumbnails=False)
    

    It will require less code from me to support, will not break API for plugin use, and such code will be a bit faster.

    Changes for code when use it not as a plugin: pillow_heif.options().thumbnails=False -> pillow_heif.options.THUMBNAILS=False pillow_heif.options().quality=100 -> pillow_heif.options.QUALITY=100 pillow_heif.options().save_to_12bit=True -> pillow_heif.options.SAVE_HDR_TO_12BIT=True

    New IMPORTANT options (list will be updated as I currently working on this):

    DECODE_THREADS=4 Option to set number of decode threads(when it is possible). Benchmarks will be posted after update released. Usage of option for register_heif_opener :

    register_heif_opener(decode_threads=10)
    

    or

    pillow_heif.options.DECODE_THREADS= 10
    
    Important information 
    opened by bigcat88 0
  • Encoding of images in `LA` mode without conversion

    Encoding of images in `LA` mode without conversion

    Describe why it is important and where it will be useful

    elif frame.mode == "LA":  # libheif doesnt not support INTERLEAVED_MONOCHROME mode
        frame = frame.convert(mode="RGBA")
    

    This is wrong, libheif supports adding MONOCHROME plane and Alpha plane for this situation. And the resulted encoded image will be a bit smaller that case

    Describe your proposed solution

    Do not understand all code in this project, but maybe needed make some changes to:

        @property
        def data(self):
    

    Is this possible?

    Describe alternatives you've considered, if relevant

    No response

    Additional context

    Not a big deal, but would be nice to see such improvement.

    enhancement 
    opened by lupsin 2
Releases(v0.9.1)
Owner
Alexander Piskun
Software Engineer
Alexander Piskun
The FLIP Fluids addon is a tool that helps you set up, run, and render high quality liquid fluid effects all within Blender, the free and open source 3D creation suite.

FLIP Fluids The FLIP Fluids addon is a tool that helps you set up, run, and render liquid simulation effects. Our custom built fluid engine is based a

Ryan Guy 1.4k Dec 22, 2022
Dear ImGui Addons Branch = plain unmodified dear imgui plus some extra addon.

Dear ImGui (This library is available under a free and permissive license, but needs financial support to sustain its continued improvements. In addit

Flix 352 Dec 28, 2022
A Fingerprint Door Lock using a microprocessor named Arduino UNO and programming through Arduino IDE

INSTRUCTIONS - The codes for the Fingerprint Door lock are present in the Code For Fingerprint Door Lock folder The instructions of how to operate the

Akhil Sahukaru 15 Mar 3, 2022
Samir Teymurov 1 Oct 6, 2021
Using D2XX driver to capture UART data to a binary file

What is it This is the sample code to read UART data using any baud rate that FTDI supports and save them to a binary file. How to use Usage: ./larger

pandy song 1 Nov 24, 2021
Send messages to a LED Matrix display through Telegram. Inspired by a tweet from Smarter Every Day

Send messages to a LED Matrix display through Telegram. Inspired by a tweet from Smarter Every Day

Brian Lough 23 Oct 8, 2022
ESP32 software USB host through general IO pins. We can connect up to 4 USB-LS HID (keyboard mouse joystick) devices simultaneously.

esp32_usb_soft_host esp32 USB-LS pure software host thru general IO pins. Up to 4 HID devices simultaneously. board ~$3 :https://www.aliexpress.com/pr

Samsonov Dima 313 Jan 1, 2023
A continuation of FSund's pteron-keyboard project. Feel free to contribute, or use these files to make your own! Kits and PCBs are also available through my facebook page.

pteron-pcb Intro This project is the evolution of the Pteron-Keyboard project, an incredible ergonomic keyboard that was handwired only. I aimed to in

null 17 Oct 11, 2022
Quick patch to prevent fatal crashing when downloading title assets (boxart, etc) through FSD or Aurora.

Quick patch to prevent fatal crashing when downloading title assets (boxart, etc) through FSD or Aurora. As of v0.2-beta, this patch should work for everyone, regardless of geographic location (both in and outside of the US).

Stelio Kontos 27 Dec 11, 2022
ESP8266 software USB host through general IO pins. We can connect up to 2 USB-LS HID (keyboard mouse joystick) devices simultaneously.

esp8266_usb_soft_host Test for esp8266 usb host . Works with ESP-IDF v3.4 80MHz and 160MHz. WorkInProgress Test run with mouse & combined mouse & keyb

Samsonov Dima 28 Sep 1, 2022
Off The Grid (OTG) Messenger is an easy way for people to communicate through text messages when in remote areas.

Off The Grid (OTG) Messenger is an easy way for people to communicate through text messages when in remote areas. With a theoretical transmission range of 10 miles (16kms), OTG messenger can be used by groups of people to stay connected when they are in areas not serviced by mobile connectivity.

Trevor Attema 493 Dec 10, 2022
An AI for playing NES Tetris at a high level. Based primarily on search & heuristic, with high quality board evaluation through value iteration.

StackRabbit An AI that plays NES Tetris at a high level. Primarily based on search & heuristic, with high-quality board eval through value iteration.

Greg Cannon 244 Jan 5, 2023
Go through the readme... fork ....add....send a pull request .... get yourself in the contribution list...Plant the tree

Hacktoberfest 2021 Follow the README below to get started! Table of contents Getting Started The Process The Process star this repo Fork this reposito

Aditya Deshmukh 6 Jan 5, 2022
A gazebo actor plugin that utilizes the map of the environment and graph search methods to generate random actor trajectories that don't pass through walls, furniture, etc.

Gazebo-Map-Actor-Plugin A gazebo actor plugin that utilizes the map of the environment and graph search methods to generate random actor trajectories

Yasin Sonmez 11 Dec 23, 2022
CredBandit - Proof of concept Beacon Object File (BOF) that uses static x64 syscalls to perform a complete in memory dump of a process and send that back through your already existing Beacon communication channel

CredBandit CredBandit is a proof of concept Beacon Object File (BOF) that uses static x64 syscalls to perform a complete in memory dump of a process a

anthemtotheego 188 Dec 25, 2022
Through hole PCB version of the HAGIWO 005 Generative Sequencer Eurorack module.

HAGIWO 005 Eurorack Sequencer PCB and Code Through hole PCB version of the HAGIWO 005 Generative Sequencer Eurorack module. The module is a very simpl

null 11 Sep 28, 2022
Hellsgate + Halosgate/Tartarosgate. Ensures that all systemcalls go through ntdll.dll

RecycledGate This is just another implementation of Hellsgate + Halosgate/Tartarusgate. However, this implementation makes sure that all system calls

null 296 Dec 14, 2022
communicate between usermode and kernelmode through a swapped qword ptr argument

communicate between usermode and kernelmode through a swapped qword ptr argument

null 35 Nov 29, 2022
Detect-KeAttachProcess by iterating through all processes as well as checking the context of the thread.

Detect-KeAttachProcess Detect-KeAttachProcess - by iterating through all processes as well as checking the context of the thread. Recently I started s

null 94 Nov 26, 2022