graphic

Create small SVG icons and favicons through an allowlist-secured, human-gated pipeline.

Updated Sep 10, 2026
One-click install
npx skills add https://github.com/sergeiwallace/skills --skill graphic-sergeiwallace
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: graphic
Source: https://github.com/sergeiwallace/skills/tree/main/skills/graphic
Command: npx skills add https://github.com/sergeiwallace/skills --skill graphic-sergeiwallace

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires @resvg/resvg-js, and includes scripts (resource) components.

What problem does it solve? Hand-authoring SVG icons ad hoc is error-prone and risky: SVG is executable XML in a browser context, and unreviewed assets can carry scripts or external references. This Skill provides a deterministic, security-reviewed pipeline for producing small graphic assets (icons, favicons, simple marks) that are sanitized, rendered for visual inspection, and only applied after explicit human approval. ## Core Features & Use Cases - Reuse-or-constrained-primitive routing: Reuses an existing repo icon when one fits, or hand-authors a small reviewable SVG from basic shapes; text content uses real <text> elements with a fixed safe font list. - Mandatory SVG allowlist and SVGO normalization: Every candidate passes scripts/svg_allowlist.py, which rejects <script>, <foreignObject>, <image>, external hrefs, and non-allowlisted attributes outright rather than stripping them. - Multi-size contact-sheet rendering: Renders each candidate at 16/32/48/128px on light and dark backgrounds via @resvg/resvg-js, with a manifest, so legibility at small sizes is verified before selection. - Hard human gate and provenance receipt: Never auto-applies a candidate; a human picks one, then the asset is packaged as a favicon and a provenance entry is logged. - Use Case: You need a 32px monochrome favicon for an open-source project. The Skill inspects existing assets, authors a constrained SVG, sanitizes and renders it at all favicon sizes, and waits for your pick before wiring a <link rel="icon"> tag. ## Quick Start Ask the agent to run the graphic skill to create a 32px monochrome favicon for your project and review the rendered contact sheet before choosing one.

Frequently Asked Questions about graphic

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a favicon with an AI agent safely?

Run the graphic skill with a brief describing subject, sizes, and palette. It authors or reuses a constrained SVG, sanitizes it through an allowlist, renders it at 16/32/48/128px on light and dark backgrounds, and waits for your explicit pick before packaging it with a link rel="icon" tag.

How to sanitize SVG files before using them in a web app?

Pass the SVG through scripts/svg_allowlist.py, which rejects any file containing script, foreignObject, image, style elements, external hrefs, or non-allowlisted attributes. Rejected files must be regenerated from a clean source rather than stripped, then normalized with SVGO.

Can this skill generate raster images or trace bitmaps?

No. Phase one deliberately excludes novel vector generation, raster tracing, and raster generation. Requests needing those are declared out of scope, and you should use an image-generation tool available in your environment instead.

What dependencies does the SVG contact sheet renderer need?

The allowlist script uses only the Python 3 standard library. The renderer requires the @resvg/resvg-js npm package (version 2.6.2, MPL-2.0 licensed), installed once by running npm install inside the scripts directory.

Why does the skill reject SVG instead of stripping unsafe elements?

A best-effort strip can miss parser-level evasions, so the allowlist fails closed: any violation rejects the candidate outright. The SVG must be regenerated from a fresh, reviewable source rather than cleaned after the fact.

Can I include text or a wordmark inside an SVG icon?

Yes, but only via a real text or tspan element with font-family restricted to a fixed list of widely available system font stacks. Hand-drawing letterforms as bezier paths is disallowed because it is illegible and hard to review.