Skip to main content

Binary Python3 bindings for the G'MIC C++ image processing library

Project description

gmic-py

Python binding for G'MIC

The aim of this project is to provide an official Python 3 package of the G'MIC image processing library, with its platform-specific binaries bundled or auto-compiled. When this matures, running pip install gmic-py should be all you need to get ready and use G'MIC within data-science, games, video editing, texture editing etc.. Python scripts.

This project is a work in progress and lives under the CeCILL license (similar to GNU Public License).

TDD - making sure gmic-py works and keeps working

Development follows a test-driven development (TDD) methodology.

For now, to test the development manually you can run a pytest suite within docker:

# If you do not have docker: sudo apt-get install docker
cd tests/
sh run_test_scenario.sh

On November 18th, 2019 pip install from Github, echo, basic png generation and output tests work, without in-memory buffers I/O yet :) The project is just very fresh :) See Github Actions CI tests being run here.

Roadmap

Q4 2019

  1. Create a pip install -e GITHUB_URL installable Python package for GMIC, with an API very similar to the C++ library: gmic_instance.run(...), gmic(...) and matching exception types. Binary dependencies should be bundled as in this tutorial.
    1. Through Ctypes dynamic binding on an Ubuntu docker image using Python 2-3. DONE in ctypes/
    2. Through custom Python/C++ binding in cpython/
  2. Create documented examples for various application domains.

Q1-Q2 2020

  1. Move the package to official Python package repositories.
  2. In a separate repository, create a Blender Plugin, leveraging the Python library and exposing:
  3. a single Blender GMIC 2D node with a text field or linkable script to add a GMIC expression
  4. as many 2D nodes as there are types of GMIC 'operators'

Q3-Q4 2020

  1. In a separate repository, create a GMIC Inkscape plugin, leveraging the Python library (possibly applying only to image objects, as the Trace bitmap tool does).

Binding blueprint

This is an overview of how we want the gmic binding inner working:

from gmic import Gmic, run, Image, GmicException
#we give up the Gmic native List

class GmicException:
   def __init__(self, command, message):
       self.command = command
       self.message = message
   def what(self):
       pass
   def command_help(self):
       pass

class Gmic:
    def __init__(self, images=[]|tuple|iterable[Image], image_names=[]|tuple|iterable, include_stdlib=True, progress=None, is_abort=None):
        self._status = None
        self.include_stdlib = include_stdlib
        # TODO V2 = progress, is_abort
        if all params were given:
           self.run(images, image_names, include_stdlib, progress, is_abort)

    @throws GmicException
    def run(self, images=[], images_names=[], progress=None, abort=None):
        ....
        self._status = ""
        return self

    def _build_lists(self):
        self._build_gmic_images_list(self.images)
        self._build_gmic_images_names_list(self.image_names)

    def _build_gmic_images_list(self):
        """Convert and store to Gmic builtin C++ type"""
        pass

    def _build_gmic_images_names_list(self):
        """Convert and store to Gmic builtin C++ type"""
        pass

    @property
    def status(self):
       """ string result of last operation, or exception text if was raised, or user-entered text through a gmic command. 
       This is a read-only attribute, starting with underscore. See https://stackoverflow.com/a/15812738/420684
       :return str
       """
       return self._status


def run(images=[]|tuple|iterable[Image], image_names=[]|tuple|iterable[Image], include_stdlib=True, progress=None, is_abort=None):
    return Gmic(images, images_names, include_stdlib, progress, is_abort).run()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gmic-0.0.1.tar.gz (6.7 kB view details)

Uploaded Source

File details

Details for the file gmic-0.0.1.tar.gz.

File metadata

  • Download URL: gmic-0.0.1.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.40.0 CPython/3.6.9

File hashes

Hashes for gmic-0.0.1.tar.gz
Algorithm Hash digest
SHA256 2e870c764f722862daebfb065853666c6b642f231dc8b068445ffb102776229b
MD5 d98d0c841869ecaed1b8ed7b0a2d980a
BLAKE2b-256 bfa541f654bb09e922ce1cf7008da209bf192933b8716e42680677809042b28a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page