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

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 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:

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):

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):

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

Generate only the native-shapes version:

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):

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

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.

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. The orchestration logic that decides between native shapes and legacy embedding lives in svg_to_pptx/pptx_builder.py within the create_pptx_with_native_svg function starting at line 77.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →