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-2.8.1.dev0.tar.gz (1.3 MB view hashes)

Uploaded Source

Built Distributions

gmic-2.8.1.dev0-cp38-cp38-manylinux1_x86_64.whl (6.0 MB view hashes)

Uploaded CPython 3.8

gmic-2.8.1.dev0-cp38-cp38-manylinux1_i686.whl (5.6 MB view hashes)

Uploaded CPython 3.8

gmic-2.8.1.dev0-cp38-cp38-macosx_10_9_x86_64.whl (3.2 MB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

gmic-2.8.1.dev0-cp37-cp37m-manylinux1_x86_64.whl (6.0 MB view hashes)

Uploaded CPython 3.7m

gmic-2.8.1.dev0-cp37-cp37m-manylinux1_i686.whl (5.6 MB view hashes)

Uploaded CPython 3.7m

gmic-2.8.1.dev0-cp37-cp37m-macosx_10_6_intel.whl (6.4 MB view hashes)

Uploaded CPython 3.7m macOS 10.6+ intel

gmic-2.8.1.dev0-cp36-cp36m-manylinux1_x86_64.whl (6.0 MB view hashes)

Uploaded CPython 3.6m

gmic-2.8.1.dev0-cp36-cp36m-manylinux1_i686.whl (5.6 MB view hashes)

Uploaded CPython 3.6m

gmic-2.8.1.dev0-cp36-cp36m-macosx_10_6_intel.whl (6.4 MB view hashes)

Uploaded CPython 3.6m macOS 10.6+ intel

gmic-2.8.1.dev0-cp35-cp35m-manylinux1_x86_64.whl (6.0 MB view hashes)

Uploaded CPython 3.5m

gmic-2.8.1.dev0-cp35-cp35m-manylinux1_i686.whl (5.6 MB view hashes)

Uploaded CPython 3.5m

gmic-2.8.1.dev0-cp35-cp35m-macosx_10_6_intel.whl (6.4 MB view hashes)

Uploaded CPython 3.5m macOS 10.6+ intel

gmic-2.8.1.dev0-cp34-cp34m-manylinux1_x86_64.whl (6.0 MB view hashes)

Uploaded CPython 3.4m

gmic-2.8.1.dev0-cp34-cp34m-manylinux1_i686.whl (5.6 MB view hashes)

Uploaded CPython 3.4m

Supported by

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