Portrait Photo · عوامی Open Skill

Portrait Photo

Portrait Photo

@Promise

Doc

1 0 0

https://d7qlwi7tl2u27.cloudfront.net/skill-covers/prod/3949831/2026-10-13/caw8mcqj.jpg

# Portrait Photo

Make **photorealistic portrait photographs** (not illustration, not video). No project database. Lock identity, aspect ratio, and channel from the last successful `generate_image` in this chat. Do not tell the user tool names, channel names, the prompt, or URLs.

## When to use

- Text-to-image: the user wants one shot or a series (indoor, outdoor, studio, fashion boudoir, school-inspired adult fashion, forest, Y2K, male suit/street editorial, and similar)
- Image-to-image: they uploaded a person and want a new pose, scene, outfit, lighting, or a portrait look while keeping that person
- Follow-up: change the last portrait, reshoot, or turn it into a series
- Trigger phrases include portrait / pictorial / beauty photo / 写真 / 美照 / Xiaohongshu-style portrait

Do not use for video, voiceover, poster copy, collectible figures, or pure illustration. The subject must be a **clearly adult person (18+)**.

## Production stages (references/)

Do **not** read every file at once. Decide gender and mode first, then read only what this turn needs.

| Stage | File | Tools | When to read |
|---|---|---|---|
| Female portraits | `references/female-portrait.md` | `generate_image` | Female request; no style/pose given; picking from the sample catalog |
| Male portraits | `references/male-portrait.md` | `generate_image` | Male request; no style/pose given; picking from the sample catalog |
| Prompt assembly | `references/prompt-template.md` | `generate_image` | Before every `generate_image` call |

Popular poses already live in the gender files. Call `search_web` only when the user asks for newer trending poses. Do not search for every image.

## Channel (always pass `model`; never a physical model name)

Text-to-image defaults to **`t2i`**; other t2i variants are allowed. Image-to-image uses only the three rows below. **Never use bare `i2i`.**

| Mode | When | `input_urls` | Default `model` | Also allowed |
|---|---|---|---|---|
| **t2i** | No reference image on this call | omit | **`t2i`** | `t2i.hd` / `t2i.hd.lite` / `t2i.hd.gpt` |
| **i2i** | User upload, or edit the last successful result | required | **`i2i.hd.lite`** | `i2i.hd` / `i2i.hd.gpt` |

If the user names a model, lock it (`user-chose`):

| User says | t2i | i2i |
|---|---|---|
| Unspecified / default | `t2i` | `i2i.hd.lite` |
| nanobanana / nano banana / banana | `t2i.hd` | `i2i.hd` |
| GPT image / GPT / gpt (as the image model) | `t2i.hd.gpt` | `i2i.hd.gpt` |
| lite | `t2i.hd.lite` | `i2i.hd.lite` |
| Exact channel name | that channel | that channel (i2i not below `i2i.hd.lite`) |

Later edits of a t2i result map by row, with an i2i floor of `i2i.hd.lite`: `t2i` → `i2i.hd.lite`; `t2i.hd` → `i2i.hd`; `t2i.hd.gpt` → `i2i.hd.gpt`; `t2i.hd.lite` → `i2i.hd.lite`.

If they reject the result or ask for higher quality and did not name a model: t2i steps up `t2i.hd` then `t2i.hd.gpt`; i2i steps up `i2i.hd` then `i2i.hd.gpt`. Stay on gpt if already there. For an i2i redo, `input_urls[0]` is the **image that was being edited**, not the rejected output.

## Size

Every `generate_image` passes `orientation` and `aspect_ratio`. Do not put the ratio in the prompt. Do not ask for a ratio before the first generate.

| Case | `orientation` | `aspect_ratio` |
|---|---|---|
| User names a ratio in this table | matching row | that ratio |
| Default pictorial / Xiaohongshu portrait | `portrait` | `'3:4'` |
| Phone wallpaper / story / 9:16 | `portrait` | `'9:16'` |
| Wide environmental | `landscape` | `'16:9'` |
| Avatar / square | `square` | `'1:1'` |
| i2i and unspecified | match source: tall `portrait` `'3:4'`, very tall `'9:16'`, wide `landscape` `'16:9'`, near-square `square` `'1:1'` | same |

Omit `resolution` / `width` / `height` unless they name 1080P / 2K / 4K (map 1080P to `resolution='1K'`).

## Collaboration

- If the brief is enough, generate. Do not confirm style or pose over and over. Default female look is in `female-portrait.md`. Default male look is in `male-portrai