# Enhance and restore images

Robot: `/image/enhance`

🤖/image/enhance improves image appearance with automatic tonal adjustments, sharpening, denoising, photo presets, or AI restoration while preserving the original dimensions.

With this <dfn>Robot</dfn> you can automatically enhance images with one click — adjusting levels, contrast, saturation, sharpness, and white balance to produce an optimally balanced image. It also supports a library of named photo filter presets (e.g. `warm`, `cool`, `vintage`, `vivid`) that apply curated color grading and tone adjustments.

It works well together with [🤖/image/resize](/docs/robots/image-resize.md) — you can enhance first, then resize, or vice versa.

This <dfn>Robot</dfn> accepts all image types supported by ImageMagick and passes unsupported types through unchanged. `engine: "classic"` uses `enhance`, `preset`, `sharpen`, and `denoise`, while `engine: "ai"` uses `ai_preset` and `quality`; classic controls are ignored in AI mode. Output keeps the original file extension when possible. In AI mode, if the target extension is not writable by the selected `imagemagick_stack`, the file is passed through unchanged.

Stage: beta

## Usage example

Enhance uploaded images with automatic adjustments or AI restoration:

```json
{
  "steps": {
    "enhanced_classic": {
      "robot": "/image/enhance",
      "use": ":original",
      "enhance": "auto",
      "preset": "vivid"
    },
    "enhanced_ai": {
      "robot": "/image/enhance",
      "use": ":original",
      "engine": "ai",
      "ai_preset": "restore"
    }
  }
}
```

## Parameters

* `interpolate`: Controls whether Assembly Variables are interpolated for individual instruction fields.

  By default, most Robot instruction fields interpolate Assembly Variables. Set this to `false` to treat every instruction field as literal text, or set an individual field path to `false` to treat only that field as literal text. For Robot-specific fields that are literal by default, set this to `true` or set that field path to `true` to opt back into interpolation.

  Use field names such as `path`, or dotted paths such as `ffmpeg.vf` for nested objects.

* `output_meta`: Allows you to specify a set of metadata that is more expensive on CPU power to calculate, and thus is disabled by default to keep your Assemblies processing fast.

  For images, you can add `"has_transparency": true` in this object to extract if the image contains transparent parts and `"dominant_colors": true` to extract an array of hexadecimal color codes from the image.

  For images, you can also add `"blurhash": true` to extract a [BlurHash](https://blurha.sh) string — a compact representation of a placeholder for the image, useful for showing a blurred preview while the full image loads.

  For videos, you can add the `"colorspace": true` parameter to extract the colorspace of the output video.

  For videos, you can also add `"interlaced": true` to detect whether the video is interlaced. This combines the cheap ffprobe `field_order` flag with a bounded `idet` sampling pass over the first frames of the source, exposing `interlaced`, `field_order`, and a diagnostic `interlace_detection` object under `file.meta`. This is computationally expensive and billed accordingly.

  For audio, you can add `"mean_volume": true` to get a single value representing the mean average volume of the audio file.

  You can also set this to `false` to skip metadata extraction and speed up transcoding.

* `result`: Whether the results of this Step should be present in the Assembly Status JSON

* `queue`: Setting the queue to 'batch', manually downgrades the priority of jobs for this step to avoid consuming Priority job slots for jobs that don't need zero queue waiting times

* `force_accept`: Force a Robot to accept a file type it would have ignored.

  By default, Robots ignore files they are not familiar with.
  [🤖/video/encode](/docs/robots/video-encode.md), for
  example, will happily ignore input images.

  With the `force_accept` parameter set to `true`, you can force Robots to accept all files thrown at them.
  This will typically lead to errors and should only be used for debugging or combatting edge cases.

* `ignore_errors`: Ignore errors during specific phases of processing.

  Setting this to `["meta"]` will cause the Robot to ignore errors during metadata extraction.

  Setting this to `["execute"]` will cause the Robot to ignore errors during the main execution phase.

  Setting this to `true` is equivalent to `["meta", "execute"]` and will ignore errors in both phases.

* `use`: Specifies which Step(s) to use as input.

  * You can pick any names for Steps except `":original"` (reserved for user uploads handled by Transloadit)
  * You can provide several Steps as input with arrays:
    ```json
    {
      "use": [
        ":original",
        "encoded",
        "resized"
      ]
    }
    ```
  * You can also tag input Steps with `as` to pass semantic intent to robots:
    ```json
    {
      "use": [
        {
          "name": ":original",
          "as": "image"
        },
        {
          "name": ":original",
          "as": "mask"
        }
      ]
    }
    ```

  > [!Tip]
  > That's likely all you need to know about `use`, but you can view [Advanced use cases](/docs/topics/use-parameter.md).

* `imagemagick_stack`

* `enhance`: The auto-enhancement mode. `"auto"` applies balanced auto-levels, gamma correction, and subtle sharpening. `"auto_gentle"` is more conservative (good for already-decent photos). `"auto_aggressive"` applies stronger normalization and contrast. `"none"` skips auto-enhance (useful when only applying a preset filter).

* `preset`: A named color grading preset to apply. Applied after auto-enhancement. Use `"none"` to skip preset application.

  Available presets:

  * `warm` — Warm golden tones
  * `cool` — Cool blue-shifted tones
  * `vintage` — Faded retro look with warm shadows
  * `vivid` — Boosted saturation and contrast
  * `matte` — Lifted blacks for a matte film look
  * `cinematic` — Teal-and-orange cinema grading
  * `golden_hour` — Warm sunset-like glow
  * `bw_dramatic` — High-contrast black and white
  * `bw_classic` — Classic film black and white
  * `noir` — Dark, moody black and white
  * `fade` — Washed-out faded look
  * `pastel` — Soft, desaturated pastel tones
  * `teal_orange` — Complementary teal shadows and orange highlights

* `engine`: Enhancement engine to use.

  * `"classic"` uses ImageMagick-based adjustments and presets.
  * `"ai"` uses AI restoration models on Replicate (typically higher latency and cost than classic mode).

* `ai_preset`: AI enhancement preset used when `engine` is set to `"ai"`:

  * `restore` — General image restoration.
  * `face_restore` — Portrait-focused face restoration.

  AI mode is not intended for image upscaling. For dedicated upscaling, use [🤖/image/upscale](/docs/robots/image-upscale.md).

* `sharpen`: Additional sharpening amount (`0` = none, `10` = maximum). The `"auto"` enhance mode already applies subtle sharpening; this parameter adds more on top.

* `denoise`: Noise reduction strength (`0` = none, `10` = maximum). Useful for high-ISO photos.

* `quality`: Quality of the output image. A value between `1` and `100`. Defaults to `92`.
