dkyazzentwatwa / flowchart-generator
Install for your project team
Run this command in your project directory to install the skill for your entire team:
mkdir -p .claude/skills/flowchart-generator && curl -L -o skill.zip "https://fastmcp.me/Skills/Download/407" && unzip -o skill.zip -d .claude/skills/flowchart-generator && rm skill.zip
Project Skills
This skill will be saved in .claude/skills/flowchart-generator/ and checked into git. All team members will have access to it automatically.
Important: Please verify the skill by reviewing its instructions before using it.
Generate flowcharts from YAML/JSON definitions or Python DSL. Supports standard flowchart shapes, swimlanes, and PNG/SVG/PDF export.
1 views
0 installs
Skill Content
---
name: flowchart-generator
description: Generate flowcharts from YAML/JSON definitions or Python DSL. Supports standard flowchart shapes, swimlanes, and PNG/SVG/PDF export.
---
# Flowchart Generator
Create professional flowcharts from structured process definitions. Supports standard flowchart symbols (start/end, process, decision, I/O), swimlanes for multi-actor processes, and multiple export formats.
## Quick Start
```python
from scripts.flowchart_gen import FlowchartGenerator
# Using Python DSL
flow = FlowchartGenerator()
flow.start("Start")
flow.process("Step 1", id="s1")
flow.decision("Check?", id="d1")
flow.process("Yes Path", id="yes")
flow.process("No Path", id="no")
flow.end("End")
flow.connect("Start", "s1")
flow.connect("s1", "d1")
flow.connect("d1", "yes", label="Yes")
flow.connect("d1", "no", label="No")
flow.connect("yes", "End")
flow.connect("no", "End")
flow.generate().save("flowchart.png")
# From YAML file
flow = FlowchartGenerator()
flow.from_yaml("process.yaml")
flow.generate().save("process.png")
```
## Features
- **Multiple Input Sources**: Python DSL, YAML, or JSON
- **Standard Shapes**: Start/End, Process, Decision, Input/Output, Connector
- **Swimlanes**: Multi-actor/department process diagrams
- **Styling Presets**: Business, technical, minimal themes
- **Layout Options**: Top-bottom, left-right, and more
- **Export Formats**: PNG, SVG, PDF, DOT
## API Reference
### Initialization
```python
flow = FlowchartGenerator()
```
### Node Creation (DSL)
```python
# Start node (oval/ellipse)
flow.start("Start")
flow.start("Begin Process", id="start1")
# End node (oval/ellipse)
flow.end("End")
flow.end("Process Complete", id="end1")
# Process node (rectangle)
flow.process("Process Data")
flow.process("Calculate Total", id="calc")
# Decision node (diamond)
flow.decision("Valid?", id="check")
flow.decision("Amount > 100?", id="d1")
# Input/Output node (parallelogram)
flow.input_output("User Input", id="input1")
flow.input_output("Display Result", id="output1")
# Connector (circle) - for complex flows
flow.connector("A", id="conn_a")
```
### Connections
```python
# Basic connection
flow.connect("start", "process1")
# With label
flow.connect("decision1", "yes_path", label="Yes")
flow.connect("decision1", "no_path", label="No")
# Multiple connections from decision
flow.decision("Approved?", id="d1")
flow.connect("d1", "approve_path", label="Yes")
flow.connect("d1", "reject_path", label="No")
```
### Loading from Files
```python
# From YAML
flow.from_yaml("process.yaml")
# From JSON
flow.from_json("process.json")
```
### Swimlanes
```python
# Define swimlanes
flow.swimlanes([
"Customer",
"Sales Team",
"Fulfillment"
])
# Add nodes to specific lanes
flow.process("Place Order", id="order", lane="Customer")
flow.process("Review Order", id="review", lane="Sales Team")
flow.process("Ship Order", id="ship", lane="Fulfillment")
```
### Styling
```python
# Style presets
flow.style("business") # Professional blue theme
flow.style("technical") # Gray technical theme
flow.style("minimal") # Clean minimal theme
flow.style("colorful") # Vibrant colors
# Layout direction
flow.layout("TB") # Top to Bottom (default)
flow.layout("LR") # Left to Right
flow.layout("BT") # Bottom to Top
flow.layout("RL") # Right to Left
# Custom colors
flow.node_colors({
'start': '#2ecc71',
'end': '#e74c3c',
'process': '#3498db',
'decision': '#f39c12',
'io': '#9b59b6'
})
```
### Generation and Export
```python
# Generate
flow.generate()
# Save
flow.save("chart.png")
flow.save("chart.svg")
flow.save("chart.pdf")
flow.save("chart.dot") # GraphViz source
# Get DOT source
dot_source = flow.to_dot()
# Show in viewer
flow.show()
```
## Data Formats
### YAML Format
```yaml
# process.yaml
title: Order Processing
layout: TB
style: business
nodes:
- id: start
type: start
label: Start
- id: receive
type: process
label: Receive Order
- id: check_stock
type: decision
label: In Stock?
- id: fulfill
type: process
label: Fulfill Order
- id: backorder
type: process
label: Create Backorder
- id: notify
type: io
label: Notify Customer
- id: end
type: end
label: End
connections:
- from: start
to: receive
- from: receive
to: check_stock
- from: check_stock
to: fulfill
label: "Yes"
- from: check_stock
to: backorder
label: "No"
- from: fulfill
to: notify
- from: backorder
to: notify
- from: notify
to: end
```
### JSON Format
```json
{
"title": "Order Processing",
"layout": "TB",
"style": "business",
"nodes": [
{"id": "start", "type": "start", "label": "Start"},
{"id": "process1", "type": "process", "label": "Process Data"},
{"id": "decision1", "type": "decision", "label": "Valid?"},
{"id": "end", "type": "end", "label": "End"}
],
"connections": [
{"from": "start", "to": "process1"},
{"from": "process1", "to": "decision1"},
{"from": "decision1", "to": "end", "label": "Yes"}
]
}
```
### Swimlane YAML Format
```yaml
title: Customer Service Process
layout: LR
swimlanes:
- Customer
- Support Agent
- Technical Team
nodes:
- id: submit
type: start
label: Submit Ticket
lane: Customer
- id: review
type: process
label: Review Ticket
lane: Support Agent
- id: technical
type: decision
label: Technical Issue?
lane: Support Agent
- id: escalate
type: process
label: Escalate
lane: Technical Team
- id: resolve
type: process
label: Resolve
lane: Support Agent
- id: close
type: end
label: Close Ticket
lane: Customer
connections:
- from: submit
to: review
- from: review
to: technical
- from: technical
to: escalate
label: "Yes"
- from: technical
to: resolve
label: "No"
- from: escalate
to: resolve
- from: resolve
to: close
```
## CLI Usage
```bash
# From YAML
python flowchart_gen.py --input process.yaml --output flowchart.png
# From JSON with custom layout
python flowchart_gen.py --input process.json --layout LR --output flow.png
# With style preset
python flowchart_gen.py --input workflow.yaml --style business --output workflow.svg
# High resolution
python flowchart_gen.py --input process.yaml --output chart.png --dpi 300
```
### CLI Arguments
| Argument | Description | Default |
|----------|-------------|---------|
| `--input` | Input YAML or JSON file | Required |
| `--output` | Output file path | `flowchart.png` |
| `--layout` | Layout direction (TB, LR, BT, RL) | `TB` |
| `--style` | Style preset | `business` |
| `--dpi` | Image resolution | 96 |
## Examples
### Simple Linear Flow
```python
flow = FlowchartGenerator()
flow.start("Start")
flow.process("Step 1", id="s1")
flow.process("Step 2", id="s2")
flow.process("Step 3", id="s3")
flow.end("End")
flow.connect("Start", "s1")
flow.connect("s1", "s2")
flow.connect("s2", "s3")
flow.connect("s3", "End")
flow.generate().save("linear.png")
```
### Decision Flow
```python
flow = FlowchartGenerator()
flow.start("Start")
flow.input_output("Get Input", id="input")
flow.decision("Valid?", id="check")
flow.process("Process", id="proc")
flow.input_output("Show Error", id="error")
flow.end("End")
flow.connect("Start", "input")
flow.connect("input", "check")
flow.connect("check", "proc", label="Yes")
flow.connect("check", "error", label="No")
flow.connect("proc", "End")
flow.connect("error", "input") # Loop back
flow.style("business")
flow.generate().save("decision_flow.png")
```
### Login Process
```python
flow = FlowchartGenerator()
flow.start("Start")
flow.input_output("Enter Credentials", id="creds")
flow.process("Validate", id="validate")
flow.decision("Valid?", id="check")
flow.decision("Attempts < 3?", id="attempts")
flow.process("Login Success", id="success")
flow.input_output("Show Error", id="error")
flow.process("Lock Account", id="lock")
flow.end("End")
flow.connect("Start", "creds")
flow.connect("creds", "validate")
flow.connect("validate", "check")
flow.connect("check", "success", label="Yes")
flow.connect("check", "attempts", label="No")
flow.connect("attempts", "creds", label="Yes")
flow.connect("attempts", "lock", label="No")
flow.connect("success", "End")
flow.connect("lock", "End")
flow.layout("TB")
flow.style("technical")
flow.generate().save("login_flow.png")
```
### Order Processing with Swimlanes
```python
flow = FlowchartGenerator()
flow.swimlanes(["Customer", "System", "Warehouse"])
flow.start("Order Placed", id="start", lane="Customer")
flow.process("Validate Order", id="validate", lane="System")
flow.decision("In Stock?", id="stock", lane="System")
flow.process("Reserve Items", id="reserve", lane="Warehouse")
flow.process("Backorder", id="backorder", lane="Warehouse")
flow.process("Process Payment", id="payment", lane="System")
flow.process("Ship Order", id="ship", lane="Warehouse")
flow.end("Complete", id="end", lane="Customer")
flow.connect("start", "validate")
flow.connect("validate", "stock")
flow.connect("stock", "reserve", label="Yes")
flow.connect("stock", "backorder", label="No")
flow.connect("reserve", "payment")
flow.connect("backorder", "payment")
flow.connect("payment", "ship")
flow.connect("ship", "end")
flow.layout("TB")
flow.generate().save("order_swimlane.png")
```
## Node Shapes
| Type | Shape | Usage |
|------|-------|-------|
| `start` | Oval/Ellipse | Beginning of flow |
| `end` | Oval/Ellipse | End of flow |
| `process` | Rectangle | Action or step |
| `decision` | Diamond | Yes/No branch |
| `io` | Parallelogram | Input/Output |
| `connector` | Circle | Page/flow connector |
## Style Presets
| Preset | Description |
|--------|-------------|
| `business` | Professional blue tones |
| `technical` | Gray/silver technical look |
| `minimal` | Black and white, clean |
| `colorful` | Vibrant multi-color |
## Dependencies
```
graphviz>=0.20.0
PyYAML>=6.0
```
**System Requirement**: Graphviz must be installed on the system.
- macOS: `brew install graphviz`
- Ubuntu: `apt-get install graphviz`
- Windows: Download from graphviz.org
## Limitations
- Complex nested decisions may require manual layout adjustments
- Swimlane rendering depends on graphviz subgraph support
- Very large flowcharts (50+ nodes) may be hard to read
- Limited control over exact node positioning