Skip to main content

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

  1. Installation
  2. Quick Start
  3. Using Labels
  4. Export Bundle
  5. Generated Files
  6. Examples
  7. Limitations

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:

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 ✔️


(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.")

Generate a labels template (no OCR)

If you want to label nodes manually, generate a template file:

diagram2code path/to/diagram.png --out outputs --labels-template

Quick Start

Run diagram2code on a simple diagram:

diagram2code tests/fixtures/branching.png --out outputs

This will write outputs (see Generated Files)

Inspect the detected graph (print summary)

You can inspect the detected nodes, edges, and labels using --print-graph.

diagram2code tests/fixtures/branching.png --out outputs --print-graph.

This will:

  • run the full detection pipeline
  • write all normal output files
  • print a human-readable graph summary to the console

Example Output:

Graph summary
Labels source: none
Nodes: 4
  - id=0 bbox=(40, 40, 76, 76) label=''
Edges: 4
  - 0 -> 1

Dry-run mode

If you only want to inspect the result without writing any files, use:

diagram2code diagram.png --dry-run --print-graph

In dry-run mode:

  • detection still runs fully
  • no files are written
  • OCR does not write labels.json
  • export bundles are not created

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).

Label resolution order (important)

When multiple label sources are possible, diagram2code resolves labels in the following priority order:

  1. Explicit labels file
    diagram2code diagram.png --labels labels.json
    
  2. Auto-detect labels.json inside export directory
    diagram2code diagram.png --export export_out
    
    If export_out/labels.json exists, it is automatically loaded.
  3. OCR extraction
    diagram2code diagram.png --extract-labels
    
  4. Fallback
    • If none of the above are provided, nodes have empty label The active source is shown when using --print-graph:
    Labels source: auto (export_out/labels.json)
    

Export Bundle

The --export flag creates a self-contained runnable bundle(easy to share). If labels.json exists inside the export directory, it will be automatically used on subsequent runs.

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

CLI Usage Examples

Basic run (writes outputs to outputs/):

python -m diagram2code path/to/image.png

Export a runnable bundle:

python -m diagram2code path/to/image.png --export out

Render the detected graph (top-down layout):

python -m diagram2code path/to/image.png --export out --render-graph --render-layout topdown

Render the graph as SVG:

python -m diagram2code path/to/image.png --export out --render-graph --render-format svg

Run without writing debug artifacts:

python -m diagram2code path/to/image.png --no-debug

Diagram 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

diagram2code-0.1.4.tar.gz (26.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

diagram2code-0.1.4-py3-none-any.whl (22.0 kB view details)

Uploaded Python 3

File details

Details for the file diagram2code-0.1.4.tar.gz.

File metadata

  • Download URL: diagram2code-0.1.4.tar.gz
  • Upload date:
  • Size: 26.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for diagram2code-0.1.4.tar.gz
Algorithm Hash digest
SHA256 a9888db71463a9a767e6f92fd994c105d0dae752a403cc7953b79dddedd20ca2
MD5 a89086db0935fbf95a21e65d0c088411
BLAKE2b-256 a256fca4405731ce2083d2cc01795a1fdc332a754474c0b368290a7156ce8e23

See more details on using hashes here.

File details

Details for the file diagram2code-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: diagram2code-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 22.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for diagram2code-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 632a9d7ef2fb726f747ff54c2fd700254eb67377f59a80f9bcf33a4c5c84bd4a
MD5 754f624f928c114c916cd15e84f680de
BLAKE2b-256 a6ad2d2e9da605cb674bd784816ccd62698693422001f597e4f4c720fde8a312

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page