Tutorial for NodeJS SDK

You can find the NodeJS SDK also at https://www.npmjs.com/package/@shimmercat/toilmore-sdk.

Prerequisites:

  • A token and domain to make requests to the API, see the quick start guide.
  • Recent versions of npm (>=6.14.5) and nodejs (>=v14.15.1) installed. For installation check below:
  • An image to optimize.

Installing

Step 1. Install


npm install --save-dev @shimmercat/toilmore-sdk

This will create a directory which looks similar to:

├── node_modules
│   └── @shimmercat
│       └── toilmore-sdk
│           ├── index.js
│           ├── lib
│           │   ├── api_config.js
│           │   ├── http_requester.js
│           │   ├── stream_helpers.js
│           │   └── submit_machine.js
│           ├── package.json
│           └── README.md
└── package-lock.json

4 directories, 8 files

Step 2. Ready to take it for a spin!

Depending on the preferred API (Light or Lux), create a .js file to process any image that you want. Just make sure to provide a valid authentication token as the api_token and its related domain as the ‘domain’.

  • Light API

If you plan to use the Light API, create a file e.g light.js, paste the code below changing the api_token, domain, and of course the path of the image you want to optimize.

$ cd node_modules/@shimmercat/toilmore-sdk/

import { LIGHT_API, Toilmore } from '@shimmercat/toilmore-sdk';
import fs from "fs";
import { Readable } from "stream";

let toilmore = new Toilmore(
    {
        // `LIGHT_API` contains our light api endpoint.
        'api_endpoint': LIGHT_API,

        // Use a valid API token below:
        'api_token': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',

        // Use a valid domain below, as received when
        // you created the token
        'domain': 'YYYYYYYYYYYYYYYYYYYYYYYYYY'
    });

let result_promise =  toilmore.optimize("./my_image.jpg", "webp0");
result_promise.then((result) => {
    // `result` will be null when the optimization effort fails.
    if (result instanceof Readable) {
        let optimized_img_path = "./my_image.webp";
        let w = fs.createWriteStream(optimized_img_path);
        result.pipe(w);
        console.log("Successfully image optimized! Find it at: ", optimized_img_path);
    } else {
        console.log("The image could not be optimized due to: ", result.rejection_notice);
    }
});

  • Lux API

If you plan to use the Lux API, create a file e.g lux.js, paste the code below changing the api_token, domain, and of course the path of the image you want to optimize.


import { LUX_API, Toilmore } from '@shimmercat/toilmore-sdk';
import fs from "fs";
import { Readable } from "stream";

let adjustments = {
    "shifter": {
        "steps": [
            {
                "scale-to": {
                    "width": 90
                }
            }
        ]
    },
    "encoder": {
        "quality-measure": "fsim-c",
        "qual-threshold": 0.90
    }
}

let toilmore = new Toilmore(
    {
        'api_endpoint': LUX_API,

        'api_token': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', // <-- Use a valid API token here.

        'domain': 'YYYYYYYYYYYYYYYYYYYYYYYYYY' // <-- Use a registered domain here, e.g the one you received when you started the trial period.
    });


let result_promise =  toilmore.optimize(
    "./my_image.jpg",
    "webp0",
    adjustments
);
result_promise.then((result) => {
    // `result` will be null when the optimization effort fails.
    if (result instanceof Readable) {
        let optimized_img_path = "./my_image.webp";
        let w = fs.createWriteStream(optimized_img_path);
        result.pipe(w);
        console.log("Successfully image optimized! Find it at: ", optimized_img_path);
    } else {
        console.log("The image could not be optimized due to: ", result.rejection_notice);
    }
});

Before running the js-file, check the documentation for examples on how to configure it according to your needs, and then simply run it with:

$ node <file_name>.js 

The latest version of the SDK is published on the npm directory.

Video tutorial

The video tutorial below takes you through the quick process of setting up Pixellena Node SDK:

Updated: