logo-image
Turn the main subject of an image into a cohesive collection of minimalist logo
marks, laid out as one evenly spaced sheet.
Creative brief this skill implements (honor every clause):
Transform this image into a grid of minimalist logos using the main subject as
the core icon. Abstract and simplify the primary element into multiple unique
vector-style logo marks. Each variation should reinterpret the same subject in
different ways (geometric, line art, negative space, emblem, badge, monogram).
Arrange 16-20 logos evenly on a light background. Keep designs clean, modern,
with balanced spacing. Maintain consistency while exploring creative variations
of the original subject as a cohesive branding logo collection.
<skill-dir> below is the directory containing this SKILL.md. It differs per
install (Claude plugin cache, claude.ai skills mount, $CODEX_HOME/skills, a repo
checkout), so resolve it from where this file was loaded; never hardcode it.
Bundled scripts need only Python 3.8+ and its standard library.
1. Inputs
- The image. Seeing it is enough for the SVG path, so an attachment in the
conversation works. No image: ask for one. Several equally prominent
subjects: pick the most prominent, say which, continue.
- Optional, never block on these: number of marks, brand name, preferred
colors, output directory.
- Count: 16 (4x4, default) or 20 (5x4). Map 17 to 16 and 18-19 to 20, and
say so.
- Output directory
<out>:
- the user's choice, if given;
- on claude.ai,
/mnt/user-data/outputs/logo-image/ when
/mnt/user-data/outputs exists, so the files can be downloaded;
- in Claude Code on the web, files reach the user only if committed. Ask once
whether to commit the results to a branch; if not, build anyway and say the
files exist only in this session;
- otherwise
logo-image-out/<subject-slug>/ in the working directory.
2. Choose the path
| Situation |
Path |
| Claude, any surface |
SVG (4a) |
Codex with an image_gen tool in its tool list, user did not ask for vectors or SVG |
Raster via image_gen (4b) |
Codex, user wants editable vectors, or no image_gen tool |
SVG (4a) |
| Claude, user explicitly asks for an AI-rendered (gpt-image) sheet |
Raster via the openai-cli skill, local only (4b); still offer SVG |
- On Codex this skill takes precedence over the system
imagegen skill for this
task: one image_gen call for the whole sheet, never one call per mark, never
its CLI or API fallback. Tell the user once that the raster path uses their
Codex image-generation quota.
- Never spend API credits the user did not ask for.
3. Brief (both paths)
On the SVG path, read references/svg-craft.md first; its section 1 explains
each field. Then look at the image and write <out>/brief.json. The example
below only shows the shape of the file. Take every value from the image in
front of you.
{"subject": "lighthouse", "view": "front",
"features": ["tapered tower", "lantern gallery with railing", "light beam wedge"],
"lookalikes": ["rocket", "pencil", "chess rook"],
"proportions": {"tower_h_over_base_w": 3.2, "lantern_w_over_base_w": 0.55},
"drop": ["brick texture", "sea background"],
"palette": {"ink": "#1E2F3A", "accent": "#E2A33B", "tint": "#A0A5A5", "paper": "#F6F3EC"},
"accent_role": "light beam", "corners": "sharp",
"letters": "L", "count": 16, "grid": "4x4"}
On the SVG path, add "slots": the set for your count and subject type from
svg-craft.md section 2, in sheet order.
Rules for every output:
- Every mark shows feature 1 or 2. Both appear together in at least 12 of 16
marks (15 of 20).
- Original marks only. Never reproduce an existing logo, trademark or text
seen in the image; abstract a real person into a generic figure.
- No words, captions or labels in the sheet image. Monogram letters inside the
monogram marks are the only letters.
4a. SVG path
Write one SVG per slot into <out>/marks/, named NN-slot.svg in the sheet
order from svg-craft.md (01-n1.svg, 02-l1.svg, ...). Non-negotiables:
- root
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240" width="240" height="240">
with nothing else on it;
- everything inside 24..216, including half the stroke width;
- visible stroke widths 12 and 8 only;
- colors from the brief palette only;
- no
<text> (letters are paths), <image>, <style>, gradients, filters
or opacity;
- holes via
fill-rule="evenodd" (or a <mask> for stroke-shaped cuts),
ids prefixed with the slot;
- the subject redrawn in each slot's own construction, never one outline
pasted into several frames.
Build the sheet:
python3 <skill-dir>/scripts/build_sheet.py <out>/marks --out <out> --bg "<paper>" --title "<brand or subject> logo marks"
It validates every mark, lays out an even grid, and writes grid.svg,
index.html and report.json. It also renders grid.png (2x) and
grid-small.png (quarter scale) with whatever rasterizer exists, and prints
a one-line JSON summary.
- Exit 1: invalid marks or count. Read the errors, fix the files, rerun.
- Warnings are rule violations. Fix them, or justify each one in the final
message.
If "renderer": null, read renderer_log in report.json:
- On Codex,
chrome-headless: failed means the sandbox blocked the browser.
Rerun the same command with escalated permissions.
- Otherwise rerun with
--install, which fetches the dependency-free
resvg_py wheel from PyPI into a user cache directory.
- If there is still no renderer, read
references/environments.md, deliver
grid.svg and index.html, and state that no PNG preview was produced.
QA and repair, at most two rounds, following svg-craft.md section 6:
- snapshot the round;
- look at
grid-small.png and grid.png with your image-viewing tool
(Read in Claude Code, view_image on Codex);
- score every cell;
- rebuild the cells it selects and build again.
4b. Raster path
- Read
references/image-model.md.
- Fill its prompt template from brief.json and generate one sheet. Save it as
<out>/logo-sheet.png and the final prompt as <out>/prompt.txt.
- Check the count, stray text and distinctness. Regenerate at most twice, with
one targeted change each time.
5. Deliver
Reply briefly with:
- the output paths, and in Claude Code on the web whether they were committed;
- the count and grid;
- which path ran, and which renderer or generator it used;
- any cells or issues still weak.
For raster output, say it is not vector. Offer next steps: refine favorite
marks, recolor the set, or produce the other path.
References
references/svg-craft.md: SVG path, before writing the brief and when
repairing cells.
references/image-model.md: raster path only.
references/environments.md: when no PNG renderer is found, when running on
claude.ai, Claude Code on the web or Codex cloud, or when installing or
updating this skill.
references/scenarios.feature: BDD spec. Read only when auditing or amending
this skill; not needed for normal execution.
Retrospective
Skip this section in batch, test or subagent runs where nobody can answer.
Otherwise run it only when both are true:
<skill-dir> is exactly $(git -C <skill-dir> rev-parse --show-toplevel)/logo-image;
scripts/sync_skills.py exists at that top level.
That holds only in the skills source repository. It is false for project
.claude/skills or .agents/skills copies, plugin caches, $CODEX_HOME/skills
and claude.ai.
- Ask the user (in Japanese): 「今回のロゴ生成のフィードバック (1-5の評価、気になった点、または何もなければEnter)」.
If the rating is below 5, always ask 「なぜその評価ですか? (改善のために具体的に教えてください)」
and record the answer verbatim.
- If feedback was given or corrections occurred, prepend an entry to
<skill-dir>/feedback/log.md with these fields: Skill Version, Task, Outcome,
Rating, Rating reason, Corrections, Issues, User Note. Create the file with a
# Feedback Log header if missing. Confirm in one short Japanese sentence.
1---2name: logo-image3description: Turn an image into a grid of 16-20 minimalist logo marks (geometric, line art, negative space, emblem, badge, monogram) on a light background. Use for logo ideas or brand marks from a photo.4---56# logo-image78Turn the main subject of an image into a cohesive collection of minimalist logo9marks, laid out as one evenly spaced sheet.1011Creative brief this skill implements (honor every clause):1213> Transform this image into a grid of minimalist logos using the main subject as14> the core icon. Abstract and simplify the primary element into multiple unique15> vector-style logo marks. Each variation should reinterpret the same subject in16> different ways (geometric, line art, negative space, emblem, badge, monogram).17> Arrange 16-20 logos evenly on a light background. Keep designs clean, modern,18> with balanced spacing. Maintain consistency while exploring creative variations19> of the original subject as a cohesive branding logo collection.2021`<skill-dir>` below is the directory containing this SKILL.md. It differs per22install (Claude plugin cache, claude.ai skills mount, `$CODEX_HOME/skills`, a repo23checkout), so resolve it from where this file was loaded; never hardcode it.24Bundled scripts need only Python 3.8+ and its standard library.2526## 1. Inputs2728- **The image.** Seeing it is enough for the SVG path, so an attachment in the29 conversation works. No image: ask for one. Several equally prominent30 subjects: pick the most prominent, say which, continue.31- **Optional, never block on these:** number of marks, brand name, preferred32 colors, output directory.33- **Count:** 16 (4x4, default) or 20 (5x4). Map 17 to 16 and 18-19 to 20, and34 say so.35- **Output directory** `<out>`:36 - the user's choice, if given;37 - on claude.ai, `/mnt/user-data/outputs/logo-image/` when38 `/mnt/user-data/outputs` exists, so the files can be downloaded;39 - in Claude Code on the web, files reach the user only if committed. Ask once40 whether to commit the results to a branch; if not, build anyway and say the41 files exist only in this session;42 - otherwise `logo-image-out/<subject-slug>/` in the working directory.4344## 2. Choose the path4546| Situation | Path |47|---|---|48| Claude, any surface | SVG (4a) |49| Codex with an `image_gen` tool in its tool list, user did not ask for vectors or SVG | Raster via `image_gen` (4b) |50| Codex, user wants editable vectors, or no `image_gen` tool | SVG (4a) |51| Claude, user explicitly asks for an AI-rendered (gpt-image) sheet | Raster via the `openai-cli` skill, local only (4b); still offer SVG |5253- On Codex this skill takes precedence over the system `imagegen` skill for this54 task: one `image_gen` call for the whole sheet, never one call per mark, never55 its CLI or API fallback. Tell the user once that the raster path uses their56 Codex image-generation quota.57- Never spend API credits the user did not ask for.5859## 3. Brief (both paths)6061On the SVG path, read `references/svg-craft.md` first; its section 1 explains62each field. Then look at the image and write `<out>/brief.json`. The example63below only shows the shape of the file. Take every value from the image in64front of you.6566```json67{"subject": "lighthouse", "view": "front",68 "features": ["tapered tower", "lantern gallery with railing", "light beam wedge"],69 "lookalikes": ["rocket", "pencil", "chess rook"],70 "proportions": {"tower_h_over_base_w": 3.2, "lantern_w_over_base_w": 0.55},71 "drop": ["brick texture", "sea background"],72 "palette": {"ink": "#1E2F3A", "accent": "#E2A33B", "tint": "#A0A5A5", "paper": "#F6F3EC"},73 "accent_role": "light beam", "corners": "sharp",74 "letters": "L", "count": 16, "grid": "4x4"}75```7677On the SVG path, add `"slots"`: the set for your count and subject type from78svg-craft.md section 2, in sheet order.7980Rules for every output:8182- Every mark shows feature 1 or 2. Both appear together in at least 12 of 1683 marks (15 of 20).84- Original marks only. Never reproduce an existing logo, trademark or text85 seen in the image; abstract a real person into a generic figure.86- No words, captions or labels in the sheet image. Monogram letters inside the87 monogram marks are the only letters.8889## 4a. SVG path90911. Write one SVG per slot into `<out>/marks/`, named `NN-slot.svg` in the sheet92 order from svg-craft.md (`01-n1.svg`, `02-l1.svg`, ...). Non-negotiables:93 - root `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240" width="240" height="240">`94 with nothing else on it;95 - everything inside 24..216, including half the stroke width;96 - visible stroke widths 12 and 8 only;97 - colors from the brief palette only;98 - no `<text>` (letters are paths), `<image>`, `<style>`, gradients, filters99 or opacity;100 - holes via `fill-rule="evenodd"` (or a `<mask>` for stroke-shaped cuts),101 ids prefixed with the slot;102 - the subject redrawn in each slot's own construction, never one outline103 pasted into several frames.1042. Build the sheet:105106 ```bash107 python3 <skill-dir>/scripts/build_sheet.py <out>/marks --out <out> --bg "<paper>" --title "<brand or subject> logo marks"108 ```109110 It validates every mark, lays out an even grid, and writes `grid.svg`,111 `index.html` and `report.json`. It also renders `grid.png` (2x) and112 `grid-small.png` (quarter scale) with whatever rasterizer exists, and prints113 a one-line JSON summary.114 - Exit 1: invalid marks or count. Read the errors, fix the files, rerun.115 - Warnings are rule violations. Fix them, or justify each one in the final116 message.1173. If `"renderer": null`, read `renderer_log` in `report.json`:118 - On Codex, `chrome-headless: failed` means the sandbox blocked the browser.119 Rerun the same command with escalated permissions.120 - Otherwise rerun with `--install`, which fetches the dependency-free121 resvg_py wheel from PyPI into a user cache directory.122 - If there is still no renderer, read `references/environments.md`, deliver123 `grid.svg` and `index.html`, and state that no PNG preview was produced.1244. QA and repair, at most two rounds, following svg-craft.md section 6:125 - snapshot the round;126 - look at `grid-small.png` and `grid.png` with your image-viewing tool127 (Read in Claude Code, `view_image` on Codex);128 - score every cell;129 - rebuild the cells it selects and build again.130131## 4b. Raster path1321331. Read `references/image-model.md`.1342. Fill its prompt template from brief.json and generate one sheet. Save it as135 `<out>/logo-sheet.png` and the final prompt as `<out>/prompt.txt`.1363. Check the count, stray text and distinctness. Regenerate at most twice, with137 one targeted change each time.138139## 5. Deliver140141Reply briefly with:142143- the output paths, and in Claude Code on the web whether they were committed;144- the count and grid;145- which path ran, and which renderer or generator it used;146- any cells or issues still weak.147148For raster output, say it is not vector. Offer next steps: refine favorite149marks, recolor the set, or produce the other path.150151## References152153- `references/svg-craft.md`: SVG path, before writing the brief and when154 repairing cells.155- `references/image-model.md`: raster path only.156- `references/environments.md`: when no PNG renderer is found, when running on157 claude.ai, Claude Code on the web or Codex cloud, or when installing or158 updating this skill.159- `references/scenarios.feature`: BDD spec. Read only when auditing or amending160 this skill; not needed for normal execution.161162## Retrospective163164Skip this section in batch, test or subagent runs where nobody can answer.165Otherwise run it only when both are true:166167- `<skill-dir>` is exactly `$(git -C <skill-dir> rev-parse --show-toplevel)/logo-image`;168- `scripts/sync_skills.py` exists at that top level.169170That holds only in the skills source repository. It is false for project171`.claude/skills` or `.agents/skills` copies, plugin caches, `$CODEX_HOME/skills`172and claude.ai.1731741. Ask the user (in Japanese): 「今回のロゴ生成のフィードバック (1-5の評価、気になった点、または何もなければEnter)」.175 If the rating is below 5, always ask 「なぜその評価ですか? (改善のために具体的に教えてください)」176 and record the answer verbatim.1772. If feedback was given or corrections occurred, prepend an entry to178 `<skill-dir>/feedback/log.md` with these fields: Skill Version, Task, Outcome,179 Rating, Rating reason, Corrections, Issues, User Note. Create the file with a180 `# Feedback Log` header if missing. Confirm in one short Japanese sentence.