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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

picoberry-0.1.0.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

picoberry-0.1.0-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file picoberry-0.1.0.tar.gz.

File metadata

  • Download URL: picoberry-0.1.0.tar.gz
  • Upload date:
  • Size: 15.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for picoberry-0.1.0.tar.gz
Algorithm Hash digest
SHA256 cb92d872e135ca916a075367f5affcbb802dbcf9c242cb6c8ee78839619310e4
MD5 20227e1a3c6e64da9c04f306526d3210
BLAKE2b-256 564cc49c1612c1830c673b3ea304f1853b9813c08b4c5da1de1dd03dadfb2d2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for picoberry-0.1.0.tar.gz:

Publisher: publish.yml on UModeler/picoberry-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file picoberry-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: picoberry-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for picoberry-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 72e5ba7c191442e9bbb0cc744d76ee61377e09ef6a5d95c04989cd7aae2daea0
MD5 87e7444081b304e8fc30e28ae84f1229
BLAKE2b-256 80b7c4bc9eb1274f23616ac50975ce32df3a9dca96ab59c7e9795cf6e36473ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for picoberry-0.1.0-py3-none-any.whl:

Publisher: publish.yml on UModeler/picoberry-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page