tripo-cli 0.7.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/README.md +9 -7
- package/dist/ai/experts.js +25 -19
- package/dist/ai/plan-card.js +71 -33
- package/dist/ai/wizard.js +13 -17
- package/dist/commands/account.js +2 -6
- package/dist/commands/ai.js +18 -16
- package/dist/commands/batch.js +58 -18
- package/dist/commands/config-cmd.js +1 -1
- package/dist/commands/doctor.js +1 -3
- package/dist/commands/generate.js +35 -4
- package/dist/commands/home.js +12 -13
- package/dist/commands/login.js +72 -187
- package/dist/commands/make.js +47 -25
- package/dist/commands/mcp.js +2 -1
- package/dist/commands/process-groups.js +3 -4
- package/dist/commands/shared.js +9 -14
- package/dist/commands/task.js +10 -11
- package/dist/commands/topup.js +6 -10
- package/dist/commands/update.js +6 -10
- package/dist/commands/view.js +3 -4
- package/dist/config/config.js +1 -1
- package/dist/core/client.js +4 -13
- package/dist/core/errors.js +16 -11
- package/dist/core/output.js +0 -4
- package/dist/core/requests.js +61 -17
- package/dist/core/task-service.js +19 -20
- package/dist/knowledge/chains.js +12 -12
- package/dist/knowledge/error-catalog.js +32 -32
- package/dist/knowledge/models.js +119 -20
- package/dist/knowledge/params.js +96 -8
- package/dist/knowledge/scenarios.js +32 -55
- package/dist/pipeline/make.js +36 -28
- package/dist/pipeline/runner.js +7 -12
- package/dist/pipeline/stdin.js +40 -3
- package/dist/program.js +3 -10
- package/package.json +3 -2
- package/skill/SKILL.md +34 -8
- package/skill/commands/account.md +1 -1
- package/skill/commands/batch.md +13 -3
- package/skill/commands/generate.md +35 -10
- package/skill/commands/make.md +39 -13
- package/skill/commands/process.md +2 -1
- package/skill/commands/task.md +2 -2
- package/skill/commands/view.md +1 -1
- package/skill/common-errors.md +6 -3
- package/skill/examples/animation.md +3 -1
- package/skill/examples/ar-web.md +6 -4
- package/skill/examples/game-asset.md +17 -6
- package/skill/examples/pipes.md +2 -2
- package/skill/examples/print.md +7 -3
- package/dist/i18n.js +0 -19
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tripo-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Tripo 3D intelligent CLI — turn a prompt or an image into engine-ready 3D assets from your terminal (Tripo V3 API)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"tripo",
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"files": [
|
|
21
21
|
"dist",
|
|
22
22
|
"skill",
|
|
23
|
+
"CHANGELOG.md",
|
|
23
24
|
"README.md"
|
|
24
25
|
],
|
|
25
26
|
"engines": {
|
|
@@ -48,7 +49,7 @@
|
|
|
48
49
|
"@clack/prompts": "^1.7.0",
|
|
49
50
|
"commander": "^15.0.0",
|
|
50
51
|
"picocolors": "^1.1.1",
|
|
51
|
-
"undici": "^6.
|
|
52
|
+
"undici": "^6.29.1",
|
|
52
53
|
"yaml": "^2.9.0"
|
|
53
54
|
},
|
|
54
55
|
"devDependencies": {
|
package/skill/SKILL.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tripo-cli
|
|
3
|
+
description: Generate and process 3D models with the Tripo API through the tripo CLI - text or images to GLB/FBX/OBJ/STL/USDZ, texturing, rigging, animation, mesh tools and format conversion, with plan cards and credit estimates. Use when the user wants to create, convert, rig, animate or 3D-print a 3D asset, or mentions Tripo.
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
# Tripo CLI Skill
|
|
2
7
|
|
|
8
|
+
**Bundled with tripo-cli 0.8.0.**
|
|
9
|
+
|
|
10
|
+
- Display aliases `H3.1`, `H3.0`, `H2.5`, `P1.0`, `P2.0` (case-insensitive) normalize before validation; unknown 3D/image model IDs fail locally.
|
|
11
|
+
- `make` validates deterministic later steps before uploading or generating.
|
|
12
|
+
- Plan cards and `--dry-run` JSON (`generation_credits_estimate`) show the official list-price estimate for the generation step; P1, legacy models and `--then` chain steps are **not estimated**, which never means zero credits.
|
|
13
|
+
- Do not interpret `valid=true` as a quotation or proof that arbitrary passthrough fields are supported. Check warnings and the normalized payload: unsupported P-series fields are removed with warnings, not sent to the API.
|
|
14
|
+
- Image model `chat_image_1` is retired and rejected; `chat_image_1.5` is still valid (announced retirement 2026-12-01).
|
|
15
|
+
- Never automatically swap models and resubmit a paid task.
|
|
16
|
+
|
|
3
17
|
You (an AI coding agent) can generate production-ready 3D assets with the `tripo` CLI.
|
|
4
18
|
One command turns a text prompt or an image into local files: a 3D model (glb/fbx/stl/...), a `preview.png` render, and a `task.json` record.
|
|
5
19
|
|
|
@@ -49,13 +63,23 @@ Regions (ov = international, cn = China mainland) share one CLI: `tripo login --
|
|
|
49
63
|
## Behavior rules (read first)
|
|
50
64
|
|
|
51
65
|
1. **`tripo make` is synchronous and blocking.** It prints a plan card on stderr (one numbered line per API call: endpoint, purpose, args), then submits, polls, downloads artifacts, and exits. In a TTY it asks "Run this plan?" first; `--yes` (auto-enabled when headless) skips the prompt but still prints the card. Wait for the process to finish and read the final JSON from stdout. Do NOT re-implement polling, do NOT add your own timeout shorter than 15 minutes, do NOT stop just because you saw a task_id in the logs.
|
|
52
|
-
2. **stdout is the contract; stderr is commentary.** With `--json` (auto-enabled when piped),
|
|
53
|
-
3. **Artifacts are local files.** The result JSON has `output_dir`, `model_file`, `preview`. Look at `preview.png` to judge quality
|
|
66
|
+
2. **stdout is the contract; stderr is commentary.** With `--json` (auto-enabled when piped), every result command prints exactly one JSON line on stdout (`docs`/`completion` print text, `mcp` speaks JSON-RPC). Progress/logs go to stderr.
|
|
67
|
+
3. **Artifacts are local files.** The result JSON has `output_dir`, `model_file`, `preview`. Look at `preview.png` to judge quality. Ask the human before re-rolling: `tripo redo` submits a new paid task at once, with no plan card and no confirmation.
|
|
54
68
|
4. **Exit codes are stable** — branch on them:
|
|
55
|
-
- 0 success · 2 usage/params · 3 auth · 4 insufficient credits (tell the human to run `tripo topup`) · 5 content policy
|
|
69
|
+
- 0 success · 2 usage/params · 3 auth · 4 insufficient credits (tell the human to run `tripo topup`) · 5 content policy
|
|
70
|
+
- 6 task failed (credits auto-refunded; on `timeout` it is still running — `tripo task watch <id>`, never redo)
|
|
71
|
+
- 7 network: a failed submit is never resent and may already exist — check `tripo balance` before re-running. If the task succeeded but its download failed, the error JSON carries `task_id` — run `tripo task get <task_id> --download`, never re-make.
|
|
72
|
+
- 8 not found · 9 rate limit (retry with backoff)
|
|
56
73
|
5. **Never invent parameters.** Unknown `--param key=value` pairs pass through to the API; stick to documented ones. The full parameter/model/preset reference from the official API docs is bundled: `tripo docs --topic commands/generate` (3D + image generation) and `tripo docs --topic commands/process` (texture/convert/rig/retarget/mesh) — read those instead of browsing the website.
|
|
57
74
|
6. **Validate before spending: `--dry-run --json`.** Same command plus `--dry-run` prints the plan as JSON with zero network calls and no credits: the chosen `model`, the completed `steps[].payload` for every API call, `warnings` (auto-adjustments) and `errors` (blocking; exit 2). When `valid` is true, re-run without `--dry-run`. Details: `tripo docs --topic commands/make` § "Dry run".
|
|
58
|
-
7. **
|
|
75
|
+
7. **Route models by use, topology, and geometry.**
|
|
76
|
+
- Explicit `--model` always wins.
|
|
77
|
+
- `tripo-v3.1` (H3.1) is the official default flagship model; the CLI also requires it for dense/high-poly geometry, `smart_low_poly=true`, `generate_parts=true`, any explicit `geometry_quality`, or a face budget outside P2's range (below 48, above 50000, or above 25000 with quad).
|
|
78
|
+
- Next, a `--for` preset outranks prompt hints: `film` and `print` use H3.1; `game-mobile`, `game-pc`, `ar-web`, `anim` and `toy` use P2.
|
|
79
|
+
- Without a preset, the CLI selects `tripo-p2` for real-time/game/editable assets, low-poly or voxel requests, quad topology, and a face budget within P2's range; anything else stays on H3.1.
|
|
80
|
+
- P2 costs 100–130 credits per generation versus 10–50 for H3.1 before add-ons, so before running P2, relay the plan card's estimate to the human and get confirmation.
|
|
81
|
+
- `tripo-p1` is an explicit lower-cost option. Only use legacy `tripo-v3.0` / `tripo-v2.5` to reproduce old projects.
|
|
82
|
+
- `tripo-*` names are CLI aliases — the CLI sends the dated wire value (`tripo-p2` → `P2-20260801`); the API rejects the alias itself with 1004. Alias ↔ wire ↔ status table: `tripo docs --topic commands/generate` ("Models & Versions").
|
|
59
83
|
|
|
60
84
|
## The one command you usually need
|
|
61
85
|
|
|
@@ -67,10 +91,10 @@ tripo make hero.glb --then texture,rig --json --yes # import + process
|
|
|
67
91
|
tripo make @last --then convert:fbx --json --yes # continue from last task
|
|
68
92
|
```
|
|
69
93
|
|
|
70
|
-
- `--for` scenario presets: `game-mobile` `game-pc` `
|
|
94
|
+
- `--for` scenario presets: `film` `print` → H3.1; `game-mobile` `game-pc` `ar-web` `anim` `toy` → P2 (the preset outranks prompt hints; `--model` and H-only requirements still win)
|
|
71
95
|
- `--then` chain steps: `texture convert import rig-check rig retarget segment complete decimate uv smartsegment`
|
|
72
96
|
- step args: `convert:format=FBX,texture_size=2048` (bare value = primary arg: `convert:fbx`, `decimate:5000`)
|
|
73
|
-
- Output JSON: `{"task_id","type","status","credits_consumed","output_dir","files",["model_file"],["preview"],["normalize_scale"],["chain"],["credits_breakdown"]}` — with `--then`, `credits_consumed` is the **total** for the run and `credits_breakdown` itemizes every task (`[{task_id,type,credits_consumed}]`, generation first)
|
|
97
|
+
- Output JSON: `{"task_id","type","status","credits_consumed","output_dir","files",["model_file"],["source_model_file"],["preview"],["normalize_scale"],["chain"],["credits_breakdown"]}` — with `--then`, `credits_consumed` is the **total** for the run and `credits_breakdown` itemizes every task (`[{task_id,type,credits_consumed}]`, generation first)
|
|
74
98
|
- `normalize_scale` appears when the input was a model file / URL: the import rescaled it (final size = original size × normalize_scale; `1` = untouched) and nothing scales it back — divide by it to recover the original size
|
|
75
99
|
|
|
76
100
|
## Pipes (composing steps yourself)
|
|
@@ -81,6 +105,8 @@ Downstream commands read the upstream task from stdin:
|
|
|
81
105
|
tripo make cat.png --json | tripo anim rig --json | tripo anim retarget --param animation=preset:walk --json
|
|
82
106
|
```
|
|
83
107
|
|
|
108
|
+
If an upstream command fails or prints no task, the downstream submits nothing and exits with the upstream's exit code (or 2). Without a terminal on stdin, process commands never fall back to `@last`; pass the input explicitly.
|
|
109
|
+
|
|
84
110
|
## Other commands
|
|
85
111
|
|
|
86
112
|
| command | purpose |
|
|
@@ -90,14 +116,14 @@ tripo make cat.png --json | tripo anim rig --json | tripo anim retarget --param
|
|
|
90
116
|
| `tripo redo [@last]` | same request, new seed |
|
|
91
117
|
| `tripo view [@last]` | (humans) open a local 3D preview; agents read `preview.png` instead |
|
|
92
118
|
| `tripo files upload <path>` | get a `file_token` |
|
|
93
|
-
| `tripo batch run manifest.yaml` | bulk jobs, resumable |
|
|
119
|
+
| `tripo batch run manifest.yaml` | bulk jobs, resumable; no plan card, so estimate and confirm first (`commands/batch` § Cost) |
|
|
94
120
|
| `tripo mcp` | run as an MCP server (tools: tripo_make, tripo_task_get, tripo_task_wait, tripo_balance, tripo_history) |
|
|
95
121
|
| `tripo docs --topic commands/<name>` | print detailed docs for any command |
|
|
96
122
|
|
|
97
123
|
## Detailed docs in this package
|
|
98
124
|
|
|
99
125
|
- `commands/` — one file per command with every flag and parameter
|
|
100
|
-
- model versions · H series (`tripo-v3.x`) · P series (`tripo-p1`, `tripo-p2`
|
|
126
|
+
- model versions · H series (`tripo-v3.x`) · P series (`tripo-p1`, `tripo-p2`) · alias → wire value · GA / Legacy status · quad → `commands/generate` § "Models & Versions" (also the P Series endpoint entry points)
|
|
101
127
|
- `examples/` — copy-paste recipes per scenario (game/print/animation/...)
|
|
102
128
|
- `common-errors.md` — error table with fixes
|
|
103
129
|
|
|
@@ -54,7 +54,7 @@ tripo config context default_scenario=game-mobile output_dir=./assets # per-di
|
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
Env overrides: `TRIPO_API_KEY` `TRIPO_PROFILE` `TRIPO_REGION` `TRIPO_API_BASE_URL` `TRIPO_LLM_BASE_URL` `TRIPO_LLM_API_KEY` `TRIPO_LLM_MODEL`.
|
|
57
|
-
`region`/`api_base_url`/`platform_base_url` are stored per profile; `
|
|
57
|
+
`region`/`api_base_url`/`platform_base_url` are stored per profile; `llm.*`/`default_output_dir` are shared.
|
|
58
58
|
|
|
59
59
|
## tripo doctor
|
|
60
60
|
|
package/skill/commands/batch.md
CHANGED
|
@@ -26,8 +26,18 @@ jobs:
|
|
|
26
26
|
params: { texture_quality: detailed }
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
+
## Cost
|
|
30
|
+
|
|
31
|
+
- Every job is a full `make` that runs without a plan card or confirmation.
|
|
32
|
+
- The five P2 presets (`game-mobile` `game-pc` `ar-web` `anim` `toy`) cost 100–130 credits per job for the generation step alone; the example's default `game-mobile` is at least 110 per job, before chain steps.
|
|
33
|
+
- Before running, dry-run one job per preset/params combination with the matching `make` flags (`tripo make "a bronze sword" --for game-mobile --then texture,convert:fbx --dry-run --json`), multiply `generation_credits_estimate` by the number of jobs that share it (`null` means not estimated, never zero), relay the total to the human and get confirmation.
|
|
34
|
+
|
|
29
35
|
## Behavior
|
|
30
36
|
|
|
31
|
-
- State is saved next to the manifest (`assets.yaml.state.json`) after every job. Re-running the same command **skips succeeded jobs** (resume). `--fresh` starts over.
|
|
32
|
-
-
|
|
33
|
-
-
|
|
37
|
+
- State is saved next to the manifest (`assets.yaml.state.json`) after every job and as soon as each paid task is created. Re-running the same command **skips succeeded jobs** (resume). `--fresh` starts over.
|
|
38
|
+
- A job is retried (up to `--retries` times) only when the failed attempt left no paid task behind: it failed before anything was submitted, or its only task failed server-side (failed/cancelled tasks are refunded).
|
|
39
|
+
- Anything else stops the job as `needs_attention`, and it is **never resubmitted automatically**, not even on re-run: a create request whose response was lost (the task may exist and be billed), a timeout, a failed artifact download, or a failure after an earlier task of the job succeeded.
|
|
40
|
+
- Its state entry records `tasks` (every task created for the job, in order), `error`, and `suggestion` (the next step, e.g. `tripo task get <id> --download`, or `tripo make <task_id> --then ...` to continue from the last successful task).
|
|
41
|
+
- To resubmit a `needs_attention` job on purpose, delete its entry from the state file, or use `--fresh` to rerun everything.
|
|
42
|
+
- Exit code 6 if any job stays `failed` or `needs_attention`.
|
|
43
|
+
- Final stdout JSON: `{"total","success","failed","needs_attention","state_file","jobs":{...}}`.
|
|
@@ -14,12 +14,12 @@ tripo generate multiview-to-model @last # reuse the 4 views of an image
|
|
|
14
14
|
|
|
15
15
|
### P Series (`tripo-p1` / `tripo-p2`) — same endpoints, different model
|
|
16
16
|
|
|
17
|
-
The P series (low-poly
|
|
17
|
+
The P series (editable low-poly topology) uses the **same three endpoints**; only the `model` value changes. The official docs document it as a separate "P Series" tab on each generation page — this is the direct entry point:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
tripo generate text-to-model "a low poly knight
|
|
21
|
-
tripo generate image-to-model photo.png --model tripo-p2 -p quad=true -p face_limit=12000 # → model: P2-20260801
|
|
22
|
-
tripo generate multiview-to-model front.png back.png --model tripo-p1
|
|
20
|
+
tripo generate text-to-model "a low poly knight for a game" -p face_limit=8000 # → model: P2-20260801
|
|
21
|
+
tripo generate image-to-model photo.png --model tripo-p2 -p quad=true -p face_limit=12000 # → model: P2-20260801
|
|
22
|
+
tripo generate multiview-to-model front.png back.png --model tripo-p1 # explicit lower-cost P-series choice
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
| endpoint | H series (standard) page | P series page |
|
|
@@ -32,17 +32,25 @@ tripo generate multiview-to-model front.png back.png --model tripo-p1
|
|
|
32
32
|
|
|
33
33
|
### 3D models (`--model`) — Models & Versions
|
|
34
34
|
|
|
35
|
-
Keywords: model versions · H series (v3.x) · P series (P1 / P2) ·
|
|
35
|
+
Keywords: model versions · H series (v3.x) · P series (P1 / P2) · quad · alias → wire value.
|
|
36
36
|
|
|
37
37
|
| alias (what you type) | wire value (what the API receives) | status | positioning | notes |
|
|
38
38
|
| --- | --- | --- | --- | --- |
|
|
39
|
-
| `tripo-v3.1`
|
|
40
|
-
| `tripo-p1` | `P1-20260311` | GA |
|
|
41
|
-
| `tripo-p2` | `P2-20260801` |
|
|
39
|
+
| `tripo-v3.1` | `v3.1-20260211` | GA | official default flagship model; dense geometry, H-only topology features, film / print | full feature set; 10–40 credits (text) or 20–50 (image / multiview) by texture tier, plus `geometry_quality=detailed` +20, `quad` +5, `smart_low_poly` +10, `generate_parts` +20 |
|
|
40
|
+
| `tripo-p1` | `P1-20260311` | GA | explicit lower-cost low-poly choice | face_limit 50–20000; **no** `quad` `smart_low_poly` `generate_parts` `geometry_quality`; no published price, so plans leave it unestimated |
|
|
41
|
+
| `tripo-p2` | `P2-20260801` | GA (2026-08) | automatic choice for real-time, game, editable, low-poly, voxel, quad, or a face budget within P2's range | adds `quad` (forces FBX); face_limit 48–50000 tri / 48–25000 quad (validated locally); still **no** `smart_low_poly` `generate_parts` `geometry_quality` (stripped with a warning). 100–130 credits for every input by texture tier, no add-ons; confirm the plan card's estimate with the human before spending |
|
|
42
42
|
| `tripo-v3.0` / `tripo-v2.5` | `v3.0-20250812` / `v2.5-20250123` | Legacy | previous generations | only when the human asks |
|
|
43
43
|
|
|
44
44
|
**Alias vs wire value.** `tripo-*`, `p1`, `p2`, `v3.1` … are CLI-side aliases; the CLI always sends the dated wire value in the `model` field (`--model tripo-p2` → `"model": "P2-20260801"`). The v3 server whitelist accepts wire values only — sending an alias straight to the API returns 1004 `invalid model` with the allowed list. `task.json` records the wire value that was actually used. `tripo-turbo` / `tripo-v2.0` appear in some docs but are **not** on the v3 whitelist (400).
|
|
45
45
|
|
|
46
|
+
**Automatic routing.**
|
|
47
|
+
|
|
48
|
+
- Explicit `--model` always wins, followed by `-p model=<string>`; both are normalized and checked against the selected model's capabilities.
|
|
49
|
+
- With neither form, dense/high-poly geometry, `smart_low_poly=true`, `generate_parts=true`, any explicit `geometry_quality`, and a face budget outside P2's range (below 48, above 50000, or above 25000 with quad) select H3.1 first.
|
|
50
|
+
- A scenario preset is the next preference and outranks prompt hints: film and print use H3.1, while game-mobile, game-pc, ar-web, anim, and toy use P2.
|
|
51
|
+
- Without a preset, real-time/game/editable/topology hints, low-poly/voxel intent, `quad=true`, or a face budget within P2's range select P2.
|
|
52
|
+
- Everything else uses H3.1, the official default model.
|
|
53
|
+
|
|
46
54
|
Official docs (ov / cn):
|
|
47
55
|
- Models & Versions: <https://developers.tripo3d.ai/en/docs/models-and-versions> · <https://developers.tripo3d.com/zh/docs/models-and-versions>
|
|
48
56
|
- P Series model detail: <https://developers.tripo3d.ai/en/models/p1> · <https://developers.tripo3d.com/zh/models/p1>
|
|
@@ -111,14 +119,31 @@ tripo generate image-to-splat photo.png # gaussian splat
|
|
|
111
119
|
| `seedream_v4` | ByteDance | GA | text-to-image default (balanced); **not accepted by image-to-image** |
|
|
112
120
|
| `seedream_v5` | ByteDance | GA | image-to-image default; higher quality |
|
|
113
121
|
| `banana` / `banana_pro` / `banana2` | Google | GA | fast / higher quality / latest fast |
|
|
114
|
-
| `chat_image_1`
|
|
122
|
+
| `chat_image_1` | OpenAI | retired 2026-10-23 | rejected locally; explicitly choose a replacement, never auto-resubmit |
|
|
123
|
+
| `chat_image_1.5` | OpenAI | active; retiring 2026-12-01 | remains supported until retirement |
|
|
115
124
|
| `chat_image_2` | OpenAI | GA | GPT, best quality |
|
|
116
125
|
| `chat_image_2.5_flare` / `chat_image_2.5_sunburst` | OpenAI | GA | 2.5 series: flare = speed tier (chat_image_2 quality, much faster); sunburst = refined tier (keeps unedited areas closest to the original) |
|
|
117
126
|
|
|
118
|
-
Image model ids are sent as-is (no alias
|
|
127
|
+
Image model ids are endpoint-whitelisted and sent as-is (no Gemini/display alias mapping). Unknown IDs fail locally. Since 0.8.0 the CLI rejects retired `chat_image_1` without automatic replacement; `chat_image_1.5` remains valid as of 2026-10-27. Full list with retirement dates: <https://developers.tripo3d.ai/en/docs/models-and-versions>.
|
|
119
128
|
|
|
120
129
|
### Image parameters
|
|
121
130
|
|
|
131
|
+
- Since 0.8.0 the CLI validates `model`, `quality`, `background`, `output_format` and known `size` rules on both image endpoints.
|
|
132
|
+
- Image editing preflights these and reference counts (Seedream ≤4, Banana ≤10, Chat Image ≤16) before uploading any local file.
|
|
133
|
+
- Standalone image/multiview-to-model likewise validates known model/face/quad constraints before uploads; text-to-model validates the effective prompt's 1024-character limit.
|
|
134
|
+
- Non-2.5 `background` is removed with an ignored warning (matching the documented server behavior); 2.5 transparency rejects JPEG. `quality=auto` is rejected.
|
|
135
|
+
- Unspecified values remain unspecified; the CLI does not invent provider fields or silently change models.
|
|
136
|
+
|
|
137
|
+
Size rules (official tabs, checked 2026-10-27):
|
|
138
|
+
- `banana`: fixed `1024x1024`, `832x1248`, `1248x832`, `864x1184`, `1184x864`, `896x1152`, `1152x896`, `768x1344`, `1344x768`, `1536x672`. Omitted size is left to the service; the documented default differs from its explicit fixed-size list.
|
|
139
|
+
- `banana_pro`: `1K` / `2K` / `4K` or positive integer `WxH`; no undocumented pixel limits are invented.
|
|
140
|
+
- `banana2`: `0.5K` / `1K` / `2K` / `4K` only.
|
|
141
|
+
- `seedream_v4`: `2K` / `4K`; `seedream_v5`: `2K` / `3K`; explicit `WxH` requires aspect ratio 1:16–16:1. The official MP ranges are rounded (v4 approximately 3.69–16.78 MP; v5 3.69–10.40 MP); exact pixel-count cutoffs are not asserted by the CLI and still require server validation.
|
|
142
|
+
- `chat_image_1.5`: `1024x1024` / `1024x1536` / `1536x1024` / `auto`.
|
|
143
|
+
- `chat_image_2` / 2.5: `auto` or `WxH`, each edge ≤3840 and divisible by 16, long/short ratio ≤3, total pixels 655360–8294400. `1536x864` and `1088x1920` work; `1080x1920` fails locally.
|
|
144
|
+
|
|
145
|
+
3D display aliases `H3.1` / `P1.0` / `P2.0` (plus `P2.0 Preview`, the pre-GA name kept for compatibility) and legacy `H3.0` / `H2.5` map to the same dated IDs and validation as `tripo-v3.1` / `tripo-p1` / `tripo-p2` / `tripo-v3.0` / `tripo-v2.5`; every model alias is case-insensitive. All `face_limit` values must be finite integers. Unknown model names are rejected, not forwarded.
|
|
146
|
+
|
|
122
147
|
| param | default | endpoint | notes |
|
|
123
148
|
| --- | --- | --- | --- |
|
|
124
149
|
| `prompt` | — | t2i (required), i2i | ≤1024 chars; i2i: required unless `template` is set |
|
package/skill/commands/make.md
CHANGED
|
@@ -14,14 +14,20 @@ tripo make <input...> [options]
|
|
|
14
14
|
── Plan ──────────────────────────
|
|
15
15
|
input: a medieval knight
|
|
16
16
|
scenario: game-mobile (Mobile game / low-poly)
|
|
17
|
-
model:
|
|
17
|
+
model: P2-20260801 — scenario preference
|
|
18
18
|
steps:
|
|
19
19
|
1. text-to-model POST /v3/generation/text-to-model — generate a 3D model from text
|
|
20
|
-
model="
|
|
21
|
-
2.
|
|
22
|
-
3. convert POST /v3/models/convert — convert format / texture size / orientation
|
|
20
|
+
model="P2-20260801" texture=true pbr=true texture_quality="standard" face_limit=15000
|
|
21
|
+
2. convert POST /v3/models/convert — convert format / texture size / orientation
|
|
23
22
|
format="FBX" texture_size=2048
|
|
24
|
-
deliverables: FBX
|
|
23
|
+
deliverables: FBX
|
|
24
|
+
cost impact:
|
|
25
|
+
· estimated generation cost: 110 credits (official list price; chain steps not estimated)
|
|
26
|
+
· non-default convert options bill as complex convert
|
|
27
|
+
P2 editable low-poly topology
|
|
28
|
+
2K textures for mobile budgets
|
|
29
|
+
P2 costs more credits than H/P1; check credits before running
|
|
30
|
+
append --then rig if you need a skeleton
|
|
25
31
|
──────────────────────────────────
|
|
26
32
|
```
|
|
27
33
|
|
|
@@ -41,10 +47,14 @@ In a TTY it then asks `Run this plan?`; answering no exits 0 with `cancelled; no
|
|
|
41
47
|
|
|
42
48
|
- `--for <scenario>` — `game-mobile` `game-pc` `film` `print` `ar-web` `anim` `toy`. Sets model+params+chain+format from the domain knowledge base.
|
|
43
49
|
- `--then <steps>` — processing chain, comma-separated. Steps: `texture convert import rig-check rig retarget segment complete decimate uv smartsegment`. Args: `step:key=value,...`; bare value maps to the step's primary arg (`convert:fbx` → format, `decimate:5000` → face_limit, `retarget:preset:walk` → animation). Overrides the scenario chain.
|
|
44
|
-
- `--model <m>` — force
|
|
50
|
+
- `--model <m>` — force a model. The CLI normalizes these aliases (case-insensitive) to the wire versions the server actually accepts. Full table with status (GA / Legacy) and official links: `tripo docs --topic commands/generate` → "Models & Versions".
|
|
51
|
+
- `tripo-v3.1` (`v3.1-20260211`) — official default flagship; dense geometry / H-only features. Plan card estimate at official list price: 10–50 credits before add-ons.
|
|
52
|
+
- `tripo-p1` (`P1-20260311`) — explicit lower-cost low-poly; face_limit 50–20000; quad/parts/geometry_quality unsupported and stripped. Not estimated.
|
|
53
|
+
- `tripo-p2` (`P2-20260801`) — P-series; automatic for real-time/editable topology; quad; face_limit 48–50000 tri / 48–25000 quad. Plan card estimate: 100–130 credits.
|
|
54
|
+
- Without an explicit model, hard geometry requirements win, then the scenario preference, then prompt/topology routing; everything else uses H3.1, the official default. Legacy models are not estimated.
|
|
45
55
|
- `-n, --candidates <n>` — up to 4 parallel candidates with different seeds (interactive pick when chaining).
|
|
46
56
|
- `--seed <n>` — fixed model_seed for reproducible geometry.
|
|
47
|
-
- `-p, --param key=value` — extra API parameter, repeatable. Common: `texture=false pbr=false` (bare geometry, cheaper), `texture_quality=detailed`, `face_limit=15000`, `quad=true` (forces FBX), `auto_size=true`, `negative_prompt=...`.
|
|
57
|
+
- `-p, --param key=value` — extra API parameter, repeatable. Common: `texture=false pbr=false` (bare geometry, cheaper), `texture_quality=detailed`, `face_limit=15000`, `quad=true` (forces FBX), `auto_size=true`, `negative_prompt=...`. For 3D generation, `-p model=<string>` is also an explicit model choice, normalized and validated like `--model`; `--model` takes precedence when both are supplied.
|
|
48
58
|
- `-o, --out <dir>` — artifact base dir (default `./tripo-out/<name>-<id8>/`).
|
|
49
59
|
- `--no-wait` — submit only, print `{"task_id"}` and exit (poll later with `tripo task watch`).
|
|
50
60
|
- `--no-download` — wait but skip downloads.
|
|
@@ -56,7 +66,7 @@ In a TTY it then asks `Run this plan?`; answering no exits 0 with `cancelled; no
|
|
|
56
66
|
|
|
57
67
|
## Dry run (agents: validate before spending)
|
|
58
68
|
|
|
59
|
-
`tripo make ... --dry-run --json` runs the whole planning stage with **zero network calls** and prints the plan as the result on stdout: the model
|
|
69
|
+
`tripo make ... --dry-run --json` runs the whole planning stage with **zero network calls** and prints the plan as the result on stdout: the model routing selected, the completed request body for every call (scenario defaults merged, aliases normalized to wire values, illegal params stripped, step defaults filled in), and the outcome of every local validation. Works without an API key.
|
|
60
70
|
|
|
61
71
|
```bash
|
|
62
72
|
tripo make concept.png --for game-mobile --then rig,convert:fbx --dry-run --json
|
|
@@ -65,22 +75,24 @@ tripo make concept.png --for game-mobile --then rig,convert:fbx --dry-run --json
|
|
|
65
75
|
```json
|
|
66
76
|
{"dry_run":true,"valid":true,
|
|
67
77
|
"input":"concept.png","scenario":"game-mobile",
|
|
68
|
-
"model":"
|
|
78
|
+
"model":"P2-20260801","model_reason":"scenario preference",
|
|
69
79
|
"steps":[
|
|
70
80
|
{"name":"image-to-model","endpoint":"/v3/generation/image-to-model","task_type":"image_to_model",
|
|
71
|
-
"payload":{"input":"<upload:concept.png>","model":"
|
|
81
|
+
"payload":{"input":"<upload:concept.png>","model":"P2-20260801","texture":true,"pbr":true,"texture_quality":"standard","face_limit":15000}},
|
|
72
82
|
{"name":"rig","endpoint":"/v3/animations/rig","task_type":"animate_rig","payload":{"input":"<upstream>","model":"v3.0-20260909"}},
|
|
73
83
|
{"name":"convert","endpoint":"/v3/models/convert","task_type":"convert_model","payload":{"input":"<upstream>","format":"FBX"}}],
|
|
74
84
|
"pending_uploads":["concept.png"],
|
|
75
|
-
"deliverables":["FBX"
|
|
85
|
+
"deliverables":["FBX"],
|
|
76
86
|
"candidates":1,
|
|
77
87
|
"warnings":["--then overrides the default game-mobile processing chain"],
|
|
78
88
|
"errors":[],
|
|
79
|
-
"
|
|
89
|
+
"generation_credits_estimate":110,
|
|
90
|
+
"cost_notes":["estimated generation cost: 110 credits (official list price; chain steps not estimated)"]}
|
|
80
91
|
```
|
|
81
92
|
|
|
82
93
|
- `valid` / `errors` — `errors` are blocking (illegal chain order, out-of-range `face_limit`, quad + GLTF, missing `animation` for retarget, ...). The real run would exit 2 on them before spending anything; the dry run exits 2 too, so branch on the exit code or on `valid`.
|
|
83
|
-
- `warnings` — adjustments the CLI applies automatically (e.g. `P1 does not support quad (removed)`)
|
|
94
|
+
- `warnings` — adjustments the CLI applies automatically (e.g. `P1 does not support quad (removed)`). A removed requirement is not fulfilled: resolve it with the user before paid execution, even when the normalized request is `valid=true`.
|
|
95
|
+
- `generation_credits_estimate` — official list price of the generation step × candidates; `null` for P1, legacy models, imports and task references (not estimated, never zero). Chain steps are not included, so a chained run costs more.
|
|
84
96
|
- `steps[].payload` — the exact body that would be POSTed. Local files show as `<upload:path>` (also listed in `pending_uploads`); chain steps use `<upstream>` for the task id that does not exist yet.
|
|
85
97
|
- A bare task id with no local history entry cannot have its type checked offline: chain legality is reported as unverified in `warnings` and checked by the real run.
|
|
86
98
|
- Without `--json` the same plan card as the real run is printed on stdout, followed by the warnings/errors and a verdict line.
|
|
@@ -105,9 +117,23 @@ Typical agent loop: dry-run → fix `errors` / adjust params → dry-run again u
|
|
|
105
117
|
- Single task (no `--then`): `credits_consumed` is that task's spend; no `credits_breakdown`.
|
|
106
118
|
- Model file / URL input: the result adds `normalize_scale`, the factor the import rescaled the model by (final size = original size × normalize_scale; `1` = untouched). The platform never scales it back; divide by it to recover the original size. With `--then`, the steps after the import do not return it, so the result carries the import's value.
|
|
107
119
|
- Chained run: `credits_consumed` is the **total** across generation + every step, and `credits_breakdown` lists each task in run order (generation first). Human mode prints the same as `credits consumed (total): 145` followed by one indented line per task.
|
|
120
|
+
- `--for ar-web` with its own chain (no `--then`): the generated GLB is downloaded too, so the result adds `source_output_dir` / `source_model_file` (GLB) beside `output_dir` / `model_file` (USDZ). A chain that stops early (not riggable) reports the source model it downloaded instead in the same two fields.
|
|
108
121
|
|
|
109
122
|
Exit codes: 0 ok · 2 params · 3 auth · 4 credits · 5 content policy · 6 task failed · 7 network · 9 rate limit.
|
|
110
123
|
|
|
111
124
|
## Cost behavior
|
|
112
125
|
|
|
126
|
+
- Since 0.8.0, `make` preflights every deterministic chain request before resolving local uploads, in both normal and dry-run modes.
|
|
127
|
+
- Missing convert formats, incompatible rig/texture options, known rig/preset-family conflicts and disabled steps cannot produce a successful validated request.
|
|
128
|
+
- Headless `-n 2` with an explicit or scenario-default chain is rejected before upload, including dry-run.
|
|
129
|
+
- `valid=true` means the normalized local plan passed known rules, not that unknown passthrough fields or runtime source-dependent checks have been verified.
|
|
130
|
+
- Removed P-series fields remain warnings and are absent from the payload.
|
|
131
|
+
- Plan notes, normalized step parameters and final deliverables reflect the actual request rather than overridden scenario defaults.
|
|
132
|
+
- Only the generation step is estimated, at official list price; P1, legacy models and chain steps are not.
|
|
133
|
+
|
|
134
|
+
- The built-in anim chain leaves spec unspecified so rig-check can recommend a non-biped body.
|
|
135
|
+
- Explicit non-biped spec is rejected by this CLI to avoid claiming an ineffective requirement was met; the upstream documentation describes spec as biped-only, not as a universally forbidden field.
|
|
136
|
+
- A known v1.0 rig uses `preset:biped:*`; v2.5/v3.0 use generic/body-type presets. Unknown standalone sources are not assigned an invented rig version.
|
|
137
|
+
- Dense-geometry negation has lexical Chinese/English safeguards, not full semantic understanding; choose an explicit model for ambiguous prompts.
|
|
138
|
+
|
|
113
139
|
The plan card shows every call before anything is submitted; balance is pre-checked before submitting; failed tasks auto-refund frozen credits. After the run, `credits_consumed` / `credits_breakdown` report what was actually billed per task. `texture=false pbr=false` skips texture credits entirely (right for 3D printing).
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# tripo model / anim / mesh — processing steps
|
|
2
2
|
|
|
3
|
-
All subcommands take input as: explicit argument (task id / @last / @name / file / URL) > piped stdin JSON > `@last
|
|
3
|
+
All subcommands take input as: explicit argument (task id / @last / @name / file / URL) > piped stdin JSON > `@last` (only in an interactive terminal with nothing piped).
|
|
4
|
+
Headless, a missing input never falls back to `@last`: empty stdin or no `task_id` exits 2, an upstream error JSON exits with the upstream's code, and nothing is submitted.
|
|
4
5
|
Shared options: `--json --yes -o --no-wait --no-download --timeout --name -p key=value`.
|
|
5
6
|
Any API parameter without a first-class flag can be passed with `-p key=value` (JSON values allowed: `-p 'part_names=["head","body"]'`).
|
|
6
7
|
|
package/skill/commands/task.md
CHANGED
|
@@ -10,9 +10,9 @@ tripo task get @last --download --json
|
|
|
10
10
|
|
|
11
11
|
## tripo task watch <id>
|
|
12
12
|
|
|
13
|
-
Block until the task finishes.
|
|
13
|
+
Block until the task finishes. Progress goes to stderr (plain lines in `--json` mode, one per progress change); stdout carries only the final task detail as one JSON line. `--download` grabs artifacts on success. `--timeout <seconds>` (default 1800).
|
|
14
14
|
|
|
15
|
-
Rules for agents: treat `watch` as synchronous;
|
|
15
|
+
Rules for agents: treat `watch` as synchronous; wait for the process to exit and read its one stdout JSON line; exit code 6 means the task failed (credits refunded) — or, if the error says `timeout`, that it is still running (watch it again; do not resubmit).
|
|
16
16
|
|
|
17
17
|
## tripo task list [ids...]
|
|
18
18
|
|
package/skill/commands/view.md
CHANGED
|
@@ -6,7 +6,7 @@ Starts a local model-viewer page and opens the browser (humans). Headless caller
|
|
|
6
6
|
|
|
7
7
|
## tripo redo [task|@last] [--seed N]
|
|
8
8
|
|
|
9
|
-
Re-submits the recorded request with a fresh `model_seed` (identical otherwise). Only works for tasks created by this CLI (history holds the payload). Result is a new task, downloaded like `make`.
|
|
9
|
+
Re-submits the recorded request with a fresh `model_seed` (identical otherwise). Only works for tasks created by this CLI (history holds the payload). Result is a new task, downloaded like `make`. It is a new paid task submitted at once, with no plan card and no confirmation: agents must ask the human before running it.
|
|
10
10
|
|
|
11
11
|
## tripo ai [request...]
|
|
12
12
|
|
package/skill/common-errors.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
| --- | --- | --- | --- |
|
|
5
5
|
| 3 | 1002 | authentication failed (invalid/missing API key) | set `TRIPO_API_KEY` or run `tripo login`; check the key wasn't revoked |
|
|
6
6
|
| 3 | 1005 | forbidden (no permission for this resource) | check account permissions |
|
|
7
|
-
| 2 | 1003/1004 | malformed request / invalid parameter | check spelling against `tripo docs --topic commands/<cmd>`; the CLI
|
|
7
|
+
| 2 | 1003/1004 | malformed request / invalid parameter | check spelling against `tripo docs --topic commands/<cmd>`; the CLI strips unsupported P-series parameters with warnings (`quad` on P1; `smart_low_poly`, `generate_parts`, or `geometry_quality` on P1/P2). Classic 1004s: `generate_parts=true` with texture/pbr on, `ref_image` on segment v1, `smart_uv=true` on decimate v1.0/v2.0, non-GLB input to smartsegment `model`, `texture_quality=fast` on a texture version other than v3.5. `invalid model`: the API only accepts dated wire values (`P2-20260801`, `v3.1-20260211`…) — pass the CLI alias (`--model tripo-p2`) and let the CLI normalize, or the wire value itself; never `tripo-*` straight to the API. Table: `commands/generate` § "Models & Versions" |
|
|
8
8
|
| 9 | 1007 | per-API-key rate limit | the CLI already waits out `X-RateLimit-Reset` / `Retry-After` (up to 60 s per wait, 3 retries); if it still exits 9, wait longer before re-running |
|
|
9
9
|
| 9 | 2000 | per-account concurrency pool full (see table below) | the CLI waits out `Retry-After` (up to 60 s, 3 retries) first; then wait for a task in that category to finish, or lower `--concurrency` in batch; other categories are unaffected |
|
|
10
10
|
| 8 | 2001 | task not found | task ids are account-scoped — same key that created it? right region (ov/cn)? |
|
|
@@ -21,8 +21,10 @@
|
|
|
21
21
|
| 8 | 2019 | file not found (token expired?) | re-upload; file tokens are short-lived |
|
|
22
22
|
| 2 | 2020/2021/2022 | bad image URL / file too large / image too large | fix the URL or shrink the file |
|
|
23
23
|
| 7 | 1000/1001 | server-side error | queries auto-retry on 1000, task creation does not (the task may already exist and be billed — check `tripo balance` frozen credits before re-running); if persistent, contact support with the `request_id` |
|
|
24
|
-
| 6 | — | task failed server-side, or the watch timed out | failed / cancelled: frozen credits auto-refund (the error shows the task's `error_code` / `error_message`); `tripo redo` often succeeds with a new seed. `timeout`: the task is still running and is billed if it succeeds — `tripo task watch <id> --download`, never redo |
|
|
24
|
+
| 6 | — | task failed server-side, or the watch timed out | failed / cancelled: frozen credits auto-refund (the error shows the task's `error_code` / `error_message`); `tripo redo` often succeeds with a new seed, but it is a new paid task with no plan card or confirmation, so ask the human first. `timeout`: the task is still running and is billed if it succeeds — `tripo task watch <id> --download`, never redo |
|
|
25
25
|
| 7 | — | network/5xx | queries auto-retried 3×, task creation is not (follow the `suggestion`: check `tripo balance` before re-running); check `tripo doctor`; region mismatch (ov/cn) is a common cause |
|
|
26
|
+
| 7 | — | task succeeded but downloading its artifacts failed | the task is finished and billed; the error JSON carries `task_id` — run `tripo task get <task_id> --download`, never re-make (batch marks the job `needs_attention`; `make -n` keeps the candidate with `download_error`) |
|
|
27
|
+
| 2 | — | no task on stdin (headless process command with nothing piped, or an upstream that printed no task) | nothing was submitted; pass the input explicitly (`tripo model texture <task_id>` or `@last`). A failed upstream's error JSON is passed through with its own exit code |
|
|
26
28
|
|
|
27
29
|
## Concurrency pools (default per account; error 2000 when full)
|
|
28
30
|
|
|
@@ -42,7 +44,8 @@ Pools are independent: a full H-series pool does not block P-series or image tas
|
|
|
42
44
|
- `complete` only accepts a `segment` task; `retarget` only accepts a `rig` task (a file/URL is refused before upload)
|
|
43
45
|
- quad + GLTF export → rejected (quads cannot be stored in glTF; quad forces FBX output); use `--format FBX`
|
|
44
46
|
- `texture_quality=fast` with an explicit texture version other than `v3.5-20260815` → rejected (omit the version and the CLI selects v3.5)
|
|
45
|
-
- P1 + face_limit outside 50–20000 → rejected
|
|
47
|
+
- P1 + face_limit outside 50–20000 → rejected; use P2 for 48–50000 triangles / 48–25000 quads, or H3.1 beyond P2
|
|
48
|
+
- P2 + face_limit outside 48–50000 triangles (or 48–25000 with `quad=true`) → rejected; use H3.1 for a higher budget
|
|
46
49
|
- decimate `smart_uv` on an explicit v1.0/v2.0 → rejected (v3.0 only); with no model given the CLI selects v3.0
|
|
47
50
|
- multiview without a front view → rejected (name a file "front" or pass it first)
|
|
48
51
|
- `-n` with `--then` needs an interactive terminal (pick the winner first, then chain)
|
|
@@ -9,8 +9,10 @@ tripo make "a cartoon fox character, T-pose" --for anim --json --yes
|
|
|
9
9
|
|
|
10
10
|
## Step by step with pipes
|
|
11
11
|
|
|
12
|
+
`--model tripo-p2` keeps the `anim` preset's model (P2, 100–130 credits per generation); without it, a plain T-pose prompt like this one routes to H3.1 (10–50 credits).
|
|
13
|
+
|
|
12
14
|
```bash
|
|
13
|
-
tripo make "a robot soldier, T-pose" --json --yes \
|
|
15
|
+
tripo make "a robot soldier, T-pose" --model tripo-p2 --json --yes \
|
|
14
16
|
| tripo anim check --json \
|
|
15
17
|
| tripo anim rig --spec mixamo --out-format fbx --json \
|
|
16
18
|
| tripo anim retarget --animation preset:idle preset:walk preset:run --json
|
package/skill/examples/ar-web.md
CHANGED
|
@@ -4,20 +4,22 @@ iOS QuickLook needs USDZ; the web wants a small GLB. The ar-web scenario deliver
|
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
tripo make product.jpg --for ar-web --json --yes
|
|
7
|
-
# →
|
|
8
|
-
# GLB
|
|
7
|
+
# → P2 generate (face_limit 20000) → convert USDZ
|
|
8
|
+
# GLB: source_model_file (in source_output_dir); USDZ: model_file (in output_dir).
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Tighter mobile budget:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
tripo make product.jpg --for ar-web
|
|
14
|
+
tripo make product.jpg --for ar-web -p face_limit=8000 --json --yes
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
Web-only (skip USDZ):
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
tripo make product.jpg --
|
|
20
|
+
tripo make product.jpg --model tripo-p2 -p face_limit=10000 --json --yes
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
+
`--then` replaces the preset's whole chain, so `--for ar-web --then ...` downloads only its final step. The GLB + USDZ dual download applies only to the preset's own chain.
|
|
24
|
+
|
|
23
25
|
Faithful textures from the photo: image inputs default to `texture_alignment=original_image` server-side; add `-p texture_alignment=geometry` only for stylized re-texturing.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Recipe: game assets
|
|
2
2
|
|
|
3
|
-
## Mobile / low-poly (
|
|
3
|
+
## Mobile / low-poly (P2, clean topology, FBX)
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
tripo make "a stylized barbarian axe" --for game-mobile --json --yes
|
|
7
|
-
# →
|
|
7
|
+
# → P2, face_limit 15000, 2K textures, convert to FBX
|
|
8
8
|
```
|
|
9
9
|
|
|
10
10
|
Tighter budget and Unity delivery:
|
|
@@ -14,17 +14,28 @@ tripo make "a health potion bottle" --for game-mobile \
|
|
|
14
14
|
-p face_limit=3000 --then convert:format=FBX,texture_size=1024 --json --yes
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
## PC / console (
|
|
17
|
+
## PC / console (P2, detailed PBR)
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
20
|
tripo make "an ornate treasure chest, fantasy style" --for game-pc --json --yes
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
P2 gives editable topology; with detailed textures the generation step costs 120 credits. For a hero asset where geometric fidelity matters more, add `--model tripo-v3.1` (detailed textures: 30 credits from text, 40 from an image).
|
|
24
|
+
|
|
25
|
+
## LODs baked from one dense source (explicit H3.1)
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
tripo make "a dense high-poly stone golem source mesh" --model tripo-v3.1 --name dense-golem --json --yes
|
|
29
|
+
tripo make @dense-golem --then decimate:5000,convert:fbx --json --yes # bakes normals by default
|
|
30
|
+
tripo make @dense-golem --then decimate:1500,convert:fbx --json --yes # another LOD from the same source
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Separate editable parts (explicit H3.1)
|
|
24
34
|
|
|
25
35
|
```bash
|
|
26
|
-
tripo make "a
|
|
27
|
-
tripo
|
|
36
|
+
tripo make "a modular sci-fi crate with a separate lid and handles" \
|
|
37
|
+
--model tripo-v3.1 -p generate_parts=true --json --yes
|
|
38
|
+
# → H3.1; parts disable texture/pbr, so re-texture later with `tripo model texture`
|
|
28
39
|
```
|
|
29
40
|
|
|
30
41
|
## Character with animations (see also examples/animation.md)
|
package/skill/examples/pipes.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Recipe: shell pipelines & batch
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## JSON pipes
|
|
4
4
|
|
|
5
|
-
stdout of every task command is a single JSON line when piped; downstream commands read it from stdin:
|
|
5
|
+
stdout of every task command is a single JSON line when piped; downstream commands read it from stdin. If an upstream command fails or prints no task, the downstream submits nothing and exits with the upstream's exit code (or 2):
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
tripo make cat.png --json | tripo model texture --texture-quality detailed --json | tripo model convert --format FBX --json
|
package/skill/examples/print.md
CHANGED
|
@@ -17,13 +17,17 @@ tripo make "a phone stand" --for print \
|
|
|
17
17
|
# or -p auto_size=true at generation for real-world meters
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
## Color print (
|
|
20
|
+
## Color print (OBJ with vertex colors)
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
-
tripo make figurine.png --for print \
|
|
24
|
-
--then "convert:format=
|
|
23
|
+
tripo make figurine.png --for print -p texture=true \
|
|
24
|
+
--then "convert:format=OBJ,export_vertex_colors=true" --json --yes
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
+
- The print preset skips textures (`texture=false`); a color print needs them back with `-p texture=true` (texture credits apply).
|
|
28
|
+
- The API's 3MF output is single color, and vertex colors are only exported to OBJ/GLTF.
|
|
29
|
+
- Build the multi-color 3MF in your slicer from the OBJ.
|
|
30
|
+
|
|
27
31
|
## Fix holes / make watertight first
|
|
28
32
|
|
|
29
33
|
```bash
|
package/dist/i18n.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/** Minimal bilingual UX strings. Locale: config override > env (LANG/LC_ALL). */
|
|
2
|
-
let currentLocale;
|
|
3
|
-
export function setLocale(locale) {
|
|
4
|
-
currentLocale = locale;
|
|
5
|
-
}
|
|
6
|
-
export function getLocale() {
|
|
7
|
-
if (currentLocale)
|
|
8
|
-
return currentLocale;
|
|
9
|
-
const env = process.env.LC_ALL || process.env.LC_MESSAGES || process.env.LANG || '';
|
|
10
|
-
return /^zh/i.test(env) ? 'zh' : 'en';
|
|
11
|
-
}
|
|
12
|
-
/** Pick the localized variant of a bilingual pair. */
|
|
13
|
-
export function t(pair) {
|
|
14
|
-
return getLocale() === 'zh' ? pair.zh : pair.en;
|
|
15
|
-
}
|
|
16
|
-
/** Pick the localized variant of a bilingual string list. */
|
|
17
|
-
export function tList(pair) {
|
|
18
|
-
return getLocale() === 'zh' ? pair.zh : pair.en;
|
|
19
|
-
}
|