From font-inspector
Automatically activates when user mentions font files (.ttf, .otf, .woff, .woff2) or requests font structure analysis. Optimized for CJK fonts with large character sets.
How this skill is triggered — by the user, by Claude, or both
Slash command
/font-inspector:font-visualizerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill automatically activates when:
This skill automatically activates when:
.ttf, .otf, .woff, .woff2)Extract comprehensive font information including:
Convert font glyphs to SVG format for visual analysis:
Convert fonts to UFO (Unified Font Object) format:
.glif files for each glyphThis plugin provides two implementation paths for maximum flexibility and performance:
Claude automatically chooses the optimal path based on:
Decision Tree:
├─ Font has > 10,000 glyphs? → Rust (speed critical)
├─ User needs UFO editing? → Python (better UFO support)
├─ File size > 10MB? → Rust (memory efficient)
├─ Batch processing? → Rust (parallel processing)
└─ Default → Rust (faster, same output format)
Both paths produce identical JSON output - Claude receives the same data structure regardless of implementation.
Python:
python $CLAUDE_PLUGIN_ROOT/scripts/font_info.py <font_path>
Rust (faster):
$CLAUDE_PLUGIN_ROOT/scripts/rust/target/release/font-inspector info --font <font_path>
Output: JSON with font metadata, character coverage, and design parameters
Example:
{
"family": "Noto Sans CJK SC",
"style": "Regular",
"upem": 1000,
"char_count": 65535,
"unicode_ranges": {
"Basic Latin": [32, 126],
"CJK Unified Ideographs": [19968, 40959]
}
}
Python Path (flexible):
# Full export (use with caution for CJK fonts)
python $CLAUDE_PLUGIN_ROOT/scripts/font_to_svg.py <font_path> --output ./svg_glyphs/
# CJK optimized: Export specific characters
python $CLAUDE_PLUGIN_ROOT/scripts/font_to_svg.py <font_path> --chars "你好世界ABC" --output ./svg_glyphs/
# CJK optimized: Export by Unicode range
python $CLAUDE_PLUGIN_ROOT/scripts/font_to_svg.py <font_path> --range 0x4E00-0x9FFF --limit 1000 --output ./svg_glyphs/
# Export common CJK characters only
python $CLAUDE_PLUGIN_ROOT/scripts/font_to_svg.py <font_path> --preset cjk-common --output ./svg_glyphs/
Rust Path (10x faster, recommended for CJK):
# Export specific characters (blazing fast)
$CLAUDE_PLUGIN_ROOT/scripts/rust/target/release/font-inspector extract \
--font <font_path> --chars "你好世界ABC" --output ./svg_glyphs/ --progress
# CJK common characters (parallel processing)
$CLAUDE_PLUGIN_ROOT/scripts/rust/target/release/font-inspector extract \
--font <font_path> --preset cjk-common --output ./svg_glyphs/ --progress --parallel
# Unicode range with limit
$CLAUDE_PLUGIN_ROOT/scripts/rust/target/release/font-inspector extract \
--font <font_path> --range 0x4E00-0x9FFF --limit 1000 --output ./svg_glyphs/
# JSON only (no files, for Claude analysis)
$CLAUDE_PLUGIN_ROOT/scripts/rust/target/release/font-inspector extract \
--font <font_path> --preset cjk-common --json-only
Output:
CJK Optimization Features:
--range: Specify Unicode range (e.g., 0x4E00-0x9FFF for CJK Unified Ideographs)--limit: Maximum number of characters to export--preset: Use predefined character sets (cjk-common, cjk-basic, latin-extended)--batch-size: Process in batches to manage memory (default: 500)Python Path (recommended for UFO):
python $CLAUDE_PLUGIN_ROOT/scripts/font_to_ufo.py <font_path> --output ./output.ufo
Rust Path (basic UFO support):
$CLAUDE_PLUGIN_ROOT/scripts/rust/target/release/font-inspector extract \
--font <font_path> --preset cjk-common --output ./svg_glyphs/ --ufo
Output: Standard UFO directory with editable .glif files
Note: Python path provides more complete UFO conversion. Rust path creates valid UFO structure but with simplified outline data.
| Font Type | Characters | Python | Rust (single) | Rust (parallel) |
|---|---|---|---|---|
| Latin Small | 256 | 0.5s | 0.05s | 0.03s |
| Latin Extended | 1,000 | 3s | 0.2s | 0.1s |
| CJK Medium | 5,000 | 15s | 1.2s | 0.4s |
| CJK Large | 20,000 | 60s | 5s | 1.5s |
| CJK Full | 65,000 | 180s | 12s | 3s |
Memory Usage:
Recommendation: Use Rust path for fonts > 10,000 characters or when processing multiple fonts.
Once SVG data is extracted, Claude can:
d attribute)User: "Analyze this font file: NotoSansCJK-Regular.otf"
Violet:
1. Extracts metadata → "Noto Sans CJK SC, 65535 characters"
2. Exports sample characters → "你好世界ABC"
3. Analyzes SVG paths → "Sans-serif design, uniform stroke width"
4. Reports coverage → "Full CJK Unified Ideographs support"
User: "Compare the character '永' in these two fonts"
Violet:
1. Exports '永' from both fonts as SVG
2. Analyzes path data for both
3. Compares stroke structure, proportions, style
4. Highlights differences visually
User: "Analyze the most common 1000 CJK characters in this font"
Violet:
1. Uses --preset cjk-common to export 1000 characters
2. Analyzes stroke consistency across characters
3. Identifies design patterns and variations
4. Reports on character coverage and quality
Claude receives direct access to SVG path data:
{
"A": {
"glyph_name": "A",
"unicode": "0x41",
"svg_path": "M 250 0 L 0 700 L 100 700 L 250 280 L 400 700 L 500 700 Z",
"bbox": {"xMin": 0, "yMin": 0, "xMax": 500, "yMax": 700},
"advance_width": 600
}
}
Path Commands:
M x y: Move toL x y: Line toC x1 y1 x2 y2 x y: Cubic Bézier curveQ x1 y1 x y: Quadratic Bézier curveZ: Close path--range or --limit for large fonts--batch-size to balance speed vs memoryFor exploration:
# Export a small sample first
python $CLAUDE_PLUGIN_ROOT/scripts/font_to_svg.py font.otf --chars "你好世界" --output ./test/
For analysis:
# Use common character preset
python $CLAUDE_PLUGIN_ROOT/scripts/font_to_svg.py font.otf --preset cjk-common --output ./analysis/
For specific ranges:
# CJK Unified Ideographs Extension A
python $CLAUDE_PLUGIN_ROOT/scripts/font_to_svg.py font.otf --range 0x3400-0x4DBF --output ./ext_a/
Skill created by Violet 💜 | Optimized for CJK fonts 🀄
npx claudepluginhub joysusy/violet-plugin-place --plugin font-inspectorExplains type anatomy, vertical metrics, x-height ratios, counter apertures, and structural classifications. Helps designers select appropriate typefaces for readability at different sizes.
Creates, edits, reviews, and validates high-quality SVG graphics with W3C compliance, CSS independence, accessibility, and safety.
Enforces typography rules—curly quotes, dashes, spacing, hierarchy—in HTML/CSS/React/JSX UI code. Auto-applies silently on generation; audits and fixes existing code.