Embree-backed isometric renderer that turns meshes into OpenRCT2 palette-indexed sprites.
Project description
OpenRCT2 X7 Renderer
openrct2-x7-renderer is the Embree-backed isometric renderer that turns
triangle meshes into OpenRCT2 palette-indexed sprites.
Heavily inspired by X7's RCTGen.
Install
Requires Python 3.11+. Embree-vendored wheels are published to PyPI:
pip install openrct2-x7-renderer
The wheels bundle Embree + TBB, so there is no system Embree dependency at runtime.
Build from source
Building the extension needs Embree 4
and a C++23 compiler. On macOS: brew install embree.
uv sync
uv run pytest # coverage is enabled by default via pyproject.toml
Quick start
import numpy as np
from openrct2_x7_renderer.mesh import load_mesh
from openrct2_x7_renderer.lights import default_lights
from openrct2_x7_renderer.ray_trace import Context, VIEWS
mesh = load_mesh("model.obj")
ctx = Context(lights=default_lights(), dither=True)
with ctx.begin_render() as scene:
with scene.add_model(mesh, matrix=np.eye(3), translation=np.zeros(3)).finalize() as ready:
sprite = ready.render_view(VIEWS[0]) # -> IndexedImage
Usage
Render context
Context is the entry point for rendering. The three constructor parameters
control the entire render:
from openrct2_x7_renderer.ray_trace import Context
from openrct2_x7_renderer.lights import default_lights
from openrct2_x7_renderer.constants import TILE_SIZE
ctx = Context(
lights=default_lights(), # light rig (see below)
dither=True, # Floyd-Steinberg dithering when quantizing to the palette
upt=TILE_SIZE, # camera scale: units-per-tile (default 3.3)
)
upt controls zoom: smaller values zoom in, larger values zoom out. The CLI
helpers scale upt by TEST_ZOOM (0.125) in test mode (--test) for fast
iteration.
Render lifecycle (typestate pattern)
A single render pass follows a strict state machine enforced at the type level:
Context.begin_render()→ returns aSceneBuilderSceneBuilder.add_model(...)→ chainable, returnsselfSceneBuilder.finalize()→ returns aFinalizedSceneFinalizedScene.render_view(view)/.render_silhouette(view)→ produces sprites- Cleanup via
FinalizedScenecontext manager or explicitend_render()call
ctx = Context(lights=default_lights())
with ctx.begin_render() as scene:
with (
scene
.add_model(mesh, matrix=np.eye(3), translation=np.zeros(3))
.add_model(mesh2, matrix=rotation, translation=offset, mask=MeshFlag.GHOST)
.finalize()
) as ready:
sprite = ready.render_view(VIEWS[0]) # full shaded render
mask = ready.render_silhouette(VIEWS[0]) # solid silhouette / mask sprite
FinalizedScene.__exit__ calls end_render(), freeing the Embree scene.
SceneBuilder.__exit__ calls end_render() only when finalize() was not
called (e.g. the block exited early due to an exception). The context may be
reused across multiple render passes by calling begin_render() again.
SceneBuilder.add_model parameters:
| Parameter | Type | Description |
|---|---|---|
mesh |
Mesh |
Triangle mesh returned by load_mesh |
matrix |
(3,3) float64 |
Rotation / orientation matrix applied to the mesh |
translation |
(3,) float64 |
World-space offset after rotation |
mask |
int |
Bitmask of MeshFlag values (default 0) |
MeshFlag.GHOST (from constants) makes the mesh transparent (ghost ride
vehicles). MeshFlag.MASK marks the mesh as a collision/mask geometry.
Views
VIEWS is a tuple of four (3,3) world-rotation matrices — one per compass
corner, matching OpenRCT2's four viewpoints (NE, NW, SW, SE). These rotate
the scene before the dimetric projection:
from openrct2_x7_renderer.ray_trace import Context, VIEWS
ctx = Context(lights=default_lights())
with ctx.begin_render() as scene:
with scene.add_model(mesh, np.eye(3), np.zeros(3)).finalize() as ready:
for view in VIEWS:
sprite = ready.render_view(view)
Pass any custom (3,3) float64 orthonormal matrix to render from an arbitrary
direction.
Lights
default_lights() returns a nine-light rig that matches X7's RCTGen defaults.
To customise the rig, build a list of Light objects:
from openrct2_x7_renderer.types import Light
from openrct2_x7_renderer.constants import LightType
import numpy as np
lights = [
Light(
type=LightType.DIFFUSE, # LightType.DIFFUSE | .SPECULAR | .HEMI
shadow=True, # whether the light casts shadows
direction=np.array([1.0, 1.65, -1.0]) / ..., # unit vector toward the light
intensity=0.8, # strength multiplier
),
]
Light types:
| Constant | Behaviour |
|---|---|
LightType.DIFFUSE |
Lambertian diffuse shading |
LightType.SPECULAR |
Phong specular highlight |
LightType.HEMI |
Hemisphere / sky light |
When loading lights from a config via load_lights, each direction must be
a non-zero vector; passing [0, 0, 0] raises ValueError.
Lights can also be loaded from a config file (see Config files).
Mesh loading
from openrct2_x7_renderer.mesh import load_mesh
import numpy as np
mesh = load_mesh("model.obj")
# Optional: apply an orthonormal transform at load time
# (e.g. mirror or axis-swap). Negative determinant flips winding order.
# Raises LoadError if the matrix is not orthonormal (|det| − 1 > 0.001).
mesh = load_mesh("model.obj", transform=np.diag([-1, 1, 1]))
load_mesh parses the OBJ file and the MTL it references, loading textures
(map_Kd) as linear-RGB float32 arrays. Standard MTL properties are honoured.
Normal handling: if the OBJ defines vn entries and every face vertex
references one, the artist normals are used directly. If normals are defined
but any face vertex omits the //vn token, a WARNING is logged and
area-weighted face normals are generated for the entire mesh. If no vn
entries exist at all, face normals are generated silently.
UV handling: if a face vertex references a texture coordinate index but no
vt entries are defined, a WARNING is logged and that vertex's UV defaults
to (0, 0).
| MTL directive | Effect |
|---|---|
Kd r g b |
Diffuse colour (sRGB → linear on load; used when no map_Kd is present) |
Ks r g b |
Specular reflectance (sRGB → linear on load) |
Ka r g b |
Ambient reflectance (sRGB → linear on load) |
Ns value |
Phong shininess exponent |
map_Kd file |
Diffuse texture (sRGB → linear on load) |
Material name flags
The renderer recognises keywords in OBJ material names to set rendering behaviour. Keywords are matched by substring, case-sensitive:
| Keyword in material name | Effect |
|---|---|
Remap1, Remap2, Remap3 |
Map diffuse colour into OpenRCT2 remap palette region 1–3 (runtime recoloring) |
Greyscale |
Use palette region 4 (greyscale remap) |
Peep |
Use palette region 5 (peep skin remap) |
Glass |
Render in the translucent glass pass |
Back |
Included only in rear-wall sprite blocks |
Front |
Included only in front-wall sprite blocks |
Mask |
Treated as a visibility mask (MaterialFlag.IS_MASK) |
NoAO |
Disable ambient occlusion for this material |
Edge |
Enable background anti-aliasing blending |
DarkEdge |
Enable dark-variant background AA blending |
NoBleed |
Disable colour bleed from neighbouring pixels |
Example MTL material name: mat_Remap1_NoAO gets remappable region 1 with AO
disabled.
Constants
All material/mesh/light constants are exposed as strongly-typed enums:
from openrct2_x7_renderer.constants import MaterialFlag, MeshFlag, LightType
# MaterialFlag is an IntFlag — supports bitwise operations
flags = MaterialFlag.IS_REMAPPABLE | MaterialFlag.NO_AO
# MeshFlag is an IntFlag
mask = MeshFlag.GHOST | MeshFlag.MASK
# LightType is an IntEnum
light_type = LightType.DIFFUSE
Silhouette rendering
FinalizedScene.render_silhouette produces a solid silhouette sprite — every
hit pixel is rendered as flat mid-gray (linear 0.5, 0.5, 0.5) and quantized to
the nearest RCT2 palette entry; transparent pixels are unchanged:
with ctx.begin_render() as scene:
with scene.add_model(mesh, np.eye(3), np.zeros(3)).finalize() as ready:
mask_sprite = ready.render_silhouette(VIEWS[0])
Image I/O
from openrct2_x7_renderer.image import write_png, read_png, quantize_to_indexed, PREVIEW_SIZE
# Write a rendered IndexedImage as a paletted PNG (transparent index = 0).
write_png(sprite, "out.png")
# Read a paletted PNG back (must already be an 8-bit palette-mode PNG).
img = read_png("existing.png")
# Convert any image format to an IndexedImage sized for a 112x112 preview.
preview = quantize_to_indexed("photo.jpg", size=PREVIEW_SIZE)
quantize_to_indexed resizes with Lanczos resampling, Floyd-Steinberg dithers
into the non-remap palette range (indices 10–236), and maps alpha < 128 to
transparent.
Geometry helpers
from openrct2_x7_renderer.geometry import (
rotate_x, rotate_y, rotate_z,
combine_model_world,
assign_faces_to_tiles, subset_mesh,
)
# Build a rotation matrix from Euler angles (radians).
rot = rotate_y(math.pi / 2) @ rotate_z(angle_z) @ rotate_x(angle_x)
# Bake a multi-part animated Model into a single world-space Mesh.
world_mesh = combine_model_world(meshes, model, frame=0)
# Assign each face to the nearest tile center (for large multi-tile scenery).
tile_ids = assign_faces_to_tiles(world_mesh, tile_centers_xz)
# Extract a per-tile sub-mesh (tightens scene bounds, improves AO accuracy).
tile_mesh = subset_mesh(world_mesh, tile_ids == 0)
Multi-frame animation
Model and MeshFrame represent an animated object with up to four frames
(OpenRCT2's engine limit). Each placement holds one MeshFrame per frame:
from openrct2_x7_renderer.types import Model, MeshFrame
import numpy as np
model = Model(meshes=[
[
MeshFrame(mesh_index=0, position=np.zeros(3),
orientation=np.array([0.0, 0.0, 0.0])), # frame 0
MeshFrame(mesh_index=0, position=np.zeros(3),
orientation=np.array([90.0, 0.0, 0.0])), # frame 1
],
])
orientation is (angle_y, angle_z, angle_x) in degrees, applied as
rotate_y @ rotate_z @ rotate_x. combine_model_world(meshes, model, frame=N)
selects the pose for frame N; placements with fewer frames fall back to their
last frame.
Config files
parse_config reads a JSON or YAML file into a plain dict (PyYAML is already
included as a package dependency). The run_cli helper builds the full context from a config
automatically, but you can load individual sections by hand:
from openrct2_x7_renderer.config import parse_config
from openrct2_x7_renderer.lights import load_lights, default_lights
root = parse_config("object.json") # or "object.yaml"
lights = load_lights(root["lights"]) if "lights" in root else default_lights()
A lights block in the config is a list of light objects:
{
"lights": [
{ "type": "diffuse", "direction": [1.0, 1.65, -1.0], "strength": 0.8, "shadow": true },
{ "type": "specular", "direction": [0.0, 1.0, 0.0], "strength": 0.5, "shadow": false },
{ "type": "hemi", "direction": [0.0, -1.0, 0.0], "strength": 0.1, "shadow": false }
]
}
output_directory (string) sets where generated files are written; omitting it
defaults to the current working directory.
meshes (array of strings) lists OBJ files to load. preview (string) points
to a preview PNG. Both accept absolute paths; relative paths are resolved
against the config file's parent directory when a base_dir is passed to
load_meshes() / load_preview() (the CLI does this automatically).
Performance
The renderer maintains a persistent thread pool for the lifetime of each
Context — one worker thread per logical CPU core by default (capped at 256).
The pool is created when the Context is constructed and reused across all
render calls, so there is no thread-creation overhead on subsequent renders.
Set OPENRCT2_X7_NUM_THREADS to override the thread count:
OPENRCT2_X7_NUM_THREADS=4 python generate.py
Sprite output format
images_dat.write_images_dat writes a single binary blob images.dat
containing all sprites, referenced from an OpenRCT2 object.json via the
$LGX: syntax ("images": ["$LGX:images.dat[0..N-1]"]). This is the same format
the vanilla OpenRCT2 parkobjs use.
images.dat layout
+--------------------+--------------------+
| num_entries (u32) | total_pixels (u32) | 8-byte header
+--------------------+--------------------+
| element 0 (16 bytes) |
| ... | num_entries * 16 bytes
+-----------------------------------------+
| sprite 0 pixels (w * h bytes) |
| ... | total_pixels bytes
+-----------------------------------------+
Each element is u32 offset, u16 width, u16 height, i16 x_offset, i16 y_offset, u16 flags, u16 zoom; width and height are unsigned. flags = 0x0001 (G1_FLAG_BMP) indicates
raw indexed pixel data — palette index 0 is transparent. RLE compression
(flags = 0x0008) would be more compact but is not implemented.
License
GPL-3.0-or-later. The distributed wheels bundle Embree and TBB (Apache-2.0); their license texts ship alongside.
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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file openrct2_x7_renderer-0.2.0.tar.gz.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0.tar.gz
- Upload date:
- Size: 91.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d5351c87fe8b8edd794aecd00c85c74ddf29bbcf544e8950a53fae5e32ac2d8
|
|
| MD5 |
4576c6b82edd5ad95b3671876564ed8c
|
|
| BLAKE2b-256 |
92cfd8b50b29944b4898b53272d0ba5c9a18d42aba96fbea1a73a67562762629
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0.tar.gz:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0.tar.gz -
Subject digest:
4d5351c87fe8b8edd794aecd00c85c74ddf29bbcf544e8950a53fae5e32ac2d8 - Sigstore transparency entry: 1726572405
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openrct2_x7_renderer-0.2.0-cp314-cp314-win_amd64.whl.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0-cp314-cp314-win_amd64.whl
- Upload date:
- Size: 13.5 MB
- Tags: CPython 3.14, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64a1d7d045ffaa5d89a71d07a25ec6190bfe30bfdc9cd81c3cfd9d893bfa618f
|
|
| MD5 |
aad498b8794e042093406dbc6bbf9b5e
|
|
| BLAKE2b-256 |
d5cb850bd9b6777f81636a5359808a728558951978f0775e94d6e0a1f3204ba1
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0-cp314-cp314-win_amd64.whl:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0-cp314-cp314-win_amd64.whl -
Subject digest:
64a1d7d045ffaa5d89a71d07a25ec6190bfe30bfdc9cd81c3cfd9d893bfa618f - Sigstore transparency entry: 1726574163
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openrct2_x7_renderer-0.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 13.5 MB
- Tags: CPython 3.14, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52aa499b34c248189e9d979a51bc476a68dfb67c231aa2ed74df263e0237ee86
|
|
| MD5 |
1e99bfe5e4867efddad55319c0f3caef
|
|
| BLAKE2b-256 |
ab186936dd4b06b305167d36ff31e15203073add8d1a3c846246de872e73b544
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
52aa499b34c248189e9d979a51bc476a68dfb67c231aa2ed74df263e0237ee86 - Sigstore transparency entry: 1726572610
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openrct2_x7_renderer-0.2.0-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 4.9 MB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
510f086ae5e7410f1b46b65db43f097f886634f0ed5f2ac7013d855eca8a56e1
|
|
| MD5 |
4276334f35ed104fe9e8ab60abe3c766
|
|
| BLAKE2b-256 |
695d50a60c3da4ce0e6c846f2d54b34f1170f2554ee0031e65fcc98dabf5bb05
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0-cp314-cp314-macosx_11_0_arm64.whl:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0-cp314-cp314-macosx_11_0_arm64.whl -
Subject digest:
510f086ae5e7410f1b46b65db43f097f886634f0ed5f2ac7013d855eca8a56e1 - Sigstore transparency entry: 1726575085
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openrct2_x7_renderer-0.2.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 13.2 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ad514ddda5dfcb53eb600f196f3612f428c022afc5c74ce6ec3f99058239b90
|
|
| MD5 |
6961e62df1497f7f4a24e146442a00b4
|
|
| BLAKE2b-256 |
f437c33274f515a29ec51ca66dd6ef5189d1427c8b8b00fda95adec8d1257d03
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0-cp313-cp313-win_amd64.whl:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0-cp313-cp313-win_amd64.whl -
Subject digest:
3ad514ddda5dfcb53eb600f196f3612f428c022afc5c74ce6ec3f99058239b90 - Sigstore transparency entry: 1726574590
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openrct2_x7_renderer-0.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 13.5 MB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b6c712635a8f83366161f1a421e7ea03a7551fafa1ca8ff9e867e2b867951fe
|
|
| MD5 |
20381b41f8a4c039fc265e122b0abd52
|
|
| BLAKE2b-256 |
cf0efd45249c1d4c1b0a30cf0bfb30351ee176a7d1fada8bdeb01f00f5935e00
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
1b6c712635a8f83366161f1a421e7ea03a7551fafa1ca8ff9e867e2b867951fe - Sigstore transparency entry: 1726572785
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openrct2_x7_renderer-0.2.0-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 4.9 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8473bde34a78ba017087797eebf0c66c003b5407b3f38af9279151de2b992cf5
|
|
| MD5 |
641c7ec90fbb9d48968862b654fa8ec2
|
|
| BLAKE2b-256 |
becde5398151403006ba0fa2a3dafcb111486d99d1cf9b5fb3ba3fe5c136cb6e
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
8473bde34a78ba017087797eebf0c66c003b5407b3f38af9279151de2b992cf5 - Sigstore transparency entry: 1726574864
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openrct2_x7_renderer-0.2.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 13.2 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b84aa5eb673e55acb7897d8bb83abb32dae44887995d8a662e88e23af3705690
|
|
| MD5 |
918c22a3d2fff41c0a6ee99393b37260
|
|
| BLAKE2b-256 |
1c4606187cd16e762fe7cab46e415916e93e401fa0c02dddaa03e1de7e4ae394
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0-cp312-cp312-win_amd64.whl:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0-cp312-cp312-win_amd64.whl -
Subject digest:
b84aa5eb673e55acb7897d8bb83abb32dae44887995d8a662e88e23af3705690 - Sigstore transparency entry: 1726575352
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openrct2_x7_renderer-0.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 13.5 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7d65a9798959111c7db5155083a79e0b57386552619c5aaa1df31a934f01445
|
|
| MD5 |
fcb82e115272ec7be7bfd9b82078ae54
|
|
| BLAKE2b-256 |
0df93c584ebbb7e50886984b76576f65f89cc209c99c213af48f030f844f8284
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
f7d65a9798959111c7db5155083a79e0b57386552619c5aaa1df31a934f01445 - Sigstore transparency entry: 1726573128
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openrct2_x7_renderer-0.2.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 4.9 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba6fdb66b299b701e77d9e800f26c2f5ed8b98951ee0575df41ef7ceaaf4d118
|
|
| MD5 |
ae256c091f20aba1aaba3d7cb7e8a267
|
|
| BLAKE2b-256 |
8d48c1c6d02f2008f0b024c775a857841fb3d4c471f66932a0cb79823b0a2b20
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
ba6fdb66b299b701e77d9e800f26c2f5ed8b98951ee0575df41ef7ceaaf4d118 - Sigstore transparency entry: 1726573417
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openrct2_x7_renderer-0.2.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 13.2 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e507f8ff550ce9e6ceabfd73035152d5f00361ef25e649cb695cc8fa56b9a6b
|
|
| MD5 |
e972125ea998858b757b006cd275908b
|
|
| BLAKE2b-256 |
7f096858faebc439365a0238788b444ef428b05e9d541d136ee7e08f3ecb14b6
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0-cp311-cp311-win_amd64.whl:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0-cp311-cp311-win_amd64.whl -
Subject digest:
4e507f8ff550ce9e6ceabfd73035152d5f00361ef25e649cb695cc8fa56b9a6b - Sigstore transparency entry: 1726573957
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openrct2_x7_renderer-0.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 13.5 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbc859dd4a9e98a9d14325ccf43062cdf9153aac23cb0c0bee13244ee261495c
|
|
| MD5 |
4bd923f111d68495f9d34cb4ea6fbf47
|
|
| BLAKE2b-256 |
36f74b03253505885f9da54c838d653d9ecc373f3e0cf2bb01779d024056bdd0
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
fbc859dd4a9e98a9d14325ccf43062cdf9153aac23cb0c0bee13244ee261495c - Sigstore transparency entry: 1726574366
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openrct2_x7_renderer-0.2.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: openrct2_x7_renderer-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 4.9 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1cb54ba57546c04113b185ccf436326669afd91441f0c004f4f31ad7671306ff
|
|
| MD5 |
015797fb3f11b1a767135c42a3db5cff
|
|
| BLAKE2b-256 |
8352ebf92592ccdc129324b599007a0a7d77a775cb7ebd7c2f2414dc39d8b86a
|
Provenance
The following attestation bundles were made for openrct2_x7_renderer-0.2.0-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
publish.yml on alex-parisi/OpenRCT2-X7-Renderer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openrct2_x7_renderer-0.2.0-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
1cb54ba57546c04113b185ccf436326669afd91441f0c004f4f31ad7671306ff - Sigstore transparency entry: 1726573756
- Sigstore integration time:
-
Permalink:
alex-parisi/OpenRCT2-X7-Renderer@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/alex-parisi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@69006c15cbc7c251d20e6e0a344a4c072f5d1d16 -
Trigger Event:
push
-
Statement type: