# fal-ai/flux/dev/image-to-image

Image to Image [dev]

FLUX.1 Image-to-Image is a high-performance endpoint for the FLUX.1 [dev] model that enables rapid transformation of existing images, delivering high-quality style transfers and image modifications with the core FLUX capabilities.

### Table of contents

- **1. Calling the API**  
- **2. Authentication**  
- **3. Queue**  
- **4. Files**  
- **5. Schema**

### About

Image to image version of FLUX.1 [dev], next generation image-to-image model.

### 1. Calling the API

### Install the client

The client provides a convenient way to interact with the model API.

```bash
npm install --save @fal-ai/client
```

#### Migrate to @fal-ai/client

The `@fal-ai/serverless-client` package has been deprecated in favor of `@fal-ai/client`. Install the new package and update your imports.

### Setup your API Key

Set `FAL_KEY` as an environment variable in your runtime.

```bash
export FAL_KEY="YOUR_API_KEY"
```

### Submit a request

The client API handles the API submit protocol. It will handle the request status updates and return the result when the request is completed.

```javascript
import { fal } from "@fal-ai/client";

const result = await fal.subscribe("fal-ai/flux/dev/image-to-image", {
  input: {
    image_url: "https://fal.media/files/koala/Chls9L2ZnvuipUTEwlnJC.png",
    prompt: "A cat dressed as a wizard with a background of a mystic forest."
  },
  logs: true,
  onQueueUpdate: (update) => {
    if (update.status === "IN_PROGRESS") {
      update.logs.map((log) => log.message).forEach(console.log);
    }
  },
});
console.log(result.data);
console.log(result.requestId);
```

## 2. Authentication

The API uses an API Key for authentication. It is recommended you set the `FAL_KEY` environment variable in your runtime when possible.

### API Key

In case your app is running in an environment where you cannot set environment variables, you can set the API Key manually as a client configuration.

```javascript
import { fal } from "@fal-ai/client";

fal.config({
  credentials: "YOUR_FAL_KEY"
});
```

##### Protect your API Key

When running code on the client-side (e.g. in a browser, mobile app or GUI applications), make sure to not expose your `FAL_KEY`. Instead, use a server-side proxy to make requests to the API.

## 3. Queue

##### Long-running requests

For long-running requests, such as _training_ jobs or models with slower inference times, it is recommended to check the Queue status and rely on Webhooks instead of blocking while waiting for the result.

### Submit a request

The client API provides a convenient way to submit requests to the model.

```javascript
import { fal } from "@fal-ai/client";

const { request_id } = await fal.queue.submit("fal-ai/flux/dev/image-to-image", {
  input: {
    image_url: "https://fal.media/files/koala/Chls9L2ZnvuipUTEwlnJC.png",
    prompt: "A cat dressed as a wizard with a background of a mystic forest."
  },
  webhookUrl: "https://optional.webhook.url/for/results",
});
```

### Fetch request status

You can fetch the status of a request to check if it is completed or still in progress.

```javascript
import { fal } from "@fal-ai/client";

const status = await fal.queue.status("fal-ai/flux/dev/image-to-image", {
  requestId: "764cabcf-b745-4b3e-ae38-1200304cf45b",
  logs: true,
});
```

### Get the result

Once the request is completed, you can fetch the result. See the Output Schema for the expected result format.

```javascript
import { fal } from "@fal-ai/client";

const result = await fal.queue.result("fal-ai/flux/dev/image-to-image", {
  requestId: "764cabcf-b745-4b3e-ae38-1200304cf45b"
});
console.log(result.data);
console.log(result.requestId);
```

## 4. Files

Some attributes in the API accept file URLs as input. Whenever that's the case you can pass your own URL or a Base64 data URI.

### Data URI (base64)

You can pass a Base64 data URI as a file input. The API will handle the file decoding for you.

### Hosted files (URL)

You can also pass your own URLs as long as they are publicly accessible.

### Uploading files

We provide a convenient file storage that allows you to upload files and use them in your requests.

```javascript
import { fal } from "@fal-ai/client";

const file = new File(["Hello, World!"], "hello.txt", { type: "text/plain" });
const url = await fal.storage.upload(file);
```

## 5. Schema

### Input

- `image_url` *string required*: The URL of the image to generate an image from.
- `strength` *float*: The strength of the initial image. Higher strength values are better for this model. Default value: `0.95`
- `num_inference_steps` *integer*: The number of inference steps to perform. Default value: `40`
- `prompt` *string required*: The prompt to generate an image from.
- `seed` *integer*: Seed value.
- `guidance_scale` *float*: The CFG (Classifier Free Guidance) scale.
- `sync_mode` *boolean*: If `True`, the media will be returned as a data URI.
- `num_images` *integer*: The number of images to generate. Default value: `1`
- `enable_safety_checker` *boolean*: If set to true, the safety checker will be enabled.
- `output_format` *OutputFormatEnum*: The format of the generated image. Default value: `jpeg`
- `acceleration` *AccelerationEnum*: The speed of the generation. Default value: `none`

```json
{
  "image_url": "https://fal.media/files/koala/Chls9L2ZnvuipUTEwlnJC.png",
  "strength": 0.95,
  "num_inference_steps": 40,
  "prompt": "A cat dressed as a wizard with a background of a mystic forest.",
  "guidance_scale": 3.5,
  "num_images": 1,
  "enable_safety_checker": true,
  "output_format": "jpeg",
  "acceleration": "none"
}
```

### Output

- `images` *list<Image> required*: The generated image files info.
- `timings`: Time taken for processing.
- `seed` *integer required*: Seed of the generated Image.
- `has_nsfw_concepts` *list<boolean> required*: NSFW concepts found.
- `prompt` *string required*: The prompt used for generating the image.

```json
{
  "images": [
    {
      "url": "",
      "content_type": "image/jpeg"
    }
  ],
  "prompt": ""
}
```

### Other types

#### Image
- `url` *string required*  
- `width` *integer required*  
- `height` *integer required*  
- `content_type` *string*: Default value: "image/jpeg"
