Skip to main content

Remove unused master shapes from Visio (.vsdx) files to dramatically reduce file size

Project description

vsdx-shrinker

Remove unused master shapes from Visio (.vsdx) files to dramatically reduce file size.

The Problem

Visio files can become bloated when you copy-paste content from PDFs, vector graphics, or other sources. Each paste operation can create "master shapes" that remain in the file even after you delete the visible content. These orphaned masters can make your file 10x larger than necessary.

How It Works

VSDX files are ZIP archives containing XML. This tool:

  1. Extracts the VSDX file
  2. Scans page content to find which masters are actually referenced (via USE("...") patterns)
  3. Removes unreferenced masters from masters.xml and deletes their XML files
  4. Repacks the cleaned archive

Installation

pip install vsdx-shrinker

Or with uv:

uv tool install vsdx-shrinker

Usage

Command Line

Shrink a file (creates backup):

vsdx-shrinker diagram.vsdx

Shrink to a new file:

vsdx-shrinker diagram.vsdx -o diagram_small.vsdx

Analyze without modifying:

vsdx-shrinker diagram.vsdx --analyze

Python API

from vsdx_shrinker import shrink_vsdx, analyze_vsdx

# Analyze a file
result = analyze_vsdx("diagram.vsdx")
print(f"Can save {result['potential_savings_mb']} MB")

# Shrink a file
result = shrink_vsdx("diagram.vsdx", output_path="diagram_small.vsdx")
print(f"Reduced by {result['reduction_percent']}%")

CLI Options

usage: vsdx-shrinker [-h] [-o OUTPUT] [--no-backup] [--analyze] [-q] [--version] input

positional arguments:
  input                 Input .vsdx file path

options:
  -h, --help            show this help message and exit
  -o, --output OUTPUT   Output file path (default: overwrite input with backup)
  --no-backup           Do not create backup when overwriting input file
  --analyze             Only analyze the file, do not modify
  -q, --quiet           Suppress output except errors
  --version             show program's version number and exit

Example Output

$ vsdx-shrinker presentation.vsdx --analyze
Analysis of: presentation.vsdx
  Total masters:      244
  Used masters:       6
  Unused masters:     238
  Potential savings:  79.17 MB

$ vsdx-shrinker presentation.vsdx -o presentation_clean.vsdx
Shrunk: presentation.vsdx
  Original size:    14.8 MB
  New size:         1.6 MB
  Reduction:        13.2 MB (89.2%)
  Masters removed:  238
  Output:           presentation_clean.vsdx

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vsdx_shrinker-0.1.2.tar.gz (8.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vsdx_shrinker-0.1.2-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file vsdx_shrinker-0.1.2.tar.gz.

File metadata

  • Download URL: vsdx_shrinker-0.1.2.tar.gz
  • Upload date:
  • Size: 8.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for vsdx_shrinker-0.1.2.tar.gz
Algorithm Hash digest
SHA256 f355670b86ebbacea957c16fad3000d489100ed4d197907df68e1a87f2e37976
MD5 502121db211ad63c2b65af25b8009ed2
BLAKE2b-256 e15fb74d18e6d2a1b0d5b2de228872c6fb4e7c952a3a62fa97cd6c5d91c262b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for vsdx_shrinker-0.1.2.tar.gz:

Publisher: python-publish.yml on Cognitohazard/vsdx-shrinker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vsdx_shrinker-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: vsdx_shrinker-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 8.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for vsdx_shrinker-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5983ece5e51188d2bfa0e2ff4c7763e042b74634696e56994c329d4136be60d1
MD5 76dd42f9c7a3819ed62626c8080debfa
BLAKE2b-256 8b1eeb38f1ed0b68849eb68bc5bb572e2fe82a8c598600cc58e7e89f8e96c794

See more details on using hashes here.

Provenance

The following attestation bundles were made for vsdx_shrinker-0.1.2-py3-none-any.whl:

Publisher: python-publish.yml on Cognitohazard/vsdx-shrinker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page