Not in the top 1,000 by GitHub stars

imshaikot/render-visual-skill

An agent-skill & plugin to render programmable visuals (images & animations) for Claude Code, Cursor, Copilot, Codex & others

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

skills/render-visual/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 8e4f66b05aa1

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 8e4f66b05aa1f8c70a6c8f9ecfd7e3a78f365ba1

git clone --filter=blob:none --no-checkout https://github.com/imshaikot/render-visual-skill.git .hotskills/imshaikot-render-visual-skill && git -C .hotskills/imshaikot-render-visual-skill checkout --detach 8e4f66b05aa1f8c70a6c8f9ecfd7e3a78f365ba1 # Copy each selected skill directory from .hotskills/imshaikot-render-visual-skill into .claude/skills/<skill-name>/
11GitHub stars
0stars in 7 days
1skill in this repository
0commits in 30 days

Heat

0.4
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Oct 27, 202611

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

render-visual

When your agent uses it

**DELIVERY SKILL** — Produce polished diagrams, slides and social cards as crisp PNGs, JPEGs or PDFs by authoring HTML/SVG and rendering it with a local headless Chromium. Eight themes (ember, slate, paper, terminal, blueprint, frost, neon, sepia), one flag. Lays mermaid flowchart text out into a figure, deterministically. Also frames screenshots and photos in a browser, phone or terminal frame, or cropped to a shape. USE FOR: architecture and flow diagrams, slide decks, og/social cards, blog and README figures, any designed image a doc needs. DO NOT USE FOR: data charts from datasets (use a plotting library), capturing a live UI, photo retouching, or any surface without a shell — write inline SVG. TRIGGERS: mermaid, flowchart TD, graph TD, diagram, flow chart, architecture visual, swimlane, tree view, cluster, deployment, mind map, slide deck, presentation, og card, social card, banner, blog figure, browser frame, device mockup, render a png, export a pdf or jpeg, make an image, visual.

What it loads into context

Frontmatter

350 tokens

Always available to the agent

SKILL.md

9,794 tokens

When the skill is activated

Reference documents

0 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. 0. Find the skill first
  2. 1. Workflow
  3. 2. The renderer
  4. 3. Animated sequence diagrams — no ffmpeg required
  5. 4. The aesthetic rules
  6. 5. The element library
  7. 6. Images
  8. 7. Code snippets
  9. 8. Layout discipline
  10. 9. Presentations
  11. 10. Mermaid flowcharts — generated, not drawn
  12. 11. QA checklist

Scripts executed separately

  • scripts/animate.mjs
  • scripts/chrome.mjs
  • scripts/cli.mjs
  • scripts/doctor.mjs
  • scripts/gif.mjs
  • scripts/images.mjs
  • scripts/markup.mjs
  • scripts/mermaid.mjs
  • scripts/parts.mjs
  • scripts/render.mjs
  • scripts/selftest.mjs

Files

  • ../../.claude-plugin/marketplace.jsonasset1,071 bytes
  • ../../.claude-plugin/plugin.jsonasset1,030 bytes
  • LICENSEasset1,065 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • SKILL.mdcore37,420 bytes
  • parts/el-actor.svgasset284 bytes
  • parts/el-browser.svgasset941 bytes
  • parts/el-chart-area.svgasset601 bytes
  • parts/el-chart-bar.svgasset1,176 bytes
  • parts/el-chart-donut.svgasset770 bytes
  • parts/el-chart-funnel.svgasset451 bytes
  • parts/el-chart-gauge.svgasset443 bytes
  • parts/el-chart-hbar.svgasset1,223 bytes
  • parts/el-chart-heatmap.svgasset3,004 bytes
  • parts/el-chart-line.svgasset770 bytes
  • parts/el-chart-pie.svgasset600 bytes
  • parts/el-chart-scatter.svgasset1,365 bytes
  • parts/el-chart-stacked.svgasset1,288 bytes
  • parts/el-cloud.svgasset211 bytes
  • parts/el-cube.svgasset663 bytes
  • parts/el-dashboard.svgasset2,785 bytes
  • parts/el-database.svgasset437 bytes
  • parts/el-phone.svgasset911 bytes
  • parts/el-queue.svgasset551 bytes
  • parts/el-router.svgasset320 bytes
  • parts/el-server.svgasset1,173 bytes
  • parts/el-shield.svgasset287 bytes
  • parts/el-sparkline.svgasset403 bytes
  • parts/el-stat-tile.svgasset532 bytes
  • parts/el-table.svgasset1,849 bytes
  • parts/el-terminal.svgasset1,054 bytes
  • parts/el-window.svgasset1,150 bytes
  • parts/g-api.svgasset322 bytes
  • parts/g-bolt.svgasset180 bytes
  • parts/g-chart-bar.svgasset198 bytes
  • parts/g-chart-line.svgasset205 bytes
  • parts/g-chart-pie.svgasset239 bytes
  • parts/g-check.svgasset194 bytes
  • parts/g-chip.svgasset364 bytes
  • parts/g-clock.svgasset183 bytes
  • parts/g-cloud.svgasset210 bytes
  • parts/g-dashboard.svgasset220 bytes
  • parts/g-db.svgasset295 bytes
  • parts/g-file.svgasset259 bytes
  • parts/g-filter.svgasset176 bytes
  • parts/g-folder.svgasset256 bytes
  • parts/g-gauge.svgasset191 bytes
  • parts/g-gear.svgasset363 bytes
  • parts/g-globe.svgasset223 bytes
  • parts/g-key.svgasset206 bytes
  • parts/g-layers.svgasset252 bytes
  • parts/g-lock.svgasset253 bytes
  • parts/g-mail.svgasset213 bytes
  • parts/g-mobile.svgasset191 bytes
  • parts/g-net.svgasset287 bytes
  • parts/g-screen.svgasset207 bytes
  • parts/g-search.svgasset190 bytes
  • parts/g-table.svgasset235 bytes
  • parts/g-term.svgasset211 bytes
  • parts/g-user.svgasset177 bytes
  • parts/g-users.svgasset282 bytes
  • parts/g-warn.svgasset245 bytes
  • scripts/animate.mjsruns9,023 bytes
  • scripts/chrome.mjsruns37,181 bytes
  • scripts/cli.mjsruns10,324 bytes
  • scripts/doctor.mjsruns3,252 bytes
  • scripts/gif.mjsruns14,094 bytes
  • scripts/images.mjsruns18,362 bytes
  • scripts/markup.mjsruns4,614 bytes
  • scripts/mermaid.mjsruns63,321 bytes
  • scripts/parts.mjsruns14,155 bytes
  • scripts/render.mjsruns10,895 bytes
  • scripts/selftest.mjsruns51,414 bytes
  • templates/card.htmlasset3,249 bytes
  • templates/charts.htmlasset7,875 bytes
  • templates/cluster.htmlasset10,963 bytes
  • templates/code.htmlasset5,852 bytes
  • templates/deployment.htmlasset8,885 bytes
  • templates/diagram.htmlasset6,165 bytes
  • templates/elements.htmlasset13,483 bytes
  • templates/flowchart.htmlasset9,225 bytes
  • templates/mindmap.htmlasset7,877 bytes
  • templates/palette.htmlasset15,766 bytes
  • templates/sequence.htmlasset8,618 bytes
  • templates/slide.htmlasset3,504 bytes
  • templates/swimlane.htmlasset8,456 bytes
  • templates/tree.htmlasset8,793 bytes
  • themes/blueprint.cssasset1,497 bytes
  • themes/ember.cssasset1,550 bytes
  • themes/frost.cssasset1,472 bytes
  • themes/neon.cssasset1,428 bytes
  • themes/paper.cssasset1,348 bytes
  • themes/sepia.cssasset1,402 bytes
  • themes/slate.cssasset1,389 bytes
  • themes/terminal.cssasset1,345 bytes
Read SKILL.md

# render-visual — designed PNGs from HTML, no design tool

Every image this skill produces is a small HTML/SVG page screenshotted by headless Chrome:
fully versioned, diffable, regenerable in seconds when the copy changes, and styled by a theme
file instead of hand-picked colors.

| Template | Canvas | For |
|---|---|---|
| `$SKILL/templates/diagram.html` | 1360×740 | Architecture and flow figures: nodes, labeled arrows, a return path, a line-crossing bridge |
| `$SKILL/templates/slide.html` | 1920×1080 | Presentation slides: kicker, headline with a gradient phrase, up to three points, footer |
| `$SKILL/templates/card.html` | 1200×630 | Social/og cards: mark, headline, one-paragraph pitch, chips, bottom rule |
| `$SKILL/templates/sequence.html` | 1360×740 | Sequence diagrams: lifelines, calls and returns, activations — static, or animated step by step |
| `$SKILL/templates/swimlane.html` | 1360×740 | Cross-functional flows: lanes that own the steps, labelled handoffs, an exception path that never leaves its lane |
| `$SKILL/templates/tree.html` | 1360×740 | Hierarchies, both idioms: an indented tree view (files, nav, an outline) beside the same tree drawn node-link |
View the complete source on GitHub

Skills included

  • render-visual

Repository facts

License
MIT
Created
Aug 21, 2026
Last pushed
Aug 26, 2026
Forks
1
Open issues
0
Project activity
Slowing

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 6, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 28 notes
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/render-visual/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 55 signals by file

.claude-plugin/marketplace.json

  • Network accessline 1
    {   "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
  • Network accessline 2
    "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
  • Network accessline 5
    "owner": {     "name": "Shahriar",     "url": "https://github.com/imshaikot"
  • Network accessline 6
    "name": "Shahriar",     "url": "https://github.com/imshaikot"   },
  • Network accessline 7
    "url": "https://github.com/imshaikot"
  • Network accessline 14
    "category": "design",       "author": { "name": "Shahriar" },       "homepage": "https://github.com/imshaikot/render-visual-skill"
  • Network accessline 15
    "author": { "name": "Shahriar" },       "homepage": "https://github.com/imshaikot/render-visual-skill"     }
  • Network accessline 16
    "homepage": "https://github.com/imshaikot/render-visual-skill"

.claude-plugin/plugin.json

  • Network accessline 5
    "author": {     "name": "Shahriar",     "url": "https://github.com/imshaikot"
  • Network accessline 6
    "name": "Shahriar",     "url": "https://github.com/imshaikot"   },
  • Network accessline 7
    "url": "https://github.com/imshaikot"
  • Network accessline 8
    },   "homepage": "https://github.com/imshaikot/render-visual-skill",   "repository": "https://github.com/imshaikot/render-visual-skill",
  • Network accessline 9
    "homepage": "https://github.com/imshaikot/render-visual-skill",
  • Network accessline 10
    "repository": "https://github.com/imshaikot/render-visual-skill",

skills/render-visual/SKILL.md

  • Network accessline 408
    directory**, not the working directory; absolute paths and `file:` URLs work too. A remote   URL is refused: one that 404s or loads slowly leaves an invisible hole in a figure that   still screenshots as a success. `curl -fsSL -o image.png 
  • Network accessline 409
    URL is refused: one that 404s or loads slowly leaves an invisible hole in a figure that   still screenshots as a success. `curl -fsSL -o image.png "…"` first. - **The bytes are inlined** as `data:` URIs into the temp copy before Chrome laun
  • Network accessline 410
    still screenshots as a success. `curl -fsSL -o image.png "…"` first.

skills/render-visual/scripts/animate.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

skills/render-visual/scripts/chrome.mjs

  • Executable scriptline 1
    Executable file
  • Dangerous shell operationline 137
    // an `rm -rf` rather than a pattern hunt across a shared temp dir.

skills/render-visual/scripts/cli.mjs

  • Executable scriptline 1
    Executable file

skills/render-visual/scripts/doctor.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

skills/render-visual/scripts/gif.mjs

  • Executable scriptline 1
    Executable file

skills/render-visual/scripts/images.mjs

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 134
    const head = buf.subarray(0, 1024).toString('utf8').replace(/^<U+FEFF>/, '').trimStart()
  • Network accessline 260
    '  Only images this renderer can read and verify are placed, because a URL that fails or\n' +           '  loads too slowly leaves a hole in a figure that still screenshots as a success.\n' +           `  Download it first:  curl -fsSL -o i
  • Network accessline 261
    '  loads too slowly leaves a hole in a figure that still screenshots as a success.\n' +           `  Download it first:  curl -fsSL -o image.png "${src}"`,       )
  • Network accessline 262
    `  Download it first:  curl -fsSL -o image.png "${src}"`,

skills/render-visual/scripts/markup.mjs

  • Executable scriptline 1
    Executable file

skills/render-visual/scripts/mermaid.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

skills/render-visual/scripts/parts.mjs

  • Executable scriptline 1
    Executable file

skills/render-visual/scripts/render.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

skills/render-visual/scripts/selftest.mjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Network accessline 695
    ['missing file', '<g data-part="el-browser" data-image="gone.png" transform="translate(60,60)"/>', /Image not found/],     ['not an image', '<g data-part="el-browser" data-image="notreally.png" transform="translate(60,60)"/>', /Not an image
  • Network accessline 696
    ['not an image', '<g data-part="el-browser" data-image="notreally.png" transform="translate(60,60)"/>', /Not an image this renderer recognises/],     ['remote source', '<g data-part="el-browser" data-image="https://example.com/a.png" transf
  • Network accessline 697
    ['remote source', '<g data-part="el-browser" data-image="https://example.com/a.png" transform="translate(60,60)"/>', /Remote image source/],
  • Network accessline 841
    ['unknown direction', 'flowchart XY\n  A --> B\n', /Unknown direction/],     ['a style line', 'flowchart TD\n  A --> B\n  style A fill:#f00\n', /"style" is not implemented/],     ['a click handler', 'flowchart TD\n  A --> B\n  click A "http
  • Network accessline 842
    ['a style line', 'flowchart TD\n  A --> B\n  style A fill:#f00\n', /"style" is not implemented/],     ['a click handler', 'flowchart TD\n  A --> B\n  click A "https://x"\n', /"click" is not implemented/],     ['nested subgraphs', 'flowchart
  • Network accessline 843
    ['a click handler', 'flowchart TD\n  A --> B\n  click A "https://x"\n', /"click" is not implemented/],

skills/render-visual/themes/blueprint.css

  • Network accessline 1
    /* rendercraft theme: blueprint — cyanotype drafting. Chalk on a deep drawing board. */ @import url('https://fonts.googleapis.com/css2?family=Archivo:wght@500;600;700&family=Roboto+Mono:wght@400;500&display=swap');
  • Network accessline 2
    @import url('https://fonts.googleapis.com/css2?family=Archivo:wght@500;600;700&family=Roboto+Mono:wght@400;500&display=swap');

skills/render-visual/themes/ember.css

  • Network accessline 1
    /* rendercraft theme: ember — warm dark. Every neutral carries a low-chroma amber hue. */ @import url('https://fonts.googleapis.com/css2?family=Inter+Tight:wght@500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
  • Network accessline 2
    @import url('https://fonts.googleapis.com/css2?family=Inter+Tight:wght@500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');

skills/render-visual/themes/frost.css

  • Network accessline 1
    /* rendercraft theme: frost — light UI. Cool white, geometric sans, glass surfaces. */ @import url('https://fonts.googleapis.com/css2?family=Manrope:wght@500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
  • Network accessline 2
    @import url('https://fonts.googleapis.com/css2?family=Manrope:wght@500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');

skills/render-visual/themes/neon.css

  • Network accessline 1
    /* rendercraft theme: neon — after hours. Indigo dark, high-chroma magenta and cyan. */ @import url('https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@500;600;700&family=Fira+Code:wght@400;500&display=swap');
  • Network accessline 2
    @import url('https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@500;600;700&family=Fira+Code:wght@400;500&display=swap');

skills/render-visual/themes/paper.css

  • Network accessline 1
    /* rendercraft theme: paper — light editorial. Warm paper, serif display, print restraint. */ @import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600&family=IBM+Plex+Mono:wght@400;500&display=swap');
  • Network accessline 2
    @import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600&family=IBM+Plex+Mono:wght@400;500&display=swap');

skills/render-visual/themes/sepia.css

  • Network accessline 1
    /* rendercraft theme: sepia — aged press. Cream stock, brown ink, typewriter mono. */ @import url('https://fonts.googleapis.com/css2?family=Newsreader:opsz,wght@6..72,500;6..72,600&family=Courier+Prime:wght@400;700&display=swap');
  • Network accessline 2
    @import url('https://fonts.googleapis.com/css2?family=Newsreader:opsz,wght@6..72,500;6..72,600&family=Courier+Prime:wght@400;700&display=swap');

skills/render-visual/themes/slate.css

  • Network accessline 1
    /* rendercraft theme: slate — cool dark. Violet-leaning neutrals, jewel accents. */ @import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap');
  • Network accessline 2
    @import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap');

skills/render-visual/themes/terminal.css

  • Network accessline 1
    /* rendercraft theme: terminal — near-black phosphor. Mono everything. */ @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&display=swap');
  • Network accessline 2
    @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&display=swap');

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Signal confidence: 25 facts

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md skills/render-visual/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skills/render-visual/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md skills/render-visual/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skills/render-visual/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md skills/render-visual/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.