assafkip/claude-image/render
Claude Code and agent skill by assafkip/claude-image
- community
Checking that the SKILL.md file is still in the repository.
Generate images from text prompts. Claude writes a self-contained HTML frame, the snapshot script renders it to a PNG using the local Chrome headless shell (no API key, no credits, works offline). Use when the user wants to create an illustration, diagram, infographic, banner, or any visual from a description.
Install
npx vskill@latest install assafkip/claude-image/renderSKILL.md
render
Claude generates images by writing styled HTML that fills a viewport exactly, then screenshots it with scripts/snapshot.sh. Output is a PNG. No external image API, no credits, no rate limits.
When to use this skill
Any image request: illustrations, diagrams, infographics, social banners, cover art, concept visuals, scene compositions, data charts, abstract art.
The pipeline
Writing the HTML frame
Hard rules (break any of these = blank or broken render)
- Fixed dimensions on html and body:
``css html, body { width: 1080px; height: 1080px; /* or the requested size */ overflow: hidden; margin: 0; padding: 0; } `` The viewport is fixed to the window size. overflow:hidden clips anything that bleeds. Never use 100vw/100vh -- the headless shell ignores viewport meta.
- No external resources. No CDN fonts, no external images, no remote scripts.
Everything inline. Use system fonts (Georgia, Arial, monospace) or base64-encoded data URIs for custom assets. Remote fetches silently fail in the headless renderer.
- No animations that block render. CSS animations and JS that run
immediately are fine (they freeze on screenshot). Anything gated on user interaction or setTimeout > 500ms won't be visible.
- Self-contained single file. All CSS in
<style>, all JS in<script>.
No external stylesheets, no imports, no modules.
Visual techniques by image type
Illustration / scene
- Layered
position:absolutedivs for sky, ground, mid-ground, foreground radial-gradientandlinear-gradientfor atmospheric color- CSS
clip-path: polygon(...)for silhouettes and shapes box-shadowfor glow, depth, ambient lightfilter: blur()on background layers for depth of fieldborder-radiusfor organic shapes- SVG
<path>inline for precise shapes
Diagram / flowchart
- Inline SVG with
<rect>,<circle>,<path>,<text>,<marker>for arrows - CSS Grid or Flexbox for layout
- Consistent stroke-width and color palette
Infographic / data
- CSS bar charts:
divwithheightset to data percentage - Inline SVG for pie/donut charts (stroke-dasharray technique)
- Large bold numbers with descriptive labels beneath
Abstract / generative art
<canvas>with 2D context (draw in an inline<script>)- CSS custom properties (
--hue,--angle) for parameterized art conic-gradient,radial-gradientstacked for complex color fields
Banner / cover
- Bold typography as a CSS layer over a gradient or image background
letter-spacing,text-transform,text-shadowfor visual weight- Rule of thirds: position the primary element at ~33% or 66% from edges
Quality checklist before running snapshot
- [ ] Does the HTML render correctly if opened in a browser? (mental model check)
- [ ] Are all fonts system fonts or inline?
- [ ] Is
overflow: hiddenon bothhtmlandbody? - [ ] Are fixed pixel dimensions set (not %, not vw/vh)?
- [ ] Is there meaningful visual variation (not a solid color)?
- [ ] Does the composition have a clear focal point?
Running the snapshot
verify.py checks: valid PNG magic bytes, minimum file size, non-solid-color pixel variance. A blank white or black PNG fails the variance check.
Iteration
If the image is wrong (wrong composition, wrong color, missing element):
- Edit
frame.html-- Claude rewrites the specific section - Re-run
snapshot.sh - Re-run
verify.py
The render is deterministic. Same HTML = same PNG every run. Iterate freely.
Output sizes
| Use case | Width | Height | |
|---|---|---|---|
| Square (default, social, video keyframe) | 1080 | 1080 | |
| LinkedIn / Facebook banner | 1584 | 396 | |
| Twitter / X header | 1500 | 500 | |
| OG image / blog cover | 1200 | 628 | |
| YouTube thumbnail | 1280 | 720 | |
| Portrait (stories, pins) | 1080 | 1920 |
Pass width and height as the 3rd and 4th arguments to snapshot.sh.
What this is NOT
- Not a diffusion model. Claude writes code; the browser renders it.
- Not photorealistic unless you build it that way with layered CSS/SVG.
- Not random. Same prompt + same code = same output. This is a feature.
The strength is control: you can iterate on any element, fix any artifact, and reproduce any frame exactly.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/render/SKILL.md
Popularity
- 7-day trend score
- 5
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/assafkip/claude-image/render)