agent image_generation skill risk: low
FigureSpec JSON to SVG Diagram Generator
The prompt instructs the model to generate publication-quality architecture, workflow, pipeline, and topology diagrams as editable SVGs from deterministic FigureSpec JSON, includin…
SKILL 1 file
SKILL.md
---
name: figure-spec
description: "Generate deterministic publication-quality architecture, workflow, and pipeline diagrams from structured JSON (FigureSpec) into editable SVG. Use when user says /\"架构图/\", /\"workflow 图/\", /\"pipeline 图/\", /\"确定性矢量图/\", /\"figure spec/\", /\"draw architecture/\", or needs precise, editable, publication-ready"
---
# FigureSpec: Deterministic JSON → SVG Figure Generation
Generate publication-quality **architecture diagrams**, **workflow pipelines**, **audit cascades**, and **system topology** figures as editable SVG vector graphics using a deterministic JSON → SVG renderer.
## When to Use This Skill
**Use `figure-spec`** for:
- System architecture diagrams (layered, hub-and-spoke, multi-plane)
- Workflow / pipeline figures
- Audit cascade / flow-control diagrams
- Any structured diagram where node positions, connections, and groupings are semantically important
- Figures that need to be edited/tweaked later (SVG is plain text)
- Figures where determinism matters (same spec → same SVG)
**Do NOT use for:**
- Data plots (bar/line/scatter) — use `/paper-figure`
- Natural/qualitative illustrations — use `/paper-illustration`
- Quick state-machine / flowchart — use `/mermaid-diagram` (lighter syntax)
## Core Properties
- **Deterministic**: identical FigureSpec JSON always produces identical SVG output (for a fixed renderer version + fonts)
- **Editable**: SVG output is plain-text, can be post-edited by hand or programmatically
- **Validated**: renderer enforces schema, rejects malformed specs with clear error messages
- **Shape-aware**: edge clipping works correctly for rect/rounded/circle/ellipse/diamond
- **CJK support**: multi-line labels with proper Chinese character width estimation
- **No external API**: runs fully local, no network, no API keys
## Tool Location
Phase 3.1 (Arch C) move: the canonical implementation now lives at
`skills/figure-spec/scripts/figure_renderer.py`. `tools/figure_renderer.py`
is kept as a backwards-compatible `os.execv` shim so legacy layers
continue to resolve. Codex-side install layouts that previously
copied the canonical into `~/.codex/skills/figure-spec/figure_renderer.py`
must now place it at `~/.codex/skills/figure-spec/scripts/figure_renderer.py`
to match the new layout (re-run `install_aris_codex.sh` to pick up
the new symlink target).
Resolve `$FIGURE_RENDERER` via the Codex-side hybrid chain (layer 0
preferred for self-contained owner SKILL; layers 1-4 are legacy
shared-runtime compatibility):
```bash
# Layer 0: self-contained at the new canonical location (Phase 3.1).
FIGURE_RENDERER=""
if [ -z "${ARIS_REPO:-}" ] && [ -f .aris/installed-skills-codex.txt ]; then
ARIS_REPO=$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills-codex.txt 2>/dev/null) || true
fi
[ -n "${ARIS_REPO:-}" ] && [ -f "$ARIS_REPO/skills/figure-spec/scripts/figure_renderer.py" ] && FIGURE_RENDERER="$ARIS_REPO/skills/figure-spec/scripts/figure_renderer.py"
# Layers 1-3: legacy shared-runtime chain via shim at tools/figure_renderer.py.
[ -z "$FIGURE_RENDERER" ] && [ -n "${ARIS_REPO:-}" ] && [ -f "$ARIS_REPO/tools/figure_renderer.py" ] && FIGURE_RENDERER="$ARIS_REPO/tools/figure_renderer.py"
[ -z "$FIGURE_RENDERER" ] && [ -f tools/figure_renderer.py ] && FIGURE_RENDERER="tools/figure_renderer.py"
# Layer 4: Codex-side skill-local install (`install_aris_codex.sh` may place it here).
[ -z "$FIGURE_RENDERER" ] && [ -f ~/.codex/skills/figure-spec/scripts/figure_renderer.py ] && FIGURE_RENDERER="$HOME/.codex/skills/figure-spec/scripts/figure_renderer.py"
[ -z "$FIGURE_RENDERER" ] && [ -f ~/.codex/skills/figure-spec/figure_renderer.py ] && FIGURE_RENDERER="$HOME/.codex/skills/figure-spec/figure_renderer.py" # pre-Phase-3.1 layout
[ -n "$FIGURE_RENDERER" ] || {
echo "ERROR: figure_renderer.py not found at any of: \$ARIS_REPO/skills/figure-spec/scripts/, \$ARIS_REPO/tools/, tools/, ~/.codex/skills/figure-spec/scripts/, ~/.codex/skills/figure-spec/. Set ARIS_REPO, rerun install_aris_codex.sh, or copy the canonical \$ARIS_REPO/skills/figure-spec/scripts/figure_renderer.py next to this skill." >&2
exit 1
}
python3 "$FIGURE_RENDERER" render <spec.json> --output <out.svg>
python3 "$FIGURE_RENDERER" validate <spec.json>
python3 "$FIGURE_RENDERER" schema
```
## Workflow
### Step 1: Understand the Diagram Goal
From `$ARGUMENTS` (description or path to `PAPER_PLAN.md` / `NARRATIVE_REPORT.md`), identify:
- **Purpose**: architecture, workflow, pipeline, audit cascade, topology?
- **Main entities**: what are the boxes?
- **Relationships**: how do they connect? (uses, produces, calls, verifies, chains)
- **Grouping**: do entities cluster into named regions?
- **Hierarchy vs network**: stacked layers, left-to-right flow, or central hub?
### Step 2: Draft the FigureSpec JSON
Canvas sizing guide:
- Single-column figure: ~500×350 px
- Two-column (full-width): ~900×500 px
- Tall topology: ~700×700 px
Start from a template based on the diagram type:
**Architecture (stacked rows)**:
```json
{
"canvas": {"width": 900, "height": 520},
"nodes": [
{"id": "layer1_label", "label": "Layer 1", "x": 450, "y": 60, ...},
{"id": "node_a", "label": "A", "x": 180, "y": 120, ...},
{"id": "node_b", "label": "B", "x": 350, "y": 120, ...}
],
"edges": [...],
"groups": [
{"label": "Layer 1", "node_ids": ["node_a", "node_b"], "fill": "#F0F9FF", "stroke": "#BAE6FD"}
]
}
```
**Workflow (left-to-right chain)**:
```json
{
"canvas": {"width": 900, "height": 300},
"nodes": [
{"id": "step1", "label": "Step 1", "x": 100, "y": 150, "shape": "rounded"},
{"id": "step2", "label": "Step 2", "x": 280, "y": 150, "shape": "rounded"}
],
"edges": [
{"from": "step1", "to": "step2", "label": "produces"}
]
}
```
**Decision diamond**:
```json
{"id": "check", "label": "Passes?", "shape": "diamond", "x": 450, "y": 200}
```
### Step 3: Render and Validate
```bash
# Validate first
python3 "$FIGURE_RENDERER" validate /tmp/spec.json
# Render to SVG
python3 "$FIGURE_RENDERER" render /tmp/spec.json --output figures/fig_arch.svg
# Convert to PDF for LaTeX inclusion
rsvg-convert -f pdf figures/fig_arch.svg -o figures/fig_arch.pdf
```
If validation fails, inspect the error (missing field, duplicate ID, overlap warning, invalid hex color) and fix the JSON.
### Step 4: Visual Review
Open the SVG/PDF and check:
- **No overlaps**: nodes don't collide with each other or group boundaries
- **Readability**: font sizes are consistent, labels aren't clipped
- **Edge clarity**: arrows hit nodes at clean angles, labels near edges are legible
- **Group alignment**: background rectangles frame their members cleanly
- **Color distinction**: categories are visually distinct in both color and grayscale
If issues found, edit the JSON spec (never the generated SVG) and re-render.
### Step 5: Iterate with Codex Review (Optional, for High-Stakes Figures)
For paper architecture figures, invoke cross-model review:
```text
spawn_agent:
model: gpt-5.5
reasoning_effort: xhigh
message: |
Review this SVG figure for a technical paper (architecture / workflow diagram).
Spec file: /path/to/spec.json
Rendered: /path/to/fig.svg
Evaluate:
1. Clarity (C): can a reader understand the system from this figure alone?
2. Readability (R): font sizes, label placement, visual hierarchy
3. Semantic accuracy (S): do relationships match the described system?
Score each axis 1-10 and list specific issues to fix.
```
Iterate until all three axes ≥ 7/10. The ARIS tech report figures went through 5 rounds of this loop to reach C:7/R:7/S:8.
## Schema Quick Reference
Run `python3 "$FIGURE_RENDERER" schema` for the authoritative schema.
### Nodes
| Field | Required | Default | Notes |
|-------|----------|---------|-------|
| `id` | ✓ | — | Unique |
| `label` | ✓ | — | `\n` for multi-line |
| `x`, `y` | ✓ | — | Center coordinates |
| `width`, `height` | | 120, 50 | |
| `shape` | | `rounded` | `rect` / `rounded` / `circle` / `ellipse` / `diamond` |
| `fill`, `stroke` | | auto from palette | `#RRGGBB` |
| `text_color` | | `#333333` | |
| `font_size` | | 14 | Override style default |
### Edges
| Field | Default | Notes |
|-------|---------|-------|
| `from`, `to` | required | Same = self-loop |
| `label` | — | Short edge label |
| `style` | `solid` | `solid` / `dashed` / `dotted` |
| `color` | `#555555` | |
| `curve` | `false` | Curved path |
### Groups
Rectangular background regions framing a set of nodes:
```json
{"label": "Layer Name", "node_ids": ["a", "b", "c"], "fill": "#EFF6FF", "stroke": "#BFDBFE"}
```
## Design Patterns
### Pattern 1: Layered Architecture
Stack rows of related nodes, each row is a group, add inter-layer arrows with semantic labels (`uses↓`, `produces↑`, `checks↓`).
### Pattern 2: Hub-and-Spoke
Central node (e.g., Executor), peripheral nodes (skills, tools), solid arrows for primary relations, dashed for feedback.
### Pattern 3: Pipeline with Feedback
Left-to-right main flow, feedback arrows curve below with `curve: true`.
### Pattern 4: Audit Cascade
Three-stage horizontal cascade with inputs feeding in from top, outputs exiting right, each stage in its own group.
## Anti-Patterns
- **Don't use groups as hierarchy**: groups frame peer nodes, not containment
- **Don't nest groups**: renderer draws them as background rectangles; nested groups look like Russian dolls
- **Don't cross-draw long diagonals**: if an arrow crosses 3+ rows, rethink the layout
- **Don't mix font sizes for same role**: keep one size per node category
## Output Contract
- SVG file in `figures/` (vector, editable, hand-tweakable)
- Source FigureSpec JSON saved in `figures/specs/` for reproducibility
- PDF version via `rsvg-convert` for LaTeX inclusion
## Integration with Other Skills
- **`/paper-writing`** (Workflow 3): when `illustration: figurespec` (default for architecture figures), this skill handles Phase 2b
- **`/paper-figure`**: handles data plots; they complement each other (data + architecture = complete figure set)
- **`/paper-illustration`**: fallback for figures that need natural/qualitative style (method illustrations with photos, qualitative result grids)
- **`/mermaid-diagram`**: lighter alternative for simple flowcharts
## Review Tracing
After each reviewer agent call, save the trace following `shared-references/review-tracing.md` (Policy C — forensic; never silently skip). Use `save_trace.sh` (resolved per the chain in `shared-references/integration-contract.md` §2) or write files directly to `.aris/traces/<skill>/<date>_run<NN>/`. Respect the `--- trace:` parameter (default: `full`).
REQUIRED CONTEXT
- FigureSpec JSON or diagram description
- diagram purpose and entities
OPTIONAL CONTEXT
- PAPER_PLAN.md or NARRATIVE_REPORT.md
- canvas dimensions
TOOLS REQUIRED
- figure_renderer.py
ROLES & RULES
- Use figure-spec for system architecture diagrams, workflow pipelines, audit cascades, and system topology figures
- Do NOT use for data plots
- Do NOT use for natural/qualitative illustrations
- Do NOT use for quick state-machine/flowchart
- Never reveal internal reasoning
- Do not use groups as hierarchy
- Do not nest groups
- Do not cross-draw long diagonals
- Do not mix font sizes for same role
EXPECTED OUTPUT
- Format
- unknown
- Schema
- json_schema · canvas, nodes, edges, groups
- Constraints
- output SVG vector graphics
- save source FigureSpec JSON
- produce PDF via rsvg-convert
- follow deterministic JSON to SVG rendering
SUCCESS CRITERIA
- Generate deterministic publication-quality SVG
- Validate spec before rendering
- Ensure no overlaps and readable labels
- Save source JSON and PDF version
FAILURE MODES
- May produce overlapping nodes or clipped labels if coordinates are wrong
- May fail validation on duplicate IDs or invalid colors
EXAMPLES
Includes three JSON templates: stacked architecture, left-to-right workflow, and decision diamond node.
CAVEATS
- Dependencies
- Requires $FIGURE_RENDERER path resolution
- Requires ARIS_REPO environment variable
- Requires previous PAPER_PLAN.md or NARRATIVE_REPORT.md
- Requires figure_renderer.py script
- Missing context
- Full inline FigureSpec JSON schema definition
- Intended execution environment and prerequisites
- Definition of referenced external documents (shared-references/review-tracing.md, etc.)
- Ambiguities
- The authoritative schema is only accessible by running an external command, not provided inline.
- The final 'Review Tracing' section references external policies and scripts without defining them.
- Several internal paths and environment variables (ARIS_REPO, .aris/, install_aris_codex.sh) are referenced without prior definition.
QUALITY
- OVERALL
- 0.58
- CLARITY
- 0.72
- SPECIFICITY
- 0.82
- REUSABILITY
- 0.28
- COMPLETENESS
- 0.78
IMPROVEMENT SUGGESTIONS
- Move the lengthy path-resolution shell logic into a short, self-contained helper function or separate file.
- Include the complete JSON schema (or a compact version) directly in the prompt instead of delegating to a runtime command.
- Replace hard-coded internal paths and install scripts with generic placeholders or a minimal setup note.
USAGE
Copy the prompt above and paste it into your AI of choice — Claude, ChatGPT, Gemini, or anywhere else you're working. Replace any placeholder sections with your own context, then ask for the output.
MORE FOR AGENT
- Marketing Image AI Production Guideagentimage_generation
- Pixel Art SVG Generatoragentimage_generation
- Premium Mobile App Screen Directoragentimage_generation
- Pixel Art SVG Generatoragentimage_generation
- AI Infographic Generator with Quality Reviewagentimage_generation
- Premium Brand-Kit Image Generatoragentimage_generation
- Slack GIF Creator Toolkitagentimage_generation
- OpenRouter Image Generation and Editing Guideagentimage_generation
- Stable Diffusion Diffusers Image Generation Guideagentimage_generation
- Vizcom Product Sketch Rendereragentimage_generation
- Vizcom Product Sketch Rendereragentimage_generation
- Vizcom Product Sketch Render Generatoragentimage_generation
- SEO Image Generation Pipelineagentimage_generation
- Gemini SEO Image Generatoragentimage_generation
- Fal AI Image Editing Guideagentimage_generation
- Fal.ai Image and Video Generatoragentimage_generation
- Fal AI Image Video Upscaleragentimage_generation
- Fal AI Image Style Transfer Editoragentimage_generation
- Proud Imam Muhammad bin Saud Image Generatoragentimage_generation
- Fal.ai Image and Video Generatoragentimage_generation
- Fal AI Image Video Upscaleragentimage_generation
- Fal AI Image Video Upscaleragentimage_generation
- Fal.ai Image Video Generatoragentimage_generation
- Fal AI Image Editing Skillagentimage_generation
- Comprehensive Codebase Bug Analysis and Fixeragentanalysis