Getting Started

Gumlet is realtime image resizing and manipulation service. It’s aimed to simplify image manipulation, storage on server and delivery for mobile devices.

You just need a free Gumlet account to get started. You can create one here

How it works

Gumlet works by fetching image from the storage you specify, manipulate in realtime and deliver it. All parameters for image manipulation are supplied as query string parameters. The URL can be used anywhere including in IMG tag.

<img src="demo.gumlet.com/images/lenna.jpg?width=200&height=100">

Gumlet is designed to be fast. Our server side processing algorithms use native C++ code and GPUs to get best speed possible for image manipulation. CDN is in-built in our service so no matter where your images are stored, your users will always get the images from closest location possible.

Pricing

Our pricing is simple. You only get charged for bandwidth you use. Period.

You can do unlimited number of image transformations on your image for free. You only get charged for the resultant bandwidth usage. There is no minimum fee per month and no minimum commitment.

When you sign up, you also get 1 GB free bandwidth every month for first year. That means, if your monthly usage is less than 1 GB, you can use Gumlet FREE for 1 year.

Bandwidth usage is rounded to next integer GB. For example, if you use 50.3 GB in a given month, you will be charged for 51 GB of bandwidth usage.

Image Source Price

Each Image Source you create attracts ₹70 ($1.05) per month image source charge. This is minimum charge that will apply every month regardless of whether you are in free tier or have exceeded 1 GB free quota. This charge is because of SSL certificate and subdomain maintenance by our CDN provider.

If you create one image source and are still using under 1 GB of quota every month in first year, you will only pay ₹70 ($1.05) per month to keep using Gumlet.

We don’t charge for first image source created in your account within first month of your account creation. This gives you one month free trial without any obligation to pay us.

We also restrict number of image sources to one unless you add credits in your account.

Non-payment consequences.

You can sign up without credit card but if your usage exceeds 1 GB or you have created an image source or your first year has ended, we will send you invoice at start of month. We give time of 30 days to pay the balance.

If you don’t pay after repeated reminders, we return 404 response for your images until the balance is paid. If the balance is not paid for extended period, we will be forced to delete your image source and the namespace becomes available for anyone to use.

We suggest that you add credits to your account as soon as you receive notification from us to have uninterrupted service. Best practice is to add credits for next 5-6 months before usage. That way, you need not pay every month and enjoy service without any disruption.

Pricing in INR

Our billing is always done in Indian Rupee. We will display amount in USD for your convenience but you will be charged exact amount in INR. This means that as per exchange rate, you might be charged higher or lower if you are paying from outside India.

Your credit balance will always be kept in INR so once you pay, exchange rate fluctuations will not have any impact on your balance. (This means if you know your currency is going to be strengthened, you can pay us in advance 😉)

How can you price it so low?

If you check our competitors, you might find that our pricing is simplest and lowest. Most of companies out there charge minimum monthly fees or have pricing tiers which are prohibitively expensive when you consider per GB costs.

We have very simple rationale that if we can get virtual servers for $5 a month these days, there is no need to pay double of that just to do image operations. Our per GB price includes CDN costs as well as our service costs. So, every time you perform a transformation, we charge you for the bandwidth + small markup on CDN price.

It’s really that simple. We want people to stop doing image transformations on server and offload that task to simple, scalable and cheap service. We have realized how frustrating it can become to store 10 different size and thumbnails of same image.

Go ahead and offload image manipulation on Gumlet, we deliver best images while you concentrate on your core business.

Image Source

Gumlet does not store images on servers. You can store your source images on storage of your choice and retain full control over them. If you stop using Gumlet, the images will no longer be available with us after CDN cache expires.

Gumlet supports two types of image sources. Web folders and Amazon S3 bucket.

Web folders

If you have source images stored in a folder in your server, you can use it as image source for Gumlet. For example, let’s assume all your images are stored at example.com/source-images/ You can specify this as base URL while setting image source.

Once setup is complete, your image example.com/source-images/yourimage.jpg will be available at example.gumlet.com/yourimage.jpg. You can now manipulate the image as example.gumlet.com/yourimage.jpg?width=300

Amazon S3

You can use images stored in Amazon S3 bucket as image source. Gumlet needs read bucket and list object permissions to access the images. Please create access token with these permissions and add them while creating the image store.

You can optionally specify base path while creating Amazon S3 image source. If your image is stored at s3://yourbucket/some/image/path/lenna.jpg and if you specify /some/image/path as base path, your resultant URL for Gumlet will become yourdomain.gumlet.com/lenna.jpg. Without base path, the Gumlet URL will be yourdomain.gumlet.com/some/image/path/lenna.jpg

Image API

Image manipulation is achieved by Image API. You just need to provide query string parameters to manipulate images. Each query string parameter is described below.

Let us remind you again that you just need a free Gumlet account to get started. You can create one here

width

This parameter sets width of output image.

If this parameter is omitted, and the height parameter is set, the output width is set automatically such that aspect ratio is preserved. If both height and `width parameters are set, the output image dimensions are set as per mode parameter.

If none of the height and width parameters are set, original aspect ratio is preserved and output dimensions depend on parameters like scale if provided.

original
width=250

height

This parameter sets height of output image.

If this parameter is omitted, and the width parameter is set, the output height is set automatically such that aspect ratio is preserved. If both height and width parameters are set, the output image dimensions are set as per mode setting.

If none of the height and width parameters are set, original aspect ratio is preserved and output dimensions depend on parameters like scale if provided.

original
height=400

dpr

Specifies device pixel ratio between 0.1 and 10. This acts as multiplier to both width and height. width=200&height=300&dpr=2 is equivalent to width=400&height=600.

This makes it easy to specify image with correct resolution when using srcset attribute of <img> tag.

mode

Specifies the resize behavior when width or height parameters are provided.

fit: Resize to fit within boundaries specified by width and height parameters. If ratio given differs from original aspect ratio, only one dimension will be set as per given value and other dimension will be smaller such that original aspect ratio is maintained.

crop: Entire area defined is filled maintaining aspect ratio but might crop part of image. The type of cropping is determined by crop parameter.

stretch: Resize to fill area defined by height and width. It might not preserve aspect ratio and image might be distorted.

fill: Preserving aspect ratio, resize the image to the maximum width or height specified then embed on a background of the exact width and height as original image. The color of background can be specified by background parameter.

Default mode is fit.

mode=fit
mode=crop
mode=stretch
mode=fill&bg=c0c0c0

crop

Allows you to define crop position when using crop as mode parameter.

Valid values are entropy, skin, top, topleft, left, bottomleft, bottom, bottomright, right, topright and center.

While other modes are self explanatory, let us describe first two crop modes.

entropy: focus on region with highest Shanon Entropy.

skin: focus on region with highest luminance frequancy and skin tones.

Default mode if no parameter is provided is center.

original
crop=left
crop=right

extract

Extract a region from image. This operation is always applied after resize operation. Please give the parameters accordingly.

The value should be provided as comma separated list left,top,width,height.

original
extract=0,0,300,300
extract=300,300,200,200

pad

Pads/Extends the edges of the image with the color provided by the background parameter. The value should either be integer which adds padding of same number of pixel to all edges or it should be comma separated list of 4 integers as top,right,bottom,left.

E.g. pad=40,20,40,30 will add 40px padding on top, 20px on right, 40px on bottom and 30px on left

Please note this operation will add additional pixels and hence increase height and width of image.

original
pad=30,30,30,30&bg=b03e5c

background (bg)

Value of this parameter is used when mode is set as fill or you are converting other image type to jpeg or you are padding image with pad parameter.

This can be any of valid css color name like white or yellow. You can also set RGB hex value like bg=ff00bb to set background to #ff00bb value.

If you don’t pass any parameter, default value is white.

trim

Trim “boring” pixels from all edges that contain values within a percentage similarity of the top-left pixel. The value of this parameter is number between 1 to 99 representing the percentage similarity.

original
trim=50

rotate

Rotates the image as per number of degrees provided as 0, 90, 180 or 270

flip

flip=v will vertically flip the image. flip=h will horizontally flip the image. flip=hv or flip=vh will flip both horizontally and vertically.

blur

Applies Gaussian blur of a given blur radius in float. blur=2.5 will blur the image by taking gaussian blur of 2.5 pixel radius

original
blur=10
blur=50

grayscale (greyscale)

Convert to 8-bit greyscale; 256 shades of grey. This is a linear operation. If the input image is in a non-linear colour space such as sRGB, use gamma with greyscale for the best results. By default the output image will be web-friendly sRGB and contain three (identical) color channel.

greyscale=true or grayscale=true are both valid parameters.

original
greyscale=true

invert

Produces negative of image. You can use it as invert=true

original
invert=true

enhance

Enhance output image contrast by stretching its luminance to cover the full dynamic range. Enable it by setting enhance=true

threshold

Any pixel value greather than or equal to the threshold value will be set to 255, otherwise it will be set to 0. The parameter should be integer between 0 and 255

original
threshold=100

gamma

Apply a gamma correction by reducing the encoding (darken) pre-resize at a factor of 1/gamma then increasing the encoding (brighten) post-resize at a factor of gamma. This can improve the perceived brightness of a resized image in non-linear color spaces. JPEG and WebP input images will not take advantage of the shrink-on-load performance optimization when applying a gamma correction.

Valid value is between 1.0 and 3.0. Default is 2.2

sharp

Sharpen the image. This operation performs accurate sharpen of the L channel in the LAB color space. Valid values are between 0 and 100.

original
sharp=10

quality

Sets output quality of image. Valid values are between 0 and 100 inclusive of them.

This parameter only takes effect when using jpeg or webpas output format

Setting this parameter to 100 will apply lossless compression if using webp as output format. Please note, this is not true for JPEG. At 100 quality, JPEG will be least lossy image.

Default value is 85.

format

Gumlet serves same image format as source image after performing operations. If you want to change output image format, you can use this parameter.

You can use auto, jpeg, jpg, png, webp or raw. If original image has alpha channel and output does not support transparency, a white background is applied if background parameter is not provided.

If you use format=auto, Gumlet automatically detects best format according to user browser. For example, Google Chrome supports WebP hence that format will be delivered to users visiting with Chrome browser. When user browser does not support WebP, default image format as per original image is served. WebP image is almost always lesser size for same image quality which results in lower bandwidth usage and faster load times.

For example if you are using Chrome, all images you saw above are delivered as WebP and not as JPEG. You can check it in content-type response header.

If you check total downloaded content in “Network” tab of Chrome and Firefox, you will see Chrome uses lesser bandwidth because of WebP image delivery.

compress

Gumlet automatically converts all JPEG images to progressive image and applies lossless quality optimizations by default.

If you set compress=true, we further apply lossy optimizations on image which can greatly reduce resultant image size without perceptual loss of quality. As illustrated in example below, most of time, it results in 30-50% reduction in resultant image size with almost no loss in quality.

This feature only works when output is produced in JPEG or PNG format.

original (3.8 MB)
compress=true (1.9 MB)

Report Problem

If you have any questions, found an issue or want to submit new feature request, we have created a public github issues repository.

Please create new issue there and we will ensure it is resolved in timely manner. As we said, we love to keep our product simple and open.