# Virtual Model

## Overview

Virtual Model lets you automatically convert one or more clothing photos into a polished, lifestyle photoshoot image, using either pre-defined or custom models:

<table data-header-hidden><thead><tr><th align="center" valign="middle"></th><th align="center" valign="middle"></th></tr></thead><tbody><tr><td align="center" valign="middle"><em>(original image)</em></td><td align="center" valign="middle"><em>(edited image)</em></td></tr><tr><td align="center" valign="middle"><img src="/files/IIl5XXj08CmCPE4YA9qO" alt=""></td><td align="center" valign="middle"><img src="/files/G9pUW2dDE9eOpPnzFhhv" alt=""><br><br><code>virtualModel.mode=ai.auto</code><br><code>virtualModel.model.preset.name=avery</code><br><code>virtualModel.scene.preset.name=street</code><br><code>virtualModel.pose=standing</code></td></tr><tr><td align="center" valign="middle"><img src="/files/IIl5XXj08CmCPE4YA9qO" alt=""><br><br>+<br><br><img src="/files/zF7DDeRb59NCd7RBvI9O" alt=""><br></td><td align="center" valign="middle"><img src="/files/xi6dMPNbljYMtIwMioYa" alt=""><br><br><code>virtualModel.mode=ai.auto</code><br><code>virtualModel.model.custom</code><br><code>virtualModel.scene.preset.name=random</code><br><code>virtualModel.pose=random</code></td></tr><tr><td align="center" valign="middle"><img src="/files/PDDoTSjnTtR780b67GJx" alt=""></td><td align="center" valign="middle"><img src="/files/ilv99SQXu12t3exE1yun" alt=""><br><br><code>virtualModel.mode=ai.auto</code><br><code>virtualModel.model.preset.name=jackson</code><br><code>virtualModel.scene.preset.name=library</code><br><code>virtualModel.pose=crossedarms</code></td></tr><tr><td align="center" valign="middle"><img src="/files/PDDoTSjnTtR780b67GJx" alt=""><br><br>+<br><br><img src="/files/2wLTUlRhKz2VoflkkZM9" alt=""></td><td align="center" valign="middle"><img src="/files/nCIzEoFGNXcO5nR3O5Mv" alt=""><br><br><code>virtualModel.mode=ai.auto</code><br><code>virtualModel.model.custom</code><br><code>virtualModel.scene.preset.name=random</code><br><code>virtualModel.pose=random</code></td></tr><tr><td align="center" valign="middle"><img src="/files/Q7T4kIRs89HxP0PUqZRi" alt=""></td><td align="center" valign="middle"><img src="/files/ODYsbAoblPgLU35q1CHX" alt=""><br><br><code>virtualModel.mode=ai.auto</code><br><code>virtualModel.model.preset.name=ava</code><br><code>virtualModel.scene.preset.name=bedroom</code><br><code>virtualModel.pose=seated</code></td></tr><tr><td align="center" valign="middle"><img src="/files/pIT4H0aNQLIlVSXGys6U" alt=""><br><br>+<br><br><img src="/files/V3kCq7S1U79bWJUHtS2L" alt=""></td><td align="center" valign="middle"><img src="/files/f2sJYDc25WpGrUaH8YRO" alt=""><br><br><code>virtualModel.mode=ai.auto</code><br><code>virtualModel.model.custom</code><br><code>virtualModel.scene.preset.name=random</code><br><code>virtualModel.pose=random</code></td></tr></tbody></table>

{% hint style="warning" %}
To keep the background around the virtual model, set the parameters `removeBackground=false` and `referenceBox=originalImage`. If not set, that background will be removed.
{% endhint %}

If you want to give it a try, here's the code to reproduce the first example above:

```bash
curl --request POST \
  --url https://image-api.photoroom.com/v2/edit \
  --header 'x-api-key: YOUR_API_KEY_HERE' \
  --form imageFile=@/path/to/image.png \
  --form removeBackground=false \
  --form referenceBox=originalImage \
  --form virtualModel.mode=ai.auto \
  --form virtualModel.model.preset.name=avery \
  --form virtualModel.scene.preset.name=street \
  --form virtualModel.pose=standing \
  --output result.png
```

<a href="https://try-api.photoroom.com/?removeBackground=false&#x26;referenceBox=originalImage&#x26;virtualModel.mode=ai.auto&#x26;virtualModel.model.preset.name=avery&#x26;virtualModel.scene.preset.name=street&#x26;virtualModel.pose=standing" class="button primary">Try it now!</a>

{% hint style="info" %}
Virtual Model is meant to be used with images that feature clothing items.
{% endhint %}

## Main Parameters

To use Virtual Model, you'll need to use the following parameters:

### `virtualModel.mode`

To enable Virtual Model, set the parameter `virtualModel.mode` to `ai.auto`.

### `virtualModel.model`

The parameter `virtualModel.model` lets you control the likeness of the model.

You can either use a pre-set model or a custom one.

To use a **pre-set model**, set the parameter `virtualModel.model.preset.name` to the name of the pre-set model that you want to use.

<details>

<summary>List of pre-set models</summary>

<table data-card-size="large" data-view="cards"><thead><tr><th align="center"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td align="center"><code>avery</code></td><td data-object-fit="contain"><a href="/files/KxZsKptBhUBF5Pg9AXTn">/files/KxZsKptBhUBF5Pg9AXTn</a></td></tr><tr><td align="center"><code>sam</code></td><td data-object-fit="contain"><a href="/files/iI4iI0U1tTMUi811REMt">/files/iI4iI0U1tTMUi811REMt</a></td></tr><tr><td align="center"><code>taylor</code></td><td data-object-fit="contain"><a href="/files/MNkrqAJBnyEwo2qNp1Xx">/files/MNkrqAJBnyEwo2qNp1Xx</a></td></tr><tr><td align="center"><code>kendall</code></td><td data-object-fit="contain"><a href="/files/GM7Ug0EnlJmdAtgxSOcg">/files/GM7Ug0EnlJmdAtgxSOcg</a></td></tr><tr><td align="center"><code>jordan</code></td><td data-object-fit="contain"><a href="/files/3F9cvO91iuyfkROxxSPL">/files/3F9cvO91iuyfkROxxSPL</a></td></tr><tr><td align="center"><code>casey</code></td><td data-object-fit="contain"><a href="/files/rRcC4kPlqkZtKLmn1ypP">/files/rRcC4kPlqkZtKLmn1ypP</a></td></tr><tr><td align="center"><code>maya</code></td><td data-object-fit="contain"><a href="/files/ulf4uwToGwN7kSaKv33m">/files/ulf4uwToGwN7kSaKv33m</a></td></tr><tr><td align="center"><code>reece</code></td><td data-object-fit="contain"><a href="/files/38w4CI4I3Utb70rOFkNn">/files/38w4CI4I3Utb70rOFkNn</a></td></tr><tr><td align="center"><code>lena</code></td><td data-object-fit="contain"><a href="/files/BMo9D9o1E5imtxKjyk27">/files/BMo9D9o1E5imtxKjyk27</a></td></tr><tr><td align="center"><code>julia</code></td><td data-object-fit="contain"><a href="/files/MF4rt8Fw37BAw3I9WMwx">/files/MF4rt8Fw37BAw3I9WMwx</a></td></tr><tr><td align="center"><code>jackson</code></td><td data-object-fit="contain"><a href="/files/Ma8FcEK65qBuG5SWuceh">/files/Ma8FcEK65qBuG5SWuceh</a></td></tr><tr><td align="center"><code>sophia</code></td><td data-object-fit="contain"><a href="/files/VUUvCsaCzSJGro6M1hW7">/files/VUUvCsaCzSJGro6M1hW7</a></td></tr><tr><td align="center"><code>emma</code></td><td data-object-fit="contain"><a href="/files/lnwownojQKp0Odahn5k9">/files/lnwownojQKp0Odahn5k9</a></td></tr><tr><td align="center"><code>ava</code></td><td data-object-fit="contain"><a href="/files/zf5HdWjhfVR8fFN67lqy">/files/zf5HdWjhfVR8fFN67lqy</a></td></tr><tr><td align="center"><code>zoe</code></td><td data-object-fit="contain"><a href="/files/ZrlLv9Qjf6qA2Ult1ycB">/files/ZrlLv9Qjf6qA2Ult1ycB</a></td></tr><tr><td align="center"><code>fiona</code></td><td data-object-fit="contain"><a href="/files/oLic6Z5lk0ULY3tPE1PR">/files/oLic6Z5lk0ULY3tPE1PR</a></td></tr></tbody></table>

</details>

To use a **custom model**, you will need to provide an image of that model using either the parameter `virtualModel.model.custom.imageFile` or `virtualModel.model.custom.imageUrl`.

{% hint style="info" %}
The parameter `virtualModel.model.custom.imageFile` is only available when using the [POST endpoint](/image-editing-api-plus-plan/quickstart-guide.md#post-endpoint).
{% endhint %}

By default, this parameter will be set to `virtualModel.model.preset.name=avery`.

### `virtualModel.scene`

The parameter `virtualModel.scene` lets you control the environment in which the model will be placed.

You can either use a pre-set scene or a custom one.

{% hint style="warning" %}
To keep the scene generated around the virtual model, please also set the parameters `removeBackground=false` and `referenceBox=originalImage`.
{% endhint %}

To use a **pre-set scene**, set the parameter `virtualModel.scene.preset.name` to the name of the pre-set scene that you want to use.

<details>

<summary>List of pre-set scenes</summary>

<table data-card-size="large" data-view="cards"><thead><tr><th align="center"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td align="center"><code>random</code></td><td data-object-fit="contain"><a href="/files/0IahvwH1qAhBC7VK1DmK">/files/0IahvwH1qAhBC7VK1DmK</a></td></tr><tr><td align="center"><code>street</code></td><td data-object-fit="contain"><a href="/files/hqCfOdvjAbxiRGpQYQWR">/files/hqCfOdvjAbxiRGpQYQWR</a></td></tr><tr><td align="center"><code>bedroom</code></td><td data-object-fit="contain"><a href="/files/JuqlkH1Q44j6ejNektqZ">/files/JuqlkH1Q44j6ejNektqZ</a></td></tr><tr><td align="center"><code>sunset</code></td><td data-object-fit="contain"><a href="/files/YQyJXdUeWE5uMsPBVd3w">/files/YQyJXdUeWE5uMsPBVd3w</a></td></tr><tr><td align="center"><code>factory</code></td><td data-object-fit="contain"><a href="/files/O5Xhtq4bq6JIN2XmhNRb">/files/O5Xhtq4bq6JIN2XmhNRb</a></td></tr><tr><td align="center"><code>studio</code></td><td data-object-fit="contain"><a href="/files/46pbuQT1qatH5mFzK0KN">/files/46pbuQT1qatH5mFzK0KN</a></td></tr><tr><td align="center"><code>coloredstudio</code></td><td data-object-fit="contain"><a href="/files/xB188ouKVuWUedpoS6ix">/files/xB188ouKVuWUedpoS6ix</a></td></tr><tr><td align="center"><code>concretestudio</code></td><td data-object-fit="contain"><a href="/files/K9WgvXohswvMQxmCvI07">/files/K9WgvXohswvMQxmCvI07</a></td></tr><tr><td align="center"><code>beach</code></td><td data-object-fit="contain"><a href="/files/sO0N99T9AZiCj3LlaHCi">/files/sO0N99T9AZiCj3LlaHCi</a></td></tr><tr><td align="center"><code>tropical</code></td><td data-object-fit="contain"><a href="/files/SYh2uL2aUBjcIXBjtey0">/files/SYh2uL2aUBjcIXBjtey0</a></td></tr><tr><td align="center"><code>library</code></td><td data-object-fit="contain"><a href="/files/GiraV1vfH23kImqTPNyb">/files/GiraV1vfH23kImqTPNyb</a></td></tr><tr><td align="center"><code>forest</code></td><td data-object-fit="contain"><a href="/files/Cabudtg7qofeRxSJvqxb">/files/Cabudtg7qofeRxSJvqxb</a></td></tr><tr><td align="center"><code>businessdistrict</code></td><td data-object-fit="contain"><a href="/files/1whyFWttZIX1PgjBgPuM">/files/1whyFWttZIX1PgjBgPuM</a></td></tr><tr><td align="center"><code>countryside</code></td><td data-object-fit="contain"><a href="/files/k0JYUfdQhHWFIZ9BxKMq">/files/k0JYUfdQhHWFIZ9BxKMq</a></td></tr><tr><td align="center"><code>flowers</code></td><td data-object-fit="contain"><a href="/files/qnRyUk2mdQhhY3C7Zpaj">/files/qnRyUk2mdQhhY3C7Zpaj</a></td></tr><tr><td align="center"><code>goldenlight</code></td><td data-object-fit="contain"><a href="/files/dYJbjI0QUpUbVt4AAhPg">/files/dYJbjI0QUpUbVt4AAhPg</a></td></tr><tr><td align="center"><code>mountain</code></td><td data-object-fit="contain"><a href="/files/mNj17LqxxHiH43QJah5p">/files/mNj17LqxxHiH43QJah5p</a></td></tr><tr><td align="center"><code>pool</code></td><td data-object-fit="contain"><a href="/files/5P0ZoyzgUQldwBHUosCL">/files/5P0ZoyzgUQldwBHUosCL</a></td></tr><tr><td align="center"><code>latincity</code></td><td data-object-fit="contain"><a href="/files/ASerA2aObCrrfohVZzzK">/files/ASerA2aObCrrfohVZzzK</a></td></tr><tr><td align="center"><code>cafe</code></td><td data-object-fit="contain"><a href="/files/pOIsqqeC1TY1hAylFnkB">/files/pOIsqqeC1TY1hAylFnkB</a></td></tr><tr><td align="center"><code>asiancity</code></td><td data-object-fit="contain"><a href="/files/4TGJJG4wGjWgSdrE3M4X">/files/4TGJJG4wGjWgSdrE3M4X</a></td></tr><tr><td align="center"><code>nightlights</code></td><td data-object-fit="contain"><a href="/files/EsIhqi1zDJIacnhmhpW8">/files/EsIhqi1zDJIacnhmhpW8</a></td></tr><tr><td align="center"><code>desert</code></td><td data-object-fit="contain"><a href="/files/9y3YDcyNziwCXcAm35TG">/files/9y3YDcyNziwCXcAm35TG</a></td></tr></tbody></table>

</details>

To use a **custom scene**, you will need to provide an image of that scene using either the parameter `virtualModel.scene.custom.imageFile` or `virtualModel.scene.custom.imageUrl`.

{% hint style="info" %}
The parameter `virtualModel.scene.custom.imageFile` is only available when using the [POST endpoint](/image-editing-api-plus-plan/quickstart-guide.md#post-endpoint).
{% endhint %}

By default, this parameter will be set to `virtualModel.scene.preset.name=random`.

### `virtualModel.pose`

The parameter `virtualModel.pose` lets you control the pose of the model.

You can pick between a list of pre-set poses:

<details>

<summary>List of pre-set poses</summary>

<table data-card-size="large" data-view="cards"><thead><tr><th align="center"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td align="center"><code>random</code></td><td data-object-fit="contain"><a href="/files/Faf3PSv0EshWPi7lZidj">/files/Faf3PSv0EshWPi7lZidj</a></td></tr><tr><td align="center"><code>standing</code></td><td data-object-fit="contain"><a href="/files/cnatpfhy24KObYRZ2PeB">/files/cnatpfhy24KObYRZ2PeB</a></td></tr><tr><td align="center"><code>34turn</code></td><td data-object-fit="contain"><a href="/files/dyekqFCnTIiokOHjGz1h">/files/dyekqFCnTIiokOHjGz1h</a></td></tr><tr><td align="center"><code>powerstance</code></td><td data-object-fit="contain"><a href="/files/NL5voD4ITlb6OMMCWwBN">/files/NL5voD4ITlb6OMMCWwBN</a></td></tr><tr><td align="center"><code>walkingforward</code></td><td data-object-fit="contain"><a href="/files/dlkWBG6HAwLwzpUQXs6p">/files/dlkWBG6HAwLwzpUQXs6p</a></td></tr><tr><td align="center"><code>handinpocket</code></td><td data-object-fit="contain"><a href="/files/ur6H0OFDmyyQ00lRlHJy">/files/ur6H0OFDmyyQ00lRlHJy</a></td></tr><tr><td align="center"><code>crossedarms</code></td><td data-object-fit="contain"><a href="/files/9XySYGJsLsS1Ogxv9yEG">/files/9XySYGJsLsS1Ogxv9yEG</a></td></tr><tr><td align="center"><code>back</code></td><td data-object-fit="contain"><a href="/files/VM4Rvi8urMlwKsKYWuuf">/files/VM4Rvi8urMlwKsKYWuuf</a></td></tr><tr><td align="center"><code>overtheshoulder</code></td><td data-object-fit="contain"><a href="/files/s1TKlWffMaDgpiNR9MTC">/files/s1TKlWffMaDgpiNR9MTC</a></td></tr><tr><td align="center"><code>seated</code></td><td data-object-fit="contain"><a href="/files/rteXK1iHRMgqj77j4EvW">/files/rteXK1iHRMgqj77j4EvW</a></td></tr><tr><td align="center"><code>adjustingclothing</code></td><td data-object-fit="contain"><a href="/files/bCpiBRHlpXeNTQWOvzqt">/files/bCpiBRHlpXeNTQWOvzqt</a></td></tr><tr><td align="center"><code>playfulspin</code></td><td data-object-fit="contain"><a href="/files/o2L52MkKqh55bta3bX83">/files/o2L52MkKqh55bta3bX83</a></td></tr></tbody></table>

</details>

By default, this parameter will be set to `virtualModel.pose=random`.

## Which resolutions are supported?

By default, Virtual Model will produce outputs at a resolution of 1K (`1024x1024`).

Output resolutions of 2K and 4K are available for Enterprise plans:

<div><figure><img src="/files/lSCmE5dJ2O68aGeBouCe" alt=""><figcaption><p><em>(original image)</em></p></figcaption></figure> <figure><img src="/files/Jn38LRKnRctDAfcsRWLX" alt=""><figcaption><p><em>(default 1K output)</em></p></figcaption></figure> <figure><img src="/files/rYmwUl5k8SsDYk7UuwSF" alt=""><figcaption><p><em>(4K output)</em></p></figcaption></figure></div>

<div><figure><img src="/files/aQNuzwbcv3yRYoOd5nA6" alt=""><figcaption><p><em>(original image)</em></p></figcaption></figure> <figure><img src="/files/3ZA6IUotMrjOhs7GdaOq" alt=""><figcaption><p><em>(default 1K output)</em></p></figcaption></figure> <figure><img src="/files/vgXZxUwjMHnI9wfp4vka" alt=""><figcaption><p><em>(4K output)</em></p></figcaption></figure></div>

<div><figure><img src="/files/Q7T4kIRs89HxP0PUqZRi" alt=""><figcaption><p><em>(original image)</em></p></figcaption></figure> <figure><img src="/files/ODYsbAoblPgLU35q1CHX" alt=""><figcaption><p><em>(default 1K output)</em></p></figcaption></figure> <figure><img src="/files/NLHwbWnJYuojdlVTptoA" alt=""><figcaption><p><em>(4K output)</em></p></figcaption></figure></div>

{% hint style="info" %}
Make sure to click on the images to see them in full resolution.
{% endhint %}

If you're interested to use 2K or 4K resolution, please [contact our team to book a demo](https://www.photoroom.com/contact-sales?utm_source=apidocumentation\&utm_medium=enterprisegated).

<a href="https://www.photoroom.com/contact-sales?utm_source=apidocumentation&#x26;utm_medium=enterprisegated" class="button primary">Book a demo</a>

## Additional Parameters

### `virtualModel.additionalProductImages[]`

Additional product images showing different angles or details of the same item.

These help the model better understand the product and generate more accurate results.

To provide these images, use either the parameter `virtualModel.additionalProductImages[].imageFile` or `virtualModel.additionalProductImages[].imageUrl`.

{% hint style="info" %}
The parameter `virtualModel.additionalProductImages[].imageFile` is only available when using the [POST endpoint](/image-editing-api-plus-plan/quickstart-guide.md#post-endpoint).
{% endhint %}

### `virtualModel.prompt`

Optional text prompt to guide the generation style.

Example: `street style`

### `virtualModel.size`

The output size and aspect ratio of the generated image.

Default: `PORTRAIT_HD_3_2`

Possible values: `PORTRAIT_HD_16_9`, `PORTRAIT_HD_4_3`, `PORTRAIT_HD_3_2`, `SQUARE_HD`, `LANDSCAPE_HD_3_2`, `LANDSCAPE_HD_4_3`, `LANDSCAPE_HD_16_9`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.photoroom.com/image-editing-api-plus-plan/virtual-model.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
