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.

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.0

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.0
File Size Uploaded
skppy-0.9.0.tar.gz 505.3 kB Details

Built distribution (wheel)

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

Total release size: 799.7 kB

Release files / skppy-0.9.0.tar.gz

Download URL skppy-0.9.0.tar.gz
Size 505.3 kB
Tags Source
SHA-256 checksum
How to use checksums
96ef56df15768a6ebe9394392b7645b373296068e9821bb5f2710691ff23fae8
BLAKE2b-256 checksum
How to use checksums
ac47b2b4b48010231ddbf0fa6f90ae526754341f18b6ae70389a70b57a6ec3ca
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.0-py3-none-any.whl

Download URL skppy-0.9.0-py3-none-any.whl
Size 294.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b06069fdec082ed35cee8889a3e1bacab94b34c41767d862bc23c37f7c7e9204
BLAKE2b-256 checksum
How to use checksums
afa3546b0a36831c99d8d38aae4c524a4c95b05dfe86e7d960470e16aa55d6d5
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

0.9.1

2 release files

This release

0.9.0 This release

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