Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
118 lines (82 sloc) 4.16 KB

palette-server

palette-server is a small Flask based HTTP-pony to extract colours from an image.

This package is officially DEPRECATED. You should consult plumbing-palette-server instead.

How to use it

$> curl  'http://localhost:5000/extract?path=cat.jpg' | python -m json.tool

{
    "reference-closest": "css3",
    "average": {
        "closest": "#808080", 
        "colour": "#8e895a", 
    }, 
    "palette": [
        {
            "closest": "#a0522d", 
            "colour": "#957d34", 
            }, 
            {
            "closest": "#556b2f", 
            "colour": "#786438", 
            }, 
            {
            "closest": "#bdb76b", 
            "colour": "#b0a370", 
            }, 
            {
            "closest": "#556b2f", 
            "colour": "#576710", 
            }, 
            {
            "closest": "#808080", 
            "colour": "#827968", 
            }
    ], 
    "stat": "ok"
}

Did you notice the way the path for the request is /extract? There are two reasons for that:

  • Backwards compatibility with earlier versions of palette-server
  • Syntactic sugar to hide the colour analysis tool and the colour reference that we're using (to determine the "closest" colour).

Currently there is only one colour analysis tool – Giv Parvaneh's RoyGBiv – but there may be others some day. You can address it directly like this:

$> curl  'http://localhost:5000/extract/roygbiv/?path=cat.jpg'

palette-server also allows you to pair the colour palette to any reference grid that the cooperhewitt-swatchbook library exports. For example, if you want to use the Crayola crayon colour scheme as a reference you could say:

$> curl  'http://localhost:5000/extract/roygbiv/crayola?path=cat.jpg'

The default reference grid is CSS3.

If you just want to test that the server is up and running you can call the /ping endpoint, like this:

$> curl  'http://localhost:5000/ping'

{
    "stat": "ok"
}

How to run it

First things first

Images

palette-server limits itself to processing only those images that it can find in a user-defined directory. Currently this is being configued as an environment variable (mostly because none of the configuration options for Flask stand out as "simple"). For example:

$> EXPORT PALETTE_SERVER_IMAGE_ROOT=/path/to/images

Alternative suggestions and patches are welcome. This works but is not awesome, by any means.

Authentication and authorization

There is none, by default. This is not necessarily a service that is meant to be public-facing and assumes that unless you are planning to open things up to the world that you are running on a machine with suitable access control restrictions at the network layer.

Flask

palette-server is a Flask application so you can start it up, from the command-line, like this:

$> cd palette-server
$> EXPORT PALETTE_SERVER_IMAGE_ROOT=/path/to/images
$> python flask/server.py

INFO:werkzeug: * Running on http://127.0.0.1:5000/
INFO:werkzeug: * Restarting with reloader

gunicorn

palette-server will work with any WSGI-compliant server architecture but there are sample configuration files and init.d scripts included with this repository for running things, as a daemonized service, under gunicorn.

To do

  • HTTP POST support (upload files)
  • Get from URL support
  • Better config options
  • A build-pack for Heroku, and friends
  • A proper setup file or build script for dependencies

Dependencies

See also