Skip to main content

Convert Excalidraw diagrams to PowerPoint or Lucid Package Format

Project description

excalidraw-convert

Convert Excalidraw diagrams to editable PowerPoint vector objects or Lucid Package Format (.lucid).


Features

PowerPoint output

Each shape, arrow, and text box becomes a native PowerPoint object you can move, resize, recolour, and animate individually — not a flat image.

Excalidraw element PowerPoint output
Rectangle (with/without roundness) Auto-shape (Rectangle / Rounded Rectangle)
Ellipse Auto-shape (Oval)
Diamond Auto-shape (Diamond)
Arrow (2-point) Straight Connector with arrowheads
Line / Arrow (multi-point) Freeform path
Freedraw Freeform path (approximate)
Text (standalone) Text Box
Text (bound to shape) Text inside the parent shape
Image (PNG/JPEG/WEBP) Embedded picture
Image (SVG) PNG fallback (requires cairosvg)
Frame Separate slide
No frames Single slide (whole canvas)

Lucid output

Produces a .lucid file (ZIP archive in Lucid Package Format) that can be opened directly in LucidChart or LucidSpark.

Excalidraw element Lucid output
Rectangle (with/without roundness) rectangle shape
Ellipse circle shape
Diamond diamond shape
Arrow / Line (2-point) elbow line connector
Arrow / Line (multi-point) straight line with intermediate joints
Freedraw flexiblePolygon (downsampled to ≤100 vertices)
Text (standalone) text shape
Text (bound to shape) Text property on the parent shape
Image image shape with file embedded in the archive
Frame Separate page
No frames Single page (whole canvas)

Styling carried over (both formats)

Fill colour, stroke colour, stroke width, dashed/dotted strokes, rounded corners, arrowhead types, opacity, background colour, multi-line text, font family, font size, and text alignment.


Installation

pip install excalidraw-convert

For SVG image support in PowerPoint output (optional):

pip install "excalidraw-convert[svg]"

To install from source:

pip install -e ".[dev]"

Usage

Command line

# Convert to PowerPoint
excalidraw-convert convert "https://excalidraw.com/#json=<id>,<key>" -o output.pptx

# Convert to Lucid Package Format
excalidraw-convert convert-lucid "https://excalidraw.com/#json=<id>,<key>" -o output.lucid

# From a direct JSON / .excalidraw file URL
excalidraw-convert convert "https://raw.githubusercontent.com/you/repo/main/diagram.excalidraw" -o output.pptx

# Append slides to an existing presentation
excalidraw-convert convert "https://..." -o existing.pptx --embed

# Inspect a scene before converting
excalidraw-convert inspect "https://..."

Also callable as a module:

python -m excalidraw_convert convert "https://..." -o output.pptx
python -m excalidraw_convert convert-lucid "https://..." -o output.lucid

Python API

from excalidraw_convert import fetch_scene, convert, convert_to_lucid

scene = fetch_scene("https://excalidraw.com/#json=<id>,<key>")

# PowerPoint
convert(scene, "output.pptx")

# Lucid Package Format
convert_to_lucid(scene, "output.lucid")

# Append to an existing PowerPoint file
convert(scene, "existing.pptx", embed_path="existing.pptx")

# Custom slide dimensions (inches, new files only)
convert(scene, "output.pptx", slide_width=10, slide_height=7.5)

Supported URL formats

Format Example
Excalidraw share link https://excalidraw.com/#json=abc123,base64key
Raw .excalidraw file URL https://raw.githubusercontent.com/.../diagram.excalidraw
Any URL returning JSON https://your-server.com/scene.json

Note on Excalidraw share links: the scene is end-to-end encrypted in the browser. This tool replicates the AES-GCM decryption that the Excalidraw web app performs client-side. If decryption fails for a link, try exporting the scene as a .excalidraw file and hosting it somewhere accessible.


Limitations / known gaps

Both formats

  • Roughness / hand-drawn style: Excalidraw's sketchy aesthetic is not reproduced — shapes are rendered as clean geometric shapes.
  • Hachure fill: approximated as a solid fill.
  • Curved / elbow arrows: rendered as straight connectors or straight segments.
  • freedraw pressures: variable stroke-width pressure data is ignored; a fixed width is used.
  • Grouped elements: group membership is preserved in rendering order but not as native groups.
  • Embeddable / iframe elements: skipped with a warning.
  • Fonts: Excalidraw's Virgil hand-drawn font is mapped to Caveat (install it for best results; falls back to the system default).

PowerPoint only

  • freedraw elements are rendered as freeform polygon paths (not true brush strokes).

Lucid only

  • freedraw elements are approximated as flexiblePolygon shapes with up to 100 sampled vertices.
  • Arrow connection points snap to the nearest edge of the target shape.

Development

pip install -e ".[dev]"
pytest tests/ -v

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

excalidraw_convert-0.1.0.tar.gz (23.7 kB view details)

Uploaded Source

Built Distribution

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

excalidraw_convert-0.1.0-py3-none-any.whl (22.0 kB view details)

Uploaded Python 3

File details

Details for the file excalidraw_convert-0.1.0.tar.gz.

File metadata

  • Download URL: excalidraw_convert-0.1.0.tar.gz
  • Upload date:
  • Size: 23.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for excalidraw_convert-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ddba68b1a2ce9297e6e5fb03b1d46b8d4517a93617c9453d875322a1cd7a344d
MD5 f080f09427c0257cb56c3462ccd419a2
BLAKE2b-256 348c8811e0461b4fecbe72a89f79bcb47675aded6f9819fef9ad55109cb0b6c9

See more details on using hashes here.

File details

Details for the file excalidraw_convert-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for excalidraw_convert-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e629b5e2a77a7951f183eed60072dc96d723ac4102f20e53f546cd7cc588b770
MD5 b0aafee708d21d975ad09bbfc08ea983
BLAKE2b-256 f0b422fb49b226d7a38542fee3b1894447d0e0d7c55096163c4592c39b5bd5a0

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