> ## Documentation Index
> This page is part of the Image and Video APIs product. Fetch the complete documentation index for Image and Video APIs at: https://cloudinary.com/documentation/llms-image-and-video-apis.txt?referrer=docpage and then use it to discover all relevant pages before exploring further.
> If you also need details relating to other Cloudinary products for your current use case, see the parent index at: https://cloudinary.com/documentation/llms.txt?referrer=docpage

# Generative restore


Revitalize degraded and poor quality images using generative AI.

When your app accepts user-uploaded or legacy images, source quality is often inconsistent, with compression, noise, or blur. Restoring them automatically on delivery keeps galleries, profiles, and catalogs looking polished, without asking users for better originals.

> **See also**:
>
> Explore the complete syntax and all options for this effect, or try it out on your own images in the Console:

> * **See full syntax**: [e_gen_restore](transformation_reference#e_gen_restore) in the _Transformation Reference_

> * **Try it out**: [Generative restore](https://console.cloudinary.com/app/image/playground/generative-restore?media=image&sample=me%2Frestore-1)

## Generative restore overview

You can use the `gen_restore` effect (`e_gen_restore` in URLs) to improve images that have become degraded through repeated processing and compression, in addition to enhancing old images by improving sharpness and reducing noise.

Particularly useful for [user-generated content](user_generated_content) (UGC), generative restore can:

* Remove severe compression artifacts
* Reduce noise from grainy images
* Sharpen blurred images

Use the slider in this example to see the difference between the original image on the left and the restored image on the right:

![Old photo of a couple](https://res.cloudinary.com/demo/image/upload/e_gen_restore/docs/old-photo.jpg "with_image: false")

```nodejs
cloudinary.image("docs/old-photo.jpg", {effect: "gen_restore"})
```

```react
import { generativeRestore } from "@cloudinary/url-gen/actions/effect";

new CloudinaryImage("docs/old-photo.jpg").effect(generativeRestore());
```

```vue
import { generativeRestore } from "@cloudinary/url-gen/actions/effect";

new CloudinaryImage("docs/old-photo.jpg").effect(generativeRestore());
```

```angular
import { generativeRestore } from "@cloudinary/url-gen/actions/effect";

new CloudinaryImage("docs/old-photo.jpg").effect(generativeRestore());
```

```js
import { generativeRestore } from "@cloudinary/url-gen/actions/effect";

new CloudinaryImage("docs/old-photo.jpg").effect(generativeRestore());
```

```python
CloudinaryImage("docs/old-photo.jpg").image(effect="gen_restore")
```

```php
use Cloudinary\Transformation\Effect;

(new ImageTag('docs/old-photo.jpg'))
	->effect(Effect::generativeRestore());
```

```java
cloudinary.url().transformation(new Transformation().effect("gen_restore")).imageTag("docs/old-photo.jpg");
```

```ruby
cl_image_tag("docs/old-photo.jpg", effect: "gen_restore")
```

```csharp
cloudinary.Api.UrlImgUp.Transform(new Transformation().Effect("gen_restore")).BuildImageTag("docs/old-photo.jpg")
```

```dart
cloudinary.image('docs/old-photo.jpg').transformation(Transformation()
	.effect(Effect.generativeRestore()));
```

```swift
imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation().setEffect("gen_restore")).generate("docs/old-photo.jpg")!, cloudinary: cloudinary)
```

```android
MediaManager.get().url().transformation(new Transformation().effect("gen_restore")).generate("docs/old-photo.jpg");
```

```flutter
cloudinary.image('docs/old-photo.jpg').transformation(Transformation()
	.effect(Effect.generativeRestore()));
```

```kotlin
cloudinary.image {
	publicId("docs/old-photo.jpg")
	 effect(Effect.generativeRestore()) 
}.generate()
```

```jquery
$.cloudinary.image("docs/old-photo.jpg", {effect: "gen_restore"})
```

```react_native
import { generativeRestore } from "@cloudinary/url-gen/actions/effect";

new CloudinaryImage("docs/old-photo.jpg").effect(generativeRestore());
```

    
    

## Combine with the improve effect

You can use the generative restore effect together with the [improve effect](transformation_reference#e_improve) for even better results.  While generative restore tries to rectify compression artifacts, the improve effect addresses color, contrast and brightness.  

![Old photo of a couple restored and improved](https://res.cloudinary.com/demo/image/upload/e_gen_restore/e_improve:indoor:40/docs/old-photo.jpg "with_image: false")

```nodejs
cloudinary.image("docs/old-photo.jpg", {transformation: [
  {effect: "gen_restore"},
  {effect: "improve:indoor:40"}
  ]})
```

```react
import { generativeRestore } from "@cloudinary/url-gen/actions/effect";
import { improve } from "@cloudinary/url-gen/actions/adjust";

new CloudinaryImage("docs/old-photo.jpg").effect(generativeRestore()).adjust(
  improve()
    .mode("indoor")
    .blend(40)
);
```

```vue
import { generativeRestore } from "@cloudinary/url-gen/actions/effect";
import { improve } from "@cloudinary/url-gen/actions/adjust";

new CloudinaryImage("docs/old-photo.jpg").effect(generativeRestore()).adjust(
  improve()
    .mode("indoor")
    .blend(40)
);
```

```angular
import { generativeRestore } from "@cloudinary/url-gen/actions/effect";
import { improve } from "@cloudinary/url-gen/actions/adjust";

new CloudinaryImage("docs/old-photo.jpg").effect(generativeRestore()).adjust(
  improve()
    .mode("indoor")
    .blend(40)
);
```

```js
import { generativeRestore } from "@cloudinary/url-gen/actions/effect";
import { improve } from "@cloudinary/url-gen/actions/adjust";

new CloudinaryImage("docs/old-photo.jpg").effect(generativeRestore()).adjust(
  improve()
    .mode("indoor")
    .blend(40)
);
```

```python
CloudinaryImage("docs/old-photo.jpg").image(transformation=[
  {'effect': "gen_restore"},
  {'effect': "improve:indoor:40"}
  ])
```

```php
use Cloudinary\Transformation\Effect;
use Cloudinary\Transformation\Adjust;
use Cloudinary\Transformation\ImproveMode;

(new ImageTag('docs/old-photo.jpg'))
	->effect(Effect::generativeRestore())
	->adjust(Adjust::improve()
	->mode(
	ImproveMode::indoor())
->blend(40));
```

```java
cloudinary.url().transformation(new Transformation()
  .effect("gen_restore").chain()
  .effect("improve:indoor:40")).imageTag("docs/old-photo.jpg");
```

```ruby
cl_image_tag("docs/old-photo.jpg", transformation: [
  {effect: "gen_restore"},
  {effect: "improve:indoor:40"}
  ])
```

```csharp
cloudinary.Api.UrlImgUp.Transform(new Transformation()
  .Effect("gen_restore").Chain()
  .Effect("improve:indoor:40")).BuildImageTag("docs/old-photo.jpg")
```

```dart
cloudinary.image('docs/old-photo.jpg').transformation(Transformation()
	.effect(Effect.generativeRestore())
	.adjust(Adjust.improve()
	.mode(
	ImproveMode.indoor())
.blend(40)));
```

```swift
imageView.cldSetImage(cloudinary.createUrl().setTransformation(CLDTransformation()
  .setEffect("gen_restore").chain()
  .setEffect("improve:indoor:40")).generate("docs/old-photo.jpg")!, cloudinary: cloudinary)
```

```android
MediaManager.get().url().transformation(new Transformation()
  .effect("gen_restore").chain()
  .effect("improve:indoor:40")).generate("docs/old-photo.jpg");
```

```flutter
cloudinary.image('docs/old-photo.jpg').transformation(Transformation()
	.effect(Effect.generativeRestore())
	.adjust(Adjust.improve()
	.mode(
	ImproveMode.indoor())
.blend(40)));
```

```kotlin
cloudinary.image {
	publicId("docs/old-photo.jpg")
	 effect(Effect.generativeRestore())
	 adjust(Adjust.improve() {
	 mode(
	ImproveMode.indoor())
 blend(40) }) 
}.generate()
```

```jquery
$.cloudinary.image("docs/old-photo.jpg", {transformation: [
  {effect: "gen_restore"},
  {effect: "improve:indoor:40"}
  ]})
```

```react_native
import { generativeRestore } from "@cloudinary/url-gen/actions/effect";
import { improve } from "@cloudinary/url-gen/actions/adjust";

new CloudinaryImage("docs/old-photo.jpg").effect(generativeRestore()).adjust(
  improve()
    .mode("indoor")
    .blend(40)
);
```

    
    

> **TIP**: See how the generative restore effect compares to other [image enhancement options](image_enhancement).

## Limitations
* The generative restore effect can only be used on non-transparent images.
* The use of generative AI means that results may not be 100% accurate.
* There is a [special transformation count](transformation_counts#special_effect_calculations) for the generative restore effect.
* The generative restore effect isn't supported for [animated](animated_images) images or [fetched](fetch_remote_images#fetch_and_deliver_remote_files) images.
* When Cloudinary is generating a derived version, you may get a 423 response returned until the version is ready. You can prepare derived versions in advance using an [eager transformation](eager_and_incoming_transformations#eager_transformations).
* When Cloudinary is generating an [incoming transformation](eager_and_incoming_transformations#incoming_transformations), you may get a 420 response returned, with status `pending` until the asset is ready.

