SVG-to-PowerPoint converter with native, editable PresentationML output.
Project description
svg2ooxml
SVG-to-PowerPoint converter with native, editable PresentationML output.
svg2ooxml parses SVG markup, builds a typed intermediate representation, renders native DrawingML XML fragments, and packages them into valid .pptx files. Shapes, text, gradients, filters, masks, clipping paths, and SMIL animations are converted to editable PowerPoint objects — not rasterized images.
svg2ooxml is the converter package. PowerPoint behavior research, authored control decks, and durable oracle evidence are maintained in the companion repository openxml-audit so the package documentation can stay focused on conversion.
The same distribution also carries figma2gslides, a tool package built on top
of the converter for Figma and Google Slides workflows. It is intentionally
separate from the supported svg2ooxml converter API.
Features
- Native DrawingML output — shapes, text, and paths render as editable PowerPoint objects
- SMIL animation support — entrance, emphasis, exit, and motion path animations
- SVG filter effects — blur, drop shadow, color matrix, and compositing
- Gradients & patterns — linear, radial, and pattern fills with correct coordinate transforms
- Masks & clipping — SVG clip paths and masks mapped to OOXML equivalents
- Multi-slide export — split multi-page SVGs into separate slides
- Extensible pipeline — service registry with dependency injection for custom providers
Installation
Requires Python 3.13 or newer.
The base install does not depend on NumPy. NumPy is installed only through the
render, color, or accel extras for raster/filter/color workloads.
pip install svg2ooxml
Optional extras:
pip install svg2ooxml[render] # Skia rendering + visual comparison
pip install svg2ooxml[color] # Advanced color space support
pip install svg2ooxml[figma2gslides] # Figma/Google Slides tool runtime
Current Release
0.8.0 is the fidelity policy, traceability, and converter-hardening release.
Fidelity tiers now come from one typed policy source, trace reports are typed
end to end, optional PPTX docProps trace embedding is behind an explicit switch,
and more shared geometry, color, filter, SVG reference, and policy helpers are
centralized to reduce duplicate conversion behavior.
Quick Start
from svg2ooxml import SvgToPptxExporter
exporter = SvgToPptxExporter()
exporter.export("input.svg", "output.pptx")
CLI
svg2ooxml convert input.svg -o output.pptx
How It Works
SVG text
→ SVGParser.parse() → ParseResult (lxml tree + metadata)
→ convert_parser_output() → IRScene (typed intermediate representation)
→ DrawingMLWriter.render() → DrawingMLRenderResult (XML fragments + assets)
→ PPTXPackageBuilder.write() → .pptx file
Links
License
Dual-licensed: AGPL-3.0 for open source, Commercial License for proprietary use. Contact license@svg2ooxml.com.
Project details
Release history Release notifications | RSS feed
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 svg2ooxml-0.8.0.tar.gz.
File metadata
- Download URL: svg2ooxml-0.8.0.tar.gz
- Upload date:
- Size: 780.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85155081e6698494242a5b1be0b37a483773c5460ea54f98f885f98536eba5a8
|
|
| MD5 |
e04ef6c49dd350c272a55135a4e79601
|
|
| BLAKE2b-256 |
c32f40cbe09cf794c86f5fe04b14215d0848b2fb55ee32c3ca4fa3ca39e732d8
|
Provenance
The following attestation bundles were made for svg2ooxml-0.8.0.tar.gz:
Publisher:
workflow.yml on BramAlkema/svg2ooxml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
svg2ooxml-0.8.0.tar.gz -
Subject digest:
85155081e6698494242a5b1be0b37a483773c5460ea54f98f885f98536eba5a8 - Sigstore transparency entry: 1402535449
- Sigstore integration time:
-
Permalink:
BramAlkema/svg2ooxml@9464d9ed33164e919439d204b421771255ba3ae1 -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/BramAlkema
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@9464d9ed33164e919439d204b421771255ba3ae1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file svg2ooxml-0.8.0-py3-none-any.whl.
File metadata
- Download URL: svg2ooxml-0.8.0-py3-none-any.whl
- Upload date:
- Size: 1.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
113f01ff4b5f83d90d6ba16de2fc7f6d47780adb99a2d9c09e2a3e744806ecb6
|
|
| MD5 |
82bb0eadc4293c6b438e93332d203220
|
|
| BLAKE2b-256 |
0d6bfeb0eb6a1002259012d9639e44be81dcce258d58a691454878075caa395f
|
Provenance
The following attestation bundles were made for svg2ooxml-0.8.0-py3-none-any.whl:
Publisher:
workflow.yml on BramAlkema/svg2ooxml
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
svg2ooxml-0.8.0-py3-none-any.whl -
Subject digest:
113f01ff4b5f83d90d6ba16de2fc7f6d47780adb99a2d9c09e2a3e744806ecb6 - Sigstore transparency entry: 1402535521
- Sigstore integration time:
-
Permalink:
BramAlkema/svg2ooxml@9464d9ed33164e919439d204b421771255ba3ae1 -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/BramAlkema
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@9464d9ed33164e919439d204b421771255ba3ae1 -
Trigger Event:
release
-
Statement type: