Skin Developer
ningbainb/deepseek-harness-desktop
Build a new skin for the dsh-web-ui skin collection (DSH Web GUI) and publish it into the skin-center plugin — scaffold with scripts/dsh-skin-new, author skin.json plus the apply/dispose +…
Explains how to use the snapDOM library to turn an HTML element into an SVG, PNG, JPG or WebP image while keeping its fonts, pseudo-elements and shadows.
$ npx skills add 2025Emma/vibe-coding-cn --skill snapdom -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install 2025Emma/vibe-coding-cn snapdom --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/2025Emma/vibe-coding-cn.git skills-src && mkdir -p .claude/skills && cp -r skills-src/i18n/zh/skills/snapdom .claude/skills/snapdom && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "snapdom" agent skill from https://github.com/2025Emma/vibe-coding-cn/tree/main/i18n/zh/skills/snapdom into .claude/skills/snapdom/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "snapdom", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/2025Emma/vibe-coding-cn/tree/main/i18n/zh/skills/snapdomType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add 2025Emma/vibe-coding-cn --skill snapdom -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install 2025Emma/vibe-coding-cn snapdom --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/2025Emma/vibe-coding-cn.git skills-src && mkdir -p .agents/skills && cp -r skills-src/i18n/zh/skills/snapdom .agents/skills/snapdom && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "snapdom" agent skill from https://github.com/2025Emma/vibe-coding-cn/tree/main/i18n/zh/skills/snapdom into .agents/skills/snapdom/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "snapdom", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add 2025Emma/vibe-coding-cn --skill snapdom -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install 2025Emma/vibe-coding-cn snapdom --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/2025Emma/vibe-coding-cn.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/i18n/zh/skills/snapdom .cursor/skills/snapdom && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "snapdom" agent skill from https://github.com/2025Emma/vibe-coding-cn/tree/main/i18n/zh/skills/snapdom into .cursor/skills/snapdom/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "snapdom", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/2025Emma/vibe-coding-cn.git --path i18n/zh/skills/snapdom--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add 2025Emma/vibe-coding-cn --skill snapdom -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install 2025Emma/vibe-coding-cn snapdom --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/2025Emma/vibe-coding-cn.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/i18n/zh/skills/snapdom .gemini/skills/snapdom && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "snapdom" agent skill from https://github.com/2025Emma/vibe-coding-cn/tree/main/i18n/zh/skills/snapdom into .gemini/skills/snapdom/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "snapdom", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install 2025Emma/vibe-coding-cn snapdomInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add 2025Emma/vibe-coding-cn --skill snapdom -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/2025Emma/vibe-coding-cn.git skills-src && mkdir -p .github/skills && cp -r skills-src/i18n/zh/skills/snapdom .github/skills/snapdom && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "snapdom" agent skill from https://github.com/2025Emma/vibe-coding-cn/tree/main/i18n/zh/skills/snapdom into .github/skills/snapdom/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "snapdom", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add 2025Emma/vibe-coding-cn --skill snapdom -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install 2025Emma/vibe-coding-cn snapdom --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/2025Emma/vibe-coding-cn.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/i18n/zh/skills/snapdom .opencode/skills/snapdom && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "snapdom" agent skill from https://github.com/2025Emma/vibe-coding-cn/tree/main/i18n/zh/skills/snapdom into .opencode/skills/snapdom/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "snapdom", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
snapdomExplains how to use the snapDOM library to turn an HTML element into an SVG, PNG, JPG or WebP image while keeping its fonts, pseudo-elements and shadows.
Covers the snapDOM JavaScript library for converting a DOM element into a scalable SVG or a raster image, including capturing styled elements with pseudo-elements, shadow DOM content and embedded fonts or icon fonts, and exporting at custom dimensions or scale. It also covers a CORS proxy fallback for blocked assets and a plugin system for custom rendering steps.
Installation is through `npm install @zumer/snapdom` or a CDN script tag as either an ES module or a UMD bundle. Usage examples cover creating a reusable capture object, one-step exports such as `snapdom.toPng()` and `snapdom.toSvg()`, and downloading a captured element directly as a file with `snapdom.download()`. The library has no runtime dependencies beyond standard Web APIs.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 9b42dd1. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmyarngitFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comunpkg.comAlso links to:
snapdom.devnpmjs.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
SnapDOM Capture Guide loads about 1.9k tokens when it runs, and up to ~2.2k if it reads all its reference files. Until then it costs about 61 tokens; SKILL.md has 549 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from 2025Emma/vibe-coding-cn at commit 9b42dd1, republished under its MIT licence (© 2025Emma). 549 words, ~1,916 tokens.
.claude/skills/snapdom/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Fast, dependency-free DOM-to-image capture library for converting HTML elements into scalable SVG or raster image formats.
Use SnapDOM when you need to:
npm install @zumer/snapdom
# or
yarn add @zumer/snapdom<script type="module">
import { snapdom } from "https://unpkg.com/@zumer/snapdom/dist/snapdom.mjs";
</script><script src="https://unpkg.com/@zumer/snapdom/dist/snapdom.umd.js"></script>// Create reusable capture object
const result = await snapdom(document.querySelector('#target'));
// Export to different formats
const png = await result.toPng();
const jpg = await result.toJpg();
const svg = await result.toSvg();
const canvas = await result.toCanvas();
const blob = await result.toBlob();
// Use the result
document.body.appendChild(png);// Direct export without intermediate object
const png = await snapdom.toPng(document.querySelector('#target'));
const svg = await snapdom.toSvg(element);// Automatically download as file
await snapdom.download(element, 'screenshot.png');
await snapdom.download(element, 'image.svg');const result = await snapdom(element, {
scale: 2, // 2x resolution
width: 800, // Custom width
height: 600, // Custom height
embedFonts: true, // Include @font-face
exclude: '.no-capture', // Hide elements
useProxy: true, // Enable CORS proxy
straighten: true, // Remove transforms
noShadows: false // Keep shadows
});
const png = await result.toPng({ quality: 0.95 });| Option | Type | Purpose |
|---|---|---|
scale | Number | Scale output (e.g., 2 for 2x resolution) |
width | Number | Custom output width in pixels |
height | Number | Custom output height in pixels |
embedFonts | Boolean | Include non-icon @font-face rules |
useProxy | String|Boolean | Enable CORS proxy (URL or true for default) |
exclude | String | CSS selector for elements to hide |
straighten | Boolean | Remove translate/rotate transforms |
noShadows | Boolean | Strip shadow effects |
// Capture at different scales
const mobile = await snapdom.toPng(element, { scale: 1 });
const tablet = await snapdom.toPng(element, { scale: 1.5 });
const desktop = await snapdom.toPng(element, { scale: 2 });// Hide specific elements from capture
const png = await snapdom.toPng(element, {
exclude: '.controls, .watermark, [data-no-capture]'
});// Capture with specific size
const result = await snapdom(element, {
width: 1200,
height: 630 // Standard social media size
});// Fallback for CORS-blocked resources
const png = await snapdom.toPng(element, {
useProxy: 'https://cors.example.com/?' // Custom proxy
});// Extend with custom exporters
snapdom.plugins([pluginFactory, { colorOverlay: true }]);
// Hook into lifecycle
defineExports(context) {
return {
pdf: async (ctx, opts) => { /* generate PDF */ }
};
}
// Lifecycle hooks available:
// beforeSnap → beforeClone → afterClone →
// beforeRender → beforeExport → afterExportSnapDOM significantly outperforms html2canvas:
| Scenario | SnapDOM | html2canvas | Improvement |
|---|---|---|---|
| Small (200×100) | 1.6ms | 68ms | 42x faster |
| Medium (800×600) | 12ms | 280ms | 23x faster |
| Large (4000×2000) | 171ms | 1,800ms | 10x faster |
git clone https://github.com/zumerlab/snapdom.git
cd snapdom
npm installnpm run compilenpm testAdd helper scripts here for automation, e.g.:
batch-screenshot.js - Capture multiple elementspdf-export.js - Convert snapshots to PDFcompare-outputs.js - Compare SVG vs PNG qualityAdd templates and examples:
scale instead of width/height for better performanceembedFonts: true to ensure custom fonts appear correctlyuseProxy: true if images fail to loadquality: 0.95 for best qualitystraighten: false if transforms are causing issuesembedFonts: trueuseProxy: truescale valuenoShadows: true to skip shadow rendering© 2025Emma, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (references) in i18n/zh/skills/snapdom of 2025Emma/vibe-coding-cn.
Open the folder on GitHubat commit 9b42dd1
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in 2025Emma/vibe-coding-cn, which our catalogue first saw on October 7, 2026.
SnapDOM Capture Guide next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| SnapDOM Capture Guide this skill2025Emma/vibe-coding-cn | 23k | 1 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Skin Developerningbainb/deepseek-harness-desktop | 789 | — | ~1.4k | Automated safety check: Pass | BSD-3-Clause | |
| Tabler Dashboard UI Kittabler/tabler | 42k | — | ~1.5k | Automated safety check: Pass | MIT | |
| Front-End Checklist npm Package Finderthedaviddias/Front-End-Checklist | 74k | — | ~989 | Automated safety check: Pass | MIT | |
| Preact Developeroaustegard/claude-skills | 150 | — | ~4.6k | Automated safety check: Pass | MIT | |
| Aholo Viewer Integrationmanycoretech/aholo-viewer | 1.1k | — | ~2.2k | Automated safety check: Pass | MIT |
ningbainb/deepseek-harness-desktop
Build a new skin for the dsh-web-ui skin collection (DSH Web GUI) and publish it into the skin-center plugin — scaffold with scripts/dsh-skin-new, author skin.json plus the apply/dispose +…
tabler/tabler
Creates admin dashboards and app pages with the Tabler UI kit on Bootstrap 5, using the published docs for real markup instead of guessed class names.
thedaviddias/Front-End-Checklist
Finds two or three well-maintained npm packages for a Front-End Checklist rule, checks download and release thresholds, and adds them to the rule's frontmatter.
oaustegard/claude-skills
Guides building standards-based Preact apps with native-first choices, HTM syntax, import maps and vendored ESM, from single-file demos to larger builds.
manycoretech/aholo-viewer
Guides building browser apps with the @manycore/aholo-viewer npm package to render 3D Gaussian Splatting and mesh content from TypeScript.
OrchestratorInc/agent-orchestrator
Launches, restarts and troubleshoots the real AO Electron desktop app from a checkout, with isolated or real local data and checks for stale processes.
2025Emma/vibe-coding-cn
Reference of Claude API examples and guides covering tool use, vision, RAG, classification, summarization, text-to-SQL, prompt caching and agent patterns.
2025Emma/vibe-coding-cn
Retries failed network commands through proxychains4 and a local proxy when it sees timeouts, DNS failures or blocked access.
2025Emma/vibe-coding-cn
Builds new skills from scattered docs, specs or code, and refactors existing skills for clear triggers, reliable activation and a quality checklist.
2025Emma/vibe-coding-cn
Reference help for the CCXT library covering crypto exchange APIs, market data, trading and order management across 150+ exchanges in JavaScript, Python and PHP.
2025Emma/vibe-coding-cn
CoinGecko API documentation - cryptocurrency market data API, price feeds, market cap, volume, historical data. Use when integrating CoinGecko API, building…
2025Emma/vibe-coding-cn
Reference documentation for building, configuring and debugging automated trading strategies, market making and exchange connectors with Hummingbot.
Works with
Categories
Explains how to use the snapDOM library to turn an HTML element into an SVG, PNG, JPG or WebP image while keeping its fonts, pseudo-elements and shadows. Covers the snapDOM JavaScript library for converting a DOM element into a scalable SVG or a raster image, including capturing styled elements with pseudo-elements, shadow DOM content and embedded fonts or icon fonts, and exporting at custom dimensions or scale. It also covers a CORS proxy fallback for blocked assets and a plugin system for custom rendering steps.
SnapDOM Capture Guide fits situations like: turning a styled HTML element into a downloadable PNG, JPG or WebP image; exporting a DOM element as a scalable SVG that preserves its CSS styling; capturing an element that uses pseudo-elements, custom fonts or shadow DOM; generating a screenshot-like image of a page section without a headless browser.
Run `npx skills add 2025Emma/vibe-coding-cn --skill snapdom -a claude-code`. Or copy the skill folder (i18n/zh/skills/snapdom in 2025Emma/vibe-coding-cn) into .claude/skills/snapdom in your project. Claude Code loads it when a task matches its description.
Run `npx skills add 2025Emma/vibe-coding-cn --skill snapdom -a codex`. Or copy the skill folder (i18n/zh/skills/snapdom in 2025Emma/vibe-coding-cn) into .agents/skills/snapdom in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add 2025Emma/vibe-coding-cn --skill snapdom -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/snapdom, .gemini/skills/snapdom, .github/skills/snapdom and .opencode/skills/snapdom in your project.
Going by SKILL.md and its folder, SnapDOM Capture Guide needs the command-line tools its instructions call (npm, yarn and git). Our summary lists: The @zumer/snapdom package or its CDN build.
SKILL.md names 4 domains. In commands or code: github.com and unpkg.com; the agent is likely to contact these when it follows the instructions. As links in the text: snapdom.dev and npmjs.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
SnapDOM Capture Guide is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 244 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with SnapDOM Capture Guide: Skin Developer (ningbainb/deepseek-harness-desktop, 789 stars), Tabler Dashboard UI Kit (tabler/tabler, 42k stars), Front-End Checklist npm Package Finder (thedaviddias/Front-End-Checklist, 74k stars) and Preact Developer (oaustegard/claude-skills, 150 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
2025Emma (a GitHub user) maintains it in 2025Emma/vibe-coding-cn, which has 23,041 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on December 17, 2025.
Source: 2025Emma/vibe-coding-cn on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.