# Native .pptx vs _svg.pptx Output in PPT Master: Key Differences and When to Use Each

> Explore native .pptx vs _svg.pptx output from PPT Master. Discover how DrawingML shapes differ from embedded SVGs and choose the best option for your presentations.

- Repository: [HugoHe/ppt-master](https://github.com/hugohe3/ppt-master)
- Tags: deep-dive
- Published: 2026-04-24

---

**The native .pptx output converts SVG graphics into fully editable DrawingML shapes, while the _svg.pptx file embeds the original SVG as a picture with an optional PNG fallback for older Office versions.**

The hugohe3/ppt-master repository provides a robust toolkit for converting SVG artwork into PowerPoint presentations. Understanding the key differences between the native .pptx and the _svg.pptx output files from PPT Master is essential for choosing the right format for your workflow—whether you need editable vector objects or maximum compatibility across Office versions.

## How the Two Output Modes Work

### Native Mode (Fully Editable Shapes)

In **native mode**, PPT Master uses `convert_svg_to_slide_shapes` to transform SVG paths into native DrawingML elements. This process creates `<p:spTree>` elements in the slide XML that PowerPoint renders as fully editable vector objects. You can modify colors, text, and geometry directly within PowerPoint because the shapes are native to the format.

### Legacy SVG-Reference Mode (Embedded Images)

The **_svg.pptx** output operates in legacy mode, where the tool copies the original SVG file into the `ppt/media` folder and references it via a `<p:pic>` element in the slide XML. When **compatibility mode** is enabled, the system also generates a PNG raster image using `convert_svg_to_png` to support older Office versions that cannot render SVG directly.

## Technical Implementation in the Source Code

The decision logic resides in [`svg_to_pptx/pptx_builder.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_to_pptx/pptx_builder.py) within the `create_pptx_with_native_svg` function (lines 77-84). This function accepts two critical boolean parameters: `use_native_shapes` and `use_compat_mode`.

When `use_native_shapes` is set to `True`, the code explicitly disables compatibility mode:

```python
def create_pptx_with_native_svg(...,
                               use_native_shapes: bool = False,
                               use_compat_mode: bool = True,
                               ...) -> bool:
    # Native shapes mode takes priority over compat mode

    if use_native_shapes:
        use_compat_mode = False

```

If the PNG renderer is unavailable and the user requests legacy mode with compatibility, the system falls back to pure SVG embedding (lines 101-111):

```python
renderer_name, renderer_status, renderer_hint = get_png_renderer_info()
if not use_native_shapes and use_compat_mode and PNG_RENDERER is None:
    print("Warning: No PNG rendering library installed, cannot use compatibility mode")
    ...
    use_compat_mode = False

```

### Content-Type Registration

When the PPTX is repackaged, the `[Content_Types].xml` file is patched differently for each mode:

- **Legacy mode**: Adds `Extension="svg"` entry (lines 60-63).
- **Compatibility mode**: Adds `Extension="png"` if PNG images are generated (lines 63-64).
- **Native mode**: Adds JPEG extensions when raster images are referenced by converted shapes (lines 65-68).

## File Structure and Slide XML Differences

**Native .pptx Characteristics:**

- **Media folder:** Contains only binary blobs for images referenced by shapes (no original SVG file).
- **Slide XML:** Contains editable `<p:spTree>` elements with DrawingML shape definitions created by the converter.
- **PowerPoint behavior:** Treats content as native vector objects—you can ungroup and edit individual paths.

**_svg.pptx Characteristics:**

- **Media folder:** Contains `image1.svg` (always) and optionally `image1.png` when compatibility mode succeeds and a renderer is available.
- **Slide XML:** Contains a single `<p:pic>` element pointing to the SVG via relationship IDs (`rId2`, `rId3`).
- **PowerPoint behavior:** Treats the slide as a picture; displays SVG in Office 2019+ and falls back to PNG in older versions.

## CLI Usage Examples

Generate both versions (default):

```bash
python -m skills.ppt-master.scripts.svg_to_pptx \
    my_project -s final

```

Generate only the native-shapes version:

```bash
python -m skills.ppt-master.scripts.svg_to_pptx \
    my_project -s final --only native \
    -o outputs/my_native.pptx

```

Generate only the legacy SVG-reference version (with PNG fallback):

```bash
python -m skills.ppt-master.scripts.svg_to_pptx \
    my_project -s final --only legacy \
    -o outputs/my_svg.pptx

```

The `--only native` flag forces `use_native_shapes=True`, while `--only legacy` forces `use_native_shapes=False` and maintains `use_compat_mode` unless you also supply `--no-compat`.

## Key Source Files

- **[`svg_to_pptx/pptx_builder.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_to_pptx/pptx_builder.py)**: Core assembly logic and mode selection (lines 77-84).
- **[`svg_to_pptx/pptx_cli.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_to_pptx/pptx_cli.py)**: CLI argument parsing for `--only native|legacy`.
- **[`svg_to_pptx/drawingml_converter.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_to_pptx/drawingml_converter.py)**: Implements the actual SVG to DrawingML shape conversion used in native mode.
- **[`svg_to_pptx/pptx_slide_xml.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_to_pptx/pptx_slide_xml.py)**: Generates the `<p:pic>` slide XML for legacy mode.
- **[`svg_to_pptx/pptx_media.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_to_pptx/pptx_media.py)**: Handles PNG rendering via `get_png_renderer_info` when compatibility mode is active.

## Summary

- **Native .pptx** converts SVG to editable DrawingML shapes via `convert_svg_to_slide_shapes`, producing fully editable slides but requiring Office 2019+ for best results.
- **_svg.pptx** embeds the original SVG as an image with an optional PNG fallback, maximizing compatibility but limiting editability to image cropping rather than vector manipulation.
- The mode is controlled by the `use_native_shapes` parameter in `create_pptx_with_native_svg`, with CLI access via `--only native` or `--only legacy`.
- Compatibility mode depends on the PNG renderer availability checked by `get_png_renderer_info` in [`svg_to_pptx/pptx_media.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_to_pptx/pptx_media.py).

## Frequently Asked Questions

### Can I edit the shapes in a _svg.pptx file?

No. The _svg.pptx treats the SVG as an embedded picture referenced through a `<p:pic>` element in the slide XML. You can crop or resize the image, but you cannot edit individual paths, colors, or text without regenerating the file. For editable shapes, use the native .pptx output which stores content as DrawingML elements.

### Why does my _svg.pptx include a PNG file?

When `use_compat_mode` is enabled and a PNG renderer is available, PPT Master generates a raster fallback to ensure the slide displays correctly in older Office versions that lack SVG support. If no renderer is installed, the system falls back to pure SVG embedding and issues a warning that compatibility mode is unavailable.

### Which output format should I choose for Office 2016?

Use the _svg.pptx (legacy) output with compatibility mode enabled. Office 2016 has limited SVG support and will display the PNG fallback instead. The native .pptx output relies on DrawingML features that may not render correctly in versions prior to Office 2019.

### Where is the conversion logic implemented?

The actual SVG to DrawingML conversion logic resides in [`svg_to_pptx/drawingml_converter.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_to_pptx/drawingml_converter.py). The orchestration logic that decides between native shapes and legacy embedding lives in [`svg_to_pptx/pptx_builder.py`](https://github.com/hugohe3/ppt-master/blob/main/svg_to_pptx/pptx_builder.py) within the `create_pptx_with_native_svg` function starting at line 77.