Skip to main content

skppy — SketchUp .skp Toolkit

skppy (reads "skippy") is a Python toolkit for reading SketchUp (.skp) files and writing the confirmed modern-format public model graph. It does not require SketchUp or its C API, and it uses NumPy for vector, matrix, UV, and image-alpha operations.

It provides a Pythonic object model independent of SketchUp's C API. It reads the ZIP/VFF container used by newer files and the earlier CArchive container. Compatibility samples cover the supported save generations and verify format detection and version dispatch; semantic coverage still varies by class and version. skppy.load() detects the container and selects the correct parser automatically.

Continuous integration tests Python 3.11 through 3.14 on Linux, macOS, and Windows. The Blender addon requires Blender 4.2 or newer; its headless integration suite runs against Blender 4.5 LTS and Blender 5.2 LTS.

In addition to the skppy library, this repo contains a self-contained Blender addon for importing and exporting .skp files. The addon converts geometry, reusable components, collection instances, materials/textures, UVs, tags, cameras/scenes, text annotations, and scalar custom properties.

Documentation

The complete documentation is published at dantedex.github.io/skppy. Use latest for the current development documentation or select a stable release such as 0.9.1 from the version menu.

Documentation sources live in docs/. Build the current sources with make docs, or build all documented releases and main with make docs-versioned.

Features

  • Read ZIP/VFF .skp files emitted for SketchUp 2021 and later
  • Read pre-ZIP CArchive .skp files into the same public model classes
  • Parse geometry (vertices, edges, faces, curves, arc curves, guide points/lines, section planes)
  • Parse component definitions and instances (including nested groups and images)
  • Parse materials with colors, textures, and PBR properties (metallic, roughness)
  • Parse layers (tags) and layer folders
  • Parse cameras, scenes (saved views), rendering options, shadow info, axes
  • Parse edge flags (soft/smooth/hidden bits)
  • Parse face UV projections and front/back materials
  • Parse line styles, fonts, text styles, dimension styles
  • Parse environment data, sun data, options manager, attribute dictionaries
  • Triangulate faces with holes, or split single-hole faces into two n-gons
  • Builder and writer API for modern models and SketchUp Make 2017 geometry
  • Blender addon for importing and exporting .skp files through Blender's File menu

Quick Start

pip install skppy
import skppy

# Load a .skp file
model = skppy.load("my_model.skp")
print(model.header.version_string)       # e.g. "{26.1.103}"
print(len(model.entities.faces))         # number of root-level faces
print(len(model.materials))              # number of materials
print(len(model.definitions))            # number of component definitions

# Traverse geometry
for face in model.entities.faces:
    print(face.id, face.plane, face.front_material_id)
    triangles = face.triangulate(model.entities)

# Inspect materials
for mat in model.materials:
    print(f"{mat.name}: color={mat.color}, metallic={mat.metallic}")

# Look at component definitions
for defn in model.definitions:
    print(f"{defn.name}: {len(defn.entities.faces)} faces")

Creating a model from scratch

import skppy

model = skppy.new_model()
brick = model.add_material("Brick", color=skppy.Color(180, 80, 60))
defn = model.add_definition("Wall")
face = defn.entities.add_face([(0,0,0),(300,0,0),(300,250,0),(0,250,0)])
face.front_material_id = brick.id
model.entities.add_instance(defn, transform=skppy.Transform.identity())
model.save("wall.skp")

Running tests

make test

Run the isolated Blender extension integration with make test-blender.

Release notes are maintained in CHANGELOG.md. Version tags build and test both the Python distribution and bundled Blender extension before publishing their artifacts.

Project

Development and AI Usage

This package used AI assistance during research, implementation, tests, and documentation. All AI-assisted changes were reviewed and edited by a human developer, who also defined the overall design and architecture.

Format support is an independent interoperability implementation based on files produced through documented public interfaces and on observable file behavior. The project contains only original source code and redistributable test assets.

License

skppy is licensed under the MIT License. See LICENSE for details.

Legal Disclaimer

skppy is an independent interoperability project and is not affiliated with or endorsed by Trimble Inc., the company that develops SketchUp. SketchUp is a trademark of its respective owner.

Metadata

Release files for skppy 0.9.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for skppy 0.9.1
File Size Uploaded
skppy-0.9.1.tar.gz 518.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for skppy 0.9.1
File Interpreter ABI Platform
skppy-0.9.1-py3-none-any.whl Python 3 none any Details

Total release size: 818.0 kB

Release files / skppy-0.9.1.tar.gz

Download URL skppy-0.9.1.tar.gz
Size 518.9 kB
Tags Source
SHA-256 checksum
How to use checksums
273cd5fd4b1e431ccfec75b77c202ae02166ffcd87e1a419aa1025947ddef19a
BLAKE2b-256 checksum
How to use checksums
d9895d2d3c6479752b0a2547ea56e4a2a0a769778dc3e806a45b396dc7c9c06c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 10, 2026.

Transparency log

Release files / skppy-0.9.1-py3-none-any.whl

Download URL skppy-0.9.1-py3-none-any.whl
Size 299.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4f867f54f2147089be4c6dbdffa9e0dcae60c342f13345ed85f727053ebfa386
BLAKE2b-256 checksum
How to use checksums
7eb6a49ac16e397ec119f4f1ec8d86b60d804bdb0aa549833aa48581c56bc90b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 10, 2026.

Transparency log

Release history Release notifications | RSS feed

0.10.0

2 release files

This release

0.9.1 This release

2 release files

0.9.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page