Flower-Decorated Photo · публичный навык Open Skill
Flower-Decorated Photo
Flower-Decorated Photo
Other
0 0 0
https://d7qlwi7tl2u27.cloudfront.net/skill-covers/prod/3656543/2026-10-14/7vn6sg6x.jpg
# Flower-Decorated Photo
Image-to-image workflow: take the user’s uploaded photo as the sole reference, add tasteful floral decoration, and **preserve the original aspect ratio, crop, and placement of every subject**. All instructions and prompts are in **English**.
## When to use
- User uploads (or points to) a photo and wants it embellished with flowers, petals, wreaths, garlands, or a floral border.
- User wants a **new floral style** on the same photo (e.g. softer roses vs. wildflowers).
- User uploads a **different** photo for the same treatment.
## Hard constraints (composition lock)
These are non-negotiable for every `generate_image` call:
1. **Single reference**: `input_urls` must contain **exactly one** URL — the user’s source image (canvas asset, upload, or `asset_id` resolved by the platform). Do not add extra reference images.
2. **No reframing**: Do not crop, zoom, pan, rotate, mirror, or change camera angle. Subjects stay in the **same pixel-relative positions** (left/right/top/bottom) as the source.
3. **Same aspect ratio**: Output must match the source frame. Pick `orientation` to match the source (`landscape` / `portrait` / `square`). If the source is clearly non–16:9/9:16/1:1 (e.g. 4:3), pass `aspect_ratio` (e.g. `4:3`) **instead of** forcing a wrong `orientation`.
4. **Decoration only**: Flowers may sit on edges, corners, foreground bokeh, hair/clothing accents, or subtle overlays — they must **not** replace, move, or obscure the main subject’s identity or pose.
5. **Allowed I2I channels only**: `model` must be one of `i2i.hd.lite`, `i2i.hd`, or `i2i.hd.gpt` (see model table below). Never use physical model names or `t2i*` channels for this skill.
## Model selection (i2i only)
| Channel | When to use |
|---------|-------------|
| `i2i.hd.lite` | Default: fast pass, light floral touch, previews, or user did not ask for maximum quality. |
| `i2i.hd` | User wants **richer detail**, sharper petals, or a more polished “print-ready” look. |
| `i2i.hd.gpt` | Busy scenes, many subjects, or user wants **creative** floral placement while still obeying the composition lock; use when `.lite` / `.hd` struggle with complex layouts. |
If the user names a channel explicitly, use that channel. If they ask for “best quality,” prefer `i2i.hd` (or `i2i.hd.gpt` for very complex photos). Do not call `list_models` unless a generation failed and you need to confirm channel availability.
## Workflow
1. **Confirm input**
Identify the source image URL/`asset_id`. If missing, ask the user to upload or select the photo on the canvas.
2. **Understand the scene (recommended)**
Call `recognize_image` on the source with a short English prompt: list main subjects, layout (centered / rule-of-thirds), and obvious aspect ratio (landscape/portrait/square). Use this only to write a better floral prompt — **not** to change composition.
3. **Gather preferences (only if unclear)**
Optional: flower type (roses, cherry blossom, wildflowers), intensity (subtle vs. lavish), mood (dreamy, elegant, festive). Skip questions if the user already specified or said “surprise me.”
4. **Generate (one output per request)**
Call `generate_image` with:
- `model`: chosen from the table above
- `input_urls`: `[source_image]`
- `prompt`: English; start from the template in `references/prompt-template.md` (use `read_skill_file` when drafting).
- `orientation` / `aspect_ratio`: matched to the source (see Hard constraints).
- `name`: short English title, e.g. `Floral — {subject or scene}`
- `entity_type`: `skill_generation`
Do **not** pass `resolution` unless the user explicitly requests a higher tier; default platform resolution keeps behavior predictable.
5. **Reply**
Briefly describe what was added (flower style, placement) and confirm that framing matches the original. Do not paste long URLs.
6. **Retries**
If composition drifted (subjects shifted or crop changed), retry once with a **str