Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add khasky/awesome-agent-skills --skill awesome-content-graphicsgit clone --depth 1 https://github.com/khasky/awesome-agent-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/khasky/awesome-agent-skills/awesome-content-graphics)<a href="https://agentmods.dev/skills/khasky/awesome-agent-skills/awesome-content-graphics"><img src="https://agentmods.dev/badge/skills/khasky/awesome-agent-skills/awesome-content-graphics/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/khasky/awesome-agent-skills/awesome-content-graphics"><img src="https://agentmods.dev/badge/skills/khasky/awesome-agent-skills/awesome-content-graphics.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium Excessive Agency · line 91 Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.Fix: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00222 | $0.17625 |
| Opus 5 | $0.00111 | $0.08812 |
| Sonnet 5 | $0.00044 | $0.03525 |
| Haiku 4.5 | $0.00022 | $0.01762 |
Grade A, and why
awesome-content-graphics scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 467 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Content Graphics
The image a post ships with, made on the machine that is already running. A self-contained HTML file styled with CSS, screenshotted through browser automation, and nothing else: no image-generation service, no API key, no upload of the user's content anywhere.
This is one stage lifted out of the content pipeline so every skill that needs a picture calls it instead of carrying its own copy of the rules. awesome-content-campaign calls it when the media library cannot cover a media-required post; awesome-content-repurpose calls it when the run has no image; a user calls it directly when they want a graphic and no campaign around it.
Core principle: the run produces a set, and every choice inside it belongs to the user. The headline is chosen as text before anything is drawn. What happens to the renders afterwards depends on who called: a post needs one of them picked, a person asked for graphics needs all of them delivered. A skill that renders one graphic and decides it is the answer has taken two decisions it was not given, and correcting either costs a whole round trip.
Second principle: the facts are the boundary. The composition may not assert a relationship the caller's sources do not carry. An image is a claim surface like any other sentence, and a wordless claim is still read as evidence.
Third principle: a set is a spread of combinations inside one family. Twenty variations on one composition are one variant rendered twenty times, and a gallery of them gives the user nothing to decide. The family is four type-led kinds — a bare statement, a canvas with one tinted glyph, a number lockup at display scale, a data figure carrying its real values — and the spread comes from moving the palette, the background recipe, the figure, the face, the type effect and the anchor underneath them, counted by the signature rule in references/style-catalog.md. The kinds have shares: bare statements are capped at 15 percent of a set and data figures never fall under a third. The dense end of the old catalog (drawn code windows, spec tables, section posters, cut-paper headlines) is out, and it is not re-derived per run.
Bundled files (load on demand):
references/style-catalog.md— read first. The four kinds a set is built from and the share each takes, the five axes underneath them (density, palette and background, typography, subject, atmosphere), the palette rule that gives each variant its own harmonised scheme, the glyph-tinting rule, the typesetting rules, the scale gate and the fill gate that keep a canvas from reading as decoration or as a placeholder, the archetypes that were removed and the shelf that is only built on request, the combination rule that spreads a set, the device library, and what is not renderable offline.references/palettes.json— a pool of 43 schemes (27 dark, 16 light) already proved against the colour rule: accent and muted neutral at 3:1 or better on their ground, foreground at 4.5:1, accent and muted separable under protan and tritan simulation. A no-reference set draws its schemes from here and validates nothing per run;scripts/palettes.mjs --checkproves a brand colour or a reference palette the same way, and--generaterebuilds the pool.scripts/build-set.mjs(Node 18+, no dependencies) — turnsset.json, one row per variant, into the self-containedsrc/<id>.htmlpages through the templates inscripts/templates/: the four kinds, three data-figure patterns, the ground recipes, the type effects, the anchors, fonts and icons inlined from the asset cache. A variant is a row, not a page written by hand.scripts/render-set.mjs(Node 22+, no npm dependencies; needs any Chromium-family browser on the machine, found throughscripts/cdp.mjs) — one browser for the whole set: the geometry gate on every page, a screenshot for every page that passes, the set-level duplicate sweep (layout skeleton and perceptual distance), the kind and icon quotas, the contact sheets and the gallery, andreport.jsonwith every number. Exit 0 or one line per finding.scripts/fetch-assets.mjs— the free-licence faces (Google Fonts, per weight, latin subset) and the drawn icons (Lucide) into a cache shared across runs, with their licences recorded beside them. A second run costs nothing.references/visual-language.md— the nine data-figure patterns every composition is built from, the geometry check that measures the hard rules on every page before its screenshot, the craft that keeps a set from looking like one image recoloured, and the rendering mechanics every canvas shares. Read it before writing the first line of markup, not after the first contact sheet comes back grey.
What ships with it
15 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- references/palettes.json 9.2 KB
- references/style-catalog.md 37 KB
- references/visual-language.md 23 KB
- scripts/build-set.mjs 13 KB runs code
- scripts/cdp.mjs 6.3 KB runs code
- scripts/fetch-assets.mjs 4.4 KB runs code
- scripts/palettes.mjs 6.4 KB runs code
- scripts/render-set.mjs 15 KB runs code
- scripts/templates/_base.html 1.3 KB
- scripts/templates/figure-arc.html 1.1 KB
- scripts/templates/figure-mass.html 1.1 KB
- scripts/templates/figure-threshold.html 1.1 KB
- scripts/templates/glyph.html 324 B
- scripts/templates/lockup.html 444 B
- scripts/templates/statement.html 241 B
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- today Changed · +22 lines 659fd42fbe71
- 3d ago Changed · +123 lines · +21 tokens per session d191b5d8a134
- 4d ago Changed · +18 lines 04d60e417ade
- 6d ago Changed · -56 tokens per session a71eba070de2
- 7d ago First seen · 304 lines · 257 tokens per session scan A 9aa47aa547ec
awesome-content-graphics is a skill published in the GitHub repository khasky/awesome-agent-skills (8 stars, last pushed today), licensed MIT. It adds 222 tokens to every session and 17,625 once invoked, about $0.0011 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-04.
Other skills, from other repositories
9router-video
Generate videos via 9Router /v1/videos/generations using xAI Grok Imagine (grok-imagine-video). Async job flow - submit, poll requestid until done, download MP4. Use when the user wants to create, generate, or render a video, text-to-video (txt2vid), or image-to-video.
9router-image
Generate images via 9Router /v1/images/generations using OpenAI / Gemini Imagen / DALL-E / FLUX / MiniMax / SDWebUI / ComfyUI / Codex models. Use when the user wants to create, generate, draw, or render an image, picture, or text-to-image (txt2img).
9router-tts
Text-to-speech via 9Router /v1/audio/speech using OpenAI / ElevenLabs / Deepgram / Edge TTS / Google TTS / Hyperbolic / Inworld voices. Use when the user wants to convert text to speech, generate audio, voiceover, narrate, or read text aloud.
brainstorming
A brainstorming workflow for turning an idea into an agreed design before implementation. It requires exploring the project, asking clarifying questions, comparing options, documenting the design, and getting user approval.
video-gen
A tool for generating or editing AI videos from text, images, reference videos, or audio, using HappyHorse, SeeDance, and PixVerse models.
listenhub-voice
An end-to-end audio generator that turns text or an image into a finished audio track. It can include sound effects, several speaking voices, or a voice copied from a reference recording.