Skip to main content

OpenSceneGraph.py logo

PyPI Python Linux wheel MIT License C++20 OpenSceneGraph

Key Features (September, 2026)

  • Covers most of the core osg namespace, as well as the immediately useful portions of osgViewer, osgUtil, osgGA, and osgDB. Any missing or unwrapped objects can be added quickly as needed.

  • Implements only the modern, non-FFP parts of OpenSceneGraph; all testing is done with GL3/GLCORE as the minimum target.

  • Works in both modular and embedded setups. In an embedded build, the entire OpenSceneGraph.py module interface can be compiled into the resulting library or binary, making packaging and deployment much simpler.

  • Provides solutions to some of the sharp edges involved in wrapping intrusively reference-counted code, especially object lifetime. In many pybind11 bindings, wrapper code must rely heavily on keep_alive<> in order to guarantee object lifetime, which can lead to memory bloat and object accumulation throughout the life of the process. OpenSceneGraph.py uses a different approach in which the owning PyObject* reference is stored inside the UserDataContainer of the instance, so when something is deleted or reassigned, it can truly be deallocated.

  • Preserves stable Python identity for C++ object instances, even when those objects are accessed repeatedly through container proxies or property getters. This avoids one of the most common and confusing failure modes in C++/Python bindings: multiple Python wrapper objects referring to the same underlying C++ instance without behaving like the "same object" at the Python level.

  • Uses a unified proxy architecture across intrusive reference-counted objects, shared-ownership objects, sequence-style containers, mapping-style containers, and persistent property-backed references. This keeps the Python API consistent while still respecting native ownership and lifetime rules.

  • Overhauls the OSG interface, making it naturally Pythonic and substantially more pleasant to work with. Instead of binding the OSG API 1:1, OpenSceneGraph.py exposes semantic proxies over things like osg::Group, osg::Geode, osg::Geometry, and more. For example:

    # Instead of this...
    g = osg.Group()
    g.addChild(osg.Node())
    g.addChild(osg.Node())
    g.addChild(osg.Node())
    
    # ...you instead do something like:
    g = osg.Group(name="Group", children=(
        osg.Geode(name="Geode_00"),
        osg.Node(name="Node_00", debug=True),
        osg.Node(),
        # ...etc...
    ))
    
    g.children[0].drawables.extend((
        osg.Geometry(),
        osg.ShapeDrawable(),
        # ...etc...
    ))
    
  • Container-like APIs are backed by semantic proxies, not thin wrappers. These preserve object identity, native behavior, and ownership rules while supporting natural Python idioms such as indexing, iteration, mutation, appending, extending, and keyword-based construction.

  • Provides a robust callback binding system supporting both Python subclass overrides and plain Python callables/lambdas for OSG callback types. Traversal semantics are preserved correctly, so native OSG behavior is not replaced by a Python-specific approximation.

  • Object instances pass cleanly across the Python/C++ boundary; anything created in one environment can be accessed directly and used in the other.

  • Designed for incremental embedding into existing C++ OSG applications. Python can be introduced as a scripting/runtime layer without requiring an all-Python rewrite of the existing codebase.

  • All of the OpenSceneGraph.py headers are exposed, allowing any existing codebase to adapt its current stack so that it works inside OpenSceneGraph.py natively. Helpers, trampoline classes, proxy machinery, and related infrastructure are all accessible from C++.

  • Makes wide use of the buffer protocol, meaning data coming from libraries like NumPy or PyTorch can be passed to and visualized with OpenSceneGraph.py with almost no copying of data. This also works in reverse: data from OpenSceneGraph.py can be sent to NumPy, PyTorch, and similar libraries with little to no copying.

  • Supports modern interactive and asynchronous workflows, including cooperative asyncio integration, background task execution, progress/event queues, and clean cross-language cancellation and shutdown patterns.

  • Perhaps best of all: OpenSceneGraph.py can be used INTERACTIVELY. You can fire up something like ipython, interactively add objects to your scene, modify attributes, change object internals, and watch it all take effect immediately--including the entire Program / Shader pipeline.

Examples

The best way to get acquainted with OpenSceneGraph.py is to dive right into the examples.

CUDA (AI/LLM Integration)

Python is the default language of the AI/ML world, and OpenSceneGraph.py doesn't stop at making OSG easy to script from Python; it can also visualize data that never leaves the GPU in the first place. pyosg-cuda-points.py proves the core mechanism: a CUDA kernel (compiled at runtime via NVRTC--no system CUDA toolkit required) writes directly into the same GL buffer OSG renders from, every frame, with zero CPU involvement in the actual payload. The only thing that ever touches the CPU is a single scalar (time), exactly like a GLSL uniform. Swap the kernel body for "read from an LLM's hidden-state tensor" and nothing about the architecture changes; this is the seed of a much bigger idea: visualizing GPU-resident model internals (embeddings, attention, diffusion latents) live, with a provable "no copies" story.

pyosg-points.py is the simpler sibling for when you don't mind the CPU being involved: it feeds NumPy-simulated ML output (positions and labels, as if a PyTorch inference result had already been moved to host memory) into OSG through the buffer-protocol bindings -- still close to zero-copy for Python<->OSG, just not zero-copy all the way from the GPU.

RTT/MRT/TAA

Render-to-texture, multiple render targets, and temporal techniques are first-class citizens in OpenSceneGraph.py, not something bolted on -- and wiring up a multi-camera pipeline in Python is noticeably less ceremony than the equivalent C++.

  • pyosg-rtt.py - the basics: a PRE_RENDER camera renders color and depth to textures, and a fullscreen POST_RENDER pass composites them (toon shading plus a depth-based outline).
  • pyosg-blur.py - chained multi-pass: several single-output passes feeding into each other, forming a Gaussian blur pipeline.
  • pyosg-mrt.py - true MRT: one geometry pass writing color and normal buffers simultaneously via GLSL layout(location = n) out, the shape a deferred G-buffer actually needs. Press 1/2/3 to inspect the individual G-buffer channels.
  • pyosg-taa.py - temporal anti-aliasing: sub-pixel camera jitter accumulated into a history texture across frames, converging a still view to a visibly smoother image over 16 frames.

Polyhaven API

pyosg-polyhaven-texture.py pulls a full PBR material (base color, normal, ORM) straight from Polyhaven's free asset library--by slug, by URL, or from a local glTF--and renders it with the same physically based lighting model as the Lighting Series. Massive thanks to Polyhaven for making such high-quality, freely licensed assets available to the whole community; examples like this one wouldn't be nearly as compelling without them.

Async

OpenSceneGraph.py deliberately leans on Python's asyncio rather than threading wherever background work is needed. Interacting correctly with the GIL from multiple native threads is notoriously easy to get subtly wrong, while async/await keeps everything on one thread and one event loop.

  • pyosg-async.py - the core pattern: background work reports progress back to the render loop through a call_soon_threadsafe queue bridge, while viewer.frame() keeps pumping the whole time.
  • pyosg-async-gltf.py - the same pattern applied to real asset loading: the viewer window appears immediately and the model pops in a few seconds later, with real per-stage (parsing/textures/nodes) progress, all off the GIL via asyncio.to_thread.

Lighting Series

In preparation for release, we built a 12-part lighting series that walks from a bare Lambert diffuse term all the way up to a full deferred PBR + IBL pipeline with a Sketchfab-parity post-processing chain. Each step is a complete, runnable example in examples/lighting that builds directly on the one before it.

Preview Description

00-lambert

00 - Lambert Diffuse · 00-lambert.py

The simplest physically-motivated lighting model: brightness depends only on the angle between the surface normal and the light direction. There is intentionally no ambient term, so the dark side goes pure black; the baseline every later step improves on.

01-blinnphong

01 - Blinn-Phong · 01-blinnphong.py

Three additions on top of Lambert: a constant ambient lift so the dark side is never pitch-black, specular highlights via the halfway vector H = normalize(L + V), and eye-space position passed from the vertex to the fragment shader so V can be computed per-fragment.

02-multilights

02 - Multiple Point Lights · 02-multilights.py

Directional lighting gives way to positional point lights with real inverse-square attenuation, arranged in a classic three-point cinematography setup (key, fill, rim).

03-hemiambient

03 - Hemispherical Ambient · 03-hemiambient.py

The flat ambient constant is replaced with a two-color hemispherical ambient term, lerped by dot(N, worldUp). One extra dot product, no textures, and shadowed surfaces immediately read as sitting in an environment instead of a void.

04-basecolor

04 - Base Color Texture · 04-basecolor.py

The flat albedo uniform is swapped for the model's actual glTF base color texture, sampled with UVs carried through from osg_MultiTexCoord0.

05-normalmapping

05 - Normal Mapping · 05-normalmapping.py

The smooth per-vertex geometric normal is replaced with a per-texel normal sampled from a tangent-space normal map, reconstructed in eye space via a TBN matrix built from glTF's VEC4 tangent attribute.

06-pbr

06 - Physically Based Rendering · 06-pbr.py

Blinn-Phong is replaced with the Cook-Torrance BRDF and a full metallic/roughness workflow driven by the ORM texture: GGX normal distribution, Smith geometry masking, and Fresnel-Schlick, combined per the metallic/dielectric split.

07-emissive

07 - Emissive · 07-emissive.py

The simplest step in the series: one texture sample, added unconditionally after all lighting, unmultiplied by any light contribution; for surfaces that generate their own light, like LEDs or hot metal.

08-shadows

08 - Shadow Mapping · 08-shadows.py

A PRE_RENDER shadow camera renders the scene from the key light's point of view into a depth texture; the main pass transforms each fragment into light-clip space and compares against it. Identical lights and shader math to step 07; only shadowFactor() is new.

09-ibl

09 - Image-Based Lighting · 09-ibl.py

Adds image-based lighting from a pre-baked GGX-prefiltered cubemap (loaded via the osgdb_ktx2 plugin), a startup-baked BRDF LUT, and asynchronously computed spherical-harmonics diffuse irradiance from an HDR environment.

10-dynamicprobes

10 - Dynamic IBL Probes · 10-dynamicprobes.py

Instead of loading a static .ktx2 once, the specular environment cubemap is baked live on the GPU using osgx's C++ prefilter pipeline exposed to Python. Press r to repaint the entire environment and watch the reflection rebake in real time.

11-sketchfab

11 - Sketchfab-Parity Capstone · 11-sketchfab.py

The capstone: a deferred G-buffer + composite architecture (PBR + IBL + shadows) inspired by Sketchfab's post-processing chain: SSAO, bloom, tonemapping, vignette, grain, chromatic aberration, sharpening, and color balance (though we defer TAA until sometime later). Unlike the previous examples, we transition to a single directional light to keep things simple.

Extras

Linux-native windowing utilities that OSG's cross-platform API doesn't offer on its own -- alwaysOnTop(), listMonitors(), moveWindow(), plus the experimental createEGLWindow()/ createGBMWindow() GraphicsWindow factories -- used to live here as an OpenSceneGraph.linux submodule. They were never actually OSG.py-specific, so they moved to the separate osgx project's osgx.platform submodule instead; see examples/pyosg-linux.py for the Python-side usage and osgx's own README for the full API (it has also since grown mouse-capture helpers, osgx.platform.PointerCapture). import osgx alongside OpenSceneGraph to use it -- it has been tested on real Nvidia hardware, including direct DRM/KMS scanout with no X server running at all.

Building

TODO: Detailed CMake compilation guide (but honestly, it's NOT hard).

Most users never need any of this -- pip install OpenSceneGraph grabs a prebuilt wheel (Linux x86-64/aarch64 manylinux_2_28, Windows x86-64; CPython 3.12 currently) with OSG already compiled in. The notes below are for anyone on a platform/Python version without a matching wheel, or who wants to build against a local checkout.

From a git checkout. git clone --recurse-submodules is required -- etc/osgx (the companion utility layer) is a submodule, and pip install ./CMake will fail without it:

git clone --recurse-submodules https://github.com/AlphaPixel/OpenSceneGraph.py
cd OpenSceneGraph.py
pip install .

or drive CMake directly if you want more control:

cmake -S . -B build -DPYOSG_FETCH_OSG=ON -DCMAKE_POLICY_VERSION_MINIMUM=3.5
cmake --build build

PYOSG_FETCH_OSG=ON (the default via pyproject.toml) fetches and builds the pinned OpenSceneGraph revision itself via FetchContent -- there's no separate "install OSG first" step, but expect the first build to take a while, since it's compiling OSG too, not just the bindings. On Linux you'll need the usual X11/GL/image-format dev headers (libXrandr, libjpeg-turbo, libpng, libtiff, GL/GLU); see .github/workflows/wheels.yml's CIBW_BEFORE_ALL steps for the exact package lists used in CI (Linux and Windows/vcpkg).

Forcing a source build without a fresh clone. If you have a source distribution (sdist) tarball already -- built locally with python -m build --sdist, downloaded from a GitHub Actions run artifact, or pulled from PyPI -- point pip straight at the file to build it, bypassing wheel resolution entirely:

pip install ./OpenSceneGraph-<version>.tar.gz

To instead make pip resolve OpenSceneGraph by name from PyPI but refuse any matching wheel and build from the sdist anyway:

pip install --no-binary OpenSceneGraph OpenSceneGraph

(--no-binary :all: applies that to every package in the resolve, not just this one.) There's no dedicated "build from source" flag beyond --no-binary -- pip's --src flag is unrelated, it only controls where editable/VCS checkouts land, not whether a build happens.

The Elephant in the Room

Yes: OpenSceneGraph, and OpenGL itself, are old. Vulkan is widely supported, successors like VSG exist, and it is fair to ask why anyone would build new tooling on top of a 20+ year old scene graph in 2026. A few points in its defense:

  • Two decades of production code, documentation, mailing lists, and forum history mean modern LLMs already understand OSG deeply: its scene graph model, its API, its idioms. That makes anything you build and validate in OpenSceneGraph.py a known-working reference implementation, not a dead end: an AI that already speaks OSG fluently can port it to Vulkan, VSG, or whatever comes next quickly and with high fidelity. Old renderer, unusually good migration story.
  • OSG already has enormous real-world adoption (simulation, visualization, GIS, defense, and more). OpenSceneGraph.py can be used to prototype and de-risk a migration to something newer without committing to a full rewrite up front; especially relevant while we're also working on VSG.py.
  • The REPL-driven, interactive workflow this library enables (see the aipython integration used throughout the Lighting Series) points at the real long-term idea: prompt-driven, live scene authoring, where the underlying renderer becomes almost an implementation detail. Old graphics API, but a genuinely new way of working with it. Video demonstration to come!

Related Projects

OpenSceneGraph.py doesn't try to do everything itself. A few sibling projects, each with Python bindings that are regularly tested against this library, cover more specialized functionality:

  • osgx - modernized C++20 OpenSceneGraph utility layer, plus various opt-in subsystems: osgx::debug (GL debug-extension integration -- driver message callbacks, KHR debug groups, GPU timestamp profiling for tools like Nsight/APITrace) and osgx::imgui (the ImGui-based live-tuning widget system used for on-screen controls throughout the Lighting Series examples). osgx::gltf exposes glTF 2.0 mesh/texture loading with full PBR/IBL support: base color, normal, ORM, and emissive textures, plus specular/diffuse IBL prefiltering, live GPU cubemap baking and (very) rudimentary GPU-based skeletal animation.
  • osgSlug - an OpenSceneGraph frontend for slughorn, bringing Eric Lengyel's GPU vector-text rendering technique (Slug) into OSG.
  • aipython - MCP server and SKILL files used for an AI agent to "drive" an interactive/REPL-based OSG.py session.

Metadata

Release files for OpenSceneGraph 0.1.2

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

Source distribution (sdist)

Source distribution for OpenSceneGraph 0.1.2
File Size Uploaded
openscenegraph-0.1.2.tar.gz 18.5 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for OpenSceneGraph 0.1.2
File
openscenegraph-0.1.2-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
openscenegraph-0.1.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
openscenegraph-0.1.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ ARM64, Linux glibc 2.28+ ARM64 Details
openscenegraph-0.1.2-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
openscenegraph-0.1.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
openscenegraph-0.1.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.27+ ARM64 Details
openscenegraph-0.1.2-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
openscenegraph-0.1.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
openscenegraph-0.1.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ ARM64, Linux glibc 2.28+ ARM64 Details

Total release size: 131.3 MB

Release files / openscenegraph-0.1.2.tar.gz

Download URL openscenegraph-0.1.2.tar.gz
Size 18.5 MB
Tags Source
SHA-256 checksum
How to use checksums
d04568c26d25c0c2ede708a0727b0c8da14a813038e3e98cc17ab707a2e4bdce
BLAKE2b-256 checksum
How to use checksums
ccd43cbebb6873033d9c07aa36baf3190b0ceaa38fe1e8e63393c0be4a713265
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 Sep 4, 2026.

Transparency log

Release files / openscenegraph-0.1.2-cp314-cp314-win_amd64.whl

Download URL openscenegraph-0.1.2-cp314-cp314-win_amd64.whl
Size 14.3 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
237592c747df7a12bf74e027c985598064febdceed66da3a804e78ea058a95ab
BLAKE2b-256 checksum
How to use checksums
b7e98adddf1018cfbaf2767e8c9cabf94cd35892d596fb0fc310ee4dc3369aab
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 Sep 4, 2026.

Transparency log

Release files / openscenegraph-0.1.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL openscenegraph-0.1.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 12.1 MB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
17cb76608e0b6165a766c2d65f65455db9d396cefb1636765318b3fdb4d1d1d3
BLAKE2b-256 checksum
How to use checksums
ba03893912bbf9dc7c819677660c7847427f4fcd68bf300aa5b5350ad8cfb01c
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 Sep 4, 2026.

Transparency log

Release files / openscenegraph-0.1.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL openscenegraph-0.1.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 11.5 MB
Tags CPython 3.14 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
b2016ac5bbebc576540565c2854835dd15cc9914882129078663619915b260d9
BLAKE2b-256 checksum
How to use checksums
f8a5edf8dbac51c1fee5fc9a9a2a040369b3cb3192d29ca979738629b19ba879
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 Sep 4, 2026.

Transparency log

Release files / openscenegraph-0.1.2-cp313-cp313-win_amd64.whl

Download URL openscenegraph-0.1.2-cp313-cp313-win_amd64.whl
Size 13.9 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
5260b08787e51b19018229e9fc91723ccbc32a60658a89c71f9aa30b3b3245ee
BLAKE2b-256 checksum
How to use checksums
c375b54e3b38d353e14c01e80b4616b7c33801639ca38214181adcef8cbcbd17
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 Sep 4, 2026.

Transparency log

Release files / openscenegraph-0.1.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL openscenegraph-0.1.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 12.1 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ea8a332c1fdaeca5ce8a0d19a790629d9bce41982e084d2e93b3ad5ca13b4070
BLAKE2b-256 checksum
How to use checksums
a445ab5698b943bf084a4aa312412895ce35fe8a4b00346f4878d2374af32ca0
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 Sep 4, 2026.

Transparency log

Release files / openscenegraph-0.1.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL openscenegraph-0.1.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 11.4 MB
Tags CPython 3.13 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
c506ea48da7cc9dc9d09a78e54169f41704553658030b9f236619b6695be96dc
BLAKE2b-256 checksum
How to use checksums
f804d788383ea763c3cfe7551747c778de25c962ff9eabd6a1548a71ad3c03f4
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 Sep 4, 2026.

Transparency log

Release files / openscenegraph-0.1.2-cp312-cp312-win_amd64.whl

Download URL openscenegraph-0.1.2-cp312-cp312-win_amd64.whl
Size 13.9 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
0d33705da2935b57106a406c4d74832d0a326b1a5ed1a4513866155fd73a7f82
BLAKE2b-256 checksum
How to use checksums
58bed269b8e0f1051c1c0ca2ff94352815e857113c1563712386f220dac1acac
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 Sep 4, 2026.

Transparency log

Release files / openscenegraph-0.1.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL openscenegraph-0.1.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 12.1 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
09754d325da3688357e03f6087d54345c244ae0e6156a7e90c6af9e390075191
BLAKE2b-256 checksum
How to use checksums
2a4e40bba82f789c162a83f8aa67db31cdbd6b44f380948ed3247fbf825393b6
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 Sep 4, 2026.

Transparency log

Release files / openscenegraph-0.1.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

Download URL openscenegraph-0.1.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Size 11.4 MB
Tags CPython 3.12 Linux glibc 2.27+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
1403ead6a3367c2a5d78cd8099eb3ea1a5db5057fce090f23db37552bbb320da
BLAKE2b-256 checksum
How to use checksums
12285f9a590cd3d669b5c2569869830db5e112ad313ad7e1ec6253afe0cb010f
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 Sep 4, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.2 This release

10 release files

0.1.1

4 release files

0.1.0

1 release file

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