Generate production-quality SVG+PNG technical diagrams from natural language. 7 styles, UML support, and AI/Agent workflow patterns.
# Add to your Claude Code skills
git clone https://github.com/yizhiyanhua-ai/fireworks-tech-graphGuides for using ai agents skills like fireworks-tech-graph.
Last scanned: 5/5/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-05T06:16:23.677Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}fireworks-tech-graph is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by yizhiyanhua-ai. Generate production-quality SVG+PNG technical diagrams from natural language. 7 styles, UML support, and AI/Agent workflow patterns. It has 7,920 GitHub stars.
Yes. fireworks-tech-graph passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/yizhiyanhua-ai/fireworks-tech-graph" and add it to your Claude Code skills directory (see the Installation section above). fireworks-tech-graph ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
fireworks-tech-graph is primarily written in Python. It is open-source under yizhiyanhua-ai on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh fireworks-tech-graph against similar tools.
No comments yet. Be the first to share your thoughts!
Generate production-quality SVG technical diagrams exported as PNG via cairosvg (recommended), rsvg-convert, or puppeteer.
Install this skill from GitHub:
npx skills add yizhiyanhua-ai/fireworks-tech-graph
Public package page:
https://www.npmjs.com/package/@yizhiyanhua-ai/fireworks-tech-graph
Do not pass @yizhiyanhua-ai/fireworks-tech-graph directly to skills add, because the CLI expects a GitHub or local repository source.
Update command:
npx skills add yizhiyanhua-ai/fireworks-tech-graph --force -g -y
Four helper scripts in scripts/ directory provide stable SVG generation and validation:
generate-diagram.sh - Validate SVG + export PNG./scripts/generate-diagram.sh -t architecture -s 1 -o ./output/arch.svg
./scripts/generate-diagram.sh -t architecture -s 1 -o ./output/arch.svggenerate-from-template.py - Create starter SVG from templatepython3 ./scripts/generate-from-template.py architecture ./output/arch.svg '{"title":"My Diagram","nodes":[],"arrows":[]}'
validate-svg.sh - Validate SVG syntax./scripts/validate-svg.sh <svg-file>
test-all-styles.sh - Batch test all styles./scripts/test-all-styles.sh
When to use scripts:
When to generate SVG directly:
references/style-1-flat-icon.md unless user specifies another; load the matching references/style-N.md for exact color tokens and SVG patternsreferences/icons.md for known productspython3 -c "import xml.etree.ElementTree as ET; ET.parse('file.svg')" to check XML syntaxcairosvg (recommended). See SVG → PNG Conversion section below for full method comparisonNodes = services/components. Group into horizontal layers (top→bottom or left→right).
<rect> dashed containers to group related services in the same layer0 0 960 600 standard, 0 0 960 800 for tall stacksEmphasizes what data moves where. Focus on data transformation.
stroke-width: 2.5) for primary data pathsSequential decision/process steps.
Shows how an AI agent reasons, uses tools, and manages memory. Key conceptual layers to always consider:
Specialized agent diagram focused on memory operations.
store(), retrieve(), forget(), consolidate()Time-ordered message exchanges between participants.
<rect> loop/alt frames with label in top-left cornerSide-by-side comparison of approaches, systems, or components.
#dcfce7) + ✓ checkmark; unsupported: #f9fafb fill#f9fafb / #ffffff) for readabilityHorizontal time axis showing durations, phases, and milestones.
0 0 960 400 typical; wider for many time periods: 0 0 1200 400Radial layout from central concept.
cx=480, cy=280<path> with cubic bezier for branches, not straight linesStatic structure showing classes, attributes, methods, and relationships.
+ public, - private, # protected)<<interface>> stereotype above name, or circle/lollipop notation<<enumeration>> stereotype, values in bottom0 0 960 600 standard; 0 0 960 800 for deep hierarchiesSystem functionality from user perspective.
<<include>> from base to included use case<<extend>> from extension to base use case0 0 960 600 standardLifecycle states and transitions of an entity.
entry/ action, exit/ action, do/ activity[condition]event [guard] / action
/0 0 960 600 standardDatabase schema and data relationships.
1, N, 0..1, 0..*, 1..*0 0 960 600 standard; wider 0 0 1200 600 for many entitiesPhysical or logical network infrastructure.
0 0 960 600 standardFull mapping of UML 14 diagram types to supported diagram types:
| UML Diagram | Supported As | Notes |
|---|---|---|
| Class | Class Diagram | Full UML notation |
| Component | Architecture Diagram | Use colored fills per component type |
| Deployment | Architecture Diagram | Add node/instance labels |
| Package | Architecture Diagram | Use dashed grouping containers |
| Composite Structure | Architecture Diagram | Nested rects within components |
| Object | Class Diagram | Instance boxes with underlined name |
| Use Case | Use Case Diagram | Full actor/ellipse/relationship |
| Activity | Flowchart / Process Flow | Add fork/join bars |
| State Machine | State Machine Diagram | Full UML notation |
| Sequence | Sequence Diagram | Add alt/opt/loop frames |
| Communication | — | Approximate with Sequence (swap axes) |
| Timing | Timeline | Adapt time axis |
| Interaction Overview | Flowchart | Combine activity + sequence fragments |
| ER Diagram | ER Diagram | Chen/Crow's foot notation |
Map semantic concepts to consistent shapes across all diagram types:
| Concept | Shape | Notes |
|---|---|---|
| User / Human | Circle + body path | Stick figure or avatar |
| LLM / Model | Rounded rect with brain/spark icon or gradient fill | Use accent color |
| Agent / Orchestrator | Hexagon or rounded rect with double border | Signals "active controller" |
| Memory (short-term) | Rounded rect, dashed border | Ephemeral = dashed |
| Memory (long-term) | Cylinder (database shape) | Persistent = solid cylinder |
| Vector Store | Cylinder with grid lines inside | Add 3 horizontal lines |
| Graph DB | Circle cluster (3 overlapping circles) | |
| Tool / Function | Gear-like rect or rect with wrench icon | |
| API / Gateway | Hexagon (single border) | |
| Queue / Stream | Horizontal tube (pipe shape) | |
| File / Document | Folded-corner rect | |
| Browser / UI | Rect with 3-dot titlebar | |
| Decision | Diamond | Flowcharts only |
| Process / Step | Rounded rect | Standard box |
| External Service | Rect with cloud icon or dashed border | |
| Data / Artifact | Parallelogram | I/O in flowcharts |
Always assign arrow meaning, not just color:
| Flow Type | Color | Stroke | Dash | Meaning |
|---|---|---|---|---|
| Primary data flow | blue #2563eb |
2px solid | none | Main request/response path |
| Control / trigger | orange #ea580c |
1.5px solid | none | One system triggering another |
| Memory read | green #059669 |
1.5px solid | none | Retrieval from store |
| Memory write | green #059669 |
1.5px | 5,3 |
Write/store operation |
| Async / event | gray #6b7280 |
1.5px | 4,2 |
Non-blocking, event-driven |
| Embedding / transform | purple #7c3aed |
1px solid | none | Data transformation |
| Feedback / loop | purple #7c3aed |
1.5px curved | none | Iterative reasoning loop |
Always include a legend when 2+ arrow types are used.
Spacing:
Arrow Labels (CRITICAL):
<rect fill="canvas_bg" opacity="0.95"/> only when the offset label still crosses another visual element (another arrow, a node edge, etc.)Arrow Routing:
Post-Generation Arrow Optimization:
When a user asks to "优化箭头" / "fix arrow routing" / "optimize the diagram" on an already-generated diagram, preserve all nodes, containers, styles, and layout — only modify the arrows entries in the JSON data, then re-render with generate-from-template.py.
Available arrow override fields (in recommended order of use):
| Field | Type | When to Use |
|---|---|---|
source_port / target_port |
"left" / "right" / "top" / "bottom" |
Arrow exits/enters from the wrong edge |
corridor_x |
[x, ...] |
Hint vertical segments toward this x lane (soft preference) |
corridor_y |
[y, ...] |
Hint horizontal segments toward this y lane (soft preference) |
route_points |
[[x1,y1], [x2,y2], ...] |
Force exact waypoints (bypasses auto-routing); keep segments orthogonal |
routing_padding |
number (default: 24) | (Advanced) Adjust obstacle clearance for this arrow |
port_clearance |
number | (Advanced) Adjust first-segment offset from node edge |
label_style |
"badge" / "offset" |
Choose "offset" when badge backgrounds create visual clutter; keep "badge" (default) for legacy/high-contrast labels |
For JSON/template rendering, the default remains "badge" for backward compatibility. Set "label_style": "offset" on individual arrows when you want offset-first labels without background rects.
Optimization steps:
source / target pairsource_port / target_port if the exit/entry direction is wrong; add corridor_x / corridor_y to space parallel arrows apart; use route_points only when hints alone cannot resolve the pathgenerate-from-template.py with the updated JSON and validate with validate-svg.shExample — spacing two overlapping arrows into separate corridors:
{ "source": "nodeA", "target": "nodeB", "corridor_y": [280] }
{ "source": "nodeC", "target": "nodeD", "corridor_y": [320] }
Line Overlap Prevention (CRITICAL - most common bug on Codex): When two arrows must cross each other, ALWAYS use jump-over arcs to prevent visual overlap:
Validation Checklist (run before finalizing):
text.length × 7px ≤ shape_width - 16px)filter="url(...)", verify (element_x + element_width + filter_extension) ≤ viewBox_width AND element_x ≥ filter_extension. The default filter region extends 10-20% beyond bbox; staying near viewBox edges causes Chrome/cairosvg to clip the element's edge-side stroke (one side of the border vanishes while other sides render correctly)validate-svg.sh automated checks)badge_y = first_arrow_y - (badge_height / 2). When appending new sections to an existing diagram, verify alignment matches the existing sections — this is the most common regression when adding content incrementally. Use variables in Python list generation to enforce the constraint: sec_y = 840; badge_y = sec_y - 9 # for height=18 badge0 0 960 600 default; 0 0 960 800 tall; 0 0 1200 600 wide<style>font-family: ...</style> — no external @import (cairosvg / rsvg-convert cannot fetch external URLs)<defs>: arrow markers, gradients, filters, clip paths<marker> with markerEnd, sized markerWidth="10" markerHeight="7"<feDropShadow> in <filter>, apply sparingly (key nodes only)M x1,y1 C cx1,cy1 cx2,cy2 x2,y2 cubic bezier for loops/feedback arrows<clipPath> if text might overflow a node boxMANDATORY: Python List Method (ALWAYS use this):
python3 << 'EOF'
lines = []
lines.append('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 700">')
lines.append(' <defs>')
# ... each line separately
lines.append('</svg>')
with open('/path/to/output.svg', 'w') as f:
f.write('\n'.join(lines))
print("SVG generated successfully")
EOF
Why mandatory: Prevents character truncation, typos, and syntax errors. Each line is independent and easy to verify.
Pre-Tool-Call Checklist (CRITICAL - use EVERY time):
If ANY answer is NO: STOP. Do NOT call the tool. Prepare the content first.
Error Recovery Protocol:
Validation (run after generation):
python3 -c "import xml.etree.ElementTree as ET; ET.parse('file.svg')" && echo "✓ Valid XML"
# Or use cairosvg as a render-time check:
python3 -c "import cairosvg; cairosvg.svg2png(url='file.svg', write_to='/tmp/test.png')" && echo "✓ Renders" && rm /tmp/test.png
If using generate-from-template.py:
source / target node ids in arrow JSON so the generator can snap to node edgesx1,y1,x2,y2 as hints or fallback coordinates, not the main routing primitiveCommon Syntax Errors to Avoid:
yt-anchor → ✅ y="60" text-anchor="middle"x="390 (missing y) → ✅ x="390" y="250"fill=#fff → ✅ fill="#ffffff"marker-end= → ✅ marker-end="url(#arrow)"L 29450 → ✅ L 290,220</svg> at endfilter near viewBox edge — filter region extends 20% (default) or more beyond bbox; if that region exceeds viewBox, Chrome/cairosvg clip the filter rendering AND can drop the element's own stroke on that side. Keep filtered elements at least max(20% of element size, shadow blur radius × 3) away from viewBox edges, or omit the filter../[derived-name].svg and ./[derived-name].png in current directory--output /path/ or 输出到 /path/| Tool | Install | Render Quality | Notes |
|---|---|---|---|
rsvg-convert |
System (often preinstalled) | ⚠️ Fair | Drops some CSS styles and <foreignObject> elements — missing borders/text on complex SVGs |
cairosvg (recommended) |
pip install cairosvg |
✅ Good | Solid CSS support; clearly better than rsvg-convert |
puppeteer (headless Chrome) |
npm install puppeteer |
✅✅ Best | Real browser engine; 100% fidelity but heavy (Node + Chromium) |
# Single file (2x resolution for retina/docs)
python3 -c "import cairosvg; cairosvg.svg2png(url='input.svg', write_to='output.png', scale=2)"
# Batch convert all SVGs in a directory
python3 -c "
import cairosvg, os, glob
d = 'docs/00-core'
for svg in sorted(glob.glob(os.path.join(d, '*.svg'))):
png = svg.replace('.svg', '.png')
cairosvg.svg2png(url=svg, write_to=png, scale=2)
print(f'Done: {os.path.basename(svg)} -> {os.path.basename(png)}')
"
scale=2produces 2x resolution PNG, ideal for high-DPI screens and embedded docs.
# Single file
rsvg-convert -w 1920 file.svg -o file.png
# Batch (not recommended — complex SVGs may lose elements)
for f in docs/00-core/*.svg; do rsvg-convert -o "${f%.svg}.png" "$f"; done
# 2x resolution
for f in docs/00-core/*.svg; do rsvg-convert -z 2 -o "${f%.svg}.png" "$f"; done
npm install puppeteer # auto-downloads Chromium
node svg2png.js [directory]
const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');
(async () => {
const dir = process.argv[2] || '.';
const svgFiles = fs.readdirSync(dir).filter(f => f.endsWith('.svg'));
const browser = await puppeteer.launch({
headless: 'new',
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
for (const file of svgFiles) {
const svgPath = path.resolve(dir, file);
const pngPath = svgPath.replace(/\.svg$/, '.png');
const svgContent = fs.readFileSync(svgPath, 'utf-8');
const wMatch = svgContent.match(/width="(\d+)/);
const hMatch = svgContent.match(/height="(\d+)/);
const vbMatch = svgContent.match(/viewBox="[^"]*\s(\d+)\s(\d+)"/);
let width = wMatch ? parseInt(wMatch[1]) : (vbMatch ? parseInt(vbMatch[1]) : 1200);
let height = hMatch ? parseInt(hMatch[1]) : (vbMatch ? parseInt(vbMatch[2]) : 800);
const scale = 2;
const page = await browser.newPage();
await page.setViewport({ width, height, deviceScaleFactor: scale });
const html = `<!DOCTYPE html>
<html><head><style>
body { margin: 0; padding: 0; background: transparent; }
img { display: block; }
</style></head>
<body>
<img src="data:image/svg+xml;base64,${Buffer.from(svgContent).toString('base64')}" width="${width}" height="${height}" />
</body></html>`;
await page.setContent(html, { waitUntil: 'networkidle0' });
await page.screenshot({ path: pngPath, type: 'png', omitBackground: true });
await page.close();
console.log(`Done: ${file} -> ${path.basename(pngPath)} (${width}x${height} @${scale}x)`);
}
await browser.close();
})();
rsvg-convert renders SVGs containing <foreignObject>, CSS filter, or complex <style> blocks incompletely — missing borders / missing text are the typical symptomscairosvg (built on Cairo) has much better CSS support than rsvg and is sufficient for most casescairosvg may fail to render CJK characters and emoji in <text> elements — Cairo's font API (cairo_select_font_face) does not reliably perform system fontconfig fallback, so glyphs not present in the matched font face render as □ (empty box). This commonly affects Chinese/Japanese/Korean text and emoji, depending on system font configuration. Workaround: use SVG as primary format for web/GitHub rendering (browsers handle CJK natively); reserve PNG export for Latin-only diagrams, or switch to the puppeteer path for full CJK+emoji fidelity--window-size=W,H is not the drawable area — even in --headless=new mode, browser chrome (scrollbars, internal UI surfaces) consumes ~15-20% of both width and height, so the actual SVG viewport is only ~0.84×W by ~0.84×H. Symptom: SVG content past x ≈ 0.84 × W or y ≈ 0.84 × H is cut off and renders as a solid white band, even though the SVG file itself is correct. Typical failure modes: a Legend in the top-right corner loses its right border; a bottom-row container loses its bottom dashed line. Fix: pass window dimensions ≥ SVG width × 1.2 AND SVG height × 1.2, then crop the raw screenshot back to (SVG_width × scale, SVG_height × scale) with PIL or ImageMagick. Example: for a 1280×580 SVG at 3× DPR, use --window-size=1600,800 then crop the output to 3840×1740. The Puppeteer / page.setViewport() path does NOT have this issue — it sets a precise viewport regardless of window UI.cairosvg (pip install once, one-line conversion, good fidelity)rsvg-convert (acceptable for simple flat-color diagrams)puppeteer| # | Name | Background | Best For |
|---|---|---|---|
| 1 | Flat Icon (default) | White | Blogs, docs, presentations |
| 2 | Dark Terminal | #0f0f1a |
GitHub, dev articles |
| 3 | Blueprint | #0a1628 |
Architecture docs |
| 4 | Notion Clean | White, minimal | Notionnce |
| 5 | Glassmorphism | Dark gradient | Product sites, keynotes |
| 6 | Claude Official | Warm cream #f8f6f3 |
Anthropic-style diagrams |
| 7 | OpenAI Official | Pure white #ffffff |
OpenAI-style diagrams |
| 8 | Dark Luxury (AI-authored) | #0a0a0a deep black |
Architecture docs, premium editorial — hand-craft SVG from references/style-8-dark-luxury.md |
Load references/style-N.md for exact color tokens and SVG patterns.
Default: Style 1 (Flat Icon) for most diagrams. Load references/style-diagram-matrix.md for detailed style-to-diagram-type recommendations.
These patterns appear frequently — internalize them:
RAG Pipeline: Query → Embed → VectorSearch → Retrieve → Augment → LLM → Response Agentic RAG: adds Agent loop with Tool use between Query and LLM Agentic Search: Query → Planner → [Search Tool / Calculator / Code] → Synthesizer → Response Mem0 / Memory Layer: Input → Memory Manager → [Write: VectorDB + GraphDB] / [Read: Retrieve+Rank] → Context Agent Memory Types: Sensory (raw input) → Working (context window) → Episodic (past interactions) → Semantic (facts) → Procedural (skills) Multi-Agent: Orchestrator → [SubAgent A / SubAgent B / SubAgent C] → Aggregator → Output Tool Call Flow: LLM → Tool Selector → Tool Execution → Result Parser → LLM (loop)
Stop drawing diagrams by hand. Describe your system in English or Chinese — get publication-ready SVG + PNG technical diagrams in seconds.
fireworks-tech-graph turns natural language descriptions into polished SVG diagrams, then exports them as high-resolution PNG via cairosvg (recommended), with rsvg-convert and puppeteer available as alternatives. It ships with 7 template styles and 1 AI-authored style (Dark Luxury) and deep knowledge of AI/Agent domain patterns (RAG, Agentic Search, Mem0, Multi-Agent, Tool Call flows), plus full support for all 14 UML diagram types.
User: "Generate a Mem0 memory architecture diagram, dark style"
→ Skill classifies: Memory Architecture Diagram, Style 2
→ Generates SVG with swim lanes, cylinders, semantic arrows
→ Exports 1920px PNG
→ Reports: mem0-architecture.svg / mem0-architecture.png
This project is also a proof surface for a broader capability: turning vague AI/devtool workflows into constrained, reusable systems with validation, documentation, export paths, and product-facing polish.
If you are building agent infrastructure, AI IDEs, internal copilots, developer tools, technical documentation systems, or applied AI workflow products, I am open to scoped paid sprints, design-partner work, and founding engineer conversations.
All samples exported at 1920px width (2× retina) via
cairosvg. PNG is lossless and the right choice for technical diagrams — sharp edges, no JPEG compression artifacts on text/lines.
Mem0 Memory Architecture — white background, semantic arrows, layered memory system

Tool Call Flow — dark background, neon accents, monospace font

Microservices Architecture — deep blue background, grid lines, cyan strokes

Agent Memory Types — minimal white, single accent color

Multi-Agent Collaboration — dark gradient background, frosted glass cards

System Architecture — warm cream background (#f8f6f3), Anthropic brand colors, clean professional aesthetic

API Integration Flow — pure white background, OpenAI brand palette, modern minimalist design

Sopify Adaptive Workflow Engine — deep black background, champagne gold accents, serif titles, six-bucket color wheel

Use prompts like these when you want the model to stay close to the repo's strongest regression-tested outputs:
Draw a Mem0 memory architecture diagram in style 1 (Flat Icon).
Use four horizontal sections: Input Layer, Memory Manager, Storage Layer, Output / Retrieval.
Include User, AI App / Agent, LLM, mem0 Client, Memory Manager, Vector Store, Graph DB, Key-Value Store, History Store, Context Builder, Ranked Results, Personalized Response.
Use semantic arrows for read, write, control, and data flow. Keep the layout clean and product-doc friendly.
Draw a tool call flow diagram in style 2 (Dark Terminal).
Show User query, Retrieve chunks, Generate answer, Knowledge base, Agent, Terminal, Source documents, and Grounded answer.
Use terminal chrome, neon accents, monospace typography, and semantic arrows for retrieval, synthesis, and embedding update.
Draw a microservices architecture diagram in style 3 (Blueprint).
Create numbered engineering sections like 01 // EDGE, 02 // APPLICATION SERVICES, 03 // DATA + EVENT INFRA, 04 // OBSERVABILITY.
Include Client Apps, API Gateway, Auth / Policy, three services, Event Router, Postgres, Redis Cache, Warehouse, and Metrics / Traces.
Use blueprint grid, cyan strokes, and a bottom-right title block.
Draw an agent memory types diagram in style 4 (Notion Clean).
Compare Sensory Memory, Working Memory, Episodic Memory, Semantic Memory, and Procedural Memory around a central Agent core.
Use a minimal white layout, neutral borders, one accent color for arrows, and short storage tags for each memory type.
Draw a multi-agent collaboration diagram in style 5 (Glassmorphism).
Use three sections: Mission Control, Specialist Agents, and Synthesis.
Include User brief, Coordinator Agent, Research Agent, Coding Agent, Review Agent, Shared Memory, Synthesis Engine, and Final response.
Use frosted cards, soft glow, and semantic arrows for delegation, shared memory writes, and synthesis output.
Draw a system architecture diagram in style 6 (Claude Official).
Use left-side layer labels: Interface Layer, Core Layer, Foundation Layer.
Include Client Surface, Gateway, Task Planner, Model Runtime, Policy Guardrails, Memory Store, Tool Runtime, Observability, and Registry.
Use warm cream background, restrained brand-like palette, generous whitespace, and a bottom-right legend.
Draw an API integration flow diagram in style 7 (OpenAI Official).
Use three sections: Entry, Model + Tools, and Delivery.
Include Application, OpenAI SDK Layer, Prompt Builder, Model Runtime, Tool Calls, Response Formatter, Observability, and Release Control.
Keep the look minimal, white, precise, and modern with clean green-accented arrows.
Style 8 is not a template-driven style. The AI reads
references/style-8-dark-luxury.mdand hand-crafts the SVG directly.
Draw a system architecture diagram in style 8 (Dark Luxury).
Use a deep black background (#0a0a0a), champagne gold (#d4a574) for titles and cluster labels,
and spread node colors across the full color wheel: emerald, violet, sky blue, rose, amber, cool-gray.
Apply Georgia serif only for the main title and section labels (≥11px); use sans-serif for all node text and arrow labels.
npx skills add yizhiyanhua-ai/fireworks-tech-graph
This skill is installed from the GitHub repository. The npm package page is the public package/distribution page:
https://www.npmjs.com/package/@yizhiyanhua-ai/fireworks-tech-graph
Do not use the npm package name with skills add, because the CLI resolves install sources as GitHub/local paths.
npx skills add yizhiyanhua-ai/fireworks-tech-graph --force -g -y
Re-run add --force to pull the latest version of this skill.
Or clone directly:
git clone https://github.com/yizhiyanhua-ai/fireworks-tech-graph.git ~/.claude/skills/fireworks-tech-graph
Pick one PNG renderer (cairosvg recommended):
# Recommended: cairosvg (best CSS support)
pip install cairosvg
# Fallback: rsvg-convert (system package; may drop CSS / <foreignObject>)
brew install librsvg # macOS
sudo apt install librsvg2-bin # Ubuntu/Debian
# Highest fidelity: puppeteer (real Chromium; heavy)
npm install puppeteer
# Verify (any one is enough)
python3 -c "import cairosvg; print(cairosvg.__version__)"
rsvg-convert --version
| Renderer | Quality | Install Cost | Use When |
|---|---|---|---|
| cairosvg | ✅ Good | Single pip install |
Default — best balance |
| rsvg-convert | ⚠️ Fair | System package | No Python available, simple flat diagrams |
| puppeteer | ✅✅ Best | Node + ~150MB Chromium | Browser-generated SVG (D3, Mermai |