Skip to main content

Generate DrawIO shape libraries from SVGs

Project description

SVG2DrawIOLib

PyPI - Version PyPI - Python Version PyPI - Downloads CI Publish to PyPI codecov License: MIT Code style: ruff Type checked: mypy Security: bandit

Convert SVG files into DrawIO/diagrams.net shape libraries with support for colorable icons.

Features

  • Batch Conversion: Process individual files, entire directories, or recursive folder structures
  • 🎯 Pixel-Perfect Rendering: Browser-accurate bounding box calculation (via svgelements) eliminates padding and ensures icons render exactly as designed
  • 🎨 Color Customization: Inject CSS classes to enable color editing directly in DrawIO's interface
  • 📏 Flexible Sizing: Proportional scaling with aspect ratio preservation, or fixed dimensions
  • 📚 Library Management: Create new libraries, add/remove icons, and list contents
  • 🚀 Modern CLI: Beautiful, colorful output with rich-click
  • 🔧 Modern Python Stack: Built with ruff, mypy, bandit, pytest, and pre-commit hooks

Quick Start

Installation

pip install SVG2DrawIOLib

Basic Usage

# Convert individual SVG files to DrawIO library
SVG2DrawIOLib create icon1.svg icon2.svg -o my-library.xml

# Convert all SVGs in a directory
SVG2DrawIOLib create icons/ -o my-library.xml

# Convert all SVGs in directory and subdirectories
SVG2DrawIOLib create icons/ -o my-library.xml --recursive

# Enable color editing in DrawIO
SVG2DrawIOLib create icons/ --css -o colorable-icons.xml

# Custom dimensions with proportional scaling
SVG2DrawIOLib create icons/ --max-size 64 -o large-icons.xml -R

Documentation

Commands

Create a Library

Create a new DrawIO library from SVG files:

# Basic usage
SVG2DrawIOLib create icon1.svg icon2.svg -o my-library.xml

# From directory
SVG2DrawIOLib create icons/ -o my-library.xml

# Recursive directory scan
SVG2DrawIOLib create icons/ -o my-library.xml --recursive

Add Icons to Library

Add new icons to an existing library:

# Add single icon
SVG2DrawIOLib add my-library.xml new-icon.svg

# Add multiple icons
SVG2DrawIOLib add my-library.xml icon1.svg icon2.svg

# Replace duplicates
SVG2DrawIOLib add my-library.xml icon.svg --replace

Remove Icons

Remove icons from a library by name:

SVG2DrawIOLib remove my-library.xml icon-name1 icon-name2

List Icons

List all icons in a library:

SVG2DrawIOLib list my-library.xml

Advanced Features

Color Editing

Enable color customization in DrawIO by injecting CSS classes:

SVG2DrawIOLib create icons/ --css -o colorable-icons.xml

This allows users to change icon colors directly in DrawIO's interface.

Proportional Scaling

Scale icons proportionally while maintaining aspect ratio:

# Scale so longest side is 64px
SVG2DrawIOLib create icons/ --max-size 64 -o large-icons.xml

Fixed Dimensions

Set exact dimensions for all icons:

SVG2DrawIOLib create icons/ --width 50 --height 50 -o square-icons.xml

Custom Configuration

# Custom XML namespace
SVG2DrawIOLib create icons/ --namespace "http://custom.ns" -o library.xml

# Custom CSS tag for color editing
SVG2DrawIOLib create icons/ --css --tag "circle" -o library.xml

# Custom CSS color
SVG2DrawIOLib create icons/ --css --css-color "#FF0000" -o library.xml

How It Works

SVG2DrawIOLib converts SVG files into DrawIO's custom library format:

  1. Parses SVG files and extracts dimensions
  2. Optionally injects CSS classes for color editing support
  3. Encodes SVG as data URI with base64 encoding
  4. Wraps in mxGraphModel XML structure
  5. Compresses using zlib deflate algorithm
  6. Generates library JSON/XML compatible with DrawIO

For technical details about the conversion process, see ARCHITECTURE.md.

Python API

Use SVG2DrawIOLib programmatically:

from pathlib import Path
from SVG2DrawIOLib import SVGProcessor, LibraryManager, SVGProcessingOptions

# Configure processing options
options = SVGProcessingOptions(add_css=True, css_color="#000000")

# Process SVG file
processor = SVGProcessor(options)
icon = processor.process_svg_file(Path("icon.svg"), max_dimension=64)

# Create library
manager = LibraryManager()
metadata = manager.create_library([icon], Path("library.xml"))

print(f"Created library with {metadata.icon_count} icons")

For complete API documentation, see ARCHITECTURE.md.

License

SVG2DrawIOLib is distributed under the terms of the MIT license.

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

svg2drawiolib-1.0.1.tar.gz (97.9 kB view details)

Uploaded Source

Built Distribution

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

svg2drawiolib-1.0.1-py3-none-any.whl (26.3 kB view details)

Uploaded Python 3

File details

Details for the file svg2drawiolib-1.0.1.tar.gz.

File metadata

  • Download URL: svg2drawiolib-1.0.1.tar.gz
  • Upload date:
  • Size: 97.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for svg2drawiolib-1.0.1.tar.gz
Algorithm Hash digest
SHA256 d668900fb4b6670cf485cea1a28b66092a6de390cfa0e8acddd89238e89d193f
MD5 c655b14203cf380540b6b3a6396f2f9a
BLAKE2b-256 1090d0fd8eb4fc06d48a800e0917b03bb9f1f87125f3b01a279b0cc9e51257cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for svg2drawiolib-1.0.1.tar.gz:

Publisher: publish.yml on jamesbconner/SVG2DrawIOLib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file svg2drawiolib-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: svg2drawiolib-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 26.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for svg2drawiolib-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2bb06c471e9a3a5c6f4074a889218e492ddfab706f21e69d99e547fd12c20eab
MD5 9489289c7bbf72a2f0ba54a01b8991f7
BLAKE2b-256 ff078670d96581a5ed68757113b84406988f6b2c4b121f0d64e8954c0214a4ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for svg2drawiolib-1.0.1-py3-none-any.whl:

Publisher: publish.yml on jamesbconner/SVG2DrawIOLib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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