用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/loonghao/keentools_cloud_cli --skill keentools-cloud命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | keentools-cloud |
| version | 0.1 |
| description | Unofficial CLI for KeenTools Cloud 3D Head Reconstruction API |
| disclaimer | Not affiliated with or endorsed by KeenTools. |
This file encodes invariants and usage patterns for AI agents.
Always read this file before using keentools-cloud in an automated pipeline.
export KEENTOOLS_API_TOKEN=your_token_here
export KEENTOOLS_API_URL=https://your-api-endpoint.example.com
Or store the token once:
keentools-cloud auth login <token>
--dry-run before any mutating operation (init, process, ephemeral).--output json in all automated pipelines. Non-TTY stdout defaults to JSON automatically.status --poll to wait for completion — never manually loop status without --poll.--blendshapes arkit,nose--blendshapes arkit --blendshapes nose ← causes API error.zip extension, then extract./info and /download return 404. Results are ONLY in the URLs you provided.| KEENTOOLS_API_TOKEN | API authentication token |
| KEENTOOLS_API_URL | API base URL (required) |
run for single-command convenience)keentools-cloud run photo1.jpg photo2.jpg photo3.jpg \
--output-path head.glb \
--blendshapes arkit,nose \
--texture jpg
# 1. Initialize — save the avatar_id
INIT=$(keentools-cloud init --count 3 --output json)
AVATAR_ID=$(echo "$INIT" | jq -r .avatar_id)
URLS=$(echo "$INIT" | jq -r '.upload_urls[]')
# 2. Upload photos (order must match)
keentools-cloud upload \
--avatar-id "$AVATAR_ID" \
--urls "$(echo "$INIT" | jq -r '.upload_urls | join(",")')" \
photo1.jpg photo2.jpg photo3.jpg
# 3. Start reconstruction
keentools-cloud process \
--avatar-id "$AVATAR_ID" \
--focal-length-type estimate-per-image
# 4. Wait for completion
keentools-cloud status --avatar-id "$AVATAR_ID" --poll
# 5. Download result
keentools-cloud download \
--avatar-id "$AVATAR_ID" \
--output-path head.glb \
--format glb \
--blendshapes arkit,nose \
--texture jpg \
--poll
keentools-cloud ephemeral \
--image-url https://your-bucket.s3.amazonaws.com/photo1.jpg \
--image-url https://your-bucket.s3.amazonaws.com/photo2.jpg \
--result-url glb:https://your-bucket.s3.amazonaws.com/result.glb?<presigned-put-params> \
--focal-length-type estimate-per-image \
--callback-url https://your-server.com/webhook
# Then poll status (download endpoint is unavailable in ephemeral mode)
keentools-cloud status --avatar-id <ID> --poll --output json
# List all commands
keentools-cloud schema
# Describe a specific command
keentools-cloud schema download
keentools-cloud schema run
| Scenario | Format |
|---|---|
| TTY (terminal) | Human-readable with colors |
| Non-TTY (pipe/redirect) | JSON (auto-detected) |
| Forced JSON | --output json |
JSON output is NDJSON (one object per line) when streaming multiple events (e.g., during run).
| Mode | When to use |
|---|---|
estimate-per-image | Mixed cameras, different zoom levels (safe default) |
estimate-common | Same camera/lens, all same resolution |
manual | Known exact values; provide --focal-lengths 24,28,35 |
Typical smartphone 35mm-equivalent: 24–28mm.
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | API or runtime error |
| 2 | Input validation error (bad avatar ID, path traversal, etc.) |
| 3 | Authentication error |