Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added

#### 👗 Virtual try-on — OutfitAnyone-Plus + Photoroom
- **Alibaba OutfitAnyone-Plus** (`OutfitAnyonePlusAdapter` / CLI `--model outfitanyone-plus`): first-party DashScope `aitryon-plus`
- Dedicated person + flat-lay try-on (top, bottoms, combo, dress). **Not** Qwen-Image composition
- Auth: Beijing-region `DASHSCOPE_API_KEY`. Async create + poll. Local files uploaded to temp OSS
- MCP tool `vton_outfitanyone_plus`
- Docs: `docs/docs/api-reference/outfitanyone-plus.md`
- **Photoroom Virtual Try-On / Virtual Model** (`PhotoroomVTONAdapter` / CLI `--model photoroom-vton` and `photoroom-virtual-model`)
- First-party Image Editing API `POST /v2/edit`. Shopper try-on **or** flat-lay → on-model
- Auth: `PHOTOROOM_API_KEY` (`sandbox_` prefix for watermarked tests)
- MCP tools `vton_photoroom_vton`, `vton_photoroom_virtual_model`
- Docs: `docs/docs/api-reference/photoroom.md`

#### 👗 Virtual try-on — Google Vertex (`virtual-try-on-001`)
- **Google Virtual Try-On** (`GoogleVTONAdapter` / CLI `--model google-vton`): first-party Vertex / Gemini Enterprise `recontext_image`
- Dedicated person + product try-on; **not** Nano Banana and **not** `GEMINI_API_KEY`
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ API tutorials, configuration, examples, and agent guides live there — not in t

| Category | Highlights |
|---|---|
| **Virtual try-on** | FLUX VTO, **Google Vertex VTO**, Nova Canvas, Kling AI, Segmind, Pruna P-Image-Try-On, FASHN, Nano Banana 2 Lite, **Qwen-Image** (API + local), **Muse Image** (composition) |
| **Virtual try-on** | FLUX VTO, **Google Vertex VTO**, **OutfitAnyone-Plus**, **Photoroom** (try-on + virtual model), Nova Canvas, Kling AI, Segmind, Pruna P-Image-Try-On, FASHN, Nano Banana 2 Lite, **Qwen-Image** (API + local), **Muse Image** (composition) |
| **Generate / edit** | Nano Banana family, FLUX.2, GPT Image, Luma Photon, Seedream 5.0 Pro, Ideogram 4.0, Grok Imagine Image, Pruna P-Image / **P-Image-Ideogram** / Edit / Upscale, **Qwen-Image** (API + local), **Muse Image**; local FLUX.2-dev Turbo |
| **Understand** | Kimi K2.6 / K2.7 Code / K3 (API), Kimi-VL & LLaVA-NeXT (local), **Qwen3.8-Max** (API) + **Qwen3.8-27B** (local) |
| **Video** | Veo, Sora, Luma Ray 2 + Ray 3.2, Seedance 2.5, Kling 3.0 / Omni / Turbo, Grok Imagine Video 1.5, Gemini Omni Flash, Pruna P-Video / Replace / Avatar / Animate, **LTX-2.5** (API + local), **Hailuo 2.3**, **MiniMax H3** (API + local), **Wan** (API + local 2.2), **Runway Gen-4.5** |
Expand Down
2 changes: 1 addition & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ tryon/

**High-value next:** LoRA recipe hardening, Fashion Bench metrics, first local VTON adapter, Try-On QA or Fine-Tune Coach workflow.

**Vendor / model queue** (not a v0.1.0 commitment): [docs/docs/community/integrate-next.md](docs/docs/community/integrate-next.md) — NVIDIA Wave 1 and Google Vertex VTO shipped; next is OutfitAnyone-Plus and one local VTON weight, then new services (LipSync, TRELLIS).
**Vendor / model queue** (not a v0.1.0 commitment): [docs/docs/community/integrate-next.md](docs/docs/community/integrate-next.md) — NVIDIA Wave 1, Google Vertex VTO, OutfitAnyone-Plus, and Photoroom shipped; next is one local VTON weight, then new services (LipSync, TRELLIS).

See [Contributing](CONTRIBUTING.md), [new-model checklist](docs/docs/advanced/new-model-checklist.md), and [VISION.md](VISION.md).

Expand Down
2 changes: 2 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ SEGMIND_API_KEY
GEMINI_API_KEY
GOOGLE_CLOUD_PROJECT
GOOGLE_APPLICATION_CREDENTIALS
DASHSCOPE_API_KEY
PHOTOROOM_API_KEY
BFL_API_KEY
LUMA_AI_API_KEY
OPENAI_API_KEY
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/agents/planner-agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Each capability has a **default model**. The planner uses that default unless th
| Video generation | `video` | `video-generate` / `sora` |
| Background remove | `bg_remove` | `bg-remove` / `ben2` |

- **User named a model** (for example `wan-3.0`, `google-vton`, `flux2-pro`, `p-image-ideogram`, `nemotron-omni`, `cosmos3`) → that registry id **only**, even if it lives in another capability. An unknown name is **not** replaced by the default; the planner asks you to pick a real id. `p-image-ideogram` pins Pruna’s model; a bare `ideogram` still pins Ideogram 4.0. `cosmos3-reasoner` pins the VLM, not the Generator. `google-vton` / `virtual-try-on-001` pin Vertex dedicated try-on, not Nano Banana.
- **User named a model** (for example `wan-3.0`, `google-vton`, `outfitanyone-plus`, `photoroom-vton`, `flux2-pro`, `p-image-ideogram`, `nemotron-omni`, `cosmos3`) → that registry id **only**, even if it lives in another capability. An unknown name is **not** replaced by the default; the planner asks you to pick a real id. `p-image-ideogram` pins Pruna’s model; a bare `ideogram` still pins Ideogram 4.0. `cosmos3-reasoner` pins the VLM, not the Generator. `google-vton` / `virtual-try-on-001` pin Vertex dedicated try-on, not Nano Banana. `aitryon-plus` / `outfitanyone-plus` pin OutfitAnyone-Plus, not Qwen-Image. `photoroom virtual model` pins catalog on-model; a bare `photoroom` pins shopper try-on.
- **No model named** → the default in the table.
- The classifier must leave `model` empty unless the user named one. A leaked default in `plan.model` is ignored unless that id also appears in the prompt.

Expand Down
80 changes: 80 additions & 0 deletions docs/docs/api-reference/outfitanyone-plus.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
---
sidebar_position: 9
title: OutfitAnyone-Plus
description: Alibaba DashScope aitryon-plus — dedicated person + garment try-on (Beijing region)
---

# OutfitAnyone-Plus (`aitryon-plus`)

First-party Alibaba Cloud Model Studio dedicated try-on. Person photo + flat-lay garment(s) → one try-on still. Supports a single top (random bottoms), single bottoms (random top), top+bottoms combo, or a dress/jumpsuit on `top_garment_url`.

This is **not** Qwen-Image composition (`--model qwen-image`). Same `DASHSCOPE_API_KEY` family, but the published API is **China (Beijing) only**.

| CLI `--model` | MCP tool | Adapter | Upstream id |
|---|---|---|---|
| `outfitanyone-plus` | `vton_outfitanyone_plus` | `OutfitAnyonePlusAdapter` | `aitryon-plus` |

Official docs: [aitryon-plus API](https://www.alibabacloud.com/help/en/model-studio/aitryon-plus-api)

## Auth

A Beijing-region Model Studio key.

```bash
export DASHSCOPE_API_KEY=sk-...
# Optional host (default is China DashScope):
# export OUTFITANYONE_BASE_URL=https://dashscope.aliyuncs.com/api/v1
# Workspace:
# export OUTFITANYONE_BASE_URL=https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
```

International DashScope keys used for Qwen-Image / Wan will **not** unlock this model. Create a Beijing key from [Model Studio](https://www.alibabacloud.com/help/en/model-studio/get-api-key).

## Inputs

- Person: one complete, full-body, front-facing subject. 5 KB–5 MB, 150–4096 px, JPG/PNG/BMP/HEIC.
- Garment: flat-lay, one item, clean background. Same size limits.
- At least one of top (or dress) / bottoms.
- Public HTTP(S) URLs are passed through. Local files, PIL images, and bytes are uploaded to DashScope temporary OSS (48h) and sent as `oss://` with `X-DashScope-OssResourceResolve: enable`.

Keep-original-bottoms (or top) is a two-step vendor flow using companion `aitryon-parsing-v1`. OpenTryOn does not wrap that parsing API yet — pass the segmented URL as `--bottom-garment-image` (or `--garment-image`) yourself.

## CLI

```bash
opentryon vton --model outfitanyone-plus \
--person-image person.jpg \
--garment-image top.jpeg

opentryon vton --model outfitanyone-plus \
--person-image person.jpg \
--garment-image top.jpeg \
--bottom-garment-image pants.jpeg \
--resolution -1

opentryon vton --model outfitanyone-plus \
--person-image person.jpg \
--garment-image dress.jpg \
--dry-run
```

`--resolution -1` (default) matches the person image; `1024` is 576×1024; `1280` is 720×1280. `--no-restore-face` generates a random face.

## Python

```python
from tryon.api import OutfitAnyonePlusAdapter

adapter = OutfitAnyonePlusAdapter() # DASHSCOPE_API_KEY
images = adapter.generate_and_decode(
person="person.jpg",
garment="top.jpeg",
restore_face=True,
resolution=-1,
)
images[0].save("worn.png")
```

## Planner / Studio

Name **`outfitanyone-plus`**, **`aitryon-plus`**, or **OutfitAnyone** in chat to pin this model. The VTON default stays `kling-ai`. After MCP restart, Connect lists it under **Alibaba DashScope** (`DASHSCOPE_API_KEY`).
50 changes: 50 additions & 0 deletions docs/docs/api-reference/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,56 @@ See [Google Virtual Try-On](google-vton) for auth, CLI, and MCP.

---

### `OutfitAnyonePlusAdapter`

Dedicated Alibaba DashScope try-on (`aitryon-plus`). Beijing-region key. **Not** Qwen-Image composition.

```python
from tryon.api import OutfitAnyonePlusAdapter

adapter = OutfitAnyonePlusAdapter() # DASHSCOPE_API_KEY (Beijing)

images = adapter.generate_and_decode(
person="person.jpg",
garment="top.jpeg",
)
```

**Parameters:**
- `api_key` (str, optional): Defaults to `DASHSCOPE_API_KEY`
- `base_url` (str, optional): Defaults to `OUTFITANYONE_BASE_URL` or China DashScope

**Methods:**
- `generate_and_decode(person, garment, top_garment=..., bottom_garment=..., restore_face=True, resolution=-1)`

See [OutfitAnyone-Plus](outfitanyone-plus) for auth, CLI, and MCP.

---

### `PhotoroomVTONAdapter`

Photoroom Image Editing API — shopper Virtual Try-On and catalog Virtual Model (`POST /v2/edit`).

```python
from tryon.api import PhotoroomVTONAdapter

adapter = PhotoroomVTONAdapter() # PHOTOROOM_API_KEY
worn = adapter.generate_and_decode(person="selfie.jpg", garment="dress.jpg")
catalog = adapter.generate_virtual_model(garment="flatlay.jpg", preset_model="avery")
```

**Parameters:**
- `api_key` (str, optional): Defaults to `PHOTOROOM_API_KEY`
- `base_url` (str, optional): Defaults to `PHOTOROOM_BASE_URL` or `https://image-api.photoroom.com`

**Methods:**
- `generate_and_decode(person, garment, mode="try-on", ...)`
- `generate_virtual_model(garment, ...)`

See [Photoroom](photoroom) for auth, CLI, and MCP.

---

### `AmazonNovaCanvasVTONAdapter`

Adapter for Amazon Nova Canvas Virtual Try-On through AWS Bedrock.
Expand Down
76 changes: 76 additions & 0 deletions docs/docs/api-reference/photoroom.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
sidebar_position: 10
title: Photoroom Virtual Try-On
description: Photoroom Image Editing API — shopper Virtual Try-On and catalog Virtual Model
---

# Photoroom Virtual Try-On / Virtual Model

First-party [Photoroom Image Editing API](https://docs.photoroom.com/image-editing-api-plus-plan/virtual-try-on) (`POST /v2/edit`). One adapter, two registry ids:

| Job | CLI `--model` | MCP tool | Person photo |
|---|---|---|---|
| Shopper fitting room | `photoroom-vton` | `vton_photoroom_vton` | Required (custom model) |
| Catalog on-model | `photoroom-virtual-model` | `vton_photoroom_virtual_model` | Optional; otherwise a preset (`avery` default) |

Product pages: [Virtual Try-On](https://www.photoroom.com/tools/virtual-try-on), [Virtual Model](https://www.photoroom.com/tools/virtual-model). API: [Virtual Try-On](https://docs.photoroom.com/image-editing-api-plus-plan/virtual-try-on), [Virtual Model](https://docs.photoroom.com/image-editing-api-plus-plan/virtual-model).

Both set `virtualModel.mode=ai.auto`. Try-on sends the shopper as `virtualModel.model.custom`; Virtual Model uses `virtualModel.model.preset.name` unless you pass a custom model photo.

## Auth

```bash
export PHOTOROOM_API_KEY=your_key
# Watermarked tests:
# export PHOTOROOM_API_KEY=sandbox_your_key
# or: export PHOTOROOM_SANDBOX=1
```

Get a key at [app.photoroom.com/api](https://app.photoroom.com/api). Plus / Enterprise plan — Virtual Model and Virtual Try-On are Image Editing API features.

## CLI

```bash
# Shopper try-on
opentryon vton --model photoroom-vton \
--person-image selfie.jpg \
--garment-image dress.jpg \
--pose standing \
--scene studio

# Catalog: flat-lay → on-model (no shopper photo)
opentryon vton --model photoroom-virtual-model \
--garment-image flatlay.jpg \
--preset-model avery \
--scene street \
--pose standing \
--dry-run
```

`--remove-background` is off by default so the generated scene is kept (`referenceBox=originalImage`). Optional `--prompt` (e.g. `street style`), `--scene-image`, and `--additional-product-images`.

Preset models include `avery`, `sam`, `taylor`, `kendall`, `jordan`, `jackson`, `ava`, and others listed in the [Virtual Model docs](https://docs.photoroom.com/image-editing-api-plus-plan/virtual-model). Output size default `PORTRAIT_HD_3_2`. 2K / 4K output is an Enterprise add-on on Photoroom’s side.

## Python

```python
from tryon.api import PhotoroomVTONAdapter

adapter = PhotoroomVTONAdapter() # PHOTOROOM_API_KEY

worn = adapter.generate_and_decode(
person="selfie.jpg",
garment="dress.jpg",
mode="try-on",
pose="standing",
)
catalog = adapter.generate_virtual_model(
garment="flatlay.jpg",
preset_model="avery",
scene="street",
)
```

## Planner / Studio

Name **`photoroom-vton`** or **Photoroom** to pin shopper try-on. Name **`photoroom-virtual-model`** for catalog on-model. After MCP restart, Connect lists **Photoroom** (`PHOTOROOM_API_KEY`). The VTON default stays `kling-ai`.
4 changes: 4 additions & 0 deletions docs/docs/api-reference/qwen-image.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ is Alibaba's hosted image model on DashScope / Model Studio. OpenTryOn
integrates it via `QwenImageAdapter` for **text-to-image**, **image editing
(I2I, 1–3 refs)**, and **virtual try-on** (person + garment composition).

This is **composition** I2I, not Alibaba's dedicated try-on. Dedicated
OutfitAnyone-Plus is `--model outfitanyone-plus` (`aitryon-plus`, Beijing
region). See [OutfitAnyone-Plus](outfitanyone-plus).

Qwen3.8 (understand) and Qwen-Image (generate / edit / vton) share
`DASHSCOPE_API_KEY` but use different endpoints:

Expand Down
Loading
Loading