20 AI Photo Styles — Open Skill

20 AI Photo Styles

20 AI Photo Styles is a public Open Skill on Digen. Open it to see what this workflow creates.

@GG_Bone

Custom

0 0 0

https://d7qlwi7tl2u27.cloudfront.net/skill-covers/prod/4150474/2026-10-15/3aj8css7.jpg

# 20 AI Photo Styles

Treat the reference image the user uploaded as the **sole source of the subject**, and generate renders in 20 AI photography styles one by one. This is essentially **image-to-image style transfer**: change only color, material, lighting and texture — not the subject, not the composition, not the scene content.

This skill has no structured project state: progress is kept in the conversation, in the style images already on the canvas, and in `write_todos`.

## When to use

- The user uploads an image and says "turn it into 20 AI photography styles", "give me several different styles", "what styles would look good on this photo"
- The user wants only a few of them (e.g. "give me 3 film-look ones", "I want that magazine cover look")
- The user is unhappy with one of the generated style images and wants it redone or fine-tuned (rerun just that one)

## Input and output conventions

- **Input**: the reference image the user uploaded (attachment / canvas asset). If there is no reference image, stop and ask for one — do **not** silently turn this into text-to-image.
- **Output**: images. One style image = one `generate_image` call (the platform's `batch_size` is locked to 1, so you **cannot** ask for 20 in one call); 20 styles means at most 20 calls, batched as needed.
- **Keep unchanged**: subject identity (face/body/species), pose, camera angle, composition, clothing, scene layout.
- **Change**: color grading, material and grain, lighting and tonality, lens/medium feel, overall mood.

## Steps

### 1. Read the image and distill the "subject anchor"

First confirm the reference image (the user's attachment or the one on the canvas; if the URL is unclear, use the one the user provided), then call:

`recognize_image(image_url=<reference image>, prompt='describe the subject, number of people, pose, clothing, scene, camera angle and composition, lighting direction')`

Compress the result into a single English **subject anchor**, for example:

`a young woman in a white shirt, half-body, centered, standing in a bright indoor room`

This step keeps the subject exactly the same across all 20 prompts. If recognition fails or you cannot get the image, ask the user to describe the subject in one sentence — do **not** make up content yourself.

### 2. Decide the style list

- The user says "all / all 20" → all 20, in the order given in `references/styles.md`.
- The user names a few → do only those.
- The user does not specify → start with 4–6 clearly distinct ones (e.g. Japanese airy / 35mm film / fashion editorial / cinematic teal-orange / cyberpunk neon), then ask whether to fill in the rest.

Before generating, call `write_todos` (one item per style) and replace the whole list as you progress.

### 3. Generate one by one (the core)

Every image uses the same call shape:

```
generate_image(
  prompt='<assembled English prompt>',
  input_urls=[<reference image asset_id / s3 uri>],
  model='i2i',
  orientation=<same as the original: portrait / landscape / square>,
  name='<style name>',
  entity_type='photo_styles',
)
```

**English prompt assembly template** (all three sentences are required — drop one and that aspect drifts):

```
Keep the original subject, pose, framing, clothing and scene layout unchanged.
Re-render this photo in <the English fragment for that style from references/styles.md>.
Maintain the subject's identity and the original composition.
```

- Sentence 1 locks **image content and layout**: subject, pose, composition, clothing and scene all stay put.
- Sentence 2 takes the style's English fragment from `references/styles.md` — the fragment already covers **color / material / lighting / texture**, so embed it whole; do not write vague words like "film style".
- Sentence 3 stresses once more that identity and composition stay unchanged, which is what image-to-image loses most easily.

Other parameter conventions:

- `orientation` matches the original image (`portrait` for vertical portraits, `landscape`