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

# Base model selection

> Choose which image model powers your /edit and /generate requests — identity preservation composes on top of any supported model

## Identity is a layer that has to be learned.

Generic image models such as Nano Banana 2, GPT Image 2, Reve, Qwen Image 2, and Flux 2 Dev each have different
strengths: world knowledge, text rendering, aesthetic defaults, cost profile. They've all shipped in roughly a year
and the frontier keeps moving.

What every one of them is missing is **personal knowledge of a specific person.** That's what Phota's identity layer
adds. The identity layer composes on top of whichever base model you pick — so you choose the generic model that best
fits your use case, and Phota handles identity for you.

For more background, see [Every Frontier Model Can Be Personalized for You](https://photalabs.com/blog/every-frontier-model-can-be-personalized-for-you).

You select the base model per request with the `base_model` parameter. Identity preservation is applied automatically
whenever a trained profile is referenced.

***

## Supported models

| `base_model`    | Display name  | Resolutions | Pricing        |
| --------------- | ------------- | ----------- | -------------- |
| `nb2` (default) | Nano Banana 2 | 1K, 2K, 4K  | flat per image |
| `gpt-image-2`   | GPT Image 2   | 1K, 2K, 4K  | token-metered  |
| `qwen-image-2`  | Qwen Image 2  | 1K, 2K      | flat per image |
| `flux-2`        | Flux 2 Dev    | 1K, 2K      | flat per image |
| `reve`          | Reve          | 1K          | flat per image |

See [Pricing](/pricing) for the exact rates.

If you omit `base_model`, requests run on Nano Banana 2.

***

## Where `base_model` applies

* **`/edit`** — accepts `base_model`. Defaults to `nb2`.
* **`/generate`** — accepts `base_model`. Defaults to `nb2`.
* **`/enhance`** — does **not** accept `base_model`. Enhancement is pinned to Nano Banana 2 at 2K.

***

## Quality tier (`gpt-image-2` only)

`/edit` and `/generate` accept an optional `quality` parameter — `"auto"`, `"low"`, `"medium"`, or `"high"` — when
`base_model` is `gpt-image-2`. Omitting it lands on `"auto"`. Sending `quality` with any other base model returns
HTTP 400. Billing is token-driven, so lower tiers produce fewer output tokens and cost less per request.

***

## Example: pick a base model explicitly

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST https://api.photalabs.com/v1/phota/edit \
    -H "X-API-Key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "prompt": "Make [[abc123]] smile wider",
      "images": ["https://example.com/photo.jpg"],
      "base_model": "gpt-image-2",
      "resolution": "2K",
      "output_format": "jpg"
    }'
  ```

  ```python Python theme={null}
  import requests

  resp = requests.post(
      "https://api.photalabs.com/v1/phota/edit",
      headers={
          "X-API-Key": "YOUR_API_KEY",
          "Content-Type": "application/json",
      },
      json={
          "prompt": "Make [[abc123]] smile wider",
          "images": ["https://example.com/photo.jpg"],
          "base_model": "gpt-image-2",
          "resolution": "2K",
          "output_format": "jpg",
      },
  )
  print(resp.json())
  ```
</CodeGroup>

***

## Next steps

<CardGroup cols={2}>
  <Card title="Pricing" icon="dollar-sign" href="/pricing">
    Per-image and token-metered rates for every supported base model.
  </Card>

  <Card title="Profiles guide" icon="user-group" href="/guides/profiles">
    Create and manage profiles for identity preservation.
  </Card>

  <Card title="Quickstart" icon="rocket" href="/api/quickstart">
    Walk through the full workflow with code examples.
  </Card>
</CardGroup>
