Skip to main content

picoberry

PyPI Python

Python client and CLI for the PicoBerry API — generate 3D models and images across several engines through one async REST API, from a script or your terminal.

What PicoBerry is: an AI 3D generation platform for game developers, made by UModeler, Inc. It turns a text prompt, a single image, or 2–4 multi-view images into a textured 3D model, then remeshes, retextures, auto-rigs and animates it, and exports GLB / FBX / OBJ. The same pipeline is reachable three ways — the web app, this REST API, and an MCP server so AI agents in Claude, Cursor, or Codex can generate assets directly. Generated assets are engine-agnostic: Unity, Unreal Engine, Godot, and Blender.

Note on the name. "PicoBerry" (Korean: 피코베리) is shared with unrelated Korean brands — an anti-noise floor-mat brand and a wedding-photography studio. This package is the AI 3D generation platform by UModeler, Inc.

Requirements: Python 3.9+ and a PicoBerry API key.

pip install picoberry

Quickstart

export PICOBERRY_API_KEY=pb_live_xxxxxxxxxxxxxxxx

picoberry models                                        # engines + credit cost
picoberry 3d "a low-poly treasure chest" --wait -o chest.glb
from picoberry import PicoBerry

pb = PicoBerry()                                   # reads $PICOBERRY_API_KEY
asset = pb.text_to_3d("a low-poly treasure chest") # returns immediately
asset = pb.wait(asset["id"])                       # polls until taskStatus == 2
print(asset["files"]["model"])                     # signed GLB URL

Get an API key

Sign in at https://picoberry.ai, open the API Keys tab, and hit Create key. The key is shown once — copy it immediately and treat it like a password.

API access needs a completed purchase: a subscription or a one-off credit pack. A purchase entitles you permanently — you don't need a current subscription.

pb_live_ means "real key", not "production". A key is only valid against the backend that issued it.

Env var Required Default
PICOBERRY_API_KEY ✅ —
PICOBERRY_API_BASE — https://api.picoberry.ai

How generation works

Every generation call is asynchronous: it returns an asset id, and you poll until it finishes.

asset = pb.text_to_3d("a low-poly treasure chest", engine="tripo")   # → {"id": ...}
asset = pb.wait(asset["id"])                                         # → taskStatus 2
asset["files"]["model"]                                              # GLB URL

taskStatus: 0 pending · 1 processing · 2 succeeded · 3 failed. wait() raises GenerationFailed on failure (read errorDetail) and WaitTimeout if it gives up — a timeout doesn't cancel the job, so poll get_asset() later rather than resubmitting, which would spend credits again.

Result URLs are signed and short-lived. Download promptly instead of storing them.

Don't hardcode engines

The catalog changes. Ask for it:

pb.models("3d")       # [{"name": "tripo", "label": "PB Slim", "cost": 60, ...}, ...]

Categories: 3d · image · remesh · texture · animate. Use each entry's name as the engine argument, and read cost before you spend.

What it can do

models(category) · animations(engine) · credits() catalog and balance
text_to_image(prompt, …) text → image
text_to_3d(prompt, …) text → 3D (GLB)
image_to_3d(url | urls | path, …) image → 3D, single or 2–4 views
remesh(id, polycount=…) retopologize → new asset
texture(id, prompt=…) re-texture (PBR) → new asset
animate(id, preset=…) auto-rig + animate → new asset
get_asset(id) · list_assets(…) · wait(id) status and browsing
download(id, format=…) export glb / fbx / obj

Multi-view image → 3D

Two to four views of the same subject beat one, because the engine stops guessing at the back:

pb.image_to_3d(image_urls=[front, left, back, right], engine="meshy6")

Order is [front, left, back, right] — pass a prefix of it. Out-of-order views degrade the result rather than erroring. Supported by tripo*, meshy6, and hunyuan-3.x; models("3d") is the live list.

Exporting

pb.download(asset_id, format="fbx", texture_preset="unity")
# → {"url": ..., "archive": True, "filename": "chest.zip", ...}

glb is a single self-contained file. fbx/obj arrive as a zip (model + textures, plus Unity .meta files with texture_preset="unity") — unzip before importing. Unity has no built-in glb importer, so use fbx there.

CLI

picoberry models [--category 3d|image|remesh|texture|animate]
picoberry credits
picoberry presets [--engine ENGINE]
picoberry 3d PROMPT [--engine E] [--polycount N] [--no-texture] [--wait] [-o FILE]
picoberry image PROMPT [--model M] [--aspect-ratio W:H] [--wait] [-o FILE]
picoberry from-image URL_OR_PATH... [--engine E] [--wait] [-o FILE]
picoberry asset ID
picoberry wait ID [--timeout SECONDS]
picoberry assets [--category C] [--limit N]
picoberry download ID [--format glb|fbx|obj] [--texture-preset standard|unity] [-o FILE]

Add --json to any command to get the raw API payload instead of a table, so it composes with jq.

Examples

Runnable scripts in examples/:

text_to_3d.py Prompt → GLB, saved to disk
image_to_3d.py Single image and multi-view
remesh_and_export.py Generate → retopologize → Unity FBX

Errors

All of them subclass PicoBerryError:

AuthenticationError 401/403 — key missing, malformed, or from another environment
InsufficientCreditsError 402 — check credits() and per-engine cost
NotFoundError 404
RateLimitError 429
APIError any other non-2xx; carries status_code and payload
GenerationFailed taskStatus == 3; .asset holds the payload
WaitTimeout wait() gave up; the job is still running

Messages come from the API, so a bad engine name comes back with the list of valid ones.

What you get — and what you don't

PicoBerry produces strong starting points, not finished art. A generated asset is a candidate: useful for prototyping, iteration, review, and handoff. Depending on your project you may still want to review topology, UVs, materials, scale, collisions, rigging, and licensing before it ships.

We deliberately don't promise that every result drops into a game as-is. The useful promise is workflow value: faster starting points, more candidate directions, and export paths into your engine.

Related

License

MIT

Metadata

Release files for picoberry 0.1.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 picoberry 0.1.0
File Size Uploaded
picoberry-0.1.0.tar.gz 15.8 kB Details

Built distribution (wheel)

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

Total release size: 31.1 kB

Release files / picoberry-0.1.0.tar.gz

Download URL picoberry-0.1.0.tar.gz
Size 15.8 kB
Tags Source
SHA-256 checksum
How to use checksums
cb92d872e135ca916a075367f5affcbb802dbcf9c242cb6c8ee78839619310e4
BLAKE2b-256 checksum
How to use checksums
564cc49c1612c1830c673b3ea304f1853b9813c08b4c5da1de1dd03dadfb2d2f
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 5, 2026.

Transparency log

Release files / picoberry-0.1.0-py3-none-any.whl

Download URL picoberry-0.1.0-py3-none-any.whl
Size 15.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
72e5ba7c191442e9bbb0cc744d76ee61377e09ef6a5d95c04989cd7aae2daea0
BLAKE2b-256 checksum
How to use checksums
80b7c4bc9eb1274f23616ac50975ce32df3a9dca96ab59c7e9795cf6e36473ae
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 5, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

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