tripo-cli 0.6.0 → 0.6.1
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/README.md +1 -1
- package/dist/ai/experts.js +1 -1
- package/dist/commands/completion.js +1 -1
- package/dist/commands/process-groups.js +1 -8
- package/dist/core/requests.js +0 -6
- package/dist/knowledge/chains.js +1 -3
- package/dist/knowledge/models.js +0 -1
- package/dist/knowledge/scenarios.js +3 -3
- package/package.json +1 -1
- package/skill/SKILL.md +2 -2
- package/skill/commands/make.md +1 -1
- package/skill/commands/process.md +0 -2
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ Works with both Tripo regions from the same install — international (`openapi.
|
|
|
35
35
|
| `tripo login / logout / whoami / use` | device flow: browser approves, key arrives automatically (paste fallback); stored 0600 in `~/.tripo/config.json`; `use` switches accounts |
|
|
36
36
|
| `tripo topup / balance / usage` | open the billing page + detect the credits arriving; check spend |
|
|
37
37
|
| `tripo generate <endpoint>` | deterministic access to all 8 generation endpoints |
|
|
38
|
-
| `tripo model / anim / mesh <step>` | refine, texture,
|
|
38
|
+
| `tripo model / anim / mesh <step>` | refine, texture, convert, import, rig-check, rig, retarget, segment, complete, decimate, uv, smartsegment |
|
|
39
39
|
| `tripo task get/list/watch` | query and stream task progress (NDJSON in `--json` mode) |
|
|
40
40
|
| `tripo files upload` | upload a file, print the `file_token` |
|
|
41
41
|
| `tripo batch run <manifest.yaml>` | bulk pipelines with concurrency, retries, and resume |
|
package/dist/ai/experts.js
CHANGED
|
@@ -32,7 +32,7 @@ const SPECIALIST_PROMPTS = {
|
|
|
32
32
|
print: `You are a 3D-printing engineer. Geometry only (texture=false,pbr=false), watertight meshes, flatten_bottom for FDM, STL or colored 3MF via convert, real-world sizing via scale_factor/auto_size.`,
|
|
33
33
|
'ar-web': `You are a realtime AR/Web 3D engineer. Keep faces <= 20000 via decimate, 2K textures, deliver GLB + USDZ (iOS QuickLook).`,
|
|
34
34
|
anim: `You are a character animation TD. Chain: rig-check → rig (v2.5 rig, spec tripo|mixamo) → retarget (<=5 preset animations, billed per animation). Mixamo/Unity Humanoid → spec=mixamo.`,
|
|
35
|
-
toy: `You are a stylized collectible designer. P1 low-poly
|
|
35
|
+
toy: `You are a stylized collectible designer. P1 low-poly. STL via convert for physical prints.`,
|
|
36
36
|
};
|
|
37
37
|
function specialistSystem(scenarioId) {
|
|
38
38
|
const persona = SPECIALIST_PROMPTS[scenarioId] ?? SPECIALIST_PROMPTS['game-mobile'];
|
|
@@ -9,7 +9,7 @@ const COMMANDS = [
|
|
|
9
9
|
];
|
|
10
10
|
const SUBS = {
|
|
11
11
|
generate: ['text-to-model', 'image-to-model', 'multiview-to-model', 'text-to-image', 'image-to-image', 'image-to-multiview', 'edit-multiview', 'image-to-splat'],
|
|
12
|
-
model: ['refine', 'texture', '
|
|
12
|
+
model: ['refine', 'texture', 'convert', 'import'],
|
|
13
13
|
anim: ['check', 'rig', 'retarget'],
|
|
14
14
|
mesh: ['segment', 'complete', 'decimate', 'uv', ...(isMeshEditEnabled() ? ['edit'] : []), 'smartsegment'],
|
|
15
15
|
task: ['get', 'list', 'watch'],
|
|
@@ -70,8 +70,6 @@ function collectStepArgs(step, flags) {
|
|
|
70
70
|
return pick(['format', 'texture_size', 'texture_format', 'face_limit', 'quad', 'flatten_bottom', 'fbx_preset', 'export_orientation', 'scale_factor', 'auto_size', 'pivot_to_center_bottom', 'export_vertex_colors']);
|
|
71
71
|
case 'texture':
|
|
72
72
|
return pick(['model', 'texture_quality', 'texture_alignment', 'pbr']);
|
|
73
|
-
case 'stylize':
|
|
74
|
-
return pick(['style', 'block_size']);
|
|
75
73
|
case 'rig':
|
|
76
74
|
return pick(['model', 'rig_type', 'spec', 'out_format']);
|
|
77
75
|
case 'retarget':
|
|
@@ -94,18 +92,13 @@ function collectStepArgs(step, flags) {
|
|
|
94
92
|
}
|
|
95
93
|
export function registerProcessCommands(program) {
|
|
96
94
|
// ---- tripo model ----
|
|
97
|
-
const model = program.command('model').description('model processing: refine / texture /
|
|
95
|
+
const model = program.command('model').description('model processing: refine / texture / convert / import');
|
|
98
96
|
withTaskOptions(model.command('refine [input]').description('refine a draft text-to-model task (task id / @last)')).action(makeStepAction('refine'));
|
|
99
97
|
withTaskOptions(model
|
|
100
98
|
.command('texture [input]')
|
|
101
99
|
.description('re-texture a model (task/@last/file/url)')
|
|
102
100
|
.option('--texture-quality <q>', 'standard|detailed|extreme')
|
|
103
101
|
.option('--texture-alignment <a>', 'original_image|geometry')).action(makeStepAction('texture'));
|
|
104
|
-
withTaskOptions(model
|
|
105
|
-
.command('stylize [input]')
|
|
106
|
-
.description('stylize a model (lego/voxel/voronoi/minecraft)')
|
|
107
|
-
.option('--style <style>', 'lego|voxel|voronoi|minecraft')
|
|
108
|
-
.option('--block-size <n>', 'minecraft block size 32-128', (v) => Number(v))).action(makeStepAction('stylize'));
|
|
109
102
|
withTaskOptions(model
|
|
110
103
|
.command('convert [input]')
|
|
111
104
|
.description('convert format (GLTF/USDZ/FBX/OBJ/STL/3MF)')
|
package/dist/core/requests.js
CHANGED
|
@@ -165,12 +165,6 @@ export function buildStepRequest(stepName, input, args) {
|
|
|
165
165
|
}
|
|
166
166
|
break;
|
|
167
167
|
}
|
|
168
|
-
case 'stylize': {
|
|
169
|
-
if (typeof params.style !== 'string') {
|
|
170
|
-
throw new UsageError('stylize requires style (lego/voxel/voronoi/minecraft)');
|
|
171
|
-
}
|
|
172
|
-
break;
|
|
173
|
-
}
|
|
174
168
|
case 'smartsegment': {
|
|
175
169
|
if (params.seg_type === undefined)
|
|
176
170
|
params.seg_type = 'model';
|
package/dist/knowledge/chains.js
CHANGED
|
@@ -24,7 +24,6 @@ export const MODEL_PRODUCING_TYPES = new Set([
|
|
|
24
24
|
export const STEPS = [
|
|
25
25
|
{ name: 'refine', endpoint: '/v3/models/refine', produces: 'refine_model', accepts: ['text_to_model'], acceptsFile: false, describe: { zh: '精修文生模型的几何细节', en: 'refine geometry of a text-to-model result' } },
|
|
26
26
|
{ name: 'texture', endpoint: '/v3/models/texture', produces: 'texture_model', accepts: 'any-model', acceptsFile: true, describe: { zh: '重新生成贴图 / PBR 材质', en: 'regenerate textures / PBR materials' } },
|
|
27
|
-
{ name: 'stylize', endpoint: '/v3/models/stylize', produces: 'stylize_model', accepts: 'any-model', acceptsFile: true, describe: { zh: '按风格重塑模型(lego/voxel/...)', en: 'restyle the model (lego/voxel/...)' } },
|
|
28
27
|
{ name: 'convert', endpoint: '/v3/models/convert', produces: 'convert_model', accepts: 'any-model', acceptsFile: true, describe: { zh: '转换输出格式 / 贴图尺寸 / 朝向', en: 'convert format / texture size / orientation' } },
|
|
29
28
|
{ name: 'import', endpoint: '/v3/models/import', produces: 'import_model', accepts: [], acceptsFile: true, describe: { zh: '导入本地模型文件作为加工起点', en: 'import a local model file as the chain source' } },
|
|
30
29
|
{ name: 'rig-check', endpoint: '/v3/animations/rig-check', produces: 'animate_prerigcheck', accepts: 'any-model', acceptsFile: true, passthrough: true, aliases: ['check', 'rigcheck'], describe: { zh: '检查是否可绑骨(不产出模型,不可绑则止损)', en: 'check riggability (no model output; stops the chain if not riggable)' } },
|
|
@@ -71,7 +70,7 @@ export function getStep(name) {
|
|
|
71
70
|
* Parse a --then expression: "texture,rig,convert:fbx" or
|
|
72
71
|
* "convert:format=fbx,texture_size=2048". A bare value after ":" is sugar for
|
|
73
72
|
* the step's primary argument (convert→format, retarget→animation,
|
|
74
|
-
*
|
|
73
|
+
* decimate→face_limit).
|
|
75
74
|
*/
|
|
76
75
|
export function parseThenExpression(expr) {
|
|
77
76
|
const out = [];
|
|
@@ -116,7 +115,6 @@ function applyPrimaryArg(step, args, value) {
|
|
|
116
115
|
const primary = {
|
|
117
116
|
convert: 'format',
|
|
118
117
|
retarget: 'animation',
|
|
119
|
-
stylize: 'style',
|
|
120
118
|
decimate: 'face_limit',
|
|
121
119
|
texture: 'texture_quality',
|
|
122
120
|
rig: 'rig_type',
|
package/dist/knowledge/models.js
CHANGED
|
@@ -139,7 +139,6 @@ export const TEXTURE_FORMATS = [
|
|
|
139
139
|
];
|
|
140
140
|
export const FBX_PRESETS = ['blender', '3dsmax', 'mixamo'];
|
|
141
141
|
export const EXPORT_ORIENTATIONS = ['+x', '-x', '+y', '-y'];
|
|
142
|
-
export const STYLIZE_STYLES = ['lego', 'voxel', 'voronoi', 'minecraft'];
|
|
143
142
|
export const TEXTURE_QUALITIES = ['standard', 'detailed', 'extreme'];
|
|
144
143
|
/** Normalize any accepted alias to the canonical wire value; unknown values pass through. */
|
|
145
144
|
export function normalizeModel(input) {
|
|
@@ -92,14 +92,14 @@ export const SCENARIOS = [
|
|
|
92
92
|
{
|
|
93
93
|
id: 'toy',
|
|
94
94
|
label: { zh: '风格化摆件', en: 'Stylized toy / desk piece' },
|
|
95
|
-
description: { zh: '
|
|
95
|
+
description: { zh: '低模可爱风摆件', en: 'Cute low-poly desk piece' },
|
|
96
96
|
model: MODEL_P1,
|
|
97
97
|
genParams: { texture: true, pbr: true, face_limit: 20000 },
|
|
98
98
|
chain: [],
|
|
99
99
|
deliverables: ['GLB', 'STL via convert'],
|
|
100
100
|
notes: {
|
|
101
|
-
zh: ['P1 出干净低模', '
|
|
102
|
-
en: ['P1 produces clean low-poly', 'append --then
|
|
101
|
+
zh: ['P1 出干净低模', '要打印实物追加 --then convert:stl'],
|
|
102
|
+
en: ['P1 produces clean low-poly', 'append --then convert:stl to print it'],
|
|
103
103
|
},
|
|
104
104
|
},
|
|
105
105
|
];
|
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -50,8 +50,8 @@ tripo make @last --then convert:fbx --json --yes # continue from last t
|
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
- `--for` scenario presets: `game-mobile` `game-pc` `film` `print` `ar-web` `anim` `toy`
|
|
53
|
-
- `--then` chain steps: `refine texture
|
|
54
|
-
- step args: `convert:format=FBX,texture_size=2048` (bare value = primary arg: `convert:fbx`, `
|
|
53
|
+
- `--then` chain steps: `refine texture convert import rig-check rig retarget segment complete decimate uv smartsegment`
|
|
54
|
+
- step args: `convert:format=FBX,texture_size=2048` (bare value = primary arg: `convert:fbx`, `decimate:5000`)
|
|
55
55
|
- Output JSON: `{"task_id","type","status","credits_consumed","output_dir","files",["model_file"],["preview"],["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)
|
|
56
56
|
|
|
57
57
|
## Pipes (composing steps yourself)
|
package/skill/commands/make.md
CHANGED
|
@@ -40,7 +40,7 @@ In a TTY it then asks `Run this plan?`; answering no exits 0 with `cancelled; no
|
|
|
40
40
|
## Options
|
|
41
41
|
|
|
42
42
|
- `--for <scenario>` — `game-mobile` `game-pc` `film` `print` `ar-web` `anim` `toy`. Sets model+params+chain+format from the domain knowledge base.
|
|
43
|
-
- `--then <steps>` — processing chain, comma-separated. Steps: `refine texture
|
|
43
|
+
- `--then <steps>` — processing chain, comma-separated. Steps: `refine 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
44
|
- `--model <m>` — force `tripo-v3.1` (high fidelity, default), `tripo-p1` (low-poly; face_limit 50–20000; quad/parts/geometry_quality unsupported and stripped) or `tripo-p2` (P-series preview; adds quad, face_limit 48–50000 tri / 48–25000 quad; never auto-selected). The CLI normalizes these aliases to the wire versions (`v3.1-20260211` / `P1-20260311` / `P2-20260801`) the server actually accepts. Full table with status (GA / Preview / Legacy) and official links: `tripo docs --topic commands/generate` → "Models & Versions".
|
|
45
45
|
- `-n, --candidates <n>` — up to 4 parallel candidates with different seeds (interactive pick when chaining).
|
|
46
46
|
- `--seed <n>` — fixed model_seed for reproducible geometry.
|
|
@@ -9,7 +9,6 @@ Any API parameter without a first-class flag can be passed with `-p key=value` (
|
|
|
9
9
|
```bash
|
|
10
10
|
tripo model refine [input] # only accepts text_to_model tasks
|
|
11
11
|
tripo model texture [input] --texture-quality detailed --texture-alignment geometry [-p pbr=true]
|
|
12
|
-
tripo model stylize [input] --style lego|voxel|voronoi|minecraft [--block-size 80]
|
|
13
12
|
tripo model convert [input] --format GLTF|USDZ|FBX|OBJ|STL|3MF \
|
|
14
13
|
[--texture-size 2048] [--texture-format JPEG|PNG|OPEN_EXR|...] [--face-limit N] \
|
|
15
14
|
[--quad] [--flatten-bottom] [--fbx-preset blender|3dsmax|mixamo] \
|
|
@@ -22,7 +21,6 @@ tripo model import <file-or-url> # GLB/GLTF/FBX/OBJ/STL ≤150MB
|
|
|
22
21
|
| --- | --- | --- |
|
|
23
22
|
| `refine` | successful `text_to_model` task only | `model` (default `tripo-v3.1`) |
|
|
24
23
|
| `texture` | task / file / URL (file/URL is imported implicitly) | `model` `v3.0-20250812` (default) / `v2.5-20250123`; `texture_quality` standard/detailed/extreme; `pbr` (default true); `texture_seed`; `texture_alignment` original_image/geometry |
|
|
25
|
-
| `stylize` | task / file (no URL) | `style` lego/voxel/voronoi/minecraft; `block_size` 32–128 (minecraft only, default 80) |
|
|
26
24
|
| `convert` | task / file | see table below; `format` required |
|
|
27
25
|
| `import` | file / URL | GLB / GLTF / FBX / OBJ / STL ≤150 MB. `.gltf` references external files, so it only works as a URL — upload `.glb` |
|
|
28
26
|
|