plugins/prompt-to-asset/skills/svg-authoring/SKILL.md
Author production-grade inline SVG (logos, favicons, icon packs, stickers, transparent marks) when the P2A `inline_svg` execution mode is selected. Enforces viewBox, path-budget, palette, optical balance, and small-scale legibility rules so the emitted `<svg>` survives `asset_save_inline_svg` validation and renders crisp from 16×16 through 1024×1024.
npx skillsauth add MohamedAbdallah-14/prompt-to-asset svg-authoringInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Engaged when asset_generate_* returns an InlineSvgPlan. Read svg_brief (viewBox, palette, path_budget, require[], do_not[], skeleton) and emit one <svg>…</svg> code block that honors every constraint. Then call asset_save_inline_svg({ svg, asset_type }) so the file lands on disk.
| Asset type | viewBox | Path budget | Colors | Safe-zone | Notes |
|---|---|---|---|---|---|
| logo | 0 0 120 120 (or brief-specified) | ≤40 | 2–4 hex | subject fits inside 80% center box | Flat, geometric, closed shapes |
| favicon (master SVG) | 0 0 64 64 | ≤30 | 2–3 hex | legible at 16×16 after downsampling | ≥2px stroke equivalent at 16² |
| icon_pack (per icon) | 0 0 24 24 | ≤8 | monocolor (currentColor) OR 2 tones | 2px grid, 1.5–2px strokes | All icons share grid + stroke weight |
| sticker | 0 0 240 240 | ≤60 | up to 6 hex | bleed allowed; no hard edge requirement | Chunkier line weights OK |
| transparent_mark | 0 0 200 200 | ≤40 | 2–3 hex | 80% center | Never emit <rect fill="white"> as "background" |
| app_icon master | 0 0 1024 1024 | ≤60 | 3–5 hex | iOS HIG 824² center | Opaque bg allowed; no alpha needed on this one |
Never emit: <image> tags, external refs, <script>, inline Base64, fonts with unverified family names, CSS animations in a favicon master, gradients in an icon-pack icon.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="round" stroke-linejoin="round">
<!-- primitives beat paths for circles/rects -->
<circle cx="60" cy="60" r="40" />
<rect x="30" y="30" width="60" height="60" rx="8" />
<!-- paths: M (moveto), L (lineto), C (cubic), Z (close) -->
<path d="M40 80 L60 40 L80 80 Z" fill="#0A1F44" />
<!-- groups scope styles; use currentColor for theming -->
<g fill="#FF6B6B"><path d="…"/><path d="…"/></g>
</svg>
Rules: always close shapes with Z; round coordinates to 2 decimals; prefer primitives (<circle>, <rect>) over equivalent <path>; use <g> to deduplicate fill/stroke.
Flat-geometric — primitives + straight paths, fills only, 2–3 hex. Default for logos/favicons.
Outlined (stroke-only) — fill="none", uniform stroke-width, round caps/joins. Default for icon packs (Lucide/Heroicons pattern).
Filled (solid) — single-color fills, currentColor for theming. Compact file size.
Duotone — two layered <g> groups, contrasting hex codes. Good for logos with depth.
Minimal/brutalist — 1–3 shapes, monocolor, asymmetric composition. Highest failure rate if executed carelessly.
Gradient — <linearGradient> or <radialGradient> in <defs>. Avoid in favicons (collapses at 16²).
Before emitting, picture the mark at 16×16:
2 × 16/120 = 0.27px at 16×16. Too thin. Use 6–8px at viewBox 120 for favicons.)Default: no text. Composite brand typography in the application layer using real fonts.
If the brief requires <text>:
font-family="ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif" — never a single exotic font.svg_brief.palette. Use it strictly. No new hex codes.currentColor for icon-pack icons so consumers can theme via CSS.asset_save_inline_svg).| Mistake | Symptom | Fix |
|---|---|---|
| Coordinates > viewBox | Subject clipped / off-canvas | Keep all coordinates within [0, viewBox_size] |
| Open paths (missing Z) | Fill leaks, unpredictable stroke | Always Z before starting new subpath |
| Sub-pixel coordinates (e.g. 60.000001) | Blurry rasterization | Round to 2 decimals |
| Stroke sized for 1024 canvas in a favicon viewBox | Invisible at 16² | Size strokes as ratio of viewBox |
| Over-detail / literal interpretation | Cannot read at small scale | Reduce to silhouette; cut paths |
| Mixed stroke/fill conventions | Inconsistent icons in a pack | Pick one and declare at <svg> root |
| Gradient in favicon | Muddy at 16² | Flat fills only below 64×64 viewBox |
| Drop shadows / filters | Broken in most renderers | Do not use <filter> in brand assets |
The asset_save_inline_svg tool validates your SVG against the brief. If it returns an error:
viewBox mismatch — you used a different viewBox than the brief specifiedpath count > budget — reduce via primitives, merging, or deletion of decorative pathsunknown palette color — swap rogue hex for nearest palette entryexternal reference — remove <image href>, <use href>, etc.Regenerate the SVG with the correction; call asset_save_inline_svg again. Max 2 retries, then report back to user.
docs/research/12-vector-svg-generation/12d-llm-direct-svg-code-generation.md — LLM-author SVG patterns, StarVector, path budgetsdocs/research/12-vector-svg-generation/12e-hybrid-vector-pipeline-architectures.md — fallback paths when inline failsdocs/research/24-skills-for-p2a/02-svg-authoring-skill-design.md — full spec (this file is the shipping distillation)testing
Translate a UI brief (a page, a screen, a single component, a feature) into a paste-ready prompt for Nano Banana Pro / gpt-image-2 / Ideogram / Flux 2 / Midjourney that produces a designer-grade mockup as visual inspiration — not pixel-spec UI, not AI slop. Use whenever the user asks for "imagine the X page", "mock up the Y screen", "give me a prompt for nano banana / gpt image 2 to design", "describe this UI for an image model", "draft a prompt for the designer to take inspiration from", or any time the agent needs to produce a UI image-gen prompt for a real product surface (pricing page, dashboard, settings, onboarding, mobile screen, marketing hero, single component). Be pushy — trigger even when the user says "design" without "prompt", or "show me what X could look like" — the agent should reach for this skill before hand-rolling a brief.
testing
Translate a UI brief (a page, a screen, a single component, a feature) into a paste-ready prompt for Nano Banana Pro / gpt-image-2 / Ideogram / Flux 2 / Midjourney that produces a designer-grade mockup as visual inspiration — not pixel-spec UI, not AI slop. Use whenever the user asks for "imagine the X page", "mock up the Y screen", "give me a prompt for nano banana / gpt image 2 to design", "describe this UI for an image model", "draft a prompt for the designer to take inspiration from", or any time the agent needs to produce a UI image-gen prompt for a real product surface (pricing page, dashboard, settings, onboarding, mobile screen, marketing hero, single component). Be pushy — trigger even when the user says "design" without "prompt", or "show me what X could look like" — the agent should reach for this skill before hand-rolling a brief.
development
Rewrite an asset brief into the exact prompt dialect of the target image model (OpenAI gpt-image-1, Google Imagen/Gemini, SDXL, Flux.1/Flux.2, Midjourney, Ideogram, Recraft). Handles negative-prompt translation, token budgets, transparency quirks, brand-palette injection, and text-in-image ceilings so that `asset_generate_*` submissions succeed on the first try.
development
Generate a production-grade logo (primary brand mark). Returns RGBA PNG master + SVG vector + monochrome variant. Route by text-length and per-model ceiling. Strong-text models render multi-word and even paragraph-length wordmarks reliably; weak-text models composite SVG type post-render.