CLI
Make game-ready 3D models from a terminal, a script or CI, with no agent required.
thrixel makes 3D models from a terminal. One command takes a description to a
finished model on disk, and every tool the MCP server gives an agent is
one thrixel run away. It ships in the same package as the MCP server and
shares its sign-in.
Install
Requires uv.
| Task | Command |
|---|---|
| Update | uv tool upgrade thrixel-mcp |
| Uninstall | uv tool uninstall thrixel-mcp |
| Check the version | thrixel --version |
| Run once without installing | uvx --from thrixel-mcp@latest thrixel <command> |
Sign in
This prints a link and a short code. Open the link, check that the code matches, and approve. It works on a machine with no browser: open the link on your phone. You can create an account on the same page.
The key is saved in ~/.thrixel/credentials.json and does not expire.
thrixel status shows which key is in use and thrixel logout removes it. In
CI, set THRIXEL_API_KEY instead; it takes precedence over the saved key.
Create one at thrixel.com/create.
Quick start
make
Make a 3D model from a description or an image, and save it.
Waits for every step, shows progress, and saves only the final file. The default
engine, sculpt, returns one textured, high-detail mesh: the right choice for
creatures, characters, plants, rocks and props that do not move. When parts must
move on their own (wheels, doors, turrets, limbs), use --engine create, which
keeps each part as a separate named node.
| Option | Description |
|---|---|
PROMPT | What the object is, in a sentence or two. Optional when --image is given. |
-i, --image PATH | A reference picture, as a path or URL. create accepts it more than once. |
-o, --output PATH | Where to save. Default: named after the prompt, in the current folder. |
--engine sculpt|create | sculpt (default): textured, one piece. create: editable, separate parts. |
--quality plus|balanced | create only. plus is the default; balanced costs half and suits simple props. |
--detail | create only. Add high-resolution detail and a PBR texture. |
--tris N | Reduce to at most N triangles. Free. |
--size M | Real-world size: the longest side in metres. |
--format FORMAT | glb (default), fbx, obj, stl or usdz. |
--target ENGINE | With --format fbx: unity or ue5 name a rigged humanoid's bones for that engine; roblox writes an R15 .zip. |
--webp | GLB with WebP textures, up to 20x smaller on texture-heavy models. Use it for the web. |
--project ID | File the model under a project. thrixel run list_projects lists them. |
--dry-run | Print the steps, the estimated Cubes and your balance. Submits nothing. |
--json | Print one JSON object instead of text. See Scripting. |
Examples:
What a run costs:
On the Free plan the dry run also says how many runs of each step are left this month, and warns when one is used up.
create is metered on actual usage, so its estimate is a range.
Free plan: 4 runs a month of each GPU operation
On the Free plan, sculpt, detail, retexture and rig each run up to 4 times per
calendar month (UTC), per account. The CLI, your agents and the web app share
the same count, and a failed run does not use one. --dry-run and
thrixel balance show what is left. Past the limit make stops with exit code
4 until the 1st, even with Cubes left; --engine create, --tris and the
format conversions are not limited. Paid plans have no monthly limit.
Other commands
Click a command for its options and examples.
Scripting
Progress goes to stderr and the result to stdout, so path=$(thrixel make ...)
captures the saved file. With --json, stdout is a single object:
A failure is {"ok": false, "error": "...", "exit_code": 4}.
Exit codes
| Code | Meaning | What to do |
|---|---|---|
| 0 | Done | |
| 1 | Other error | Read the message |
| 2 | Bad arguments | Fix the command. Nothing was submitted |
| 3 | Not signed in, or the key was refused | thrixel login, or set THRIXEL_API_KEY |
| 4 | Out of Cubes, or this month's runs of that operation are used up (Free plan) | thrixel balance shows which |
| 5 | Too many jobs running at once | Wait for one to finish, then retry |
| 6 | The job failed | Read the message; some prompts are refused |
| 7 | Still running when the wait ended | It keeps running and is charged when it finishes. thrixel run job_status --arg submission_id=.... Do not resubmit |
Configuration
Environment variables
| Variable | Default | Description |
|---|---|---|
THRIXEL_API_KEY | API key. Takes precedence over the saved key. | |
THRIXEL_API_BASE | https://api.thrixel.com | The API to call. |
THRIXEL_OUTPUT_DIR | ./thrixel_assets | Where run saves downloaded files. |
THRIXEL_TIMEOUT_S | 3600 | How long a command waits for a job, in seconds. |
THRIXEL_CONFIG_DIR | ~/.thrixel | Where the saved key lives. |
THRIXEL_LOG_LEVEL | WARNING | Set INFO or DEBUG to see requests. |
Files
| Path | Contents |
|---|---|
~/.thrixel/credentials.json | The saved API key and the API it belongs to, readable only by you. |
./thrixel_assets/ | Files that thrixel run downloads. make writes only to -o. |
Coming from an agent?
The CLI and the MCP server are the same package with the same sign-in. An agent that has the MCP server should use its tools; the CLI is for shells, scripts and CI, and for trying a tool by hand.