Metadata-Version: 2.4
Name: svg2ooxml
Version: 0.7.3
Summary: SVG-to-PowerPoint converter with native, editable PresentationML output.
Author: SVG2OOXML Contributors
License-Expression: AGPL-3.0-only
Project-URL: Homepage, https://github.com/BramAlkema/svg2ooxml
Project-URL: Documentation, https://github.com/BramAlkema/svg2ooxml/blob/main/docs/README.md
Project-URL: Repository, https://github.com/BramAlkema/svg2ooxml
Project-URL: Issues, https://github.com/BramAlkema/svg2ooxml/issues
Project-URL: Changelog, https://github.com/BramAlkema/svg2ooxml/releases
Project-URL: Commercial Licensing, https://github.com/BramAlkema/svg2ooxml/blob/main/LICENSE-COMMERCIAL.md
Keywords: svg,pptx,powerpoint,ooxml,drawingml
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion
Classifier: Topic :: Office/Business :: Office Suites
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.14
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: LICENSE-COMMERCIAL.md
License-File: LICENSE-CONTENT
Requires-Dist: tinycss2>=1.2
Requires-Dist: click>=8.1
Requires-Dist: lxml>=4.9.0
Requires-Dist: pydantic>=2.5.3
Provides-Extra: dev
Requires-Dist: black>=24.0; extra == "dev"
Requires-Dist: httpx>=0.27; extra == "dev"
Requires-Dist: isort>=5.12; extra == "dev"
Requires-Dist: mypy>=1.8; extra == "dev"
Requires-Dist: pre-commit>=3.5; extra == "dev"
Requires-Dist: pytest>=7.4; extra == "dev"
Requires-Dist: ruff>=0.4.0; extra == "dev"
Requires-Dist: python-pptx>=0.6.23; extra == "dev"
Provides-Extra: accel
Requires-Dist: numpy>=1.24; extra == "accel"
Provides-Extra: color
Requires-Dist: numpy>=1.24; extra == "color"
Requires-Dist: colorspacious>=1.1.0; extra == "color"
Requires-Dist: Pillow>=10.0; extra == "color"
Provides-Extra: render
Requires-Dist: skia-python>=87.5; extra == "render"
Requires-Dist: Pillow>=10.0; extra == "render"
Requires-Dist: numpy>=1.24; extra == "render"
Provides-Extra: slides
Requires-Dist: cryptography>=41.0; extra == "slides"
Requires-Dist: fonttools>=4.43; extra == "slides"
Provides-Extra: api
Requires-Dist: fastapi>=0.109.0; extra == "api"
Requires-Dist: uvicorn[standard]>=0.27.0; extra == "api"
Requires-Dist: pydantic>=2.5.3; extra == "api"
Requires-Dist: python-multipart>=0.0.6; extra == "api"
Requires-Dist: PyJWT>=2.8.0; extra == "api"
Provides-Extra: cloud
Requires-Dist: google-cloud-firestore>=2.14.0; extra == "cloud"
Requires-Dist: google-cloud-storage>=2.14.0; extra == "cloud"
Requires-Dist: google-cloud-iam>=2.14.0; extra == "cloud"
Requires-Dist: google-cloud-tasks>=2.16.0; extra == "cloud"
Requires-Dist: google-api-python-client>=2.130; extra == "cloud"
Requires-Dist: google-auth>=2.26; extra == "cloud"
Requires-Dist: google-auth-oauthlib>=1.2.0; extra == "cloud"
Provides-Extra: payments
Requires-Dist: stripe>=8.0.0; extra == "payments"
Provides-Extra: visual-testing
Requires-Dist: scikit-image>=0.21.0; extra == "visual-testing"
Requires-Dist: Pillow>=10.0.0; extra == "visual-testing"
Dynamic: license-file

<p align="center">
  <img src="https://raw.githubusercontent.com/BramAlkema/svg2ooxml/main/assets/logo.png" alt="svg2ooxml" width="96">
</p>

<h1 align="center">svg2ooxml</h1>

<p align="center">
  <strong>SVG-to-PowerPoint converter with native, editable PresentationML output.</strong>
</p>

<p align="center">
  <a href="https://pypi.org/project/svg2ooxml/"><img src="https://img.shields.io/pypi/v/svg2ooxml" alt="PyPI"></a>
  <a href="https://pypi.org/project/svg2ooxml/"><img src="https://img.shields.io/pypi/dm/svg2ooxml" alt="Downloads"></a>
  <a href="https://pypi.org/project/svg2ooxml/"><img src="https://img.shields.io/pypi/pyversions/svg2ooxml" alt="Python"></a>
  <a href="https://github.com/BramAlkema/svg2ooxml/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-blue.svg" alt="License: AGPL-3.0"></a>
</p>

---

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 Git repository currently also carries an extracted `figma2gslides`
app surface for local development, but that app code is not part of 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

```bash
pip install svg2ooxml
```

Optional extras:

```bash
pip install svg2ooxml[render]    # Skia rendering + visual comparison
pip install svg2ooxml[color]     # Advanced color space support
```

Figma and Google Slides product integrations are intentionally kept out of the
published converter surface.

## Quick Start

```python
from svg2ooxml import SvgToPptxExporter

exporter = SvgToPptxExporter()
exporter.export("input.svg", "output.pptx")
```

### CLI

```bash
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

- [GitHub](https://github.com/BramAlkema/svg2ooxml)
- [Documentation guide](https://github.com/BramAlkema/svg2ooxml/blob/main/docs/README.md)
- [Testing guide](https://github.com/BramAlkema/svg2ooxml/blob/main/docs/testing.md)
- [Animation documentation map](https://github.com/BramAlkema/svg2ooxml/blob/main/docs/internals/animation-documentation-map.md)
- [Changelog](https://github.com/BramAlkema/svg2ooxml/releases)
- [openxml-audit](https://github.com/BramAlkema/openxml-audit)

## License

Dual-licensed: [AGPL-3.0](https://github.com/BramAlkema/svg2ooxml/blob/main/LICENSE) for open source, [Commercial License](https://github.com/BramAlkema/svg2ooxml/blob/main/LICENSE-COMMERCIAL.md) for proprietary use. Contact license@svg2ooxml.com.
