Glass Curtain Wall Portrait Edit · skill Open Skill công khai

Glass Curtain Wall Portrait Edit

Glass Curtain Wall Portrait Edit là một Open Skill công khai trên Digen. Mở ra để xem workflow này tạo gì.

@jimi

Custom

0 0 0

https://d7qlwi7tl2u27.cloudfront.net/skill-covers/prod/3325120/2026-10-13/uqf3mx9d.jpg

# Glass Curtain Wall Portrait Edit

Turn an uploaded selfie or portrait into a **photorealistic fashion editorial** on a modern glass curtain wall terrace. Lock the subject's identity from the source photo. Scene, camera, pose, and grade are defined in `references/scene-spec.md` and assembled in `references/prompt-template.md`. Read those files before every `generate_image`. No project database. Do not tell the user tool names, channel names, prompt text, or URLs.

## Language lock

This file and all of `references/` are **English only**. No Han characters. No CJK punctuation. User-visible sentences and button labels follow the user's language. Image prompts stay English.

## User-visible speech (hard)

Do not narrate the pipeline. Never mention skill files, tool names, channel names, the prompt, `entity_type`, self-check, or silent redo. Do not call `write_todos`. No numbered plan or checklist.

Allowed text only:

- No usable photo: ask for an upload, then pause `P-empty`.
- Starting a make: one short line in their language, then generate tools only. No buttons on that turn.
- Success: one or two sentences that the editorial portrait is ready. No URL. No prompt. Pause `P-done`.
- Tool `success=false`: say it did not finish. No invented URL. Pause `P-fail`.
- Refuse: one polite line. Do not generate. Pause `P-refuse`.

A generate turn may only show the making line. A pause turn is the allowed sentence plus `set_guidance` and no other tool.

## Pause = clickable buttons (hard)

Every wait and every finished run calls `set_guidance` in the same turn as the user-visible sentence. Do not stop with only a question.

- 2–4 buttons. Translate labels and `content` into the user's language.
- Short reply: `send_message`. Text they must complete: `fill_input` with `replace: true`.
- No emoji. No "type continue." No button that repeats a sexual or minor request.
- Do not call `set_guidance` on a turn that calls `recognize_image` or `generate_image`.

| Pause | When | Buttons |
|---|---|---|
| P-empty | No upload and no last successful result from this skill | I'll upload a selfie (`send_message`) · Use a sample adult look and generate (`send_message`) |
| P-fail | `generate_image` returns `success=false` | Try again (`send_message`) · I'll describe a change (`fill_input`) |
| P-refuse | Subject looks underage, or sexual / nude request | Use an adult photo instead (`send_message`) · I'll describe a different look (`fill_input`) |
| P-done | Portrait is ready | Cooler and more steel-blue (`send_message`) · Softer reflections on the glass (`send_message`) · Change outfit to minimal chic (`send_message`) · Try a closer crop (`send_message`) |

For `fill_input`, use a short template in the user's language, e.g. lines for outfit, pose, or mood change.

## Reference files

| File | When to read |
|---|---|
| `references/scene-spec.md` | Before first generate; when user asks what the look includes |
| `references/prompt-template.md` | Immediately before every `generate_image` |

Do not read both at once unless you are about to generate.

## Channel

Every `generate_image` passes `model`. No physical model name. Never say a channel to the user. **Never use bare `i2i`.** Text-only without a reference is allowed only when the user explicitly chose "sample adult look" from `P-empty`.

| Mode | When | `input_urls` | Default `model` | Also allowed |
|---|---|---|---|---|
| **i2i** | User upload or edit last success | required | **`i2i.hd.lite`** | `i2i.hd` / `i2i.hd.gpt` |
| **t2i** | User chose sample look, no photo | omit | **`t2i.hd`** | `t2i.hd.lite` / `t2i.hd.gpt` |

If the user names a model, lock it: nano banana → `i2i.hd` / `t2i.hd`; GPT image → `i2i.hd.gpt` / `t2i.hd.gpt`; lite → `*.hd.lite`. Reuse the last successful channel on edits unless they name one. On redo after rejection, `input_urls[0]` is the **image being edited** (upload or prior success), not a failed output.

## Size

Pass `orientation` and `aspect_ratio` on every `generate_im