Advanced Images Server based on url syntax

Picly is an Image Management Software (IMS) and allows infinite ways to serve a picture thanks to an extendable set of programmable plugins:

  • By default, +50 fomatting plugins are provided.
  • Picly provides a simple API to develop new plugins using standard Node modules system.
  • Reliable, fast, design for performance and track images usage.
  • Easy integration with any sort of frontends built from scratch or others like Drupal, Wordpress, etc.
  • Take control easily about how your users access your pictures.

Picly is not about serving images to a web application... is about tracking and managing how these images are used.

Coherent and consistent url syntax and more...

In a basic usage, and considering star.png image uploaded to a Picly server, then:

http://myserver/rs:w(100),h(100)/star.png

, will respond dinamically with a version of star.png of 100x100 pixels.

http://myserver/bw/star.png

, will respond with a black & white version of star.png

http://myserver/rs:w(260)/wm:t('picly.io'),ox(12),oy(4),fs(28),fw('Arial')/hc:sat(80)/star.png

, this request will chain some basic transformations and manipulates the image in some stages:

  • Risize to 260 pixels width (plugin of name "rs")
  • Set a water mark with the name "picly.io" at 12x,4y with a font size of 28 pixels and Arial as font family (plugin name of "wm")
  • Improve contrast of the image with "hc" plugin

Hey, wait... What are those url params?

In that sample request, rs, wm and hc are the names of three basic picly plugins, that are invoked one after another with their params.

Picly url request basic format

The url is formatted indicating the transformation plugin (tplugins) names with their params (if any), followed by the picture entity id and in the trail, other compilation plugins (cplugins).

Whereas tplugins transform an image, tplugins compiles it to output any other type of content based on that picture.

This is the url format syntax.

http://<server>/<tplugin:params>/<tplugin:params>/picture_id?<cplugin:params>

But... what's a picly plugin?

Is just a simple Node module which exports some functions to Picly framework.

A Picly plugin module is able to:

  • Manipulate an image according with the parameters indicated.
  • A plugin defines which params needs.
  • Define a "hook" so that implement any kind of pre-process work in an image request.
  • etc.

Here is the code of "bw" tplugin in its very basic form. It transforms the image to black & white color schema using popular Graphics Magick library:


var gm = require("gm");

module.exports = {};

module.exports.picly = {};

/* info() - method called by Picly to check plugin signature and features. */

module.exports.picly.info = function() {
   return {
      name: "bw", /* Name of the plugin */
      description: "Picly module for converting to black & white image",
      params: []
   }
}

/* perform() - called when Picly receives a request with "bw" plugin. 
 * "params" indicates where the source image is and where the converted picture should be located.
*/

module.exports.picly.perform = function( params ) {
   return new Promise( (res,rej) => { 
                        gm( params.sourceEntity )
                        .colorspace('GRAY')
                        .write( params.destEntity, function(err) {
                           if ( err ) { rej(err); }
                           else {
                              res();
                           }
                        } );
   })
}

Easy and funny, right?

Just another IMS...

No way!

Picly server provides unique features.

Is easy to use. Just run:

$ npm start picly-web && npm start picly-server

, and you have you own image server (with its web administration interface) up & running.

Is extendable with new Node plugins adding new and amazing features.

Is not about image manipulation only, it takes control about how images are used in your application.

Compiling images...

Picly can compile an image with amazing results... The options are set after transformation plugins (or tplugin):

Some examples:

http://<server>/mytinyimage.png?base64

, will return mytinyimage.png in base64 format.

http://<server>/start.png?cropity:w(4),h(8)

, will return a script by which start.png has been divided in a puzzle of 4x8 images...

I want more info...

Picly.io is a start-up company and nowadays is under an intense development cycle. First release is expected to be launched on december this year.

You can get more information at info@picly.io.