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 optionallyimage1.pngwhen 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
svg_to_pptx/pptx_builder.py: Core assembly logic and mode selection (lines 77-84).svg_to_pptx/pptx_cli.py: CLI argument parsing for--only native|legacy.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: Generates the<p:pic>slide XML for legacy mode.svg_to_pptx/pptx_media.py: Handles PNG rendering viaget_png_renderer_infowhen 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_shapesparameter increate_pptx_with_native_svg, with CLI access via--only nativeor--only legacy. - Compatibility mode depends on the PNG renderer availability checked by
get_png_renderer_infoinsvg_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:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →