Agent Native

imagery

This skill guides generating AI images for WordPress sites using the generate_images tool, or alternative image generation tools.

by AutomatticOfficial publisherNot reviewed

Identity proven by GitHub's verified organisation badge (Automattic)

Agents
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode
License
LGPL-2.1 (copyleft)
Pin
870948cpinned Oct 9, 2026
Context cost
about 2,600 tokenswhen the skill loads
GitHub stars
533on automattic/studio
Scripts
None found

What it does

“Generate AI images for a site with generate_images, or with an image tool of your own when it is not available — how to write image specs, pick aspect ratios, place files (theme assets vs media library), and handle failures.”
The author's description, from SKILL.md

Generated summary from the skill's own text

This skill guides generating AI images for WordPress sites using the generate_images tool, or alternative image generation tools. It covers planning image placement and specifications, writing effective prompts for image generation, distinguishing between content and theme imagery, handling batching and failures, and ensuring accessibility with proper alt text.

When to use it

  • Building or updating WordPress site pages that need hero, gallery, or feature images
  • Generating a cohesive set of images for a new site design
  • Planning image placement before writing markup that references images
  • Replacing or supplementing generated images with alternative image tools

When not to

  • Creating decorative assets like icons, logos, ornaments, or flourishes
  • When design requires text, signage, or lettering rendered in images
  • Using pre-existing images from URLs or external sources

Install

These commands install from the publisher's repository and need no account.

skills CLI

npx skills add automattic/studio --skill imagery

Installs from the repository's default branch, which may have changed since the commit we checked.

GitHub CLI 2.90 or later

gh skill install automattic/studio imagery@870948cd5cbdba4d05a432c38fa5e8e1e796b3b1

Installs the commit we checked (870948c).

Copy by hand

Download the folder at 870948c and put it in .claude/skills/imagery for Claude Code and in .agents/skills/imagery for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode.

Skill folder on GitHub at 870948c

Claude Code plugin

/plugin install build-with-wordpress@claude-plugins-official

The publisher's plugin in Claude's official marketplace. It may hold more than this skill, and we have not pinned it.

Copy for your agent

A prompt for any coding agent. It installs this skill from GitHub at the pinned commit, copies the files as they are, and runs nothing unless you ask.

Prompt

Install the agent skill "imagery" by Automattic.

Source, pinned to commit 870948cd5cbdba4d05a432c38fa5e8e1e796b3b1:
https://github.com/automattic/studio/tree/870948cd5cbdba4d05a432c38fa5e8e1e796b3b1/apps/cli/ai/skills/imagery

1. Download that folder at exactly this commit. Do not use the default branch.
2. Copy every file unchanged, keeping the folder structure, into .claude/skills/imagery/ for Claude Code and .agents/skills/imagery/ for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode. Create the folders if they do not exist.
3. Do not edit the files, and do not run any script in the folder unless I ask you to.
4. When you are done, list the files you copied and where you put them.

Listing and checks: https://www.agentnative.dev/skills/automattic/imagery

SKILL.md at the pin

---
name: imagery
description: Generate AI images for a site with generate_images, or with an image tool of your own when it is not available — how to write image specs, pick aspect ratios, place files (theme assets vs media library), and handle failures.
user-invokable: true
---

# Site Imagery

Use this skill whenever a design calls for images — hero/cover backgrounds, feature, gallery, or card images, team photos, product shots — and before every `generate_images` call.

## Workflow

1. **Plan all imagery first.** While planning a page or theme, list every image it needs: filename, subject, placement, aspect ratio. Call `generate_images` BEFORE writing the markup that references them: it returns each image's path, attachment ID, and URL at once and generates the images in the background, so write the markup right away.
2. **Pick the destination by where the image is shown**: the file that holds its markup decides, not what the image depicts.
   - **Content imagery**: every image shown by page or post content, including a page's hero or cover, section images, products, team photos, and galleries. Write to `<site>/wp-content/uploads/<name>.png`. The tool adds every image under `wp-content/uploads/` to the media library and reports its attachment ID and URL: use the URL as the `src` and the ID in the block attrs (e.g. `wp:image {"id":<id>,"sizeSlug":"large"}`).
   - **Theme imagery**: only images shown by theme files, meaning a template, a template part such as the header or footer, or `style.css`. Write to `<site>/wp-content/themes/<theme-slug>/assets/images/<name>.png` and reference it in markup as `/wp-content/themes/<theme-slug>/assets/images/<name>.png`. It stays in the theme and never goes into the media library.
   One call can mix both: each image goes where its path says. A one-page site builds its sections in the page content, so its images, hero included, are content imagery.
3. **Batch aggressively.** One `generate_images` call per page (or per site for small sites) with every image in the `images` array — generation is concurrent server-side. Never one call per image. The site's set from the design steps below is the first batch: use it before generating anything else.
4. **Write real alt text.** Generated images are content: give every `<img>` a short, descriptive alt in the markup (what the image shows, for a person who cannot see it). Never leave a spec string or an empty alt on a content image; cover backgrounds keep an empty alt (decorative).

## Writing the spec fields

Every image in the `images` array takes `path`, `subject`, `pageContext`, `style`, `aspectRatio`. The call also takes a shared `siteContext` and `imageGrade`.

### subject — what the image shows

1–3 specific sentences describing ONLY the image itself: what it shows and from what point of view (composition, framing, vantage, mood).

- **NEVER ask the image to render text.** No words, names, letters, numerals, wordmarks, signage copy, or "hand-lettering of <words>" — in any language. Image models garble glyphs and invent fake scripts. Everything meant to be read is real HTML typography styled by the theme. Prefer scenes whose focal subject carries no lettering at all: the model completes any prominent sign, storefront, menu board, or screen with garbled fake text. When a text-bearing surface is unavoidable, describe it as bare (clear glass, an unmarked awning, a blank board) or keep it distant, oblique, or out of focus. Never write words for signage into the subject even to negate them — naming lettering plants it.
- **Describe content and composition, NOT photographic grade.** The site-wide `imageGrade` is applied to every image; do not restate or contradict it per image (no "black and white", "golden hour", "35mm grain" in subjects) — per-image grading makes adjacent images clash.
- Make sibling images in the same section describe distinct subjects so they don't read alike.
- For cover backgrounds with overlaid copy, keep the focal subject off-center with calm, low-detail areas so the overlaid HTML text stays legible.

### pageContext — where the image is used

A short phrase in **pictorial slot language**, in **English** (it is machine guidance, not site copy). Examples: `contained editorial photograph in a 3-column gallery`, `menu item thumbnail`, `full-frame editorial photograph with the left third kept as open, low-detail negative space`.

- Describe copy-overlay placement as **reserved empty space in photographic terms, never as text**: write `the left third kept as open, low-detail negative space` — NOT `hero with the headline overlaid on the left`. Naming a headline or menu in the pageContext is the trigger for the model painting ghost text into that exact region — and so is design-comp vocabulary like `hero cover background`: prefer photographic slot language (`editorial photograph`, `full-frame backdrop`) over web-layout language (`hero`, `banner`, `cover background`).
- The structured `aspectRatio` field is authoritative for canvas shape; pageContext must not contradict it.

### style

One of: `photorealistic` (default), `digital-art`, `illustration`, `minimalist`, `flat-design`, `3d-render`, `abstract`, `watercolor`. Keep one style per site unless the design deliberately mixes.

### aspectRatio — match the slot

- `landscape` (16:9) — the default for hero and banner images and wide feature/gallery rows
- `ultrawide` (21:9) — ONLY for full-bleed backgrounds spanning the viewport edge to edge; never for contained images, cards, or columns
- `portrait` (9:16) — dramatic tall images: full-height editorial shots, tall side-by-side panels
- `card-landscape` (4:3) — contained landscape slots: product cards, blog thumbnails, feature images in columns
- `card-portrait` (3:4) — the natural portrait-card shape: team headshots, tall product cards, framed insets; prefer over `portrait` for anything in a card or column
- `square` (1:1) — only when the layout slot is genuinely 1:1

A full-bleed cover BACKGROUND must be `landscape` or `ultrawide` — never square, portrait, or a card ratio. **Grid/row consistency:** all images displayed together in one row or grid MUST share the same aspect ratio — never mix.

### siteContext and imageGrade (shared per call)

- `siteContext`: one sentence of subject matter ("A neighborhood bakery selling sourdough and pastries."). **NEVER include the site or business name** — a name in the prompt is what painted-in fake wordmarks stand in for.
- `imageGrade`: ONE site-wide photographic treatment (e.g. "warm natural window light, soft muted color, gentle film grain"), derived from the visual direction. Use the identical grade in every call for the site so all imagery reads as one photographic series.

## Images for design options

The look is picked on one image and the layout on a set, both from the `site-spec` skill's design steps:

- **The look image**: before the look options, one `generate_images` call with a single image, the site's first-screen scene in `landscape`, at `<site>/wp-content/uploads/<scene>.png`, with the call-wide `imageGrade` left out and a neutral, versatile grade in `pageContext` ("natural light, true color, moderate contrast"). Pass the path it reports as each look's `image`. Every look's board shows this same photo under that look's `imagery` treatment from its `DESIGN.md` draft, so the user compares looks rather than photo content. A direction that rejects photography (its Imagery line says none, or type-only) passes no image: its board shows a pattern.
- **The site's set**: once `DESIGN.md` is written, one `generate_images` call with 3–4 images in the picked look, with its Imagery section as the call-wide `imageGrade` and its `style` if it is not photographic: the first-screen scene again plus distinct supporting subjects (a detail, a place or a person, a product), each in the aspect ratio of the slot it is most likely to fill, at `<site>/wp-content/uploads/<name>.png`. The set is content imagery: the layout sneak peeks use the paths it reports, and the build starts from its attachment IDs and URLs. When a template or template part needs one of its images, copy that file into the theme's `assets/images` and reference the copy. Generate more only for slots the set cannot fill, with the same `imageGrade`. The look image is in the media library too, for a look its treatment reproduced.
- **A failed or unavailable image** is not a blocker: the board shows a pattern, and a sneak-peek slot a solid color shape.

## Without generate_images

When `generate_images` is not available but you have an image tool of your own (such as `image_gen`), make the same images with it, including the look image and the site's set below: plan them exactly as above, and write what you would pass as `siteContext`, `pageContext`, `style` and `imageGrade` into each image's prompt, with no text in the image. Then put each file where its destination says:

- **Content imagery**: copy the files into the site's `tmp/` folder and import them in one `wp_cli` call, `media import tmp/<a>.png tmp/<b>.png --porcelain`, which prints their attachment IDs in order; `post list --post_type=attachment --post__in=<ids> --fields=ID,guid` gives their URLs.
- **Theme imagery**: copy the file to its path in the theme's `assets/images`.

For the look image, pass the file where your tool saved it as each look's `image`; import it only if the site uses it.

## No decorative or transparent images

Generated imagery is for CONTENT — covers, feature/gallery/card images, photographic bands. Never generate decorative assets: no ornaments, flourishes, crests, stamps, icons, or logo marks. They come out off-palette and geometrically wobbly, and small raster icons turn to mush. Decoration comes from theme primitives (separators, borders, spacing, type); feature icons: use none — let type and layout carry the hierarchy.

## Cover blocks

For `wp:cover` backgrounds, set the same image URL on BOTH the block's `url` attribute and the inner `<img>` src. Wide cover images (`landscape`/`ultrawide`) are generated at 2K automatically.

## Failure handling

- **Safety-filtered image**: rewrite that image's subject to avoid the flagged element and call `generate_images` again for just that image. One retry; if it fails again, treat as a permanent failure.
- **Permanent failure**: adapt the layout to work without that image (a color/gradient background, a text-led card). NEVER substitute an unrelated image, source an image from a web URL, or leave a reference to a file that does not exist.
- Failures arrive after the call returns, with a later tool result; `take_screenshot`, `inspect_design`, and `present_design_options` wait for the images.

From automattic/studio at 870948c, shown as plain text under its license: LGPL-2.1 (copyleft). The license text is in apps/cli/LICENSE.md.

View SKILL.md on GitHub at 870948c

Files

1 file, 11 KB in total. Each file has a sha256 in the pin's manifest; the first 12 characters are shown.

Skill folder on GitHub at 870948c
All 31 skills from Automattic

More from Automattic

  • annotate

    This skill opens a browser with annotation tools that let users click page elements and leave feedback, then the agent reads those annotations and applies the…

    Claude Code, Codex, Cursor +3 · about 1K tokens · pinned 6 days ago

  • block-content

    This skill instructs agents to write editable WordPress block markup for block themes, enforcing use of core blocks over HTML, managing layout cascades, and…

    Claude Code, Codex, Cursor +3 · about 4.4K tokens · pinned 6 days ago

  • hosting-plans-helper

    This skill fetches current WordPress.com plan names, pricing, and feature details from live APIs, then answers questions about which plan tier includes…

    Claude Code, Codex, Cursor +3 · about 840 tokens · pinned 6 days ago

  • liberate

    This skill helps agents migrate websites into WordPress by copying the site from a URL or local files using the Studio CLI, then comparing the imported…

    Claude Code, Codex, Cursor +4 · about 830 tokens · pinned 6 days ago

  • need-for-speed

    Measures Core Web Vitals and page composition metrics for WordPress sites using synthetic testing, then suggests targeted optimization actions based on…

    Claude Code, Codex, Cursor +3 · about 650 tokens · pinned 6 days ago

  • plugin-recommendations

    This skill guides the agent to recommend and install WordPress plugins for features that core blocks don't provide, including WooCommerce for ecommerce…

    Claude Code, Codex, Cursor +3 · about 4.6K tokens · pinned 6 days ago

  • all-images-ai-automation

    This skill automates All Images AI operations by discovering and executing tools through Composio's All Images AI toolkit via Rube MCP.

    by ComposioOfficial publisher

    Agents not labelled yet · about 710 tokens · pinned 6 days ago

  • remotion-best-practices

    This skill routes the agent through Remotion's specialized knowledge bases for video creation, editing, and deployment.

    by RemotionOfficial publisher

    Contains scripts

    Claude Code, Codex, Cursor +3 · about 920 tokens · pinned 6 days ago

  • remotion-best-practices

    This skill routes the agent to specialized Remotion sub-skills based on the user's task, covering video creation, project setup, React markup, maps…

    by RemotionOfficial publisher

    Claude Code, Codex, Cursor +3 · about 1K tokens · pinned 6 days ago

  • remotion-captions

    This skill enables video caption workflows including transcribing audio to generate captions, displaying captions in videos, and importing captions from SRT…

    by RemotionOfficial publisher

    Claude Code, Codex, Cursor +3 · about 220 tokens · pinned 6 days ago

  • remotion-captions

    This skill enables the agent to work with captions in Remotion videos by transcribing audio to generate captions, displaying them in videos, and importing…

    by RemotionOfficial publisher

    Claude Code, Codex, Cursor +3 · about 270 tokens · pinned 6 days ago

  • remotion-create

    This skill scaffolds a new Remotion video project, opens the browser-based Studio for live preview, and guides composition development using React markup.

    by RemotionOfficial publisher

    Claude Code, Codex, Cursor +3 · about 680 tokens · pinned 6 days ago

The skills listed here are third-party software, collected from public GitHub repositories as a catalog of recent skills and provided as is. Agent Native does not write or control them and is not responsible for any harm, loss or damage caused by installing or using them. Labels and checks describe what we saw at one commit and are not a guarantee. Read a skill's files before you run it. Terms of use