Convert simple diagram images into runnable code (matplotlib/graphviz).
Project description
diagram2code
Convert simple flowchart-style diagrams into runnable Python programs.
diagram2code takes a diagram image (rectangular steps + arrows), detects the flow, and generates:
- a graph representation (
graph.json) - a runnable Python program (
generated_program.py) - optional debug visualizations (
debug_nodes.png,debug_arrows.png) - an optional exportable bundle (
--export)
This project is designed for learning, prototyping, and experimentation, not for production-grade diagram parsing. :contentReference[oaicite:1]{index=1}
Table of Contents
Installation
Clone the repo and install in editable mode:
git clone https://github.com/Nimil785477/diagram2code.git
cd diagram2code
python -m venv .venv
Activate the environment
# Linux / macOS
source .venv/bin/activate
# Windows (PowerShell)
.\.venv\Scripts\Activate.ps1
Install:
pip install -e .
Basic (no OCR)
pip install diagram2code
With OCR support(optional)
pip install diagram2code[ocr]
You must also install Tesseract OCR on your system:
- Windows: https://github.com/UB-Mannheim/tesseract/wiki
- macOS:
brew install tesseract
- Ubuntu/Debian:
sudo apt install tesseract-ocr
Then run:
diagram2code image.png --extract-labels
This matches exactly what your code already does ✔️
3️⃣ (Optional but recommended) Add a runtime hint
You already handle this well, but one tiny UX improvement:
In cli.py, after --extract-labels failure, you could optionally print:
safe_print("Hint: install OCR support with `pip install diagram2code[ocr]` and install Tesseract.")
Quick Start
Run diagram2code on a simple diagram:
python -m diagram2code.cli examples/simple/diagram.png --out outputs
This will write outputs (see Generated Files)
Using Labels
You can provide custom labels for nodes using a JSON file
Example labels.json
{
"0": "Step_1_Load_Data",
"1": "Step_2_Train_Model"
}
Run with labels
python -m diagram2code.cli diagram.png --out outputs --labels labels.json
The exported program will then use labeled function names (sanitized into valid Python identifiers).
Export Bundle
The --export fag creates a self-contained runnable bundle(easy to share).
python -m diagram2code.cli diagram.png --out outputs --export export_bundle
When using --export, the following files are copied:
export_bundle/
├── generated_program.py
├── graph.json
├── labels.json (if provided)
├── debug_nodes.png (if exists)
├── debug_arrows.png (if exists)
├── render_graph.py (if exists)
├── run.ps1
├── run.sh
└── README_EXPORT.md
Running the exported bundle
Windows (PowerShell):
cd export_bundle
.\run.ps1
Linux/macOS:
cd export_bundle
bash run.sh
or directly:
python generated_program.py
Generated Files
After a normal run (--out outputs):
| File | Description |
|---|---|
preprocessed.png |
Binary image used for detection |
debug_nodes.png |
Detected rectangles overlay |
debug_arrows.png |
Detected arrows overlay (if enabled) |
graph.json |
Graph structure (nodes + edges) |
render_graph.py |
Script to visualize the graph |
generated_program.py |
Generated executable Python program |
Examples
Simple linear flow
[ A ] → [ B ] → [ C ]
Branching flow
→ [ B ]
[ A ]
→ [ C ]
OCR (Optional)
diagram2code can extract text labels using Tesseract OCR.
Requirements:
- System:
tesseract-ocr - Python:
pytesseract
If OCR is unavailable, the pipeline still works and labels default to empty.
Limitations
- Only rectangular nodes are supported
- Arrow detection is heuristic-based
- Complex curves, diagonals, or overlapping arrows may fail
- No text extraction from inside shapes
- Not intended for UML, BPMN, or hand-drawn diagrams
Demo
Convert a simple diagram image into runnable Python code:
diagram2code tests/fixtures/simple.png --out demo_outputs --extract-labels
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file diagram2code-0.1.2.tar.gz.
File metadata
- Download URL: diagram2code-0.1.2.tar.gz
- Upload date:
- Size: 16.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f6c56d2971a005f35a62d22aee4d695b0b120a582063673c2149d38b9a6d32e
|
|
| MD5 |
3eb2588e942ddf68f5136c765322243e
|
|
| BLAKE2b-256 |
9233776b586771b0466c121aa7c8744b8b50ff4eaa8a3128ca3e54c96fd07101
|
File details
Details for the file diagram2code-0.1.2-py3-none-any.whl.
File metadata
- Download URL: diagram2code-0.1.2-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c380d73133aeae578e529656ad6ca7536933c27f6393d86dd3b72d4569d572a
|
|
| MD5 |
515fb222ac69342e37db9e5c2391175d
|
|
| BLAKE2b-256 |
7ae8e7553921055ce3d34a0ae3a74ae5d8cfc799d2125140a1af785c8f87ad53
|