# /image/enhance

Robot: `/image/enhance`

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/) — you can enhance first, then resize, or vice versa.

\> \[!Note]
\> This \<dfn>Robot\</dfn> accepts all image types supported by ImageMagick and will pass through unsupported types unchanged.

\> \[!Note]
\> \`engine: "classic"\` uses \`enhance\`, \`preset\`, \`sharpen\`, and \`denoise\`. \`engine: "ai"\` uses \`ai\_preset\` and \`quality\`; classic controls are ignored in AI mode.

\> \[!Note]
\> 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

## Example

```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`
* `result`
* `queue`
* `force_accept`
* `ignore_errors`
* `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 an input Step with \`as\` to pass semantic intent to robots: - 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/).
* `imagemagick_stack`
* `enhance`
* `preset`
* `engine`
* `ai_preset`
* `sharpen`
* `denoise`
* `quality`
