> ## Documentation Index
> Fetch the complete documentation index at: https://cloudinary.com/documentation/llms.txt
> Use this file to discover all available pages before exploring further.

# Pixelz - Remove the Background


> **INFO**:
>
> **This add-on is discontinued.** Cloudinary is no longer accepting new customers for the Pixelz - Remove the Background add-on. For background removal, use the [Cloudinary AI background removal transformation](background_removal), which provides powerful AI-based background removal capabilities.

[Cloudinary](https://cloudinary.com) is a cloud-based service that provides an end-to-end asset management solution that covers uploads, storage, transformations, optimizations and delivery.
  
Cloudinary offers a very rich set of image transformation capabilities and allows you to upload images to the cloud, crop them on the fly and have them further transformed to match the graphic design of your websites and mobile applications.   
[Pixelz](https://www.pixelz.com/) is a leading vendor of image editing solution components, including powerful background removal of photos, done by a team of human experts. Cloudinary provides a Remove-The-Background add-on for using Pixelz's image editing capabilities, fully integrated into Cloudinary's image management and transformation pipeline.

With the Pixelz - Remove the Background add-on, you can extend Cloudinary's image transformation capabilities with automatic background removal from your photos, resulting in a transparent-background image focusing on the main object of your photo.    
#### Getting started

Before you can use the Pixelz - Remove the Background add-on:

* You must have a Cloudinary account. If you don't already have one, you can [sign up](https://cloudinary.com/users/register_free) for a free account. 

* Register for the add-on: make sure you're logged in to your account and then go to the [Add-ons](https://console.cloudinary.com/app/settings/addons) page. For more information about add-on registrations, see [Registering for add-ons](cloudinary_add_ons#registering_for_add_ons).

* Keep in mind that many of the examples on this page use our SDKs. For SDK installation and configuration details, see the relevant [SDK](cloudinary_sdks) guide.
  
* If you're new to Cloudinary, you may want to take a look at the [Developer Kickstart](dev_kickstart) for a hands-on, step-by-step introduction to a variety of features.

> **NOTE**: The Pixelz - Remove the Background add-on is only free-to-try for Cloudinary paid accounts. This add-on isn't available to the Cloudinary free accounts.

  
## Remove image background

In order to request the Pixelz background removal service for your images, you will first need to upload images to Cloudinary. Requesting background removal can be done either while uploading files to Cloudinary (from your server-side code or directly from the browser), or by updating an existing image, either programmatically or interactively.

The following code sample shows how to upload a photo to Cloudinary, while telling Cloudinary to remove its background. In order to remove the background of the uploaded image, the `background_removal` parameter should be set to `pixelz`.  
      
```multi
|ruby
Cloudinary::Uploader.upload("wood_chair.jpg",
  public_id: "wood_chair",
  background_removal: 'pixelz')             
    
|php_2
$cloudinary->uploadApi()->upload("wood_chair.jpg", [
    "public_id" => "wood_chair",
    "background_removal" => "pixelz"]);

|python
cloudinary.uploader.upload("wood_chair.jpg",
  public_id = "wood_chair",
  background_removal = "pixelz")

|nodejs
cloudinary.v2.uploader
.upload("wood_chair.jpg", 
  { public_id: "wood_chair",
    background_removal: "pixelz" })
.then(result=>console.log(result)); 
  
|java
cloudinary.uploader().upload("wood_chair.jpg", 
  ObjectUtils.asMap(
    "public_id", "wood_chair",
    "background_removal", "pixelz"));

|csharp
var uploadParams = new ImageUploadParams(){
  File = new FileDescription(@"wood_chair.jpg"),
  PublicId = "wood_chair",
  BackgroundRemoval = "pixelz"};
var uploadResult = cloudinary.Upload(uploadParams);

|go
resp, err := cld.Upload.Upload(ctx, "wood_chair.jpg", uploader.UploadParams{
		PublicID:          "wood_chair",
		BackgroundRemoval: "pixelz"})

|android
MediaManager.get().upload("wood_chair.jpg")
  .option("public_id", "wood_chair")
  .option("background_removal", "pixelz").dispatch(); 

|curl
curl https://api.cloudinary.com/v1_1/demo/image/upload -X POST -F 'file=@/path/to/wood_chair.jpg' -F 'public_id=wood_chair' -F 'background_removal=pixelz' -F 'timestamp=173719931' -F 'api_key=436464676' -F 'signature=a781d61f86a6f818af'

|cli
cld uploader upload "wood_chair.jpg" public_id="wood_chair" background_removal="pixelz"
```

> **TIP**:
>
> You can use **upload presets** to centrally define a set of upload options including add-on operations to apply, instead of specifying them in each upload call. You can define multiple upload presets, and apply different presets in different upload scenarios. You can create new upload presets in the **Upload Presets** page of the [Console Settings](https://console.cloudinary.com/app/settings/upload/presets) or using the [upload_presets](admin_api#upload_presets) Admin API method. From the **Upload** page of the Console Settings, you can also select default upload presets to use for image, video, and raw API uploads (respectively) as well as default presets for image, video, and raw uploads performed via the Media Library UI. 
> **Learn more**: [Upload presets](upload_presets)

Background removal is performed asynchronously in the background after the upload call is completed.
    
> **NOTE**: The background removal is done by a team of human experts: editing can take up to 24 hours. 

The response of the uploaded request mentions that the editing process is in the `pending` status. 

```json
{ 
  "public_id": "wood_chair",
  "version": 1414316122,
  "resource_type": "image",
  "type": "upload",
  "url": "http://res.cloudinary.com/demo/image/upload/v1414316122/wood_chair.jpg",
  "info": 
    { "background_removal":
      { "remove_the_background":
        { "status": "pending" }}},
  ...
}
```

As a result of the upload example above, the original image is automatically sent, behind the scenes, to Remove-The-Background for editing. When background removal is completed, the original image is automatically replaced with the edited one and is available for delivery via a fast CDN, without any code changes required. The original image is made available as a backed-up revision of the image and you can always revert to it, if needed.

For example, the following dynamic transformation and delivery URL shows the original image of an uploaded wooden chair photo:

![300 pixels wide original wood chair](https://res.cloudinary.com/demo/image/upload/w_300/wood_chair_orig.jpg)

```nodejs
cloudinary.image("wood_chair_orig.jpg", {width: 300, crop: "scale"})
```

```react
new CloudinaryImage("wood_chair_orig.jpg").resize(scale().width(300));
```

```vue
new CloudinaryImage("wood_chair_orig.jpg").resize(scale().width(300));
```

```angular
new CloudinaryImage("wood_chair_orig.jpg").resize(scale().width(300));
```

```js
new CloudinaryImage("wood_chair_orig.jpg").resize(scale().width(300));
```

```python
CloudinaryImage("wood_chair_orig.jpg").image(width=300, crop="scale")
```

```php
(new ImageTag('wood_chair_orig.jpg'))
	->resize(Resize::scale()->width(300));
```

```java
cloudinary.url().transformation(new Transformation().width(300).crop("scale")).imageTag("wood_chair_orig.jpg");
```

```ruby
cl_image_tag("wood_chair_orig.jpg", width: 300, crop: "scale")
```

```csharp
cloudinary.Api.UrlImgUp.Transform(new Transformation().Width(300).Crop("scale")).BuildImageTag("wood_chair_orig.jpg")
```

```dart
cloudinary.image('wood_chair_orig.jpg').transformation(Transformation()
	.resize(Resize.scale().width(300)));
```

```swift
imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation().setWidth(300).setCrop("scale")).generate("wood_chair_orig.jpg")!, cloudinary: cloudinary)
```

```android
MediaManager.get().url().transformation(new Transformation().width(300).crop("scale")).generate("wood_chair_orig.jpg");
```

```flutter
cloudinary.image('wood_chair_orig.jpg').transformation(Transformation()
	.resize(Resize.scale().width(300)));
```

```kotlin
cloudinary.image {
	publicId("wood_chair_orig.jpg")
	 resize(Resize.scale() { width(300) }) 
}.generate()
```

```jquery
$.cloudinary.image("wood_chair_orig.jpg", {width: 300, crop: "scale"})
```

```react_native
new CloudinaryImage("wood_chair_orig.jpg").resize(scale().width(300));
```

Below you can see the result of Remove-The-Background editing:

![300 pixels wide edited wood chair](https://res.cloudinary.com/demo/image/upload/w_300/wood_chair.jpg)

```nodejs
cloudinary.image("wood_chair.jpg", {width: 300, crop: "scale"})
```

```react
new CloudinaryImage("wood_chair.jpg").resize(scale().width(300));
```

```vue
new CloudinaryImage("wood_chair.jpg").resize(scale().width(300));
```

```angular
new CloudinaryImage("wood_chair.jpg").resize(scale().width(300));
```

```js
new CloudinaryImage("wood_chair.jpg").resize(scale().width(300));
```

```python
CloudinaryImage("wood_chair.jpg").image(width=300, crop="scale")
```

```php
(new ImageTag('wood_chair.jpg'))
	->resize(Resize::scale()->width(300));
```

```java
cloudinary.url().transformation(new Transformation().width(300).crop("scale")).imageTag("wood_chair.jpg");
```

```ruby
cl_image_tag("wood_chair.jpg", width: 300, crop: "scale")
```

```csharp
cloudinary.Api.UrlImgUp.Transform(new Transformation().Width(300).Crop("scale")).BuildImageTag("wood_chair.jpg")
```

```dart
cloudinary.image('wood_chair.jpg').transformation(Transformation()
	.resize(Resize.scale().width(300)));
```

```swift
imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation().setWidth(300).setCrop("scale")).generate("wood_chair.jpg")!, cloudinary: cloudinary)
```

```android
MediaManager.get().url().transformation(new Transformation().width(300).crop("scale")).generate("wood_chair.jpg");
```

```flutter
cloudinary.image('wood_chair.jpg').transformation(Transformation()
	.resize(Resize.scale().width(300)));
```

```kotlin
cloudinary.image {
	publicId("wood_chair.jpg")
	 resize(Resize.scale() { width(300) }) 
}.generate()
```

```jquery
$.cloudinary.image("wood_chair.jpg", {width: 300, crop: "scale"})
```

```react_native
new CloudinaryImage("wood_chair.jpg").resize(scale().width(300));
```

## Update existing images

The examples above show how to automatically schedule background removal of images during their upload process. As an alternative, you can use Cloudinary's Admin API to request background removal to already uploaded images, based on their public IDs. 

For example, the following code sample uses Cloudinary's `update` API to apply background removal to the uploaded image that has the `wood_chair` public ID. 

```multi
|ruby
Cloudinary::Api.update("wood_chair", 
  background_removal: "pixelz")

|php_2
$api->update("wood_chair", 
  ["background_removal" => "pixelz"]);

|python
cloudinary.api.update("wood_chair",
  background_removal = "pixelz")

|nodejs
cloudinary.v2.api
.update("wood_chair", 
  { background_removal: "pixelz" })
.then(result=>console.log(result));

|java
cloudinary.api().update("wood_chair", 
  ObjectUtils.asMap("background_removal", "pixelz" ));

|csharp
var updateParams = new UpdateParams("wood_chair"){
  BackgroundRemoval = "pixelz"};
var updateResult = cloudinary.UpdateResource(updateParams); 

|go
resp, err := cld.Admin.UpdateAsset(ctx, admin.UpdateAssetParams{
		PublicID:          "wood_chair",
		BackgroundRemoval: "pixelz"})

|cli
cld admin update "wood_chair" background_removal="pixelz"
```

You can also use Cloudinary's media library to interactively tell Cloudinary to remove the background of an existing image via your web browser:

![Pixelz - Remove the Background interactive UI](https://res.cloudinary.com/demo/image/upload/w_500,f_auto,q_auto,dpr_2/bo_1px_solid_gray/docs/pixelz_remove_the_background_interactive.png "with_code: false, with_url: false, width:500")
  
## Status notification

The Pixelz - Remove the Background add-on edits images asynchronously. The image editing is done by a trained team of human experts and may take up to 24 hours to complete. As a result, you may want to get notified when the editing process is completed.
    
When calling the upload API with background removal request, you can request a [notification](notifications) by adding the `notification_url` parameter to a public HTTP or HTTPS URL of your online web application. Cloudinary sends a POST request to the specified endpoint when image editing is completed.     
    
```multi
|ruby
Cloudinary::Uploader.upload("wood_chair.jpg",
  public_id: "wood_chair",
  background_removal: 'pixelz',
  notification_url: "https://mysite.example.com/hooks")
    
|php_2
$cloudinary->uploadApi()->upload("wood_chair.jpg", [
    "public_id" => "wood_chair",
    "background_removal" => "pixelz",
    "notification_url" => "https://mysite.example.com/hooks"]);

|python
cloudinary.uploader.upload("wood_chair.jpg",
  public_id = "wood_chair",
  background_removal = "pixelz",
  notification_url = "https://mysite.example.com/hooks")

|nodejs
cloudinary.v2.uploader
.upload("wood_chair.jpg", 
  { public_id: "wood_chair",
    background_removal: "pixelz",
    notification_url: "https://mysite.example.com/hooks" })
.then(result=>console.log(result)); 
  
|java
cloudinary.uploader().upload("wood_chair.jpg", 
  ObjectUtils.asMap(
    "public_id", "wood_chair", 
    "background_removal", "pixelz", 
    "notification_url", "https://mysite.example.com/hooks"));

|csharp
var uploadParams = new ImageUploadParams(){
  File = new FileDescription(@"wood_chair.jpg"),
  PublicId = "wood_chair",
  BackgroundRemoval = "pixelz",
  NotificationUrl = "https://mysite.example.com/hooks"};
var uploadResult = cloudinary.Upload(uploadParams);

|go
resp, err := cld.Admin.UpdateAsset(ctx, admin.UpdateAssetParams{
		PublicID:          "wood_chair",
		BackgroundRemoval: "pixelz",
		NotificationURL:   "https://mysite.example.com/hooks"})

|android
MediaManager.get().upload("wood_chair.jpg")
  .option("public_id", "wood_chair")
  .option("background_removal", "pixelz")
  .option("notification_url", "https://mysite.example.com/hooks").dispatch(); 

|curl
curl https://api.cloudinary.com/v1_1/demo/image/upload -X POST -F 'file=@/path/to/wood_chair.jpg' -F 'public_id=wood_chair' -F 'background_removal=pixelz' -F 'notification_url=https://mysite.example.com/hooks' -F 'timestamp=173719931' -F 'api_key=436464676' -F 'signature=a781d61f86a6f818af'

|cli
cld uploader upload "wood_chair.jpg" public_id="wood_chair" background_removal="pixelz" notification_url="https://mysite.example.com/hooks"
```

The following JSON snippet is an example of a POST request sent to the notification URL when image editing is completed:

```json
{ 
  "notification_type": "info",
  "info_kind": "pixelz",
  "info_status": "complete",
  "public_id": "wood_chair",
  "uploaded_at": "2014-10-26T11:35:22Z",
  "version": 1414316122,
  "url": 
    "https://res.cloudinary.com/demo/image/upload/v1393688588/wood_chair.jpg",
  "secure_url":
    "https://res.cloudinary.com/demo/image/upload/v1393688588/wood_chair.jpg",
  "etag": "a56e9e88c2add15cac1775c1f687bf73"
}
```

The JSON content is signed using your product environment API secret. For more details regarding Cloudinary's notifications and webhooks, see [this blog post](https://cloudinary.com/blog/webhooks_upload_notifications_and_background_image_processing).

> **NOTE**: If the image returned does not meet your expectations you can contest the result and request a redo: open the image in the [Media Library](https://console.cloudinary.com/console/media_library), click the `Contest` button, and fill in the reason for your redo request.

## Further image transformations

Images edited for removing their backgrounds can be mixed with any of Cloudinary's rich set of image transformation capabilities.
  
For example, the following dynamic transformation and delivery URL generates a 200x200 padded version of the edited image. Image color saturation is increased by 50%. A shadow is added and so is a solid one pixel black border. This technique can be used to make sure that all product images on your e-commerce website share a consistent look & feel.
    
![200x200 padded image with shadow and border](https://res.cloudinary.com/demo/image/upload/c_pad,h_200,w_200/e_saturation:50/e_shadow/bo_1px_solid_rgb:666/wood_chair.jpg)

```nodejs
cloudinary.image("wood_chair.jpg", {transformation: [
  {height: 200, width: 200, crop: "pad"},
  {effect: "saturation:50"},
  {effect: "shadow"},
  {border: "1px_solid_rgb:666"}
  ]})
```

```react
new CloudinaryImage("wood_chair.jpg")
  .resize(pad().width(200).height(200))
  .adjust(saturation().level(50))
  .effect(shadow())
  .border(solid(1, "#666"));
```

```vue
new CloudinaryImage("wood_chair.jpg")
  .resize(pad().width(200).height(200))
  .adjust(saturation().level(50))
  .effect(shadow())
  .border(solid(1, "#666"));
```

```angular
new CloudinaryImage("wood_chair.jpg")
  .resize(pad().width(200).height(200))
  .adjust(saturation().level(50))
  .effect(shadow())
  .border(solid(1, "#666"));
```

```js
new CloudinaryImage("wood_chair.jpg")
  .resize(pad().width(200).height(200))
  .adjust(saturation().level(50))
  .effect(shadow())
  .border(solid(1, "#666"));
```

```python
CloudinaryImage("wood_chair.jpg").image(transformation=[
  {'height': 200, 'width': 200, 'crop': "pad"},
  {'effect': "saturation:50"},
  {'effect': "shadow"},
  {'border': "1px_solid_rgb:666"}
  ])
```

```php
(new ImageTag('wood_chair.jpg'))
	->resize(Resize::pad()->width(200)
->height(200))
	->adjust(Adjust::saturation()->level(50))
	->effect(Effect::shadow())
	->border(Border::solid(1,Color::rgb("666")));
```

```java
cloudinary.url().transformation(new Transformation()
  .height(200).width(200).crop("pad").chain()
  .effect("saturation:50").chain()
  .effect("shadow").chain()
  .border("1px_solid_rgb:666")).imageTag("wood_chair.jpg");
```

```ruby
cl_image_tag("wood_chair.jpg", transformation: [
  {height: 200, width: 200, crop: "pad"},
  {effect: "saturation:50"},
  {effect: "shadow"},
  {border: "1px_solid_rgb:666"}
  ])
```

```csharp
cloudinary.Api.UrlImgUp.Transform(new Transformation()
  .Height(200).Width(200).Crop("pad").Chain()
  .Effect("saturation:50").Chain()
  .Effect("shadow").Chain()
  .Border("1px_solid_rgb:666")).BuildImageTag("wood_chair.jpg")
```

```dart
cloudinary.image('wood_chair.jpg').transformation(Transformation()
	.resize(Resize.pad().width(200)
.height(200))
	.adjust(Adjust.saturation().level(50))
	.effect(Effect.shadow())
	.border(Border.solid(1,Color.rgb("666"))));
```

```swift
imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation()
  .setHeight(200).setWidth(200).setCrop("pad").chain()
  .setEffect("saturation:50").chain()
  .setEffect("shadow").chain()
  .setBorder("1px_solid_rgb:666")).generate("wood_chair.jpg")!, cloudinary: cloudinary)
```

```android
MediaManager.get().url().transformation(new Transformation()
  .height(200).width(200).crop("pad").chain()
  .effect("saturation:50").chain()
  .effect("shadow").chain()
  .border("1px_solid_rgb:666")).generate("wood_chair.jpg");
```

```flutter
cloudinary.image('wood_chair.jpg').transformation(Transformation()
	.resize(Resize.pad().width(200)
.height(200))
	.adjust(Adjust.saturation().level(50))
	.effect(Effect.shadow())
	.border(Border.solid(1,Color.rgb("666"))));
```

```kotlin
cloudinary.image {
	publicId("wood_chair.jpg")
	 resize(Resize.pad() { width(200)
 height(200) })
	 adjust(Adjust.saturation() { level(50) })
	 effect(Effect.shadow())
	 border(Border.solid(1,Color.rgb("666"))) 
}.generate()
```

```jquery
$.cloudinary.image("wood_chair.jpg", {transformation: [
  {height: 200, width: 200, crop: "pad"},
  {effect: "saturation:50"},
  {effect: "shadow"},
  {border: "1px_solid_rgb:666"}
  ]})
```

```react_native
new CloudinaryImage("wood_chair.jpg")
  .resize(pad().width(200).height(200))
  .adjust(saturation().level(50))
  .effect(shadow())
  .border(solid(1, "#666"));
```

Another example, this time fitting the edited image to a 200x200 frame. The image is flipped horizontally and a watermark of Cloudinary's icon is added while increasing its brightness and making it semi-transparent. 

![200x200 fitted flipped image with watermark](https://res.cloudinary.com/demo/image/upload/a_hflip/c_fit,h_200,w_200/l_cloudinary_icon_white/a_4/c_scale,fl_relative,w_0.4/o_70/e_brightness:100/fl_layer_apply,g_north,x_15,y_35/wood_chair.jpg)

```nodejs
cloudinary.image("wood_chair.jpg", {transformation: [
  {angle: "hflip"},
  {height: 200, width: 200, crop: "fit"},
  {overlay: "cloudinary_icon_white"},
  {angle: 4},
  {flags: "relative", width: "0.4", crop: "scale"},
  {opacity: 70},
  {effect: "brightness:100"},
  {flags: "layer_apply", gravity: "north", x: 15, y: 35}
  ]})
```

```react
new CloudinaryImage("wood_chair.jpg")
  .rotate(mode(horizontalFlip()))
  .resize(fit().width(200).height(200))
  .overlay(
    source(
      image("cloudinary_icon_white").transformation(
        new Transformation()
          .rotate(byAngle(4))
          .resize(scale().width(0.4).relative())
          .adjust(opacity(70))
          .adjust(brightness().level(100))
      )
    ).position(
      new Position()
        .gravity(compass("north"))
        .offsetX(15)
        .offsetY(35)
    )
  );
```

```vue
new CloudinaryImage("wood_chair.jpg")
  .rotate(mode(horizontalFlip()))
  .resize(fit().width(200).height(200))
  .overlay(
    source(
      image("cloudinary_icon_white").transformation(
        new Transformation()
          .rotate(byAngle(4))
          .resize(scale().width(0.4).relative())
          .adjust(opacity(70))
          .adjust(brightness().level(100))
      )
    ).position(
      new Position()
        .gravity(compass("north"))
        .offsetX(15)
        .offsetY(35)
    )
  );
```

```angular
new CloudinaryImage("wood_chair.jpg")
  .rotate(mode(horizontalFlip()))
  .resize(fit().width(200).height(200))
  .overlay(
    source(
      image("cloudinary_icon_white").transformation(
        new Transformation()
          .rotate(byAngle(4))
          .resize(scale().width(0.4).relative())
          .adjust(opacity(70))
          .adjust(brightness().level(100))
      )
    ).position(
      new Position()
        .gravity(compass("north"))
        .offsetX(15)
        .offsetY(35)
    )
  );
```

```js
new CloudinaryImage("wood_chair.jpg")
  .rotate(mode(horizontalFlip()))
  .resize(fit().width(200).height(200))
  .overlay(
    source(
      image("cloudinary_icon_white").transformation(
        new Transformation()
          .rotate(byAngle(4))
          .resize(scale().width(0.4).relative())
          .adjust(opacity(70))
          .adjust(brightness().level(100))
      )
    ).position(
      new Position()
        .gravity(compass("north"))
        .offsetX(15)
        .offsetY(35)
    )
  );
```

```python
CloudinaryImage("wood_chair.jpg").image(transformation=[
  {'angle': "hflip"},
  {'height': 200, 'width': 200, 'crop': "fit"},
  {'overlay': "cloudinary_icon_white"},
  {'angle': 4},
  {'flags': "relative", 'width': "0.4", 'crop': "scale"},
  {'opacity': 70},
  {'effect': "brightness:100"},
  {'flags': "layer_apply", 'gravity': "north", 'x': 15, 'y': 35}
  ])
```

```php
(new ImageTag('wood_chair.jpg'))
	->rotate(Rotate::mode(
	RotationMode::horizontalFlip()))
	->resize(Resize::fit()->width(200)
->height(200))
	->overlay(Overlay::source(
	Source::image("cloudinary_icon_white")
	->transformation((new Transformation())
	->rotate(Rotate::byAngle(4))
	->resize(Resize::scale()->width(0.4)
	->relative()
	)
	->adjust(Adjust::opacity(70))
	->adjust(Adjust::brightness()->level(100)))
	)
	->position((new Position())
	->gravity(
	Gravity::compass(
	Compass::north()))
->offsetX(15)
->offsetY(35))
	);
```

```java
cloudinary.url().transformation(new Transformation()
  .angle("hflip").chain()
  .height(200).width(200).crop("fit").chain()
  .overlay(new Layer().publicId("cloudinary_icon_white")).chain()
  .angle(4).chain()
  .flags("relative").width(0.4).crop("scale").chain()
  .opacity(70).chain()
  .effect("brightness:100").chain()
  .flags("layer_apply").gravity("north").x(15).y(35)).imageTag("wood_chair.jpg");
```

```ruby
cl_image_tag("wood_chair.jpg", transformation: [
  {angle: "hflip"},
  {height: 200, width: 200, crop: "fit"},
  {overlay: "cloudinary_icon_white"},
  {angle: 4},
  {flags: "relative", width: 0.4, crop: "scale"},
  {opacity: 70},
  {effect: "brightness:100"},
  {flags: "layer_apply", gravity: "north", x: 15, y: 35}
  ])
```

```csharp
cloudinary.Api.UrlImgUp.Transform(new Transformation()
  .Angle("hflip").Chain()
  .Height(200).Width(200).Crop("fit").Chain()
  .Overlay(new Layer().PublicId("cloudinary_icon_white")).Chain()
  .Angle(4).Chain()
  .Flags("relative").Width(0.4).Crop("scale").Chain()
  .Opacity(70).Chain()
  .Effect("brightness:100").Chain()
  .Flags("layer_apply").Gravity("north").X(15).Y(35)).BuildImageTag("wood_chair.jpg")
```

```dart
cloudinary.image('wood_chair.jpg').transformation(Transformation()
	.rotate(Rotate.mode(
	RotationMode.horizontalFlip()))
	.resize(Resize.fit().width(200)
.height(200))
	.overlay(Overlay.source(
	Source.image("cloudinary_icon_white")
	.transformation(new Transformation()
	.rotate(Rotate.byAngle(4))
	.resize(Resize.scale().width(0.4)
	.relative()
	)
	.adjust(Adjust.opacity(70))
	.adjust(Adjust.brightness().level(100)))
	)
	.position(Position()
	.gravity(
	Gravity.compass(
	Compass.north()))
.offsetX(15)
.offsetY(35))
	));
```

```swift
imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation()
  .setAngle("hflip").chain()
  .setHeight(200).setWidth(200).setCrop("fit").chain()
  .setOverlay("cloudinary_icon_white").chain()
  .setAngle(4).chain()
  .setFlags("relative").setWidth(0.4).setCrop("scale").chain()
  .setOpacity(70).chain()
  .setEffect("brightness:100").chain()
  .setFlags("layer_apply").setGravity("north").setX(15).setY(35)).generate("wood_chair.jpg")!, cloudinary: cloudinary)
```

```android
MediaManager.get().url().transformation(new Transformation()
  .angle("hflip").chain()
  .height(200).width(200).crop("fit").chain()
  .overlay(new Layer().publicId("cloudinary_icon_white")).chain()
  .angle(4).chain()
  .flags("relative").width(0.4).crop("scale").chain()
  .opacity(70).chain()
  .effect("brightness:100").chain()
  .flags("layer_apply").gravity("north").x(15).y(35)).generate("wood_chair.jpg");
```

```flutter
cloudinary.image('wood_chair.jpg').transformation(Transformation()
	.rotate(Rotate.mode(
	RotationMode.horizontalFlip()))
	.resize(Resize.fit().width(200)
.height(200))
	.overlay(Overlay.source(
	Source.image("cloudinary_icon_white")
	.transformation(new Transformation()
	.rotate(Rotate.byAngle(4))
	.resize(Resize.scale().width(0.4)
	.relative()
	)
	.adjust(Adjust.opacity(70))
	.adjust(Adjust.brightness().level(100)))
	)
	.position(Position()
	.gravity(
	Gravity.compass(
	Compass.north()))
.offsetX(15)
.offsetY(35))
	));
```

```kotlin
cloudinary.image {
	publicId("wood_chair.jpg")
	 rotate(Rotate.mode(
	RotationMode.horizontalFlip()))
	 resize(Resize.fit() { width(200)
 height(200) })
	 overlay(Overlay.source(
	Source.image("cloudinary_icon_white") {
	 transformation(Transformation {
	 rotate(Rotate.byAngle(4))
	 resize(Resize.scale() { width(0.4F)
	 relative()
	 })
	 adjust(Adjust.opacity(70))
	 adjust(Adjust.brightness() { level(100) }) })
	 }) {
	 position(Position() {
	 gravity(
	Gravity.compass(
	Compass.north()))
 offsetX(15)
 offsetY(35) })
	 }) 
}.generate()
```

```jquery
$.cloudinary.image("wood_chair.jpg", {transformation: [
  {angle: "hflip"},
  {height: 200, width: 200, crop: "fit"},
  {overlay: new cloudinary.Layer().publicId("cloudinary_icon_white")},
  {angle: 4},
  {flags: "relative", width: "0.4", crop: "scale"},
  {opacity: 70},
  {effect: "brightness:100"},
  {flags: "layer_apply", gravity: "north", x: 15, y: 35}
  ]})
```

```react_native
new CloudinaryImage("wood_chair.jpg")
  .rotate(mode(horizontalFlip()))
  .resize(fit().width(200).height(200))
  .overlay(
    source(
      image("cloudinary_icon_white").transformation(
        new Transformation()
          .rotate(byAngle(4))
          .resize(scale().width(0.4).relative())
          .adjust(opacity(70))
          .adjust(brightness().level(100))
      )
    ).position(
      new Position()
        .gravity(compass("north"))
        .offsetX(15)
        .offsetY(35)
    )
  );
```

 For a full list of additional Cloudinary's image transformation options, see [Image transformations](image_transformations).
