Official Python client for the Createrington Skin API.
Project description
createrington-skin-api
Official Python client for the Createrington Skin API. Renders Minecraft player skins into named poses and returns PNG bytes. Sync and async clients, fully typed.
pip install createrington-skin-api
Access is invite-only. Request an API key at https://api.createrington.com.
Quickstart
from createrington_skin_api import SkinApiClient
client = SkinApiClient(api_key="sk_...") # or set SKIN_API_KEY
# Render a known pose for a Minecraft account by UUID.
png = client.render("wave", uuid="069a79f444e94726a5befca90e38aaf5")
# `png` is `bytes` of a PNG image.
with open("notch-waving.png", "wb") as f:
f.write(png)
Async
import asyncio
from createrington_skin_api import AsyncSkinApiClient
async def main() -> None:
async with AsyncSkinApiClient(api_key="sk_...") as client:
png = await client.render("wave", username="Notch", slim=True)
with open("notch-waving.png", "wb") as f:
f.write(png)
asyncio.run(main())
Client
SkinApiClient(
api_key=None, # required; falls back to the SKIN_API_KEY env var
base_url="https://api.createrington.com",
timeout=30.0, # seconds
retries=2, # retries 429/502/503/504 and network errors
user_agent="createrington-skin-api",
)
AsyncSkinApiClient takes the same arguments. Both are usable as context
managers (with / async with) and expose close() / aclose() for
explicit cleanup of the underlying connection pool.
render
client.render(
pose, # a KNOWN_POSES name (e.g. "wave"), or any pose string
*,
# exactly one skin source:
uuid=None, # Mojang UUID, resolved server-side
username=None, # Mojang username, resolved server-side
skin_url=None, # public URL to a 64x64 PNG
skin_base64=None, # base64-encoded 64x64 PNG (data URL prefix optional)
png=None, # raw 64x64 PNG bytes, sent as multipart/form-data
# options:
slim=None, # override slim/Alex arm geometry; default uses skin metadata
width=None, # default 400 (64..2048)
height=None, # default 600 (64..2048)
) -> bytes
Exactly one skin source must be supplied; passing none or more than one
raises ValueError.
pose accepts any string, so server-side poses added after this release work
without an SDK upgrade. The bundled KNOWN_POSES tuple and KnownPose type
cover the poses known at publish time; fetch GET /v1/poses directly if you
need the live catalogue with descriptions.
from createrington_skin_api import KNOWN_POSES, KnownPose
random_pose() returns a uniformly random pose name from KNOWN_POSES:
from createrington_skin_api import random_pose
png = client.render(random_pose(), uuid="069a79f444e94726a5befca90e38aaf5")
Errors
Every non-2xx response (and network/timeout failures) raises SkinApiError:
from createrington_skin_api import SkinApiError
try:
client.render("wave", uuid="bad-uuid")
except SkinApiError as err:
print(err.code, err.status, err)
if err.code == "rate_limited" and err.retry_after_ms:
... # back off and retry
err.code is one of "bad_request", "unauthorized", "forbidden",
"not_found", "conflict", "unsupported_media_type", "rate_limited",
"internal", "render_failed", "upstream_unavailable", "timeout",
"aborted", "network_error", "unknown". err.status is the HTTP status
(or 0 for network/timeout failures). err.retry_after_ms is populated on
429 responses when the server reports it.
The client retries 429, 502, 503, 504, and network errors up to
retries times with exponential backoff; 429 responses honour the server's
retryAfterMs when present.
License
UNLICENSED. See repository for terms.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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 createrington_skin_api-1.1.0.tar.gz.
File metadata
- Download URL: createrington_skin_api-1.1.0.tar.gz
- Upload date:
- Size: 11.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad586b7d2f927fee6d49b71db3586b3042d3a068029f179c627511d40a76a021
|
|
| MD5 |
9f5027fe3d9b948f1e1d31d71b0ab823
|
|
| BLAKE2b-256 |
96843a2590eb7289d16081f45934b194478f6eb3a13e242274e1aa0fb6e0a3d4
|
File details
Details for the file createrington_skin_api-1.1.0-py3-none-any.whl.
File metadata
- Download URL: createrington_skin_api-1.1.0-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa4f12fbe8521e641e4a15b8c1913bde8b6544fafa1b8b65e4656bc679ae67ad
|
|
| MD5 |
8912f5ef91029045ef866cb59d583311
|
|
| BLAKE2b-256 |
44b4fb302a4902c34c011ebda02d38dc48c0644eb570fcabbe568b3e5ea0e3f9
|